圃場(畑)のタイムラプス動画を撮りたい
作物の生育状況をタイムラプス動画にすれば楽しいと思いませんか。また別途作成した温湿度+照度モニタのデータと組み合わせれば、数値的な分析の助けになるかもしれません。
圃場タイムラプスはバッテリー駆動が前提なので、実現にはarduinoもしくはRaspberry Piを間欠動作させて撮影します。arduino+カメラ+SDの方が消費電力とシンプルさから現実的ですが、今回はRaspberry Pi+カメラを間欠動作させます。
ラズパイの間欠動作と電源制御
Raspberry Piはshutdown時も電気を消費するので、一定間隔で通電On/Offを制御する仕組みが必要です。sleePiという製品もありますが少し高価なので、今回はarduino+リレーで代替品を作ります。
arduinoの動作仕様
一定間隔でUSBモバイルバッテリーの通電をOn/Offする
arduino本体は電池駆動にする(通常のモバイルバッテリーは消費電力が低いと電源切断されるため)
用意する部品
Arduino Pro Mini 328 3.3V 8MHz
Grove リレー (スイッチサイエンス)
その他作業に必要:Arduino Pro にスケッチを書き込むUSB-シリアル変換基板(5v/3.3v対応)
制限事項
ラズパイ側は電源を落とすと時計が狂うので、RTC(リアルタイムクロック)を持たせる
Arduino側は電源On時から一定間隔でラズパイのOn/Off制御を行う(RTCは省略)
ラズパイのshutdown検知は行わない
完成イメージ
作成手順
Arduino Pro mini にピンヘッダを半田付け
充電池(1.2v)×3の電源の+をraw、-をGNDに接続
GROVEリレーの赤をvcc,黒をGND,黄色をD4に接続
USBケーブルを切断して、黒を直結、赤をリレーの緑コネクタに接続
Arduinoスケッチ
/*
* Raspberry Pi Power control
*/
#include <Narcoleptic.h>
// Constants
//const uint32_t upload_interval = 60UL * 60UL * 1000UL; // about 1 hour
const uint32_t upload_interval = 480UL * 60UL * 1000UL; // 8hour
const uint32_t powerOnTime = 80UL * 1000UL; // about 80s
const int relayPin = 4; //D4
const int ledPin = 13;
// Globals
uint32_t last = 0;
// resetMyself() - Reset myself
void(* resetMyself) (void) = 0;
// setup() - set up function
void setup() {
pinMode(relayPin, OUTPUT);
}
// loop() - loop body function
void loop() {
uint32_t start = millis();
//On
digitalWrite(relayPin, HIGH);
digitalWrite(ledPin, HIGH);
//Wait
delay(powerOnTime);
//Off
digitalWrite(relayPin, LOW);
digitalWrite(ledPin, LOW);
// Sleep mcu until next time
uint32_t t = (last + upload_interval) - (millis() - start);
last = millis();
prepareToSleep(); // Set MCU GPIOs for sleep
Narcoleptic.delay(t); // Sleep MCU with WDT
// Wake up, restart from reboot
resetMyself();
}
// prepareToSleep() - Prepare to sleep()
void prepareToSleep(void) {
// Set GPIO pins for sleep
for (int i = 0; i < 14; i++) {
pinMode(i, OUTPUT);
}
}
スケッチ(プログラム)の動作
スケッチは約8時間毎に80秒通電させるものです。USB microBをラズパイzeroの電源用USBに、Type Aをモバイルバッテリーに接続します。
モバイルバッテリーは消費電力があまりに少ないと電流を止める回路が組まれているので、ラズパイzeroの低電流でも動作するものを選ぶ必要があります(運次第)。IoT用に電流遮断機能がないものもあります。
プログラムはインターフェイス2018/10の記事を参考にしました。Sleepはhttps://github.com/brabl2/narcolepticライブラリを使用しました。
ラズパイのプログラムはOS起動時に動作して、終了後にshutdownをかけるように組みます。
数週間動作させた補足
Arduinoは8時間毎に起動させる設定ですが、±2時間程度の誤差が生じることがわかりました。正確な間欠動作が必要ならRTCを工夫する必要があります。
PR