IchigoJamとRaspberry Piを使ったバッテリ駆動の防犯カメラシステム

USB接続のWebカメラを使って防犯システムを自作している人は多いかもしれません。ところが、電源やネットワークのない遠隔地で実用化しようとすると、様々な工夫が必要になります。前回は、その解決方法として、Raspberry Piの電源をIchigoJamで管理する方法について、紹介しました。
今日は、その応用として防犯カメラシステムを作ってみました。
前回:人感センサ反応時にIchigoJamがRaspberry Piを起動し、携帯電話網へ接続する
今回:IchigoJam T とRaspberry Piを使ったバッテリ駆動の防犯カメラシステム

i.MyMimapori Pi カメラ システム : バッテリ駆動 + 携帯電話網 LTE モデム

一般的に市販されているUSB接続のWebカメラを使用する。型番の入ったメーカ品であれば、1000円以上するが、型番のないノーブランド品であれば、500円以下で販売されていることも多い。また、夜間に撮影が可能な赤外線カメラも販売されている。

USBハブとFETスイッチが必要

IchigoJam側のプログラムは前回のシステムのものを使用します。LTEモデムへ供給するUSB電源もIchigoJamで制御します。ただし、Raspberry Pi ZEROにはUSB端子が一つしかないので、カメラを接続するためにはUSB分岐ケーブル型の「USBハブ」を使用しました(下図の左下のケーブル)。

Raspberry PiのUSB端子にUSBカメラとLTEモデムを接続するには、USB分岐ケーブル(実際にはUSBハブ)を使用する。右側のブレッドボードはUSBの電源を制御するためのFETスイッチ。運用時には、USBカメラ側にも必要になる。許容電流容量の大きなFETを用いれば、USB分岐前に挿入しても良い。

Raspberry Pi側のプログラム:

#!/bin/bash
IP=$(hostname -I) || true
if [ "$IP" ]; then
  printf "My IP address is %s\n" "$IP"
else
  IP="127.0.0.1"
fi
MAILTO=xbee@dream.jp
date > /home/pi/start.log
/usr/bin/fswebcam /home/pi/cam.jpg >> /home/pi/start.log 2>&1
/home/pi/esp/tools/soracom start >> /home/pi/start.log 2>&1
NTP=`ntpq -p|grep \*` >> /home/pi/start.log 2>&1
if [ "$NTP" = "" ]; then
  DATE="数分前"
else
  sleep 1
  DATE=`date "+%Y/%m/%d %R"`
fi
echo $DATE >> /home/pi/start.log
IP_G=`cat /home/pi/start.log |grep "local  IP address"|cut -d' ' -f6|tail -1`
echo -e "`hostname` が $DATE に起動しました。\n$IP\n$IP_G"\
| mutt -s "自動起動通知" -a /home/pi/cam.jpg — $MAILTO >> /home/pi/start.log 2>&1
/home/pi/esp/tools/soracom stop >> /home/pi/start.log 2>&1
wall "The system is going down for power-off (シャットダウンを開始)"
sleep 10
sudo shutdown -h # now オプションを付与することですぐにシャットダウンする
exit 0

実際に動かしてみました。iPhoneでメールを受信したときの様子。

これだけでも、立派なIoT!
超簡単!遠隔&バッテリ駆動防犯システムの完成です。
色んなセンサや制御機器を組み合わせたり、プログラムを拡張して、
自分だけのi.MyMimamori Piシステムを作ってみよう。
by ボクにもわかるRaspberry Pi と IchigoJam 用マイコンボード:

人感センサ反応時にIchigoJamがRaspberry Piを起動し、携帯電話網へ接続する

人感センサが人体の動きなどを検知したときに、IchigoJamがRaspberry Piを起動し、携帯電話網に接続し、センサ検知の通知をインターネット経由でメール送信してから、Raspberry Piがシャットダウンします。
これらの動作を行っているとき以外は、超低消費電力で待機します。
前回、IchigoJamからRaspberry Piを起動するためのハードウェアを作成しました。今回は、IchigoJam上のBASICプログラムで同じことを実現できました。
(前回)IchigoJamをSORACOMに接続する前に:Raspberry Piを起動する:
(今回)下図のように、人感センサ以外は、既存のハードウェアで実現する(前回の回路部はソフトで実現)。
右上のIchigoJamが右下のRaspberry Pi ZEROの電源を制御する。左上のブレッドボードが人感センサ、左下はUSB接続のLTEモデム(本文末尾の課題も参照)。動作時以外は、ごくわずかな電流で待機することができるので、遠隔地にバッテリーとともに設置するようなシステムでの応用を想定。

