はじめに
ソーラーパネルとバッテリーで動作するシステムを開発中で、バッテリーの出力電圧を確認する必要がでてきたことからArduino Nanoを使って電圧を測定する仕組みを用意しました。
回路図
ちなみに、ラズパイの電源もバッテリーを使用していることから、接地(GND)の電位をあわせる必要があり、ArduinoのGNDは必ずバッテリーの(ー)に接続されるようにします。
Arduino Nanoは以下のものを使用しています。
Mini USB Arduino Nano V3.0 改造バージョン Arduino Nano V3.0互換ボード ATmega328P搭載 (5個)
Arduinoスケッチ
アナログポート0に接続された電圧を測定し、シリアル通信で出力します。
ここでは、3MΩの抵抗に電圧をかけながら1MΩにかかる電圧を測定していることから、計測される電圧値は全体の1/3となっています。そこで、測定電圧を3倍することで実際の電圧に換算できるよう計算しています。
double value;
char x;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
value = 0.0;
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()) {
x = Serial.read();
if (x == ' ') {
value = analogRead(A0);
value *= 3.0 * 5.0 / 1024;
Serial.println(value);
}
}
}
受信用スクリプト
PySerialを利用するのでインストールされていない場合は以下のコマンドでインストールしておきます。
pip install pyserial
Raspberry Piの場合は以下のコマンドでインストールができます。
sudo apt install -y python-serial
Arduino NanoをUSBで接続した時に追加されるポートを確認します。Macでは「/dev/tty.wchusbserialxxx」となっており、Raspberry Piでは「ttyUSBx」でした。
※「x」は何かの数字
通信用に以下のスクリプトを作成します。
import serial
import time
def main():
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
time.sleep(2)
while 1:
ser.write(b' ')
time.sleep(1)
data = ser.readline()
print(data)
ser.close()
if __name__ == '__main__':
main()
これを以下のコマンドで実行すると...
python voltage.py
13.30
13.29
13.32
13.27
13.37
と表示され、電圧が測定できました(^-^)/
やったね!