ESP32-CAMでタイムラプス
記事タイトルに「タイムラプス」と書きましたが、タイムラプス映像を撮ることが目的ではなく、監視目的で単にESP32-CAMを使って一定間隔で静止画を撮影するものを作りました。撮った静止画をffmpegなどで動画にすればそれがタイムラプス映像になるというだけです。
仕様みたいなものは以下のような感じです。
外部電源が無い状態で動作させたかったので、モバイルバッテリーで動作させるようにした。そのため撮影していない待ち時間はESP32をDeep Sleepに入れるようにした。
Deep Sleepに入れると通常の変数は初期化されてしまうので、ファイル名に必要な撮影回数を正しく保存するため、EEPROMとRTCを使って撮影回数が正しく保存されるようにした。
Deep Sleepから復帰して毎回カメラの初期化を行うことになるが、どうもカメラを初期化して最初に撮影する画像は、AGCやAWBが正しく動作しないせいか輝度や色味がおかしな画像になってしまう。なので、ダミーで数回Frame Bufferに書き込んでからSDカードに書き込むようにした。
現状のESP32-CAMの回路はSDカードにSPIモードで書かないとSDカードにアクセスする毎にFlash LEDが点灯しまうようになっているので、SDカードへのアクセスはSPIモードで行うようにした。
懸念だった点とその結果は以下のような感じです。
手持ちのモバイルバッテリーがスリープモードに入らないか心配だったが、とりあえず5秒間隔で撮影する分には、モバイルバッテリーはスリープモードに入らず動作し続けた。
SPIモードでSDカードにアクセスすると、書き込みにすごく時間がかかるかと思っていたが、5秒間隔で撮影する分には全く問題なかった。
とりあえず手元にあった2GBのSDカードを使ったが、UXGAサイズの画像でも1枚あたりファイルサイズが200kB強だったので、ざっくり10,000枚撮影できることになる。10,000枚だと50,000秒分で約14時間弱撮影できることになる。どうせESP32-CAMのカメラは暗いところではまともに撮影できないので、自分的にはこの時間でも十分満足である。
撮影した画像を動画化したものをアップしました。屋内で適当な方向に向けて撮影したものなので、動画の中身に意味はありません。画質と時間経過が分かる程度のものです。5秒毎に撮影した画像を30fpsにしたので、150倍速の映像になります。
用途としては、自分の車がいたずらされないか?とか、例えばキャンプ場で自分の荷物が盗難に会わないか?などの防犯目的ですかね?モバイルバッテリーで動くので、電源が取れない場所でも動作させることができますし…。今回のようにタイムラプス的に撮影しても用途としては使えそうですが、5秒以内に立ち去ってしまった場合などは撮影できませんね。そういった場合のためにもやはり人感センサーなどを使って人が近づいて来た時のみ撮影する方が、後で画像を確認する時の手間が少なくて済みそうです。
今回は適当にネットで拾ってきたESP32-CAM用の3Dプリンターファイルに手を加えて、DMM.makeで3Dプリンターで打ち出してもらいました。とりあえずケースと蓋を輪ゴムで止めていますが、使い道が固まったら接着してしまおうと思っています。DMM.makeで頼むと入手できるまでに相当時間がかかりますが、自分で3Dプリンターを用意する手間と失敗したりする手間を考えると、お金を払って依頼した方が楽だと思いました。
この記事が気に入ったらサポートをしてみませんか?