IchigoJamを超低消費電力で動かす

IchigoJamを低消費電力で動かす方法には、以下の3つがあります。
  1. Single Shot起動:SLEEPコマンドでスリープモードに移行し、必要な時にBTN信号で起動する
  2. Cyclic Sleep動作:WAITコマンドを使ってスリープに移行し、一定期間後に起動する処理を繰り返す
  3. 低クロック動作:クロックを下げて動作させる(VIDEOコマンド)
このうち、Single Shot(SLEEPコマンド)については、雑誌「1行リターンですぐ動く BASIC I/OコンピュータIchigoJam入門」の3.12章などで紹介いたしました。また、クロックを下げる低クロック動作(VIDEOコマンド)は、コマンドを実行するだけで消費電力を下げれるので手軽です(省エネ効果は小さい)。
今回は、Cyclic Sleep動作(WAITコマンド)を使ってみます。
IchigoJamのBTN信号をGNDへ接続し、下記のプログラムを実行してみてください。約1秒ごとに、LEDが点灯します。
10 WAIT 60:IF INKEY() GOTO 10
20 LED0
30 WAIT 60,0
40 LED1
50 IF BTN() GOTO 20
プログラムの行番号30の部分では1秒間、ディープスリープになり、わずかな電力で待機します。また、行番号50では、BTN信号を確認し、GNDに接続されていると行番号20に戻り、スリープを繰り返します。
BTN信号のジャンパーを取り外すと、プログラムが終了します。
行番号10は、起動時のキーボード!?の割り込み処理を阻止するために必要です。IchigoJamファームウェアのVer 1.2.1においては行番号10が無いと、適切に動作しない場合があります。

人感センサとRaspberry Piを接続する

次に人感センサをIchigoJamへ接続します。秋月で販売されているSB412Aを使用しました(下図)。
人感センサの「+」端子をIchigoJamのVCCへ、「-」端子をGNDへ、「VO」端子をIN1入力端子へ接続してください。
また、Raspberry PiのTXD端子をIchigoJamのIN2へ、RUN端子をOUT4に接続します。また、UARTでのコンソールが使える状態に設定しておいてください。
IchigoJamのBTN端子は、GNDに接続しておきます。

電源が入っているかどうかを確認してから起動するプログラム

人感センサが人体を検知すると、Raspberry Piの電源が入っているかどうかを確認し、電源が入っていなかった場合に、Raspberry Piを起動するIchigoJam用のプログラムです。ファームウェアVer 1.2.1で動作確認を行いました。
cls:new
rem     RasPi Trigger -Cyclic for IchigoJam Version 1.2
rem     Copyright (c) 2016 Wataru KUNINO
rem     https://bokunimo.net/ichigojam/
1 cls:?"RasPi Trigger -Cyclic
2 ?" for IchigoJam v1.2 イコウ
3 ?" IN1 ポート <- センサ High ACT
4 ?" IN2 ポート <- Pi TX
5 ?" OUT1 ポート -> USB EN
6 ?" OUT4 ポート -> Pi RUN
7 L=1:?" キドウ =";L;" RUN =";R
8 T=60:?" シュウキ =";T/60;" ビョウ"
9 if INKEY()goto 9 else wait60
100 '== Sensor Main ==
110 I=IN(1):?"in=";I
120 if I=L gsb 600
499 gsb 500:goto 100
500 '== Cyclic Sleep ==
510 led 0:wait T,0:led 1
520 ?"Wake!
530 if !BTN() end
540 if R clt else rtn
550 if in(2) rtn
560 if TICK()<300 goto 550
570 ?"== Stop USB ==
580 out 1,0:R=0
590 rtn
600 '== Pow ON Pi ==
610 clt
620 if IN(2) ?"Running":rtn
630 if TICK()<180 goto 620
640 ?"== Run Pi ==
650 out 4,0:wait 10:out 4,1
660 out 1,1:R=1
670 rtn
最新版はこちら:
最初に作った画面にぴったり収まるプログラム。行番号100番台にセンサ用のプログラムを追加する。行番号500番台はスリープ処理、600番台はRaspberry Piの起動処理部。行番号510の「wait 60,0」は行番号6で定義した変数Tを使用し、「wait T,0」とすべきだったが、忘れてた。

