よろしくお願いいたします。
M5stackを用いて自動車のバッテリー電圧を計測するコードを書いていますが、思ったように動作してくれなくて困っています。
回路は分圧回路を構成しており、ハードウェアに問題はなさそうです。
分圧回路の構成は
Vcc(12v~16v)→ 1k2Ω → Vout → 300Ω → GND
です。
ソフトウェアはいくつかのパターンのコードを試してみましたので下記に記します。
C言語
1#include <M5Stack.h> 2#include <M5StackUpdater.h> 3#include "BluetoothSerial.h" 4 5BluetoothSerial SerialBT; 6 7const int ADCPin = 36; 8const float VCC = 3.3; 9const int ADC = 4096; 10const int R1 = 1200; 11const int R2 = 300; 12 13float ADCVolF = 0; 14float ADCRaw = 0; 15 16 17void setup() { 18 // put your setup code here, to run once: 19 M5.begin(); 20 M5.Power.begin(); 21 Wire.begin(); 22 Serial.begin(9600); 23 SerialBT.begin("M5Stack"); 24 25 pinMode(ADCPin, INPUT); 26 27 M5.Lcd.setTextColor(BLACK); 28 M5.Lcd.setTextSize(3); 29 30} 31 32void loop() { 33 M5.Lcd.fillScreen(WHITE); 34 M5.Lcd.setCursor(0,0); 35 36 ///////ADC入力値を補正/////// 37 ADCRaw = analogRead(ADCPin); 38 ADCVolF = ADCRaw * (VCC/ADC)/(R2*(R2+R1)); 39 40 M5.Lcd.printf("%2.2f", ADCVolF); 41 M5.Lcd.println("mV"); 42 43 M5.Lcd.println(ADCRaw); 44 delay(2500); 45 46 // put your main code here, to run repeatedly: 47}
以上のコードを実行すると、LCD画面には
0.00mv(固定。一切変動なし)
3200(おおよそ3000~3300の間で変動が見られます)
と、表示されます。
実現したいこととしては、Lcd画面とシリアル通信先のロガー(teratarmなど。使い方については大体理解しています)に現在の電圧をVで上位2桁、小数点3桁で表示したいです。
ほかにもコードを変更してトライ&エラーしたところ、以下のような結果になりました。
■変更行
以下のコードを二段目の数値に置き換え
C言語
1 ADCVolF = ADCRaw * (VCC/ADC)/(R2*(R2+R1));
置き換え後
C言語
1 ADCVolF = ADCRaw * 2.23609
これは上段の置き換え前のコードで分圧回路の電圧を復号している計算式を手計算して代入しています。
この結果、LCDの電圧値の値が
781400.0123mV(観測写真を撮り損ねましたが、こんな不明な桁数で表示されました)
というようになりました。
久々のコーディングで四苦八苦といったところです。
長々と書いてしまい申し訳ありません。
ご回答御指南よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。