バッテリ電圧読み取り
概要
CR2032コイン電池リーフに搭載されたADコンバータを使って電池の電圧を読み取りましょう。
このサンプルはAA BATリーフや、2V~4.5Vリーフなどの電池リーフでも動作します。
使用するリーフ
以下のリーフを使用します
Type | Name | Q’ty |
---|---|---|
AZ62 | Connector Cover | 1 |
AZ01 | USB | 1 |
AP03 | STM32 MCU | 1 |
AV01 | CR2032 | 1 |
CR2032 coin cell battery | 1 | |
M2*10mm screw | 2 |
リーフの組み立て
ソースコード
Arduino IDEで下記のプログラム1がを作成しましょう。
//=====================================================================
// Battery Voltage
//
// (c) 2021 LEAFONY SYSTEMS Co., Ltd
// Released under the MIT license
// https://opensource.org/licenses/MIT
//
// Rev.00 2021/04/01 First release
//=====================================================================
#include <Wire.h>
const int BATT_ADC_ADDR = 0x50;
void setup() {
// initialize serial communication at 115200 second per second:
Serial.begin(115200);
// initialize I2C communication at 100kHz:
Wire.begin();
delay(10);
}
void loop(){
// read ADC registers:
Wire.beginTransmission(BATT_ADC_ADDR);
Wire.write(0x00);
Wire.endTransmission(false);
Wire.requestFrom(BATT_ADC_ADDR,2);
uint8_t adcVal1 = Wire.read();
uint8_t adcVal2 = Wire.read();
// when ADC is not connected, read values are 0xFF:
if (adcVal1 == 0xff && adcVal2 == 0xff) {
adcVal1 = adcVal2 = 0;
}
// voltage mV = adcVal * Vref(3.3V) / resolution(8bit) * Vdiv(2)
double tempMillivolt = ((double)((adcVal1 << 4) | (adcVal2 >> 4)) * 3300 * 2) / 256;
float dataBatt = (float)(tempMillivolt / 1000);
Serial.println("Batt[V] = " + String(dataBatt));
delay(1000);
}
実行結果
Arduino IDEのシリアルモニタを開き、ボーレートを115200bpsとすると、電池の電圧が表示されます。
-
プログラムは、AVR MCUリーフと同じです。 ↩︎
最終更新 June 30, 2021