概要
電池で動かすモノを作ってみようとすると、やはり電池のモチが気になるので、Arduino PRO MINIについてまた調べてみた。WiFiを使うならばESP-WROOM-02がよいのだけど、通信に用がないなら余計なものが載ってないPRO MINIがよさそうと思ったので。
電池で動かす場合、スタンバイ(スリープ)時の消費電流と復帰方法が重要になるだろう。Arduino や WROOM-02ならば、復帰方法として外部要因(スイッチを押す、センサーから電圧を与えるなど)による割込みが使える ( ESP-WROOM-02でもヌルく調査した)。
しかしながら、消費電流についてはデバイスや製品によって決まってしまうから、具合のよさそうなものを選定するしかない。
スリープモードと消費電流の調査
手元に、スイッチサイエンスで扱っているSparkFun社製の製品と、以前アマゾンで入手したArduino PRO MINIをうたう製品(裏面に The Simpleと書いてあるもので、400円未満)があったので、これらに簡単なスケッチを入れて、スリープモード時の消費電流などを測ってみた。残念ながら、いずれも+5V、16MHz動作品。
SparkFun社が掲示している回路図を見る限り、外部から+5Vを与えればボード上のLDOも使われないので、AT-MEGA328PとLEDくらいしか電流を食いそうなものはない。測定といっても、テスターをArduino MEGA ADKの+5V出力とブレッドボードの+5Vの間につないで電流表示を読んだだけなのだけど。
測定時のスケッチ
以下のようなコードを使い、Arduino IDEから送り込んではテスターの表示を読むことを繰り返した。スリープしないときは、sleep_mode(); をコメントアウトして測定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <avr/sleep.h> #define START_MSG String(__FILE__) + " start." #define RED_LED 13 void setup() { Serial.begin(115200); Serial.println(START_MSG); pinMode(13, OUTPUT); digitalWrite(13, 0); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_mode(); } void loop() { delay(10); } |
なお、各製品ともにIOピンのD13にLEDが接続されているので、9行目を digitalWrite(13, 1); としてから SLEEP_MODE_PWR_DOWN させ、LEDを点灯したままの状態での電流も測定した。
SparkFun製
- 通常動作時:16.3mA
- SLEEP_MODE_PWR_DOWN : 0.7mA
- SLEEP_MODE_PWR_DOWN : 9.4mA (LED ON)
LEDオフでスリープに入っても、赤色のPOWER ON LEDが点灯している。このLEDには10kΩの直列抵抗が入っているから、LEDのVF=2Vとすると、3V ÷ 10kΩ = 300μA が常に消費されていることになる。このLEDを外せば、スリープ時の消費電流を0.4mAまで抑えることができるだろう。
D13のLED(緑色)を点灯した場合、8.7mAも増加してしまう。こちらには330Ωが入っているから、緑色LEDのVFが2.1~2.2Vとすれば計算通りだろう。
KB50と書いてあるデバイスがLDO (MIC5205)で、その右側で赤色のPOWER ON LEDがぼんやり光っている。LDOの左の 01C と書かれたチップ抵抗が、おそらくLED用の10kΩ。
The Simple
- 通常動作時:22.4mA
- SLEEP_MODE_PWR_DOWN : 3.6mA
- SLEEP_MODE_PWR_DOWN : 6.8mA (LED ON)
消費電流の話に突っ込むことになったのは、The Simpleのスリープ時の消費電流が大きかったから。同じ図面から起こした互換品のはずなのに、こんなに違うのはなぜ? と疑問に思ってしまった。
前にも書いた気がするが、この製品の特徴はLEDがまぶしいくらいに明るいことである。このあたりに理由があるのだろうと思って、LED周辺をほぼ等倍で撮影してみた。
赤く光るPOWER ON LEDの上には、102 と書かれたチップ抵抗が載っている。つまり直列抵抗が 1kΩ なのだった。1つ前の全体像を見ると、右側でD13につながる赤色LEDも光っているが、このLEDにも1kΩがつながっているのが分かる。
こちらは、スリープ前にD13のLEDを点灯したときに 3.2mA増加しており直列抵抗が1kΩだから、LEDのVFは1.8V程度と分かる。おそらくPOWER ON LEDも同等品なので、PON LEDもしくは直列抵抗を基板から外してしまえば、消費電流は3.2mA減って、スリープ時0.4mAとなりSparkFun社製と同程度になるだろう(同じマイコンなので当たり前だが)。
撮影風景
基板に実装されているデバイスを大写しにする、ということで、オリンパスのE-PM2とMZD60mmマクロレンズを使った。なおかつ、フレキシブルアームの先にLEDがついている、マクロアームライト (MAL-1) というのも使った。
MAL-1は大した光量がなくて滅多に使わないのだけど、小さな陰を消したいときや、小さなものを光らせたいときなんかに役に立つ。レンズ先端にLEDを並べただけでは決まった方向しか照らせないから、フレキシブルアームになっていることに意味がある。
MAL-1 を使うには、カメラにAP-2 (アクセサリポート2) が備わっている必要があるのだが、残念なことにオリンパス社のカラメからは AP-2が消えつつある。現行品で備えているのはOM-D E-M1とPEN E-PL8 という製品くらいか。OM-D E-M5IIにはついていないし、この冬に登場するE-M1の次世代機にも着いてないらしい。
E-M1では大袈裟だし三脚がゆらゆらしたのでE-PM2を使ったのだけど、そろそろ届くはずのMZD30mm/F3.5 マクロレンズとMAL-1を組み合わせて使いたい。また、AP-2のないカメラ向けの製品も期待したい。あるいは、高輝度白色LEDをレンズフードの周りに貼り付けた、とりあえずの近接用照明でも作ってみるか。
きょうのまとめ
- ESP-WROOM-02のdeep-sleepが強力でよいのだけど、IOピンが足りない場合はArduino PRO MINIを使うことになるだろう。
- The Simpleの消費電流に驚いてざっと調査してみたが、謎が解けてよかった。
- スリープ時に400μAまで落とせることは分かったが、クロックを下げて電圧を下げる以外の方法で、もうちょっと下げられないものか。もうちょっと勉強してみます。
追記
The Simple のPower ON LEDを外してみた。それについては別途まとめた。
さらに、実際の赤外線リモコンを作るにあたって、省電力の方法をよりつめて3.3V電源でスリープ時18μAになった。まだまだできることはありそうな感じ。