Arduinoプロジェクトのための最適化電源ソリューション
必要な部品と材料
| Adafruit PowerBoost Charger Shield | ×1 |
| 充電式LiPoバッテリー(3.7-4.2V) | ×1 |
| Arduino UNO | ×1 |
プロジェクト概要
Arduinoファミリーのマイクロコントローラーボードを用いたプロジェクトでは、通常特別な電源管理回路は不要です。電源を接続すればデバイスが起動し、仕事をこなし、電源を切れば停止します。Raspberry Piのようなシステムとは異なり、SDカード破損のリスクがありません。
しかし、用途によっては電源状態を監視し、単にシャットダウンするだけでなく、より管理された方法で対応したい場合があります。
例えば、温度データをログ記録するリモートセンシングデバイスを考えてみてください。無人の状態でバッテリーが切れると、ログが単に止まるだけです。すぐにバッテリー切れが原因だと分かりません。ソフトウェアやハードウェアの故障の可能性もあります。
同様に、ポータブルシステムでは残りバッテリー寿命と充電タイミングを知ることが役立ちます。
本プロジェクトでは、回路、ソフトウェア、説明を含むArduino電源管理へのいくつかのアプローチを提示します。シンプルな電源オン/オフスイッチから、バッテリー状態を含む無人環境監視用データロギングシステムまで。興味のあるサブシステムを選択してください。複雑度順に説明しますが、不要な部分はコメントアウト可能です。
このプロジェクトは、Raspberry Piシステム向けに同様の機能を提供するLiPoPiとPi Powerプロジェクトのアイデアに基づいています。
概要
システムは以下の機能を提供します:
- プッシュボタンによる電源オン/オフ
- Arduino ADCを使用したバッテリー電圧監視
- 低電圧時のシステムシャットダウン
- バッテリー電圧とシャットダウンメッセージのファイル記録
- 赤/緑LEDによるバッテリー状態表示
これらを順に紹介しますが、共通するのはAdafruit PowerBoostとArduinoの組み合わせです。各機能で、標準のsetup()とloop()にarduinoPowerSetup()とarduinoPowerMonitor()の2関数を追加・カスタマイズします。
Adafruit PowerBoost Shield
システムは充電式LiPoバッテリーとAdafruit PowerBoost Charger Shieldを使用します。これはバッテリー充電と5Vへの昇圧の両方を行います。
AdafruitにはPowerBoostの3バージョンがあります:ブレークアウトボード2種とArduinoシールド。本稿では主にPowerBoost Shieldを使用しますが、ブレークアウトボードについても後述します。
PowerBoost Shieldの設定方法はこちらを参照。Shieldキットの準備:
- スタッキングヘッダーピンをハンダ付け
- 付属スイッチは取り付けない
- Enableピンに約10cm(4インチ、22AWG単線)のワイヤーをハンダ付け
- 基板裏面のアナログピンA0用パッドをブリッジ(ショート)
電源オン/オフ回路
この基本回路は、瞬間押しボタンスイッチの押下でシステムを起動し、動作中に再度押下・離すとシャットダウンします。スマートフォンの電源ボタンと同様の挙動です。
電源オフ状態でボタンを長押しすると、PowerBoostがオンになりArduinoに電力供給、Arduinoが起動してプログラムを実行します。
動作中にボタンを押して離すと、ArduinoがPowerBoostを無効化し、電力供給が止まるためArduinoがシャットダウンします。
詳細はこちら。回路図:

注: この回路がなくても本プロジェクトの他機能は利用可能です。PowerBoost付属のスイッチを使うこともできます。主な違いは、基本スイッチではログメッセージ記録なしで即シャットダウンになる点です。
バッテリー電圧監視
Arduinoにはアナログピン0-5に6つのADC(アナログ-デジタル変換器)があり、電圧測定は簡単です。PowerBoost Shieldでは、バッテリー電圧(Vbat)をこれらのADCの1つに接続できるよう、適切なパッドをブリッジします(PowerBoost Shieldのページ参照)。本例ではアナログピン0に接続します。
LiPoバッテリー電圧は満充電で約4.25V、放電時で約3.7Vです。ADCは0-5Vを整数0-1023に変換し、analogRead()で取得します。
以下のコードスニペットで電圧取得と、最大/最小電圧からの相対的なバッテリー残量推定を行います:
float maxVoltage = 4.25;
float minVoltage = 3.75;
arduinoPowerVoltage = float(analogRead(arduinoPowerVoltagePin)) / 1024.0 * 5.0;
float fractionalVoltage = (arduinoPowerVoltage - minVoltage) / (maxVoltage - minVoltage);
LiPoバッテリーの放電曲線はリニアではありませんが、残量推定には十分近似できます。
この情報をユーザーに伝える方法が必要です。英数字ディスプレイを使う方法もありますが、次節でSDカードへのログ記録を紹介します。しかし多くのプロジェクトではオーバースペックです。
よりシンプルな方法はRGB LEDで色を変えて残量を示すこと:
- 緑 - 50%以上
- 黄 - 20-50%
- 赤 - 20%未満(要充電)
実装にはRGB LEDと1kΩ抵抗2本を回路に追加し、arduinoPowerMonitor()にコードを追加します。
RGB LEDは一般的にコモンアノードなので、以下の回路で動作します:

