実験室で電圧を記録するロガーとしては、ここまでの作品で用が足りますが、電池を使ってこれをフィールドで長期稼働させるとなると電力供給の問題が起こります。後述の通り、Arduino UNOは単体で動かすだけでも、約50mAの電流を消費します。2500mAhのエネループプロ(×4本)で駆動すると、2500mAh/50mA=50hつまり約2日しか稼働しないことになります。これをいかに数か月~数年に延ばすか、が非常に難しい問題になります。本来、マイコンというのは非常に小さい電力で稼働するものですが、Arduino UNOにはUSB-シリアル変換チップその他いろいろ載っており、また接続したセンサーやモジュールにも常時電流が流れます。これを根本的に解決するには、Arduinoのような素人向けマイコンボードではなく、マイコンそのものを単位として一からロガーを構成し、省電設計をする必要があります。ただ、これ以外にもいくつか方法はあります。まず、ここでこれらの方法を概観します。

 

省電力化する

① Arduino UNOではなくArduino Pro Mini (3.3V 8MHz)やESP32など、より省電力化されたボード・マイコンを用いる

② スリープ機能を使う

③ 既往の電源管理モジュール(TPL5110など)を使う、あるいは作る

 

電力供給を解決する

(i) 巨大なバッテリーを用いる

(ii) 太陽光発電などエナジーハーヴェスティングをする

 

①~③と(i)~(ii)を組み合わせることで、より長寿命なシステムを構築できます。結論からいうと、①②だけでは抜本的に省電力化はできないようです。数分の1~1/10程度の省電力化はできるようですが、これでもエネループでは数週間しかもちません。(i)もスマート・抜本的な解決策には思えません。そこで、管理人が辿りついた結論としては、可能な限り①(Pro MiniはUNOに対して特段劣る部分はないので、こちらを用いるに越したことはない)は用いるとして、これと②(ii)の組み合わせ、②③の組み合わせがよさそうということです。

 

Arduino Pro Mini

 ここでは、まずArduino Pro Mini 3.3V 8MHzを紹介します。以下のように、1つあたり500円程度で買えます。ピンヘッダも必要になります。Pro Miniは本家のArduinoは廃盤になったようですが、互換品はまだ買えます。

 

 

ピンヘッダは同梱されていることが多いですが、安いので余分に買っておくとよいです。

 

 

ピンヘッダは下の写真のように下向き・上向きにつけてもどちらでもいいですが、下向きが主流です。

 

 

 

 A4・A5・A6・A7は(下向きには)つけないでおくと、ブレッドボードにそのまま挿してプロトタイプがつくれます。

 

 

基本的にArduino UNOと同じように使えますが、以下が異なります。

・ピンヘッダが付いていないので、自分ではんだ付けする必要がある

・USB-シリアル変換チップが載っていないので、スケッチを書き込む際に、外付けのUSB-シリアル変換モジュールが必要になる

・3.3V・8MHzで稼働する(ただし、5Vを流しても瞬時に壊れることはない)

・各段に小さい

・アナログピンA6・A7がある(UNOはA5まで)

 

 プログラムを書き込むときは、下の写真のようにUSB-シリアル変換モジュールを介してPCとArduino Pro Miniを接続します。

 

 

 例えばこれを使うとよいです。

 

 

6線使い、以下のように接続します。変換モジュールにはPCとUSBケーブルで接続するための端子があります。

 

 

