Arduinoで作る簡単な電圧ロガー
◆まえがき
Arduino を使った簡単な電圧ロガーを紹介します。これは、前の記事のハンディクリーナーの充電器の特性測定でも使っています。
このところ忙しくて記事の更新が停滞しているのですが、顔つなぎを兼ねて小ネタを記事にしておきます。
◆仕組み
Arduino のADコンバーターを使って電圧を測定し、結果をシリアルに流すだけのものです。CPU 内蔵の ADコンバーターなので分解能は10ビットしかありません。
シリアルに流したデーターを TeraTerm などで受信し、ログファイルに記録するような使い方を想定しています。CSV形式で出力するので Excel でそのまま読めます。
◆回路図
入力電圧(IN)をR1,R2で1/3に分圧してA0ピンに入力しています。つまりこの例での最大入力電圧は15Vです。
◆基準電圧について
ADコンバーターのフルスケール (Vref) はソフトで選択しますが、後で示すプログラムでは電源電圧である5Vを使用しています。Vref にCPU内蔵の基準電圧である 1.1V を使う手もありますが、この電圧精度がえらく悪い(確か ±0.1V)ので電源電圧を使った方がマシと判断しました。ここは異論があると思います。
基準電圧に電源電圧の5Vを使う場合、Arduino UNO ではUSBコネクタから来た5Vは電源切り替え回路を経由して供給されるのでほぼそのまま、つまりほぼ5Vになっています。しかし、もしArduino NANOを使うと、USBコネクタからの5V電源はショットキーバリアダイオードを経由して供給されるので、実際の電圧は4.8V程度に下がっているので要注意です。
なお、UNOの互換ボードなどでは前記した電源切り替え回路を省略した物があるので要注意です。ともかく、実際に+5Vピンの電圧を測定して確認しておいた方が良いです。
◆外観
入力の分圧抵抗を接続し、この先に被測定物を接続します。
◆プログラム
// アナログポートの電圧をシリアルに出力 20231104_SimpleVoltageLogger // 2023/11/04 ラジオペンチ #include <MsTimer2.h> // 正確な周期を刻むため、MsTimer2ライブラリを使用 #define K1 0.014648 // 1LSB当たりの電圧 (入力アッテネーター=3倍、5V x 3 / 1024) #define INTERVAL 1.0 // 測定周期(浮動小数点指定も可能) long n = 0; // 行カウンタ float t; // 経過時間(秒) volatile boolean tFlag = false; // 割り込み発生フラグ void setup() { Serial.begin(115200); Serial.println(); Serial.println("Log start"); // 開始メッセージ出力 Serial.println(", No, sec, voltage"); // 列名出力 MsTimer2::set(INTERVAL * 1000, MsTimer2IRQ); // 割込み周期を設定 MsTimer2::start(); // 割込み開始 } void loop() { while (tFlag == false) { // 割り込みフラグが立つまで待機 } tFlag = false; Serial.print(", "); // タイムスタンプとの境界用のデリッミッタを出力 Serial.print(n); Serial.print(", "); // 行番号を出力 n++; t = n * INTERVAL; Serial.print(t, 2); Serial.print(", "); // 経過秒数を出力 Serial.println(analogRead(0)*K1, 3); // 電圧値(下3桁まで)を出力 } void MsTimer2IRQ() { // タイマー割り込み処理 tFlag = true; // フラグを立ててタイムアップしたことを連絡 }
・解説
電圧感度はK1の値で設定
出来るだけ測定周期を正確にするため、MsTimer2 ライブラリの割り込みを使っています。なお、UNOのクロックはセラロックなので確度が悪い点は要注意。
測定周期は INTERVAL の値で設定。浮動小数点で設定可能なので半端な値も設定可能。
出力は行番号、開始からの経過時間(秒)、電圧(V)。
◆出力例
上記は TeraTerm で受信し、タイムスタンプ付のログを記録した例です。
行の先頭にカンマを出力しているので、タイムスタンプとログの文字列が混ざらないで済みます。ちなみに、ここがくっついていると、EXCELで切り離すのに一手間必要になります。
◆まとめ
何てことないプログラムですが、毎回新しく書くのも面倒なので記事にしておきました。ちょっとした記録を取るのに使えば便利だと思いなす。