定期撮影ラズパイカメラをモバイルバッテリーで長期運用 (RPZ-PowerMGR)

Raspberry Pi(ラズパイ)と純正カメラを使用して、定期的に撮影するタイムラプス機能を実装する方法を解説します。RPZ-PowerMGR拡張基板を使うことで、指定時刻に起動し、撮影後は自動的にシャットダウン&電源OFFします。待機時の消費電力をカットすることで、モバイルバッテリーで長期運用が可能になります。

更新日 : 2024年3月7日

Raspberry Piカメラの課題

Raspberry Piは大変便利な小型コンピューターで、カメラを接続することで、プログラム可能なカメラシステムも構築できます。一方、遠隔地でバッテリーで運用する場合、待機中にも電力を消費してしまうため、長期運用が難しいという課題があります。

RPZ-PowerMGR拡張基板を使うと、カメラで撮影するときだけ電源ONし、撮影後自動的にシャットダウンすることができます待機時の消費電力をカットすることで、モバイルバッテリーで長期運用が可能になります。Raspberry Piやバッテリー容量、撮影頻度にも依存しますが、数カ月の運用も可能です。

本記事では、決まった時間に写真を撮影するシステムを構成する方法を解説します。

ハードウェア構成

ハードウェア構成

今回使用したハードウェアは以下のとおりです。

使用ハードウェア備考
Raspberry Pi Zero WHRaspberry Pi Zero 2 Wや、40ピン端子を搭載したRaspberry Pi 5 / 4 / 3+ / 3でも可
RPZ-PowerMGR拡張基板モバイルバッテリーWake up機能で間欠動作を可能にする
RPZ-CamMountKitRaspberry Pi、カメラ、モバイルバッテリーを三脚上に取り付けるマウントキット (Raspberry Pi Zeroシリーズ用)
Raspberry Pi HQカメラ & 超広角レンズRPL-UltraWide-3.2mmRaspberry PiカメラモジュールV2などの他のカメラモジュール、レンズでも可
モバイルバッテリー cheero Power Plus 5 10000mAh with Power Delivery 18W他のモバイルバッテリーでも可
三脚三脚穴付きのマウンター等でも可
カメラ

HQカメラを使用しましたが、Raspberry PiカメラモジュールV2でも同じコマンドが使えるので問題ありません。HQカメラだと市販のカメラ用三脚が取り付けられるので、向きの調整がしやすいです。

カメラのセットアップ方法は以下の記事を参照してください。

ラズパイカメラモジュールの使い方(各モデルの違い、組み立て、撮影方法)

Raspberry Pi(ラズパイ)に純正カメラモジュールを接続して、写真や動画を撮影することができます。各カメラモジュールの違い、組み立て手順と撮影する手順を解説しています。HQカメラについては、レンズ取り付けとフォーカスの調整についても解説しています。

システムの仕組み

システムがどのように動作するのか、仕組みを解説します。

指定した時刻になると(1)、RPZ-PowerMGRがRaspberry Piの電源をONします(2)。

Raspberry Piが起動すると、起動時に実行されるように指定したプログラム「camera_shot.py」が開始されます。まず、写真を撮影し(3)、画像データを保存します(4)。

その後、自動的にシャットダウンを開始し(5)、完了するとRPZ-PowerMGRに通知され(6)、Raspberry Piの電源がOFFになります(7)。ただし、(5)から(7)の工程は、カメラが装着されている場合のみ行います。これは、全ての撮影が完了した後は自動シャットダウンしないようにするためです。




RPZ-PowerMGRセットアップ

RPZ-PowerMGRのセットアップの全手順は製品ページを参照してください。本記事では初期セットアップ完了後、撮影のために指定時刻に電源ONする設定を解説します。

指定時刻に電源ON/OFFする機能の詳細は、以下の記事でも解説しています。

指定時刻にラズパイ/Jetsonの電源をON/OFF (RPZ-PowerMGR)

RPZ-PowerMGRを使って、指定時刻にRaspberry Pi(ラズパイ)やJetson Nanoの電源ON/OFFする方法の解説です。決まった時間だけ起動して消費電力を抑えることが可能で、モバイルバッテリーやソーラーシステムでの運用に最適です。

ファイル構成

次に、起動後に自動で撮影してシャットダウンするプログラムについて解説します。既に作成済のプログラムをこちらからダウンロードできます。

