Timer Camera(USB給電時)を低電力化する

畑に「M5Camera」「ソーラーパネル」「Ni-MH電池」を組み合わせたカメラシステムを設置し、作物の生育状況などを観察しています(記事は こちら)。
M5Cameraで一定時間ごとに写真を撮影し、それをモバイルWi-Fiルータ経由でWebサーバに送信して、遠隔地からでも画像を見ることができるようにしています。

カメラシステムを設置してから既に4ヶ月が経過しましたが、順調に稼働しています。
電池や支柱まで含めても、材料費は数千円で済み、非常にお気軽に設置することができます。

とても良好な結果が得られているので、畑にもっとたくさんのカメラシステムを設置して楽しもうと考えていたのですが、M5Cameraを何台か追加購入しようと思いスイッチサイエンスの販売ページを見たところ、M5Cameraは既に販売終了になっていました。

M5Stack社の販売サイトにもM5Cameraは掲載されておらず、既に生産終了のようです。
他のパーツショップでは、まだM5Cameraを販売しているところもありますが、近々購入できなくなることを考えると、それらを買い占めて使うのも得策ではなさそうです。

M5Cameraの後継は「Timer Camera」です。

Timer Cameraはバッテリーを内蔵しており、それを使った場合、非常に低電力で稼働できるのが特長です。
一方、外部から電源供給した場合の低電力化についてはあまり考えられていないようで、以前調べたことろ、ディープスリープ中でも約35mAの電流を消費してしまいます(記事は こちら)。

今回のカメラシステムでは、外部のNi-MH電池から電源供給しています。
また、ディープスリープ中と動作中の電流消費をならした平均消費電流値を25mAとして、ソーラーパネルなどを選定しています。
ディープスリープ中に35mAも消費するとなると、現在のカメラシステムを使うことができません。

そんな訳で、なんとかTimer Cameraをもっと低電力化できないか、調べてみることにしました。

まずは、以前、消費電流値を測定した時と同じ内容で、再度測定してみます。
消費電流値測定には、ストロベリー・リナックスの「INA226PRC」というモジュールとM5Stackを使います(測定方法についての記事は こちら)。

以下の処理内容のスケッチをTimer Cameraに書き込み、起動時、ディープスリープ時の消費電流値を調べます。Timer Cameraの内蔵バッテリーは満充電状態にした上で調査を行います。

「起動」→「10秒待つ」→「ディープスリープ(10秒)」

結果は「起動後:77mA」「ディープスリープ中:40mA」となりました。以前調査した時とほぼ同じ結果です。

起動後にカメラの初期化を追加してみました。

「起動」→「10秒待つ」→「カメラ初期化」→「10秒待つ」→「ディープスリープ(10秒)」

結果は「起動後:77mA」「カメラ初期化後:127mA」「ディープスリープ中:40mA」となりました。カメラを初期化するかどうかによって、ディープスリープ中の電流消費は変わりません。

Timer Cameraに搭載されている「OV3660」というカメラデバイスのデータシートを確認してみました。

OV3660の「active current」は数十mAとなっています。
一方、OV3660にはスタンバイモードもあるようで、「standby current」は数十uAとなっています。
OV3660の「PWDN」信号をHighにすれば、スタンバイモードに移行できるようですが、Timer Cameraの回路図を確認したところ、OV3660の「PWDN」信号はLow固定されていました。
ESP32がディープスリープしている間も、OV3660はずっとアクティブ状態のため、上記のように消費電力が大きくなっていると思われます。

Timer Cameraは、内蔵バッテリーで動かしている時には、電源供給そのものを止めることで超低電力化を実現している一方、外部から電源供給した時の低電力化については、全く考慮されていないようです。

そんな訳で、Timer Cameraの低電力化は無理かとあきらめかけていたのですが、データシートを読んでいると、OV3660のスタンバイモードには、「PWDN」をHighにすることによる「hardware standby」の他に、「software standby」というものがあることに気づきました。
「SCCBインタフェース」というものを使って、OV3660のレジスタの値を書き換えることで、スタンバイモードに移行できるようです。

この「SCCBインタフェース」によるスタンバイモードへの移行を試してみました。
ほとんど理解できないままに、無理やりプログラムをつくったので、プログラム本体は開示できませんが、処理内容としては、SCCBインターフェースを使って、アドレス「0x3008」の値を「0x02」から「0x42」に書き換えています。

この処理を追加して、消費電流値を調べました。

「起動」→「10秒待つ」→「カメラ初期化」→「10秒待つ」→「スタンバイモードに移行」→「10秒待つ」→「ディープスリープ(10秒)」

結果は「起動後:52mA」「カメラ初期化後:125mA」「スタンバイモードに移行後:56mA」「ディープスリープ中:17mA」となりました。
この処理によって、ディープスリープ中の電流消費を40mA→17mAに低減できました。また、再起動後もOV3660はスタンバイモードに維持されているようで、起動後の電流消費も77mA→52mAに低減されました。カメラ初期化によってはじめて、元々のアクティブモードに移行するようです。

このように、「SCCBインタフェース」をつかって「OV3660」をスタンバイモードにすることで、Timer Cameraのディープスリープ中の電流消費を17mAまで低減できました。
これであれば、現状のカメラシステムの想定(カメラデバイスの平均消費電流値が25mA)以内なので、カメラシステムに搭載するカメラデバイスを、M5CameraからそのままTimer Cameraに置き換えることができそうです。

今後、この仕組みを取り入れたカメラシステムを実際に畑に設置し、問題なく稼働するか確認しようと思います。


2022年5月14日追記

これまで畑に設定していた「カメラシステム」では、「M5Camera」にソーラーパネルとNi-MH電池をつないでいました(記事は こちら)が、このシステムのカメラデバイスを、上記の対策を施した「Timer Camera」に変更してみました。

変更してから3ヶ月が経過しました。
気温が低いときに、デバイスによっては動作が不安定になるといった問題は発生しています(記事は こちら)が、現在も一応稼働できています。

消費電力の面は、今回の対策で効果があったようです。