반응형
예전에 올라온 아두이노 프로미니 슬립모드에 관한 이야기다.
사실 올라 오자마자 슬립모드에 의한 전력소모량, 전류량을 측정하고 싶었다.
나중에 이야기 하겠지만, 첫번째 시도는 실패하고 다시 할라고 했는데,
여차 여차 하다가 해가 바뀌는 결과를 가져 왔다.
일단 이전 코드의 슬립모드에 대해서 알아 보자.
이전 코드에서는 버턴을 누르면 슬림모드로 들어가는 시간이 연장되어 슬립모드에 들어 가지 않는다.
그래서 아무것도 누르지 않으면 몇초후에 슬립모드로 들어간다.
그리고 슬립모드를 깨우기 위해서 인트럽트 0번을 사용한다.
사실 인터럽트 0번은 2번핀에 고정이기 때문에 굳이 2번핀에 대한 설정은 필요 없다.
그래서 소스코드상에 빠져도 되는코드가 일부 보이기는 한다.
그리고 테스트해 보면 알겠지만. 슬립모드에 들어 간다고 기존의 핀에서 출력하거 읽고 있는것을 멈추지는 않는다.
전력소모를 줄이기 위해서는 사용자가 모두 정지 시켜야 한다.
물론 반대로 작동시켜야 하는것도 필요한것으로 판단된다.
본인의 목적은 원본소스의 불필요한 부분을 약간 수정하고 몇초후에 무조건 슬립모드로 들어가는 코드를 만들것이다.
원하는것은 아두이노 우노가 슬립모드에서 얼마의 전력을 절약할수 있는지 알아 보는것이기 때문이다.
추가로 LED4개도 추가 했다. 작동유무와 LED에 대한 전력 소모를 측정하기 위해서 이다.
#include <avr/sleep.h>
//#define wakeUpPin 2//불필요
#define doPin 8
#define save_time 20000 //사용자 조작이 몇초간 없을때 기준. 즉 5초간 아무 조작이 없다면
long to_sleeptime=0; //슬립모드로 전환할 시간 저장
void setup()
{
Serial.begin(9800);//sets the baud rate
//pinMode(wakeUpPin, INPUT_PULLUP); // 불필요
for(int i=0; i <4;i++) pinMode(doPin+i, OUTPUT);
to_sleeptime = millis() + save_time; //현재 시간으로부터 몇초 뒤 슬립으로 갈지 준비
}
void loop()
{
if(millis()>to_sleeptime)
{
// 아무 조작이 몇 초간 없어서 슬립으로 전환
goToSleep();
}
doSomething();
}
void doSomething()
{
int counttime= (to_sleeptime -millis())/1000;
Serial.print("next time ");
Serial.println(counttime);
for(int i=0; i <4;i++) digitalWrite(doPin+i, HIGH);
delay(500);
}
void goToSleep()
{
//for(int i=0; i <4;i++) digitalWrite(doPin+i, LOW);
sleep_enable();
attachInterrupt(0, wakeUp, RISING); // LOW, HIGH, RISING, FALLING, CHANGE
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
cli();
byte oldADC = ADCSRA; // save the ADC Control and Status Register A
ADCSRA = 0; // disable the ADC
sleep_bod_disable(); //168이면 이대로두고 328p이면 주석을 푼다
sei();
sleep_cpu(); // sleep now... z z z z z
sleep_disable(); // wake up here
detachInterrupt(0);
ADCSRA = oldADC; // restore ADCSRA
}
void wakeUp()
{
to_sleeptime = millis() + save_time; //깨어났다. 다시 슬립 전환 시간 갱신
}
'아두이노' 카테고리의 다른 글
아두이노 우노 슬립모드 #2 (0) | 2021.01.24 |
---|---|
아두이노와 한글 -#12 (0) | 2020.11.15 |
아두이노와 한글 -#10 (0) | 2020.10.31 |
아두이노와 한글 -#9 (0) | 2020.10.31 |
아두이노와 한글 -#8 (0) | 2020.10.26 |
댓글