2016년 4월 24일 일요일

초딩 아들 등/하교 알리미 - 2탄 (배터리 문제 해결을 위한 공부)

지난번 '기어 S2로 자동차 문열기' 를 했을 때는 배터리가 중요한걸 알면서도 어떻게든 에너지 소모를 줄여 보려고 노력하지 않았는데, 역시 아들이 사용할 거라고 생각하니 마른 빨래 쥐어 짜듯 9V 배터리 만으로 최고로 오래 쓰는 환경을 만들고 싶어졌다.

그동안은 아두이노 우노와 우노 사촌 쉴드를 주로 사용하고 스마트홈 할때는 나노로 좀 줄였었는데 이번에는 Pro Mini 로 최소로 줄였다. 그런데 아두이노가 작아 진다고 해서 배터리 소모가 줄거라는 기대감 만으로는 만족할 수가 없었다. 얼마나 줄어 드는지, 얼마나 더 줄일 수 있는지 확인하려면 좀 더 공부가 필요했다.

그래서 일단 소모 전류를 측정하는 방법을 찾아 봤다.
평생 납땜을 하거나 테스터기를 만질일이 없었는데, 내가 이런걸 할거라고는 정말 생각 못했다.
아직 주문한 Pro Mini 가 도착하지 않아서 우노와 레오날도로 테스트 해 봤다. 설마 이놈들보다 많이 밥을 먹지는 않겠지...

측정 방법은 테스터기의 COM 을 밥 주는 우노 GND 에 연결하고 테스터기 빨간선은 밥먹는 레오날도의 GND 에 연결한다. 그리고 우노의 5V 를 레오날도의 5V 에 넣어주면 끝.
사진은 공부 마지막 단계에서 마른빨래 쥐어짠 상태로 3mA 밖에 소모되지 않는 상태를 찍었다.
공부에 가장 도움이 된 링크는 여기이다.
CLKPR 을 조절해서 소모전류를 줄이는 방법이 잘 설명되어 있고 이곳 에서는 저전력 모드로 sleep 하는 방법이 library 사용방법과 함께 설명 되어 있다.
#include <avr/sleep.h>
#include <RCSwitch.h>
#include "LowPower.h"
int idx = 0;
int i = 0;
RCSwitch mySwitch = RCSwitch();
void loop() {
  CLKPR = 0x80;
  CLKPR = 0x02;
  mySwitch.send(idx++, 24);
  for (i = 0; i < 40; i++)
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
테스트 코드가 하는 일은 RF 433 MHz 송신기로 idx 를 5분마다 한번씩 날린다. 우선 기본 동작을 CLKPR 을 낮추므로 소모 전류를 줄이고, 5분 쉴 동안 sleep 모드로 대기 하므로써 최저 전류로 버텨낸다. 레오날도의 경우 RF 송신 시 15 mA 정도가 사용되고 대기시 3mA 가 소모 되는 식이다.

9V 배터리가 600mAH 정도라고 하고 대충 계산 해 보면,
600 mAH / 3.3 mA = 181.81 H / 24 H = 7.57 일 

음... 5분 혹은 10분마다 1번씩 17 mA 소모되는 것을 무시하더라도 7일이면 배터리가 소모 된다는 얘기인데, 이건 좀 아닌 듯 싶다. 7일에 천원 배터리 사는 금전적인 문제도 있지만, 어느 부모가 1주일에 한번씩 배터리를 갈아 주겠는가...

Pro mini 는 대기전력이 더 낮을까? 생각이 들어 찾아보니 그것도 아니었다. 그렇다고 이대로 포기할 수는 없지 않은가! 그래서 찾은 곳이 이곳. 링크에서는 마른 빨래를 비트는 것도 모자라 태워서 까지 수분을 날리는 작업을 한다. 2가지 작업을 해 주는데 Power LED 를 과감히 날려 주고~ voltage regulator 를 박살 내서 쓸데 없이 낭비되는 전류를 완전히 잡아 버린다.
결과는 대단하다! 3 mA 정도 먹던 것이 30 µA 까지 떨어진다. 링크에서는 27.4 µA 라고 되어 있지만 대충 30 µA 으로 계산해 보면, 

평균 소모 전류
(30 µA * 5분 + 17 mA * 1초) / 5분 + 1초 = 86.3 µA

사용 시간
600 mAH / 86.3 µA = 6952 H / 24 H = 289 일

와우!
이 정도면 해볼만 하겠다. 물론 내가 LED 와 Voltage regulator 를 박살내고 아두이노를 동작 시켰을 때 말이지만 ㅎㅎ. 혹시나 싶어서 2개 주문한 Pro mini 가 살아 남길 기도하면서 오늘은 자야 겠다~


댓글 없음: