DHT 온습도 센서는 가장 간단하게 사용되는 아두이노 센서이다. 사용법도 간단해서 DHT 라이브러리를 다운받고 data 케이블을 디지털핀에 연결해서 데이터를 받으면 작동한다.
하지만, 데이터 출력값이 2147483647 로 나오면서 작동하지 않는 경우가 있다. 2147483647 은 int 정수 32비트로 나타낼수 있는 최댓값인데 DHT센서로부터 데이터가 정상적으로 수신되지 않을 때 시리얼모니터로 정수값을 출력하면 나타나는 오류이다.
DHT 센서의 오류원인
1. 센서의 종류
DHT 센서는 DHT11과 DHT22가 있는데 아두이노 IDE에서 센서종류를 정의할때 다르게 작성하면 올바른 데이터가 수집되지 않는다.
2. 전원
DHT 센서는 3 - 5.5 혹은 6V 의 전압에서 작동하는데 전원이 부족하거나 연결이 끊겨있으면 정상적인 값이 출력되지 않는다.
3. 데이터 핀 연결
DHT의 데이터 선이 잘못 연결되어 있으면 당연하게 데이터가 불러와지지 않는다.
4. 센서 초기화(?)
아두이노에서는 DHT센서를 일반적으로 연결하면 바로 데이터가 수집되는데 왠지모르지만 esp 8266에서는 DHT센서를 불러오는 작업이 setup 에 있어야한다. void setup() 부분에 dht.begin(); 을 추가해주면 esp 8266에서 데이터를 받아오기 시작한다.
void setup() {
Serial.begin(115200);
dht.begin(); // DHT 센서 작동시키기
}
기타
DHT 센서의 값을 불러오는 dht.readHumidity 혹은 dht.readTemperature를 int 로 정의하면 2147483647 오류가 나타나고 float 로 정의하면 nan 값으로 오류가 출력된다.
#include <DHT.h> // 라이브러리에서 DHT 추가
#define DHTPIN 5 // DHT 센서 데이터선을 디지털핀에 연결
#define DHTTYPE DHT11 // DHT 센서 정의
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin(); // DHT 센서 연결
}
void loop() {
int h = dht.readHumidity(); // DHT 센서에서 습도데이터 읽기
int t = dht.readTemperature(); // DHT 센서에서 온도데이터 읽기
// int 로 값을 정의했을 때 오류가 나면 2147483647 이 출력되고
// float으로 값을 정의하면 오류났을 때 nan 으로 출력된다.
// 데이터가 없을 때 처리하는 방식
// 습도 혹은 온도 데이터가 nan 일때 출력되는 메시지
if (isnan(h) || isnan(t)) {
Serial.println(F("센서와 연결되지 않았습니다"));
return;
}
Serial.print("humidity:");
Serial.println(h); // 습도출력
Serial.print("temperature:");
Serial.println(t); // 온도출력
delay(1000);
}
다른 아두이노 프로젝트
https://kyoungin90.tistory.com/309
참고
https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/
'만들기 > 아두이노' 카테고리의 다른 글
아두이노 DC모터 움직이기( 건전지 전류용량 차이) (0) | 2021.06.26 |
---|---|
[밸런싱로봇] PID 제어 이해하기 (1) (0) | 2021.06.25 |
MPU 6050 센서값 보정하기 ( 90% 이해) (1) | 2021.06.22 |
[로봇] GY-521 MPU6050 I2C 통신 이해하기 (0) | 2021.06.21 |
[로봇] 밸런싱로봇 만들기 (2) (GY-521 MPU6050 ) (0) | 2021.06.20 |