티스토리 뷰

728x90

1. 개요

  

  도어락 프로젝트를 하면서 가장 문제점이 되었던 부분이 전력문제였다. 실질적으로 9V의 사각 전지를 이용시 아두이노 우노와 NFC 모듈 모두 동작시키니 3일간 동작을 하였다. 이후 보드와 모듈을 전원을 분리하여 공급하였지만 항상 동작하는 보드의 전원 공급은 문제점으로 남아 있었다. 그래서 좀더 개선시키기 위한 방법을 한번 찾아보았다.

 

 

2. 물리적으로 보드 사용 전력 줄이기

  

  기본적으로 보드에서 전력을 소비하는 장치는 3가지가 있다.

 

1. ATmega168(ATmega168T) 마이크로컨트롤러

 

2. FT232RL USB UART

 

3. 파워(정전압) 레귤레이터 : 필요이상으로 높은 전압이 공급될 때에도 원하는 전압(3.3V, 5V)으로 일정하게 출력하는 역할을 함 

 

http://donalmorrissey.blogspot.com/2010/04/putting-arduino-diecimila-to-sleep-part.html 

 

위 싸이트에서는 기본 모드로 아두이노 동작시 35mAps를 사용하고 power-down Sleep mode15mAps를 사용한다고 한다. 문제는 실제 ATmega168은 전력을 많이 소모 하지 않고 mode에 관계없이 레귤레이터10mps를 사용한다는 것이다.

 

아래 사진은 아두이노 우노의 레귤레이터이다. 보드에서 전압을 받아 쓰지 않으면 제거하면 좋은데 이상없이 제거하기가 힘들다.


 

 또한 전원 LED에도 저항이 있어 많은 전력을 소모하기 떄문에 제거하면 전력 절약에 도움이 된다.

 

 

3. 코드로 보드 사용 전력 줄이기

  

  Sleep Mode를 제공하는 라이브러리는 이미 많이 제공되고 있다. 그 중 가장 많이 검색되고 있는 "LowPower.h"를 사용해보겠다.

 

아래 주소는 라이브러리를 제공자의 블로그 주소이며 GitHub 주소이다.

 

블로그
http://www.rocketscream.com/blog/2011/07/04/lightweight-low-power-arduino-library/ 

 

GitHub
https://github.com/rocketscream/Low-Power 

 

라이브러리 파일

Low-Power-master.zip


 

슬립모드를 사용하기 위해서는 다시 깨어나게 하는 방법에 대해 고려해야한다. Wake up에도 여러가지 방법이 있다.

 

1. 외부 인터럽트를 통한 Wake Up


2. 내부 타이머를 통한 Wake Up


3. UART를 통한 Wake Up

 

우리가 쉽게 할 수 있는 방법으로는 1번과 2번이라고 나는 생각한다. 1번 같은 경우 결국 인터럽트를 기다려야 하기 때문에 2번보다 소비 전력이 더 많이 든다. 그러나 2번은 타이머에 따라 정해진 시간에만 Wake up을 한다. 따라서 센서 사용 시간, 9시~15시 이렇게 정해져 있다면 시계와 타이머를 이용해서 Wake up을 하면 좋다고 생각한다.

 

나는 버튼을 누름으로써 Wake Up을 하기 위해 1번 방식으로 예제를 구현하였다. 시나리오는 버튼을 누르면 Sleep Mode에서 깨어나 LED에 5초간 불이 들어오는 것이다. 


코드를 보기 전 우리는 보드에 따라 인트럽트 기능을 사용할 수 있는 Pin이 한정적이라는 것을 알아야한다. 아두이노는 pin 2, 3에 인터럽트가 할당되어 있고 이는 인트럽트 번호로 0과 1을 나타낸다. 코드를 보면 const int wakeUpPin = 2;  //pin of interrupt 0 로 되어있고 인터럽트 설정 코드인 attachInterrupt(0, wakeUp, LOW); 에도 pin번호 2가 아닌 0으로 입력된다.

 



코드 내의  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);의 파라메터들은 위 라이브러리 제공자 블로그 주소에서 표를 보면 알 수 있다.

 

마지막으로 ATmega328P는 문제가 없는데 ATmega168에서 업로드 및 컴파일시 문제가 발생할 수도 있다. 이는 sleep.h 파일을 찾아 "|| defined(__AVR_ATmega168__)\"를 추가해야 한다.

 

자세한 설명은 아래 주소로 들어가 확인하고 수정하길 바란다.
https://github.com/rocketscream/Low-Power/issues/14 


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함