注意が必要なのは、シリアル変換モジュールのRXとPro MiniのTX、シリアル-USB変換モジュールのTXとPro MiniのRX、というように、TXとRXは互い違いに接続することです。TはTransmit(送信)、RはReceive(受信)ですので。Arduino IDE(ソフトウェア)では、「ツール」の「ボード」から「Arduino Pro or Pro Mini」を選んで、さらに「プロセッサ:"Atmega328 (3.3V 8MHz)"」を選び、「シリアルポート」に現れている「COM X」(XはPCが自動的にアサインする数字)を選びます。あとの使い方はArduino UNOと同じです。ピンアサインもUNOと同じで、A4・A5がそれぞれI2C通信のSDA・SCLになります。2つだけちょっとおかしな位置にあるピンなので、わかりやすいです。

 

 Pro Miniの電源関係はややわかりづらいので説明しておきます。シリアル-USB変換モジュールを介して先の写真のようにつないでいるとき、Vccに直接3.3Vちょうど(PCからの5V供給を、このモジュールが3.3Vに制御してくれています)が送られています。Vccはマイコンの動作電圧そのものになるので、ここに例えば4.2Vを送れば、全体が4.2Vで動くことになり、RTCやSDカードなどの周辺装置にもVcc端子を介して4.2Vがかかります。この程度なら問題はないですし、3.3Vモデルに5Vをかけても、少なくとも長い時間でなければ壊れたことはありません。一方、「RAW」という端子がありますが、ここに電圧をかけると、電圧レギュレータを介して3.3Vに調整されてからシステムに電圧がかかります。では常にこのRAW端子に電圧をかければよいということになりそうですが、3.3Vに減圧する以上、入力電圧は3.3Vよりある程度大きくなくてはなりません。3.3Vちょうどくらいの電圧をRAW端子にかけるとうまく動作しないことがあるので注意が必要です。エネループ3本(3.9~4.2V)をRAW端子・GND端子につないで動作させるのがちょうどよいようです(12Vまでかけてよいようなので、もちろん4本つないでも構いません。電圧レギュレータによるエネルギーロスが大きくなるだけです)。

 

 Arduinoシリーズを使ってフィールド観測を行う場合、このPro Miniの出番が多くなります。省電力なうえに、小さなスペースに収めることができるからです。たとえば下の写真のように、ユニバーサル基板の上に載せ、他のモジュールとともに配線を固定(はんだ付け)し、完成品とします。

 

消費電力について

 

 ここで、Arduino UNOとPro Miniの消費電力の比較をしてみます。ここでは以下の2つのスケッチを試します。1つ目は、「何もしない」スケッチです。2つ目はスリープを導入しています。これにより、Arduinoは省電力モードに入ります。avrのライブラリは標準としてすでに入っていると思いますが、ここではEnerlibライブラリを以下よりダウンロードしてインストール(やり方については第7回参照)してください。

https://github.com/Arduino-IoT/libraries/tree/master/Enerlib

 

void setup() {

}

void loop() {

}

 

#include <Enerlib.h>
#include <avr/sleep.h>
#include <avr/power.h>

Energy energy;

void setup(void)
{
  
}

void loop(void)
{
  /* Enter sleep */
  energy.PowerDown();
}

 

これらをUNOとPro Miniで試してみました。UNO互換品にはいくつか種類があり、ここではUNO Aとしたもの(マイコンがATMEGA328P-PU、USB-シリアル変換チップがatmega16u2)とUNO Bとしたもの(マイコンがATMEGA328P-AU、USB-シリアル変換チップがCH340)、およびPro Miniを試しています。消費電力は以下のようになりました(どうやって計るか?テスターを使って直列つなぎにします。小学校で習った通りです)。

 

 

 何もしない

 スリープ

 UNO A

 48mA

 33mA

 UNO B

 63mA

 48mA

 Pro Mini

  3.3V 8 MHz

 5mA

 1.5mA

 

他のボードも含めた比較は第31回を見て下さい。

 

 さて、Pro Mini 3.3V 8MHzの省電力性能がよくわかりました。しかし、この電流はあくまで単体での消費電力であり、実際にはこれにRTCだのSDカードだのセンサーだのつけることになります。これらのモジュールは、それぞれおよそ1mAほど消費し、マイコンがスリープしても消費は続くので、4つつければスリープ時でも5~6mA消費することになってしまいます(2500mAhのエネループプロで約400時間、2~3週間程度)。少しでも省電力化するためにできることとしては、Arduinoそのものや、RTCなどモジュールについているLEDをもぎとることです。これにより、それぞれ0.5mAくらいずつ消費を減らすことができます(誰も見ていないロガーボックスの中で光り続けるほど無駄なことはない)。

 

 ここで、素朴な疑問。スリープからはどうやって起きる?これについては次回説明します。