「camera_shot.py」がプログラム本体で、/home/piに配置します。

「camera_shot.service」は、起動した後に自動で実行するための登録に必要なファイルで、スーパーユーザーで/etc/systemd/systemにコピーして下さい。撮影した画像は/home/piに、「日時.jpg」という名前で保存されます。

まとめると、以下のような構成となります。

/ --- etc  --- systemd --- system --- camera_shot.service
   |
   -- home --- pi --- camera_shot.py
                   |
                   -- 日時.jpg

camera_shot.pyプログラム

camera_shot.pyプログラムの中身を見ていきます。

8-10行目
print('写真撮影#', i + 1)
file_name = datetime.datetime.now().strftime('/home/pi/%y_%m%d_%H%M.jpg')  # 日時入りファイル名生成
still_result = subprocess.run(['libcamera-still', '-n', '-o', file_name])  # 撮影実行

datetimeモジュールの機能で現在時刻を取得しています。その後、subprocessモジュールの機能でlibcamera-stillコマンド(写真撮影)を実行し、/home/piディレクトリに「現在日時.jpg」という名前で撮影画像を保存します。pi以外のユーザー名をご利用の場合は保存ディレクトリを変更してください。

12-14行目
if still_result.returncode == 0:
  print('電源OFF')
  subprocess.run(['cgpmgr', 'sc', '-l', '0', 'off'])

撮影後の電源OFF処理を記述しています。必ず電源OFFしてしまうと、全ての撮影を終えた後に操作できず困ります。そこで、カメラが接続されているときだけ電源OFFするようにします。

撮影コマンドの結果はresult変数に保存されています。コマンドが正常に終了すると、returncodeが0になるのでコントロールツールで電源OFFするように指示します。

一方、カメラが接続されていなければコマンドが失敗し、returncodeが0以外になるため、電源OFFされません。

7行目, 16行目

7行目のforループで、撮影に失敗した場合3回までリトライするようにしています。次のリトライまでの間隔は16行目で10秒に指定されています。

動作確認

動作確認をしてみましょう。カメラを装着して、ターミナルで以下の$に続くコマンドを実行します。「写真撮影# 1」、「電源OFF」と表示され、シャットダウンが始まればOKです。(ファームウェア1.5 / 2.2以前だとシャットダウン開始まで1分程度かかる場合があります) RPZ-PowerMGRが正しくセットアップされていると、シャットダウン完了後に電源が切れます。

$ ./camera_shot.py

次に、カメラを装着しない状態でRaspberry Piを起動し、同じように以下のコマンドを実行します。「写真撮影# 3」のあとシャットダウンしなければOKです。

$ ./camera_shot.py

Pythonプログラミングの基礎、およびGPIOの制御方法については以下の解説記事もあるので、参考にして下さい。

Raspberry PiでPythonプログラミング入門

Python(パイソン)とは世界的に人気のあるプログラミング言語の一つです。Pythonを使えばほぼどんなプログラムも実現できると言っても過言ではなく、GPIOピンを使って、センサーや拡張基板と通信することもできます。本記事では、プログラミング初心者の方向けに、Pythonのコードの記述と実行方法、文法の基礎を解説しています。

PythonでRaspberry PiのGPIO、LED、スイッチ制御

Raspberry Pi(ラズパイ)では、GPIOを通じて電気信号を送受信することで、様々なデバイスを制御することができます。本記事では、基本的なLEDとスイッチについて、Pythonプログラムで制御する方法を解説します。LEDにステータスを表示させたり、スイッチが押されたら何らかの動作をさせるなど、自分が好きなように動作をプログラミングすることが可能になります。

camera_shot.serviceを登録

camera_shot.pyで撮影と電源OFF機能が実現しました。次は、Raspberry Pi起動時に自動的にcamera_shot.pyを実行するように設定していきます。

これには、systemdの機能を使います。systemdには、OS起動時にシステムで必要な様々なソフトウェアを立ち上げる機能がありますが、ユーザーのプログラムも登録することが可能です。この登録内容を指示するのが、「camera_shot.service」ファイルです。中身は以下のようになっています。

[Unit]
Description=Camera shot on startup
After=multi-user.target

[Service]
Type=oneshot
User=pi
ExecStart=/home/pi/camera_shot.py
Restart=no
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

Userは実行ユーザーを指定します。

