[아두이노] ESP32-XBee-초음파 센서 배터리 지속기간
목표
초음파 센서에서 측정한 값을 지그비 통신을 통해 메인으로 전송하는 리모트센서를 1.2V-2450 NiMH 충전건전지 6개로 최대한 버티게 만들기
테스트 소스
#include "WiFi.h"
#include <xbee.h>
int trigPin = 13;
int echoPin = 12;
XBee xbee = XBee();
long previousMillis1=0;
long interval1=1000;
uint8_t payload [] = { '0' , '0' , '0' , '0' };
uint16_t addr = 0x0000;
ZBTxRequest zbTx = ZBTxRequest(addr, payload, sizeof(payload));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();
ZBRxResponse rx = ZBRxResponse();
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
btStop();
WiFi.mode(WIFI_OFF);
xbee.setSerial(Serial);
}
void loop() {
XbeeRx();
// getData1();
}
void getData1() {
int distance=myTimerEvent();
payload[0] = 'S';
payload[1] = '1';
payload[2] = distance/250;
payload[3] = distance%250;
Serial.println(distance);
Serial.println(payload[2]);
Serial.println(payload[3]);
Serial.println("cm");
xbee.send(zbTx);
}
void XbeeRx() {
xbee.readPacket(100);
if (xbee.getResponse().isAvailable()) {
// Serial.println(xbee.getResponse().getApiId());
int apiid = xbee.getResponse().getApiId();
Serial.print("apiid");
Serial.println(apiid);
if (apiid == ZB_RX_RESPONSE || apiid == 145 ) { //|| apiid == 139
xbee.getResponse().getZBRxResponse(rx);
Serial.println("WOW1");
byte sample[10];
for (int i = 0; i < 10; i++) {
sample[i] = rx.getData(i);
}
if(sample[6] == 0x53 && sample[7] == 0x31) { // 6,7번 글자가 'S1'(코디네이터에서 보낸)이면
Serial.println("WOW2");
getData1();
}
}
} else if (xbee.getResponse().isError()) {
Serial.println("Error reading packet. Error code: ");
Serial.println(xbee.getResponse().getErrorCode());
}
}
int myTimerEvent()
{
// You can send any value at any time.
// Please don't send more that 10 values per second.
long duration, distance;
// int ;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 29 / 2;
return distance;
}
측정 결과
- 8:00부터 동작 시작, 중간에 2차례 초음파 센서로부터 센서 정보를 수신하는 것이 중단되어, 원격 리셋을 실행했음. 센서 정보를 수신하는 것이 왜 중단되는지에 대한 이유는 아직 밝혀지지 않음
- 전압은 그래프(황색선)와 같은 수준으로 떨어지고, 06:00경 전압이 급격하게 떨어지면서 동작이 중단되었고, 대략 22시간 지속되는 것으로 확인
향후 체크할 점
- ESP32의 블루투스와 Wifi 기능을 끄고( btStop(); WiFi.mode(WIFI_OFF);) 다시 테스트 돌입
- 그 후 Light Sleep도 테스트 예정
- 최대 1달 적어도 2주 이상 버텨야 하는데 건전지로 목표치를 달성할 수 없다고 판단되는 경우 대용량 외장배터리가 백업해야 하는데 비용이 상승하는 문제가 있음
참고한 자료
</xbee.h