Arduinoで電圧を計測してディスプレイに表示
前回のキャラクタ液晶と前々回の電圧計のふたつを組み合わせて、単体で動作する電圧計を作成してみます。
配線図
複雑になりましたがミニブレッドボードで作成してみました。
抵抗を間違えないように気をつけてください。
乾電池の部分がありますが、こちらは測定対象とする電源を示しています。
駆動電源はこれとは別にUSBコネクタから供給する必要があります。
スケッチを作成
#include <LiquidCrystal.h> LiquidCrystal lcd = LiquidCrystal(5, 6, 7, 8, 9, 10, 11); void setup() { // put your setup code here, to run once: lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("POWER MONITOR"); Serial.begin(115200UL); } void loop() { // put your main code here, to run repeatedly: double value = analogRead(A0); value = value * 5; value = value / 1024; value = value / 30; value = value * 130; char msg[17]; char s[17]; sprintf(msg, "%s[V]", dtostrf(value, 13, 2, s)); lcd.setCursor(0, 1); lcd.print(msg); delay(300); }
新しく追加になった箇所があります。
sprintf関数
第二引数で指定した書式で文字列を整形して、第一引数で指定された変数に格納する関数です。一般的なC言語の場合は浮動小数点をセットするために「%f」と書式指定できるのですが、Arduinoでは使うことができません。そこで浮動小数点を文字列に変換する関数を次に紹介します。
dtostrf関数
この関数を使用すると、浮動小数点を文字列に変更することができます。第一引数は変換後の小数点以下を含む桁数です。これを下回る場合は自動的にスペースで埋められます。この場合は必ず13桁になります。単位表示として「[V]」の3桁が加算されて16桁の文字列となり、LCDにピッタリの桁数にしています。
動作結果
テスト用の適当な電源が無かったのでArduinoの3.3V出力の電圧を計測してみました。ほぼ正確な値が表示されています。ソーラーパネルからの給電電圧を表示するという目的は果たせそうです。まだアナログポートは5つも残っているので同時に5箇所の電圧を計測して一覧表示するようなシステムに発展していくことも可能です。