人感センサが人体の動きなどを検知したときに、IchigoJamがRaspberry Piを起動し、携帯電話網に接続し、センサ検知の通知をインターネット経由でメール送信してから、Raspberry Piがシャットダウンします。
これらの動作を行っているとき以外は、超低消費電力で待機します。
前回、IchigoJamからRaspberry Piを起動するためのハードウェアを作成しました。今回は、IchigoJam上のBASICプログラムで同じことを実現できました。
(前回)IchigoJamをSORACOMに接続する前に:Raspberry Piを起動する:
(今回)下図のように、人感センサ以外は、既存のハードウェアで実現する(前回の回路部はソフトで実現)。
右上のIchigoJamが右下のRaspberry Pi ZEROの電源を制御する。左上のブレッドボードが人感センサ、左下はUSB接続のLTEモデム(本文末尾の課題も参照)。動作時以外は、ごくわずかな電流で待機することができるので、遠隔地にバッテリーとともに設置するようなシステムでの応用を想定。
目次
IchigoJamを超低消費電力で動かす
IchigoJamを低消費電力で動かす方法には、以下の3つがあります。
- Single Shot起動:SLEEPコマンドでスリープモードに移行し、必要な時にBTN信号で起動する
- Cyclic Sleep動作:WAITコマンドを使ってスリープに移行し、一定期間後に起動する処理を繰り返す
- 低クロック動作:クロックを下げて動作させる(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 wait60100 '== Sensor Main ==
110 I=IN(1):?"in=";I
120 if I=L gsb 600
499 gsb 500:goto 100500 '== 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 rtn600 '== 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用マイコンボード