[Arduino] 짧은 간격에서 deep sleep의 효과
1초간에 2회, 400[msec]정도의 deep sleep에서는 오히려 재기동시의 오버헤드로 배터리 소비가 심한 것이 아닐까 생각해, 계측해 보기로 했습니다.
우선, 전압 변화를 검지하면 업하는 카운터를 작성했습니다. LCD 라이브러리는 생략합니다.
counter.cpp
#include <Arduino.h>
#include "AQM1602LCD.h"
AQM1602LCD* pLcd;
long cnt=0;
int previous=LOW;
void cntUp(){
cnt++;
pLcd->SetCursor(0,0);
pLcd->WriteString(String(cnt));
delay(10);
}
void setup() {
Serial.begin(9600);
Serial.println("start");
Wire.begin();
pLcd = new AQM1602LCD();
// put your setup code here, to run once:
pLcd->SetCursor(0,0);
pLcd->WriteString("0 ");
pinMode(2, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int val = digitalRead(2);
if(val != previous){
Serial.println("chg");
if(val==LOW)
cntUp();
previous = val;
delay(10); // チャタリング防止用
}
}
이것을 다른 Arduino에서 시작하고,
지난번 의 deep sleep L치카의
LED 다리와 연결하여 빛나는 횟수를 계산합니다.
전원으로는 3.7[V] 300[mAh]의 리포 배터리를 사용했습니다.
deep_sleep_main.cpp
#include <Arduino.h>
RTC_DATA_ATTR bool bootCounter = false;
void setup() {
pinMode(4,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(115200);
Serial.println("ON");
digitalWrite((bootCounter = !bootCounter)?13:4,HIGH);
delay(100);
}
void loop() {
esp_sleep_enable_timer_wakeup(400 * 1000); // wakeup every 0.4secs
esp_deep_sleep_start();
}
빛난 횟수는 64513회, 동작 시간으로 17시간 55분 13초였습니다.
다음에 deep sleep를 사용하지 않고 같은 동작을 실시하는 프로그램을 준비해, 마찬가지로 카운트했습니다.
delay_main.cpp
#include <Arduino.h>
void setup() {
pinMode(4,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("ON");
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(400);
Serial.println("ON");
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(400);
}
빛난 횟수는 29666회, 동작 시간으로 8시간 14분 26초였습니다.
시도 횟수는 각각 1회만이지만, 배 이상의 열기가 나왔기 때문에, 단시간에의 빈번한 deep sleep도 효과는 있다고 봐 좋을 것 같습니다.
Reference
이 문제에 관하여([Arduino] 짧은 간격에서 deep sleep의 효과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ELIXIR/items/a38337ea83ddc318e8ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)