LoginSignup
21
10

More than 3 years have passed since last update.

M5StickVをデジカメにしてみた。

Last updated at Posted at 2019-10-01

きっかけ

先日、北海道森町の集まりで、某若狭さんからM5StickVを紹介していただく。
本来は機械学習のデータを使った画像認識向けのもののようだけど(QVGA(320×240ドット)とかで解像度低いし)、
ただ、色々調べてみたら、「プログラミングできるデジカメ」として可能性がありそうだったので、買ってみた。

  • カメラついてる
  • デフォルトでボタンついてる (若狭さんにM5Cameraを推奨されたけど、そっちにはデフォでないよねたぶん Bボタンはあるっぽい?)
  • (micro)SDカードスロットついてる
  • そして安価(¥3,000くらい)
  • プログラミングできる

= 単体で動く!(RasPi+WebCamとか用意しなくてもいい!)
ということで、かなり興奮していたんですが、これだけでなく

  • LEDフラッシュがついている
  • バッテリーもついている
  • 拡張性も高い

ときたもんだ。解像度以外は完全にカメラ向きだろうと。

2012年くらいにIKEAが出していた段ボールデジカメKNÄPPAを出したり https://www.youtube.com/watch?v=OGGFuD5n5go
同時期に国内メーカーでライブラリを公開するのをウリにしたカメラを出したり(メーカーと機種名を忘れた...検索しても全然出てこない...ソニーでいうところの「レンズスタイルカメラ」ですね)、
今年2019年に入ってからは、Canonが海外でしか使えなかったEDSDK(EOS Digital Software Development Kit)を日本でも使えるようにしたり、
結構ものづくり欲を高めるカメラを出してきたように思えます。どうもあまり流行っている感じはしませんが。。。

元々、子供たちにプログラミングを教える機会もありそうだったので、教材としてもいいかなと。

まずはどんなものを作るか

  • 撮影前にプレビュー画像が出ている
  • ボタン押す
  • 画像が保存される

まずはシンプルにこれを目指します。

参考

以下のページを参考にしています。

あとはOpenMVとか、MicroPython、MaixPy関連の情報が参考になるようです。

作り方

microSDカード直下に以下のboot.pyファイルを入れ、そのカードをM5StickV本体に差し込んで、USB-Cケーブルで電源と繋げば勝手に起動します。

実際のコード

上記URLにあるSIOSALTさんのコードをベースに、@aNo研 nnnさんのボタン操作の部分を追加してみました。(両者ともコード改造の上転載していいかまだ許可取り中ですが、暫定的に載せてます。まずかったら引っ込めますので…)
ほぼそれぞれの使えるところを使わせてもらった感じです。そういやボタンの省略形ってbtnでなくてbutなのかー。
で、 結局Aボタンを押しても撮影出来てません。何故なんだ。 解決しました。詳細はコード内コメントにて

(boot.py)
import sensor
import image
import lcd
import time
from Maix import GPIO # ボタン入力で使います
from fpioa_manager import fm, board_info # @midori564 さんからご指摘いただきましたので1行追加。(何故か私のものは無くても動く→原因解説しているソースありました。 https://maixpy.sipeed.com/en/libs/builtin_py/ )

#タイマー初期設定
clock = time.clock()

#LCD初期設定
lcd.init()
lcd.direction(lcd.YX_LRUD) # デフォルトだとLCD上下逆のため設定。YX:横長 LR 左右順 UD上下順

#カメラ初期設定
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0) # デフォルトだとカメラがミラーに設定されているため
sensor.run(1)

#保存ファイル名初期設定
i = 0 #ファイル名用

#シャッターボタン(ButtonA)初期設定
fm.register(board_info.BUTTON_A, fm.fpioa.GPIO1)
but_a = GPIO(GPIO.GPIO1, GPIO.IN, GPIO.PULL_UP) # GPIO36を指定すると止まってしまったが、桃治トイレBot(Twitter:@momojitoiletbot)さんにfm.register()の設定をした上でGPIO1を使うとうまくいく旨教えてもらい解決しました!

#画面表示
while True:
    clock.tick()
    img = sensor.snapshot()
    lcd.display(img)

#シャッターボタンを押したら
    if but_a.value() == 0:

#画像をJPEG形式に保存
        filename = "/sd/{0:0=8}.jpg".format(i) # iの数値からファイル名を生成。00000000.jpg から連番
        img.save(filename) # ファイル名の初期設定値(filename)で写真を保存
        i += 1 # ファイル名の数値を1つ増やす
        lcd.draw_string(10,20,filename) # ファイル名を表示
        time.sleep(1.0) # 保存した写真をちょっとだけ固定表示

今後どういったものを作りたいか

作っている本人がプログラミング初心者に近いので、
デジカメの基本機能・カスタマイズ要素として、

  • 現在、起動ごとにファイル名がリセット・ファイル上書きしてしまうので、その改善
  • 起動画面・起動音
  • 動作音・シャッター音
  • ファイル名を日時分秒プラスαで表現
  • Exifデータ(日時場所カメラの情報などのメタデータ)の埋め込み
  • セルフタイマー
  • 画面回転(縦/横)
  • 設定画面

M5StickVの本来の能力を引き出すために

  • スマイルシャッター
  • 監視カメラ機能(人だけを撮影する)

などもやっていければいいなあと思いました。

21
10
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
10