前回からの続き
本体作成
プラ板を切って本体側面を作成。
切ったところでそのまま組み立てると電源周りが組み立てられないことに気づき、DCDCコンバータを注文。
ここまで組み立ててから、このまま組み立てたらDCDCコンバータと電池ボックスの電源ユニットが入れられなくなることに気づく。
— まっちゃん (@mattyan_1117) July 17, 2022
横の0系はサイズ比較のモバイルバッテリー pic.twitter.com/Y2oHQ0SI9e
DCDCコンバータには、Strawberry LinuxさんのTPS61230A 昇圧型DC-DCコンバータモジュール(5V 2.5A)を使用。あまりの小ささにびっくりしたけど、頑張ってはんだ付けした。
ラズパイの電源供給用に買ったDCDCコンバータのあまりの小ささにびっくり。
— まっちゃん (@mattyan_1117) July 19, 2022
なんとか頑張ってはんだ付け。 pic.twitter.com/YWYYEqlcZy
これはんだ付けしてから気づいたんだけど、もうモバイルバッテリーから給電できない。DCDCコンバータのVoutに5V行っちゃうから壊れるかも……
その後で前面と背面を切り出して組み立て。
模型撮影用カメラを組み立て。乾電池2本だとDCDCコンバータ通しても安定動作しなかったので、雑に4.5VをDCDCコンバータを通して動作試験。
— まっちゃん (@mattyan_1117) July 21, 2022
落ちはしなくなったけど、sshのレスポンスがめちゃくちゃ遅かったりギリギリ感はある…… pic.twitter.com/fXH7LOYFjj
ただどうも乾電池2本からだと電力が足りないのか、動作が安定しなかったので、乾電池2本セロハンテープで止めてクリップで無理やり繋いだ4.5Vで起動。とりあえずsshはつながるようになったので、一旦カメラのプログラムを起動しないように設定。明日単3乾電池3本用の電池ボックスを買ってきて繋ぎ変える予定。
プログラムの修正
キャプチャしてからLCDに映るまでがあまりに遅かったので色々調査。
まず最初にレンダリングを疑って時間測定したけど、毎フレーム240×240転送で60ミリ秒(15FPS)でかかってた。でも実際にはそんな全域転送する必要もなかったので、1フレーム前との差分を見て転送する範囲を絞るように修正。結果44ミリ秒(22FPS)ほどになった。
それでもまだ秒単位で遅れてたので今度はキャプチャ側を調査。
どうもOpenCVは内部でキャプチャした画像をバッファリングして送出してるようなので、バッファリングしないように修正。
this->capture.set(cv::CAP_PROP_BUFFERSIZE, 1);
これでほぼリアルタイムでLCDに表示できるようになった。
あとは撮った写真を取り出せるように、nginxとfancyindexを構成。fancyindexの作るテーブルをパースしていい感じに作り変えるjsを読み込むようにした。