注: 実践ではLEDに3.3V電源を使用しています。
注: 後で示す通り、測定電圧に原因不明の大きな「振動」が見られることがあります。バッテリー残量がLED色切り替え閾値近くにあると、2色の間でチカチカ切り替わって煩わしいです。即効対策として、アナログピンA0とGND間に0.1uFコンデンサを接続してください。

このブレッドボードレイアウトにはバッテリーとArduinoは含まれていません。スケッチarduino_2_voltage_ledは電源オン/オフとLED電圧表示を実装。コードでは緑/赤ピンをLOWで点灯、HIGHで消灯としています。
注: コード内のSerial呼び出しをコメント解除してIDEのシリアルモニターを実行すれば、実測電圧と残量比率を確認・デバッグ可能です。初回呼び出しは不正確な値になる理由不明。
バッテリー電圧をSDカードにログ記録
LED電圧表示は、詳細を気にせず充電タイミングだけ知りたいポータブルバッテリー駆動Arduinoシステムに有用です。
しかし、スタンドアロンでセンサーを監視するシステムでは、センサーデータとともにバッテリー電圧を記録し、時間経過に伴う消費傾向を把握したい場合があります。
このパートではAdafruit Data Logging Shieldを使用し、タイムスタンプ付きでCSV形式ファイルとしてSDカードに記録します。AdafruitガイドでSDとRTCライブラリの仕組みを理解してから取り組んでください。
回路は前例から変更なし。LEDは即時フィードバック用に残しておくと便利ですが必須ではありません。
データをカードに記録するため、シャットダウンメッセージの記録が重要です。意図的なシャットダウンか、何らかのエラーかを後から判別できます。
また、電圧監視により、電圧が最小レベルを下回った時点で安全にシャットダウンできます。その際もシャットダウン直前にメッセージを記録します。
このスケッチはarduino_3_voltage_loggingにあります。タイムスタンプ文字列生成などのユーティリティルーチンを含み、SDカード挿入忘れ時に赤LEDを点滅させるハックも入っています(私はよく忘れます)。
Arduino Uno、Data Logging Shield、PowerBoost Shield、ブレッドボードのスタック全体はこんな感じ:

電圧データ
約20時間にわたるバッテリー電圧の経時変化プロット。緩やかな低下が見られます。完全なリニアではありませんが、残量推定には十分近いです。

前述の0.1uFコンデンサをアナログピンA0とGND間に追加すると効果的。紫線がコンデンサあり、青線がなしの比較です。

環境データをSDカードにログ記録
最後にもう1つ追加例を紹介。庭園用の無人環境モニター(温度、土壌湿度等)を構想中で、Arduino一式を密閉ボックスに入れて長期間放置します。バッテリー切れだけでなく、ケース内への湿気侵入や、システム破損の原因となる極端な温度変化も監視したいです。
温湿度測定に安価で簡単なDHT22センサーを使用(Adafruitチュートリアル参照)。
サンプルコードではデジタルピン5を使用(ピン2は電源オフボタンの割り込みで使用済みのため)。
コードはarduino_4_voltage_temp_humidity_loggingにあります。ブレッドボードで動作確認後、Adafruit Proto Shieldに配線しました。DHT22は少しかさばりますが安価です。AdafruitやSparkfunの他ブレークアウトボードも選択肢です。
Arduinoプロジェクトにおける省電力化
プロジェクトの次の段階は消費電力削減とバッテリー寿命延長です。
出発点はTony DiColaによるAdafruitの優れたチュートリアル「Low Power Datalogging」です。
コード
GitHub
https://github.com/craic/arduino_power
https://github.com/NeonHorizon/lipopi
https://github.com/craic/pi_power
製造プロセス
- ブルドーザー技術:設計、製造、将来イノベーション
- 電池の歴史:ボルタの電柱から現代リチウム電池まで
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- 風力発電:大気の動きをクリーンな電力に変える技術
- 補助金削減が中国の動力電池産業に与える影響
- 抵抗器の電力損失測定:ジュールの法則を用いたハンズオン実験
- 電源:ACとDCの解説