[Arduino] 짧은 간격에서 deep sleep의 효과

이전에 깊은 슬립을 사용하여 L 치카을 했는데,
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도 효과는 있다고 봐 좋을 것 같습니다.

좋은 웹페이지 즐겨찾기