ExecStartは実行するコマンドを指定します。

AfterとWantedByに指定しているmulti-user.targetは、マルチユーザー環境の準備ができた後に実行する指示です。

Type=oneshotは常駐せずに単発であることを示します。

Environment…はpythonの出力をログに残す指定です。ログはjournalctl -u camera_shotコマンドで確認できます。

では、起動時に実行されるように登録します。camera_shot.serviceファイルを/etc/systemd/systemにコピーした後、以下のコマンドで登録します。なお、enableの代わりにdisableを指定すると登録解除できます。

$ sudo systemctl enable camera_shot

以上で、Raspberry Piが起動すると自動的に撮影し、電源OFFできるようになりました。




スケジュール登録

最後に、撮影したい時刻に電源ONするようにRPZ-PowerMGRにスケジュールを登録します。今回の例では、毎日朝6:00から夕方18:00まで1時間おきに撮影することにします。

1つずつコマンドで登録しても良いですが、csvファイルを用意しているので一括で登録しましょう。ダウンロードしたcsvファイルと同じディレクトリに配置し、以下のコマンドを実行します。

$ cgpmgr sc -i -f schedule.csv
ファイル schedule.csv からスケジュールを13個登録しました.
登録されているスケジュールが13個あります. 
  #001 ON  Repeat  **/**  06:00
  #002 ON  Repeat  **/**  07:00
  #003 ON  Repeat  **/**  08:00
  #004 ON  Repeat  **/**  09:00
  #005 ON  Repeat  **/**  10:00
  #006 ON  Repeat  **/**  11:00
  #007 ON  Repeat  **/**  12:00
  #008 ON  Repeat  **/**  13:00
  #009 ON  Repeat  **/**  14:00
  #010 ON  Repeat  **/**  15:00
  #011 ON  Repeat  **/**  16:00
  #012 ON  Repeat  **/**  17:00
  #013 ON  Repeat  **/**  18:00

csvファイルを編集することで、自分の好きなスケジュールで撮影することができます。RPZ-PowerMGRは月、日、曜日、時、分を指定に対応しており、最大250個のスケジュールを登録できます。時間指定の方法や、csvファイルの書式については以下の記事を参照して下さい。

指定時刻にラズパイ/Jetsonの電源をON/OFF (RPZ-PowerMGR)

RPZ-PowerMGRを使って、指定時刻にRaspberry Pi(ラズパイ)やJetson Nanoの電源ON/OFFする方法の解説です。決まった時間だけ起動して消費電力を抑えることが可能で、モバイルバッテリーやソーラーシステムでの運用に最適です。

以上で全ての設定は終了です。Raspberry Piの電源をOFFしておきましょう。指定した時刻になると、自動的に電源ON -> 撮影 -> 電源OFFが実行されるはずです。

定期撮影を終了する場合は、カメラを取り外して起動した後、以下のコマンドで登録スケジュールを全てクリアし、起動時の撮影プログラム実行を無効にします。

$ cgpmgr sc -R 255
$ sudo systemctl disable camera_shot

手動でコマンドを実行時は問題ないのに、起動時にうまく動作しない場合、以下のコマンドでログを確認できます。

$ journalctl -u camera_shot

稼働可能時間の見積もり

モバイルバッテリーで運用する場合、気になるのはどれくらいの期間稼働できるかどうかではないでしょうか? RPZ-PowerMGRにはRaspberry Piの電流を測定する機能があるので、稼働時間を見積もることが可能です。その方法を解説します。

Raspberry Piの消費電流を測定

RPZ-PowerMGRは、Raspberry Piを電源ONするたびに電流を測定して値を保存しています。まずはその測定結果を確認して、どの程度消費しているか確認しましょう。

電源OFFしてしまうと測定結果を確認できないので、camera_shot.pyの14行目(電源OFFコマンド)をコメントアウトした状態で起動して、2〜3分ほど待ちます。(消費電流を測定するため)

その後、以下のコマンドで起動してからの電流値を「current.csv」ファイルに保存できます。

$ cgpmgr me -L -f current.csv

実際に今回セットアップしたカメラシステムの消費電流をグラフにしました。

Raspberry Piの消費電流
1回の撮影にかかる時間を測定

