motoh's blog

主に趣味の電子工作やプログラミングについて書いていきます

Timer Camera Xでアゲハチョウの幼虫を観察してみた

庭の雑草にアゲハチョウがタマゴを産み付けたのを息子が発見しました。

初めはタマゴは数個しかありませんでしたが、日に日に増え、すぐに幼虫が生まれ、あっという間に雑草が幼虫のシェアハウスのようになりました。

これはよい機会だと思い、前々から構想していたTimer Camera X (M5Cameraの後継機)と防水ケースによる定点カメラを急いで組み上げて、観察を開始しました。(組み上がった頃には葉がほとんど食い尽くされていましたが^^;)

この定点カメラで1分毎に撮影した画像をつなぎ合わせて作ったタイムラプスがこちらです。ほとんど動かないと思っていた幼虫たちが活発に動く様子が見れたり、途中でバッタが登場したりと、思いの外楽しめます(息子よりも自分のほうが楽しんでいます)。

youtu.be

ここからは、どのようにこの定点カメラを作ったかを簡単に解説していきます。

システム概要

防水ケースに収めたTimer Camera Xでは、カメラ系で定番のスケッチweb_camをベースにしたプログラムを動かしています。これで、他のPCからHTTPリクエストで画像を取得できるようになります。自分はラズパイで1分毎にHTTPリクエストして画像を取得するプログラムをPythonで組みました(記事の最後にPythonのコードを掲載します)。

組み立て

防水ケースはこちら(Amazonリンク)を選びました。

あまり加工が得意ではないので、2cm厚のウレタンを切り抜いてTimer Camera Xをはめ込むようにしました。 cheeroの3200mAhのバッテリに横向きのUSBコネクタを差すと、防水ケースの寸法にぴったり収まりました。

庭の柵にタイラップで固定できるよう、裏側は両面テープ式のタイラップ固定部を貼り付けました。

Timer Camera Xの低電力化

スケッチweb_camをそのまま動かすと常に100mA程度の消費電流となるため、cheeroの3200mAhバッテリーでは32時間しか動かせない計算です。これでは毎日バッテリーを交換せねばならず、定点カメラとしてはちょっと不便なので、次の3つの対策で低電力化しました。結果、3日間連続動作できるようになりました。

対策1:CPU周波数を低くする

デフォルトだと240MHzですが、80MHzまで落とすことで電流を10mA程度下げることができました(80MHzより落とすとWifiが使えなくなる仕様のようです)。次の関数でCPU周波数を設定できます。

setCpuFrequencyMhz(80);

対策2:ディープスリープを使う

1分毎に画像を取得するので、「50秒間ディープスリープ」→「10秒間カメラサーバ動作」を繰り返すようにしました。ディープスリープへの移行は次の関数を使います。

M5.Power.deepSleep(SLEEP_SEC(50));

対策3:カメラデバイスOV3660のスタンバイモードを使う

消費電流を計測してみると、ディープスリープにしても40mAくらい消費しており、期待したより消費電流が下がりませんでした。調べるとこちらの記事にたどり着き、Timer Camera Xに搭載されているカメラデバイスOV3660をスタンバイモードにすると消費電流を数μAまで下げられることがわかりました。次のようにカメラデバイスレジスタ番地0x3008の値を「0x02」から「0x42」に書き換えることでスタンバイモードに移行できます。ディープスリープに移行する直前にこれを実施します。

sensor_t *s = esp_camera_sensor_get();
s->set_reg(s, 0x3008 , 0xff, 0x42);

ラズパイ側のPythonプログラム

1分毎にHTTPリクエストして画像を取得するプログラムを参考として掲載します。

# -*- coding: utf-8 -*-
import os
import urllib.request

if __name__ == '__main__':
    i = 0
    while True:
        try:
            response = urllib.request.urlopen('http://xxx.xxx.xxx.xxx/capture',timeout=10)
            image_b = response.read()

            #ファイル名を通番にして保存
            fname = '{:04d}'.format(i)
            f = open('YOUR_PICTURES_FOLDER/'+ fname + '.jpg', 'wb')
            f.write(image_b)
            f.close()

            i = i+1
            time.sleep(60)

        except Exception as e:
            print(e)

まとめ

Timer Camera Xを利用した定点カメラでアゲハチョウの幼虫を観察してみた様子と、定点カメラの作り方について簡単ですがご紹介しました。ウレタンやタイラップを利用することで、難しい加工を一切せずに組み立てることができました。得られた画像でタイムラプスを作成したら思いの外楽しめるものになりました。省電力化にも取り組み、バッテリーで3日間連続動作できるようになりましたが、理想はバッテリー交換を週一回にしたいので、もう少し工夫したいと思います。

参考サイト

M5Cameraをソーラー発電で動かす - MSR合同会社

Timer Camera(USB給電時)を低電力化する - MSR合同会社

防水ケースとTimer Camera Xを使った定点カメラや、Timer Cameraの低電力化について、多くを参考にさせていただきました。