福野泰介の一日一創 - create every day

IchigoJamで省エネIoT、動作周波数別消費電流とスリープモード

2016/01/25
#maker #IchigoJam #IoT 

4KBのメモリ(32768bitのコインの裏表相当)でも動作するIchigoJam BASICは、消費電力が低いのでIoT実現にもいい感じです。 ver 1.1で実装した、クロックダウンによってどの程度消費電力が下げられるか、キーボードを抜いて、何かに組み込んだ状態を想定して計測実験してみました。


ビデオ出力ありの状態で17.16mA(57mW)、単3電池2本の容量は2,000mAh程度なので、100時間ほど持つ計算です。 ラズパイの消費電力1200mWと比べて1/20以下。

更に、ビデオ出力をVIDEO0コマンドで消すと12mAまで下がり、VIDEO0,2と動作クロックを通常時の48MHzから24MHzまでクロックダウンすることで、8mAと半分以下にできます。 VIDEO0,3の16MHzで6.6mA、VIDEO0,4の12MHzの5.8mAと周波数に比例して下がりますが、最もゆっくり動く188kHzのVIDEO0,255でも3.6mAあたりが限界です。

3.6mAだと、単3電池2本で555時間と一見長持ちなようですが、日数にして23日間、センサーで使う電力分を考えると設置して放って置くにはもうちょっとがんばりたいところです。 そのためには普段は寝かせておいて、定期的に起きて動作する間欠動作で平均消費電力を下げるのが常套手段。 別チップを使って1.2uAと超低消費電流なディープパワーダウン状態(SLEEPコマンド)から起こす方法もありますが、IchigoJamで使っているLPC1114の0.2mAまで下がるディープスリープモードを使って、定期実行できるものをつくってみました。


ver 1.2 beta 6 に、寝かせる時間を秒数で指定できるSLEEPコマンドを仮実装。ESP-WROOM-02を含めて、待機電流0.5mAを実現。 定期的にアナログセンサーの値をチェックして、値が大きく(20以上)変わったら、ESP-WROOM-02を通じてWiFi送信するプログラムがこちらです。 1.2beta5で動かすには、150行のSLEEPを適当なWAITに変更してください。

100 'WIFI-UP 105 VIDEO0 110 D=20 111 H="nnn.nnn.nnn.nnn" 112 P=port 115 B=0:OUT2,1:OUT1,0 120 FOR L=1 TO 1 125 CLT:A=ANA(2) 130 IF ABS(A-B)>20 GOSUB 210:B=A 150 SLEEP 60-TICK()/60 160 L=0:NEXT 210 'WIFI SEND 220 GOSUB 310 230 UART3,0 240 ?"AT+CIPMODE=1":WAIT 60*2 250 ?"AT+CIPSTART=";CHR$(34);"TCP";CHR$(34);",";CHR$(34);STR$(H);CHR$(34);",";P:WAIT 60*2 260 ?"AT+CIPSEND":WAIT 60 270 ?D;" ";A 280 LED1:WAIT3:LED0 290 OUT1,0:UART2 300 RETURN 310 'WIFI WAIT 320 OUT1,1:OUT2,0:WAIT1:OUT2,1:UART0,2 330 FOR F=0 TO 1 335 CLS:INPUT S 340 C="WIFI GOT IP" 350 F=1:FORI=0TOLEN(C)-1:F=F*(SCR(I+1,0)=PEEK(C+I)):NEXT 360 NEXT:RETURN

変数
D WiFi送信用センサーID
H WiFi送信先IPアドレス nnn.nnn.nnn.nnn 形式で指定する
P WiFi送信先ポート番号 数値で指定する
L メインループ
A センサー検出値
B 前回のセンサー検出値(差が20以上あれば送信)
C WiFi準備確認用
S WiFi準備確認用ダミー
F WiFi準備確認ループ
I WiFi準備文字列チェック用

配線
- IchigoJam - ESP-WROOM-02
VCC 3.3V
GND GND
RXD TXD
TXD RXD
OUT1 EN
OUT2 RSET
- IchigoJam - 光センサー
VCC 抵抗(2.4kΩ) ※IN2へ
IN2 フォトトランジスタ+
GND フォトトランジスタ-
- IchigoJam - 電池
VCC 3V(単3x2)
GND GND
- IchigoJam
GND BTN(自動起動用)

ディープパワーダウンと違って、ディープスリープモードはメモリの状態、ピンの出力状態が保持されるので、手軽に使えて便利です。 ただ実装に結構な容量を使ってしまったので、ひとまずプログラム保存領域が1つ限定版としています。 24KB内に収めて、1.2正式版に載せられるか!?

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像