Arduino

아두이노 저전력 deepsleep 구현하기 - 아직 구현 중...

[혜안] 2022. 3. 19. 22:57
728x90

2022.03.16 - [Arduino] - 간접조명을 만들고 일몰시간에 자동으로 켜지게 할 수 있을까? #1

 

간접조명을 만들고 일몰시간에 자동으로 켜지게 할 수 있을까? #1

오랜만에 버려진 재료들을 가지고 다시 뭔가를 만들어 보려고 한다. 집안 한구석이 어두워서 조명을 설치하고 싶은데, 전원 연결이 어렵고, 매번 껐다 켜기 번거롭다. 재료는, 1. 아두이노 (NodeMCU

viewise.tistory.com

콘센트가 없는 곳에 간접조명을 설치하고,

아두이노를 이용해 일몰시간에 자동으로 조명을 켜는 방법을 고민 중이다.

 

일단, 기존에 Wifi 스마트플러그가 있고, LED 스트링과 간단한 회로가 있으니

켜고 끄는데는 문제가 없다.

그리고 공공데이터포털에서 일몰시간 가져오는 부분도 해결이 되었다.

2022.03.17 - [Raspberry pi] - 공공데이터포털 nodejs로 일출 일몰 시간 가져오기

 

공공데이터포털 nodejs로 일출 일몰 시간 가져오기

일몰시간에 맞춰 자동으로 켜지는 간접조명을 만드는 프로젝트의 일환으로, 일몰시간을 가져오는 방법을 찾아보았다. https://viewise.tistory.com/entry/%EA%B0%84%EC%A0%91%EC%A1%B0%EB%AA%85%EC%9D%84-%EB%A7%8..

viewise.tistory.com

 

남은 문제는 아두이노와 조명이 배터리로 동작해야 한다는 것.

조명 역할을 할 LED 스트링이야 켜지는 시간이 정해져 있고, 

또 켤 수밖에 없으므로 배터리 소모는 감수해야 하고..

배터리 소모를 줄일 수 있는 건 아두이노.

대기전력 문제를 해결해야 한다.

 

여기까지 배경이었고,

그래서 어떻게 해결을 했느냐?

아직 해결을 못했다.

 

NodeMCU ESP 0.9 버전을 사용하고 있고, 

deepsleep 모드가 있어서 구현해봤지만, 30분 이상 슬립이 유지되지 않았다.

코드조각은 아래와 같고,

  String stime = request.substring(s+6, e-1);      
  Serial.println("Deep sleep for " + stime + "sec");
  int ntime = stime.toInt();      
  client.stop();

  delay(10);
  ESP.deepSleep(ntime*1e6);

그냥 파라미터 받아서 deepSleep 메소드에 시간을 넣어주면 되는 간단한 코드이다.

1e6은 1000000 이므로 ntime은 초단위가 된다.

여기에 1800초(30분) 이상의 어떤 값을 주어도 30분만 지나면 그냥 깨어난다.

물론 10초, 600초 등은 정확하게 동작한다.

아두이노의 최대 딥슬립 시간이 30분인가 찾아봤지만 그렇지 않았다.

그리고 deepSleepMax 메소드 호출 시 3시간 이상 유지 되는걸 확인하였다.

안되는 건 아닌데 뭔가 놓치는 부분이 있는 듯...

 

원래 구상은,

1. 라즈베리파이에서 일몰시간을 받아와서,

2. 아두이노에 다음 일몰시간을 파라미터로 넣어 호출하면,

3. 아두이노가 딥슬립모드에 들어갔다가 알아서 일몰시간에 깨어나고,

4. 깨어나자마자 조명을 켜는 시나리오이다.

때문에 deepsleep 시간은 최대 24시간까지 설정이 가능해야 한다.

 

해결이 되면 방법을 포스트하도록 하겠다.

안되면, 우회방법이라도...

 

 

 

 

728x90