コンテンツにスキップ
ショップ

バッテリ電圧読み取り

CR2032コイン電池リーフに搭載されたADコンバータを使って電池の電圧を読み取りましょう。

このサンプルはAA BATリーフや、2V~4.5Vリーフなどの電池リーフでも動作します。

以下のリーフを使用します

TypeNameQ’ty
AZ62Connector Cover1
AZ01USB1
AP03STM32 MCU1
AV01CR20321
CR2032 coin cell battery1
M2*10mm screw2

CR2032

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);
}

Battery_Voltage.ino

Arduino IDEのシリアルモニタを開き、ボーレートを115200bpsとすると、電池の電圧が表示されます。

  1. プログラムは、AVR MCUリーフと同じです。