バッテリ電圧読み取り
CR2032コイン電池リーフに搭載されたADコンバータを使って電池の電圧を読み取りましょう。
このサンプルはAA BATリーフや、2V~4.5Vリーフなどの電池リーフでも動作します。
使用するリーフ
Section titled “使用するリーフ”以下のリーフを使用します
| 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 |
リーフの組み立て
Section titled “リーフの組み立て”
ソースコード
Section titled “ソースコード”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とすると、電池の電圧が表示されます。

Footnotes
Section titled “Footnotes”-
プログラムは、AVR MCUリーフと同じです。 ↩