[스마트홈] 리튬 이온 배터리 전압 측정하기 (분압 저항 & 마이크로파이썬)


리튬 이온 배터리는 완충 시 약 4.2V, 방전 시 약 3.0V~3.2V 사이의 전압을 가집니다. 하지만 ESP32-C3의 ADC 입력 전압은 보통 0V~2.5V(내부 설정에 따라 다름) 정도로 제한되어 있어, 배터리 전압을 직접 연결하면 MCU가 손상될 수 있습니다.

이때 가장 간단하고 효과적인 해결책이 바로 분압 저항을 사용하는 방법입니다.

1. 하드웨어 구성: 분압 저항(Voltage Divider) 원리

100kΩ 저항 두 개를 직렬로 연결하면 전압이 정확히 **절반(1/2)**으로 줄어듭니다. 배터리 전압이 4.2V일 때 ADC 핀에는 2.1V가 입력되므로 ESP32-C3에서 안전하게 읽을 수 있습니다.

  • 준비물: 100kΩ 저항 2개, ESP32-C3, 리튬 이온 배터리
  • 회로 연결:
    1. 배터리 양극(+) → 첫 번째 100kΩ 저항 시작점 연결
    2. 두 저항 사이의 중간 지점 → ESP32-C3의 ADC 핀(예: GPIO 0) 연결
    3. 두 번째 100kΩ 저항 끝점 → 배터리 음극(-) 및 ESP32-C3 GND 공통 연결

2. 마이크로파이썬(MicroPython) 구현 코드

ESP32-C3에서 ADC 값을 읽어 실제 배터리 전압으로 환산하는 코드입니다.

Python “battery.py”

from machine import ADC, Pin
import time

adc = ADC(Pin(0))
adc.atten(ADC.ATTN_11DB)  

def get_voltage():
    raw_value = adc.read()    
    measured_v = raw_value * (3.3 / 4095)    
    real_v = measured_v * 2    
    return real_v
    
def test():
    while True:
        voltage = get_voltage()
        print("Battery Voltage: {:.2f} V".format(voltage))
        if voltage < 3.3:
            print("Warning: Low Battery!")
        time.sleep(1)

if __name__ == "__main__":
    test()


3. 더 정확한 측정을 위한 팁

  • 저항 오차: 100kΩ 저항이라도 미세한 오차가 있으므로, 멀티미터로 실제 배터리 전압을 재보고 코드의 2 대신 2.05와 같이 미세하게 조정(Calibration)하면 더 정확합니다.
  • 전력 소모: 상시 구동 기기라면 100kΩ 이상의 높은 저항을 사용하거나, 측정할 때만 회로를 연결하는 트랜지스터 스위치를 추가하는 것이 좋습니다.
  • 노이즈 제거: adc.read() 값을 여러 번 읽어 평균을 내면 값이 훨씬 안정적으로 출력됩니다.

4. 맺음말

전원을 직접 연결하기 힘든 위치에 온습도계를 둘 때는 배터리를 쓰게 되죠. 이때 배터리 전압을 실시간으로 체크해주면 정말 편리해요. ‘배터리가 다 됐어요!’라고 기기가 스스로 알려줄 수 있도록 이번 강좌의 ADC 측정 회로를 꼭 적용해 보시기 바랍니다.


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다