模型撮影用カメラを作っている

以前からちょいちょいtwitterに写真とかアップロードしてたけど、模型撮影用カメラを作っている。

ことの始まり

6月末にHAMMARN(はまるん提督)さんからRaspberry PI Zero 2Wが入荷してることを教えてもらい、ダメ元で注文したらあっさり買えて届いたので作り始めた。

カメラの仕様

今までもRaspberry PI 4Bを使って作っていたけど、何回か使ってみて問題点が多々あったのでまるごと作り直すことにした。

問題点としては

  • Raspberry PI 4Bとそれを支えるユニバーサル基板がデカいので持ちにくい
  • 電源をモバイルバッテリーから給電するので片手で本体と一緒に保つ必要がある
  • 画面をVNCでスマホに転送する方式だったので、片手でスマホを持ちつつ操作するのが無謀過ぎた

とまぁとにかく持ちにくくて操作しづらいものだったので、Raspberry PI Zero系にして小型化とDCDCコンバータを使って乾電池2本から電源供給、プレビュー用小型LCDを付けて本体1個持つだけでよくなるようにする。

コンポーネント図(GPIOピンは変わるかも)

あと、Raspberry PI Zeroはタミヤのユニバーサル基板と穴の位置が合わないので、プラ板切って穴開けてネジ止めする。

ソフトウェア

以前はgstreamerを使っていたけど、今回は動画を撮るつもりがないのと、いまいちイベント周りが面倒だった事もあってOpenCVに変更。LCDへの出力はLCD公式のサンプルから必要なファイルをパkコピーして持ってきたけど大丈夫かなこれ……(一応ライセンス文書いてあるファイルを見る限りではMITライセンスっぽいが肝心なコピーしたファイルは記載がない……)

あと引っかかったところとして、OpenCVはBGR888に対してLCDはRGB565らしく、カラーコードを変換しないとうまく映らなかった

uint16_t pixbuf[RenderWidth * RenderHeight] = {0};
        Paint_NewImage(pixbuf, RenderWidth, RenderHeight, 0, 0x00, 16);
        
        for(uint16_t x = 0; x < RenderWidth; x++) {
            for(uint16_t y = 0; y < RenderHeight; y++) {
                const uint32_t src_addr = x * BytePerPixel + RenderWidth * BytePerPixel * y;
                uint8_t b = (buffer[src_addr + 0] >> 3);
                uint8_t g = (buffer[src_addr + 1] >> 2);
                uint8_t r = (buffer[src_addr + 2] >> 3);
                uint16_t color = static_cast<uint16_t>(r << 11 | g << 5 | b);
                Paint_DrawPoint(x, y, color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
            }
        }

カラーコードの最上位3bit(Gのみ2bit)捨てて詰め込んで16bit整数値にしてから関数に投げると、いい感じに映るようになった。

この後の予定

必要な設定のインストール

電源入れたらプログラムが起動するところまで進むように設定したり、できるだけ起動を高速化したり。

必要なスイッチの取付

シャッターとシャットダウンボタンを付けて、写真を撮れるようにする。
あと、電源を切る手段が無いので、押したらシャットダウンするボタンも付ける。

nginxインストール

例によって今のままだと撮った写真を取り出す手段がないので、nginxとfancyindexモジュールを入れてアルバムページを作成予定。

DCDCコンバータを買って電池から給電できるようにする

DCDCコンバータはStrawberry LinuxさんのTPS61230A 昇圧型DC-DCコンバータモジュール(5V 2.5A)を使用予定。
それまではモバイルバッテリーから給電予定。前よりは持ちやすいし、まだいいかな。

本体の組み立て

まだ底面と宙に浮いたLCDがあるだけなので、他も切り出さないと……

あと側面2枚と背面とスイッチパネルと前面と……これ切るの地味に面倒……

夢が広がる改造案

まだ物ができてないけど、いろいろすでに変更したいこともある

シャットダウンボタンを廃止したい

シャットダウンボタンを押すのではなくて、電源を切ったら自動的にシャットダウンされるようにしたい。

一応大型キャパシタとDCDCコンバータをもう1個使えば、電源を切ってもキャパシタからの給電で数十秒から1分位は動かせるようなので、GPIOで電源監視して切れた瞬間からシャットダウンするようにすれば安全に電源が切れそう。

ただ肝心なキャパシタがびっくりするくらいでかいので、今は積めない。本体の作り直しが必要そう。

3Dプリンタ使ってみたい

FreeCADで簡単なものなら少し作れるようになってきたので、本体もCADで作って3Dプリンタで作ってみたい。でもあのサービスいくらするんだろう……

コメントを残す

メールアドレスが公開されることはありません。