電圧計測値をexcel出力する方法

目次

 

はじめに

先日製作した洗濯物 取り込み忘れ防止機器のモバイルバッテリー変更の際に使用した電圧計測構成について記載します。

 

nandechang.hatenadiary.com

nandechang.hatenadiary.com


計測電圧値の記録を行いたいため、下記に記す構成にしました。

 

使用したもの

・電圧計測モジュール:KEYESTUDIO 37 in1センサーキット37センサーモジュール for Arduino Raspberry Piプログラミングプロジェクト用スターターキットに入っていた電圧計測モジュール(メーカー:KEYESTUDIO)
Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換(メーカー:ELEGOO)


電圧計測モジュールについては37個のセンサが入っているKEYESTUDIOのキットの中の物を使用しました。Arduino nanoより安価に手に入るため、ELEGOO製の互換品を使用しています。

全体構成

f:id:nandechang:20220407235635p:plain

電圧計測モジュールは抵抗分圧をしており、測定点の電圧を1/5にしています。Arduino nano互換機内蔵のADコンバータを使用し、電圧計測モジュール出力のアナログ信号からデジタル信号へ変換しています。arduino nano互換機内で電圧計測値へ演算し、pcへ送信します。pc内ではpythonプログラムを用いて、電圧計測値をcsvファイルへ出力するようにしています。

 

回路図

f:id:nandechang:20220408003918j:plain

電圧計測モジュールのs(出力信号線)はArduino nano互換品のアナログピンにを接続します。今回はA0にしました。NCはArduino nano互換品の5vに接続します。-はArduino nano互換品のGNDに接続します。電圧計測モジュールのVCCは測定点の+側に接続します。電圧計測モジュールのGNDは測定点の基準点に接続します。
電圧計測モジュールでは30kΩ、7.5kΩで分圧し、測定点の電圧を1/5にします。Arduino nano互換機にはATmega328Pが実装されており、こちらに内蔵している10bit ADコンバータにより、アナログ信号をデジタル信号へ変換しています。CH340Gでuartからusbへ信号変換しています。


Arduino nano互換品 書き込みプログラムコード

int analogpin=0;     // analog port 0
int val;
float val1;

void setup()
{
    Serial.begin(9600);     //serial speed 9600
}
void loop()
{
    val=analogRead(analogpin); 
    val1=val/1024*25;
    Serial.println(val1);
    delay(1000);
}

 

analogRead(analogpin)により、アナログ入力ピンに入力され、デジタル変換された値を読み取っています。

Arduino nano互換機に実装されているATmega328P内蔵のADコンバータは10bitなので、

1024(=2^10)で割っています。このADコンバータのデータ値1024の時、ADコンバータの入力ピンの電圧は5V であり、電圧計測モジュールは抵抗分圧で測定値を1/5しているので、25(=5×5)を掛けます。

pythonプログラムコード

import sys
import serial
import datetime
import csv

seri = serial.Serial("COM8",9600) #ポート情報

while(1):
    measurevalue =float(seri.readline().decode('utf-8').rstrip('\n'))
    datetime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print(datetime,measurevalue)
    with open('test.csv', 'a') as f:
        print('{},{}'.format(datetime,measurevalue),file=f)

 

float(seri.readline().decode('utf-8').rstrip('\n'))でシリアル通信に入力された値を読み取っています。 datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') はその時の日時を取得しています。最後の2行でcsvへ日時とシリアル通信から読み取った値を出力しています。

 

実機写真

電圧計測部

f:id:nandechang:20220409174637p:plain

モバイルバッテリー 出力電圧計測時

f:id:nandechang:20220409174705p:plain

モバイルバッテリー 出力電圧計測時(計測部拡大)

f:id:nandechang:20220409174743p:plain

 

モバイルバッテリーと洗濯物 取り込み忘れ防止機器のUSBケーブルの間には基板を設けて、ワニ口クリップで測定ポイントを掴めるようにしました。

入出力接続ジャンパー線の部分を電流計に変えて、電流測定もできるようにしています。

 

CSV出力結果

f:id:nandechang:20220409172346p:plain

 

おわりに

電圧計測モジュールで使用している抵抗の誤差、ADコンバータの変換誤差があるため、正確な値を測定する場合はテスターを用いた方が良いかと思います。大まかな電圧を記録したい時は今回の方法であると安価に測定できるかと思います。