次に、camera_shot.pyの14行目のコメントアウトをもとに戻し、電源ONから撮影、電源OFFするまでの時間を測ります。具体的には、RPZ-PowerMGRの緑色LED2が点灯してから消灯するまでの時間を測ればOKです。実際に測った所、約110秒になりました。

先ほどの電流値のデータの最初の110秒の平均を計算します。今回の例では186mAとなりました。

稼働可能時間を計算

これらの値をもとに、モバイルバッテリーでの稼働可能時間を計算します。まず、電源ONの稼働時間は以下の式で計算できます。(3.7Vリチウムイオンタイプのモバイルバッテリーで簡易的に求める式)

稼働時間[h] = 0.74 × モバイルバッテリー容量[mAh] ÷ 平均消費電流[mA] × 効率

モバイルバッテリー容量は、今回の例では10000mAhのものを使用しました。

電源ON時の消費電流は、Raspberry Pi消費電流には、先ほど測定した186mAにRPZ-PowerMGRが電源ON時に消費する10mAを加算した196mA程度と見積もります。

上記は電源ON時の消費電流なので、電源OFFの時間も考慮して平均を算出します。1日あたり110秒×13回の時間しか電源ONしていないので、196×110×13÷24÷3600 = 3.24mA が平均消費電流に入ります。

(電源OFF時の消費電流はRPZ-PowerMGR Rev2で動作確認済モデルを使った場合ははほぼゼロと見なせます。ただし、モバイルバッテリーのモデルや、Rev1とモバイルバッテリーのTypeCコネクタの組み合わせにおいて、電源OFF時もバッテリー側で若干電力を消費する場合があります。)

バッテリー電力の全ては使い切れないので、最後に効率を乗算します。ここでは0.8を想定します。

実際に稼働時間を見積もった結果が以下のとおりです。76日程度の見込みとなりました。

稼働可能時間[h]稼働可能時間[日]
0.74 × 10000 ÷ 3.24 × 0.8 = 1827[h]76日
実際の稼働時間と比較

実際に稼働させてみて、計算値と一致するかを実験しました。おおよそ計算通りの結果となりました。

製品Revisionモバイルバッテリー使用端子実際の稼働時間[日]
RPZ-PowerMGR Rev2
(ファームウェアVer2.4)
cheero Power Plus 5 10000mAh with Power Delivery 18WType-C端子80日
*残量%が減る量から全て使い切るまでの日数を推測

RPZ-PowerMGRによる消費電流の測定と、稼働時間の計算方法については、以下の記事も参考にして下さい。

ラズパイ/Jetsonの消費電力測定&モバイルバッテリー稼働時間の計算 (RPZ-PowerMGR)

RPZ-PowerMGRを使って、Raspberry Pi(ラズパイ)/Jetson Nanoの消費電力を測定する方法の解説です。モバイルバッテリーでの運用可能な時間を計算し、実際の運用時間と比較しました。

まとめ

Raspberry Pi(ラズパイ)と純正カメラを使用して、定期的に撮影するタイムラプス機能を実装する方法の解説は以上です。待機時の消費電力をカットすることで、モバイルバッテリーで長期運用が可能になります。ソーラーシステムなどでバッテリーを充電すれば、さらに期間を伸ばすこともできるでしょう。

これ以外にも、RPZ-PowerMGRには電源管理に便利な様々な機能が搭載されています。そちらの記事もぜひ参考にして下さい。

RPZ-CamMountKit (Raspberry Pi Zero用 HQカメラマウントキット)

Raspberry Pi(ラズパイ) Zeroシリーズと純正HQカメラを固定するマウントキットです。RPZ-PIRS拡張基板の人感センサーとカメラの方向を合わせるように設計しており、人や動物が通った際に撮影するような応用が可能です。

ラズパイで赤外線制御 (家電、エアコン、照明、テレビなどを制御するホームIoT)

Pythonとpigpioを使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。サンプルプログラムを用意しているので、簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。

RPZ-CO2-Sensor (Raspberry Pi用 二酸化炭素センサー/リレー 拡張基板)

Raspberry Pi(ラズパイ)用CO2センサーとリレー拡張基板です。CO2濃度を測定することで換気の目安としたり、オフィス環境の改善やスマート農業のCO2モニタリングに利用できます。CO2濃度が一定以上になった際、リレーで換気ファンなどの外部機器をON/OFFできます。7色表示可能なRGB LEDを搭載し、CO2濃度に合わせて色を変えることも可能です。