Raspberry Pi側のLTE/3Gモデム

RAspberry Pi側では、SORACOMなどのSIMを接続したUSBモデムを接続し、携帯電話網にネット接続します。写真のNTT DoCoMoのLC02Cをお持ちの方や、ABiTのAK020をお持ちの方は、下記でセットアップすることもできます。
$ cd RaspberryPi/network/soracom/
$ sudo ./soracom_setupL02C.sh  (DoCoMo LC02Cの場合)
$ sudo ./soracom_setupAK020.sh (ABiT AK020の場合)
接続するには、以下のコマンドを入力します。
$ ./soracom start
停止する場合は、以下のコマンドです。
$ ./soracom stop
起動後、自動的に接続するには、rc.localを編集し、chmod a+xで実行形式に修正します。メール送信方法については、以下のコマンドでGmailアカウントを使用したsSMTPとMuttのインストールと設定が行えます。
$ cd ~/RaspberryPi/network/i.myMimamoriPi
$ ./setup.sh
送信方法については「i.MyMimamoriPi.sh」のサンプルやトランジスタ技術2016年9月号の特集7章などを参照してください。また、スクリプトの最後に「sudo shutdown -h now」を忘れないようにしてください。

課題:USBモデムの待機電力

一つ、課題があります。USBモデムの待機電力です。AK-020についてはATコマンドが公開されておらず、またL02Cについては少なくとも説明書に記載されているATコマンド内には待機電力を下げる方法が書かれていませんでした。したがって、実際に使用するには、USBの電源をFETなどで切断する回路を追加する必要があります。IchigoJamから起動時に接続し、shutdown完了後に切断する制御を入れればよいでしょう。

右側のマイクロUSB端子から左側のUSBモデムへ接続する回路の例。5VにPchのMOS FETを挿入し、USB電源を切断できるようにした。3.3V動作のIchigoJamから制御できるように、FETの駆動にNPNトランジスタを使用。黄色の配線をIchigoJamのOUT3へ接続し、プログラムにOUT3の制御を追加して動作を確認した。

参考文献:
IchigoJamで省エネIoT、動作周波数別消費電流とスリープモード:
by ボクにもわかるIchigoJam用マイコンボード

追記:USBモデムの待機電力の対策を行ったときの製作例

トラ技9月号の回路で、5か月の連続動作を達成しました。

ESP-WROOM-02を搭載した温湿度センサ(P.90 図4の回路)に電池電圧測定機能を追加し、ダイソーの単3電池×3本で、どれくらい持続するのかを実験中です。本日で、5か月の連続動作となりました。
8月末に急激な電圧降下がありました。その後、いつの間にか安定して、なんとか5か月をクリアしました。
これから、電池切れに向かって進む日々になるでしょう。
半月前には、温度と湿度の散布図が「竜」のように見えましたが、その面影も消えつつあります。
竜のように見えた4.5ケ月:
既に、昨年の秋から冬にかけて5か月を達成した実績がありましたので、今回で、2度目の5ケ月連続動作の達成となります。
今回は、電池電圧を測定していること、IoT向けクラウドサービスAmbientを利用し、測定結果を自動で蓄積していること、手軽に入手可能なダイソーの単3電池(3本)を使用したことなどによる再挑戦でした。
製作方法については、下記に記載していますので、参照ください。
Amazonでのトランジスタ技術2016年9月号:
過去の投稿(3か月達成時)のブログ:
ボクにもわかるIoTモジュール ESP-WROOM-02
by ボクにもわかる電子工作
https://bokunimo.net/