Arduino Power
コンポーネントと消耗品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
Arduinoファミリのマイクロコントローラボードを含むプロジェクトでは、通常、特別な電源管理回路は必要ありません。電源を接続すると、デバイスが起動し、その役割を果たし、電源が切断されると停止します。 Raspberry Piシステムとは異なり、SDメモリカードが破損するリスクはありません。
ただし、一部のアプリケーションでは、単にシャットダウンするのではなく、電源の状態を監視し、より管理された方法で応答したい場合があります。
たとえば、温度データをログに記録するリモートセンシングデバイスについて考えてみます。無人のときにバッテリーがなくなると、ログは停止します。バッテリ低下が問題であったことをすぐに判断する方法はありません。ソフトウェアまたはハードウェアの障害である可能性があります。
同様に、ポータブルシステムの場合、バッテリーの寿命がどれだけ残っているか、いつ再充電が必要かを知ることが役立ちます。
このプロジェクトでは、回路、ソフトウェア、およびそれぞれの説明を使用して、Arduinoの電力管理に対するいくつかのアプローチを紹介します。単純な電源オン/電源オフスイッチから始めて、無人環境モニタリングを目的としたバッテリーステータスを含むデータロギングシステムに至るまで。
関心のあるサブシステムを選択できます。複雑さを増してすべてのサブシステムについて説明しますが、関心のない部分についてはコメントアウトできます。
このプロジェクトは、RaspberryPiシステムに同様の機能を提供するLiPoPiおよびPiPowerプロジェクトのアイデアに基づいて構築されています。
概要
システムはいくつかの機能を提供します:
- プッシュボタンを使用した電源オン/電源オフ
- ArduinoADCを使用してバッテリー電圧を監視します
- 低電圧でシステムをシャットダウンします
- バッテリー電圧とシャットダウンメッセージをファイルに記録します
- 赤/緑のLEDを使用してバッテリーの状態を表示します
これらのそれぞれを順番に紹介しますが、それらすべてに共通するスレッドは、AdafruitPowerBoostとArduinoの組み合わせです。
これらのそれぞれを使用して、2つの関数 arduinoPowerSetup()
を追加およびカスタマイズします。 および arduinoPowerMonitor(
) 、標準の setup()
および loop()
コード内の関数。
AdafruitPowerBoostシールド
このシステムは、充電式LiPolyバッテリーとAdafruit PowerBoost充電器シールドを使用しており、バッテリーの充電と出力の5Vへのブーストの両方を行うことができます。
Adafruitは、Power Boostの3つのバージョン(2つのブレークアウトボードとArduinoシールド)を製造しています。ここで説明する作業のほとんどはパワーシールドを使用していますが、ブレークアウトボードの使用については後で説明します。
PowerBoostシールドの構成方法については、このページをお読みください。シールドキットを準備するには、次のことを行う必要があります。
- スタッキングヘッダーストリップのはんだ
- ただし、スイッチは取り付けないでください
- イネーブルピンへのワイヤ(4インチ、22AWGソリッドコア)の長さのはんだ
- シールドの下側にあるアナログピンA0のパッドをブリッジします
電源オン/電源オフ回路
この基本的な回路は、瞬間的な押しボタンスイッチを押すことでシステムの電源を入れ、実行中は電源を切ります。これは、私の電話の動作と同じです。
電源がオフになっているシステムを長押しすると、PowerBoostがオンになり、Arduinoに電力が供給され、Arduinoが起動して、ロードしたプログラムを実行します。
ボタンをもう一度押して離すと、ArduinoはPowerBoostを無効にし、電力を供給しなくなったため、Arduinoはシャットダウンします。
詳しくはこちらのページをお読みください。回路図は次のとおりです。
<図>注: このプロジェクトの残りの部分を使用するために、この回路は必要ありません。 PowerBoostシールドに付属のオプションのスイッチを使用できます。主な違いは、基本的なスイッチがシステムをシャットダウンするだけで、ログメッセージを記録する方法がないことです。
バッテリー電圧の監視
Arduinoには6つのアナログ-デジタルコンバーターがあります (ADC)アナログピン0〜5で、電圧測定が簡単になります。 PowerBoostシールドを使用すると、バッテリー電圧( Vbat )を接続できます。 )PowerBoost Shieldページで説明されているように、適切なはんだパッドをブリッジして、これらの1つに接続します。この例では、アナログピン0 にリンクしています。 。
LiPolyバッテリーの電圧は約 4.25V から変化します 約 3.7V まで完全に充電されたとき 排出されたとき。 ADCは 0Vから5V の電圧範囲を変換します 0〜1023 の整数範囲に 、 analogRead()を呼び出すことでこの値にアクセスします 。
このコードスニペットは、これを行う方法と、最小および最大のバッテリー電圧を使用して相対的なバッテリー状態を計算する方法を示しています。
float maxVoltage =4.25; float minVoltage =3.75; arduinoPowerVoltage =float(analogRead(arduinoPowerVoltagePin))/ 1024.0 * 5.0; floatfractionalVoltage =(arduinoPowerVoltage-minVoltage)/(maxVoltage-minVoltage);
LiPolyバッテリーは、放電時に電圧を直線的に失うことはありませんが、十分に近い 分数電圧を使用してバッテリーの残量を見積もることができます。
したがって、バッテリー電圧を取得して残りの寿命を見積もることはできますが、それをユーザーに伝える方法が必要です。英数字ディスプレイを使用できます。次のセクションでは、これをSDカード上のファイルに記録する方法を示します。しかし、それらは多くのプロジェクトにとってやり過ぎになる可能性があります。
より簡単なアプローチは、RGBを使用し、バッテリーの寿命を反映するように色を変更することです。例:
- 緑-50%以上
- 黄色-20%から50%
- 赤-20%未満-充電時間
これを実装するには、RGB Ledと2つの1K抵抗を回路に追加し、 arduinoPowerMonitor()にコードを追加するだけです。 。
RGB LEDは通常、共通アノードを使用します したがって、この回路は次のように機能します:
<図>注: 実際には、LEDには3.3V電源を使用しています。
注: 後で示すように、私にはわからない理由で、測定された電圧に大きな「振動」が生じる可能性があります。バッテリーがLEDの色が変化する値のいずれかに近い場合、2つの状態の間でバッテリーが前後に切り替わるのを見ることができます-非常に迷惑です。手っ取り早い解決策は、 0.1uFコンデンサを配置することです。 アナログピンA0 の間 およびグラウンド 。
<図>このブレッドボードのレイアウトには、バッテリーやArduinoは表示されていません。スケッチarduino_2_voltage_ledは、電源オン/電源オフとLED電圧表示を実装しています。コードは、緑または赤のピンを低に設定します LEDをオンにして高い オフにします。
注: シリアルへの呼び出しのコメントを解除することで、測定された電圧を確認したり、デバッグしたりできます。 コード内でシリアルモニターを実行します IDEで。実際のバッテリー電圧と端数のバッテリー電圧が表示されます。何らかの理由で、最初の呼び出しが正しくありません。
SDカードへのバッテリー電圧の記録
電圧のLEDインジケーターは、詳細をあまり気にせず、いつバッテリーを再充電する必要があるかを知りたいだけの、バッテリー駆動のポータブルArduinoシステムに役立ちます。
ただし、スタンドアロンシステムでセンサーを監視している場合は、たとえば、バッテリー電圧をセンサーデータと一緒に記録して、時間の経過に伴う電力消費量をより正確に把握できるようにすることができます。
プロジェクトのこの部分では、 CSV にデータを記録できるAdafruitData LoggingShieldを使用しています。 添付のSDカードのフォーマットファイルとタイムスタンプ。 Adafruitガイドでは、 SD および RTC ライブラリは機能するので、プロジェクトのこの部分に取り組む前に、それを理解する必要があります。
回路は前の例から変更されていません。LEDはバッテリーの状態を即座にフィードバックするため、LEDを保持する価値がありますが、これは必須ではありません。
カードにデータを記録しているため、シャットダウンメッセージを記録することが重要です。これにより、シャットダウンが意図的なものであったかどうか、またはシステムに何らかのエラーが発生したかどうかを判断できます。
さらに、電圧を監視しているため、電圧が最小レベルを下回ったことを確認して、システムを安全にシャットダウンできます。繰り返しになりますが、シャットダウンの直前にそれに関するメッセージをログに記録できます。
このためのスケッチはarduino_3_voltage_loggingにあります。これには、適切にフォーマットされたタイムスタンプ文字列などを生成するためのいくつかのユーティリティルーチンが含まれ、SDカードを挿入するのを忘れた場合に赤いLEDを点滅させるハックが含まれます。これは私がいつも行っています。
Arduino Uno、データロギングシールド、PowerBoostシールド、ブレッドボードのスタック全体は次のようになります。
<図>
電圧データ
これは、時間の経過に伴うバッテリー電圧のプロットであり、約20時間にわたって徐々に低下します。減少は真に直線的ではありませんが、残りの電力を見積もる目的では、十分に近いです。
<図>前述したように、アナログピンA0 の間に0.1uFのコンデンサを追加すると非常に役立ちます。 およびグラウンド 。このサンプルでは、紫色の線は、青色の元のコンデンサと比較したコンデンサの影響を示しています。
<図>
SDカードへの環境データの記録
最後に、プロジェクトにもう1つ追加します。私が念頭に置いているプロジェクトの1つは、庭用のスタンドアロンの環境モニターです。温度、土壌水分などです。
Arduinoなどは、しばらく放置しておく密閉箱に入れます。バッテリーがなくなるだけでなく、ケース内に湿気が入らないこと、およびシステムに損傷を与える可能性のある極端な温度が発生していないことを確認したいと思います。温度と湿度を測定するための安価で簡単な方法は、DHT22センサーです。詳細については、Adafruitのチュートリアルをご覧ください。
サンプルコードでは、デジタルピン5 を使用しています ピン2の代わりに、電源オフボタンの割り込みにすでに使用しているので。
このためのコードはarduino_4_voltage_temp_humidity_loggingにあります。ブレッドボードでこれを機能させたら、これをAdafruit ProtoShieldに配線しました。 DHT22センサーはかなりかさばりますが、安価です。他の選択肢については、Adafruit、Sparkfunなどの他のブレイクアウトボードをご覧ください。
Arduinoプロジェクトの節電
私のプロジェクトの次の段階は、消費電力を削減し、バッテリーの寿命を延ばすことです。
このための私の出発点は、TonyDiColaによる低電力データロギングに関する優れたAdafruitチュートリアルです。
コード
Github
https://github.com/craic/arduino_powerhttps://github.com/craic/arduino_powerGithub
https://github.com/NeonHorizon/lipopihttps://github.com/NeonHorizon/lipopiGithub
https://github.com/craic/pi_powerhttps://github.com/craic/pi_power製造プロセス