DHT22+Relay를 이용한 온습도측정 및 전원제어
Makerist
예제&실습
1
1659
2024.05.19 07:31
이 코드는 이제 8시간마다 릴레이의 상태를 변경하며, 온도와 습도와 함께 릴레이 상태를 시리얼 모니터에 출력하도록 합니다.
전원제어는 릴레이에서 직접 관리하므로 ac또는 dc용엑츄에이터를 사용하세요
상수 및 변수 설정
previousMillis: 이전 시간을 저장
interval: 8시간을 밀리초 단위로 변환한 값. 여기에 UL 접미사를 사용하여 상수가 unsigned long 타입임을 명시.
relayState: 릴레이의 현재 상태를 저장.
setup() 함수
시리얼 통신을 시작하고 DHT22 센서를 초기화
릴레이 핀을 출력 모드로 설정하고 초기 상태를 꺼짐으로 설정.
loop() 함수
millis()를 사용해 경과 시간을 계산
DHT22 센서 값을 측정
릴레이 상태를 시리얼 모니터에 출력
온도와 습도 값을 시리얼 모니터에 출력
만약 센서 값을 읽을 수 없다면 에러 메시지를 출력
경과 시간이 8시간 이상이면 relayState를 토글하고 릴레이를 켜거나 끔. 또한, 릴레이 상태 변경 시 메시지를 시리얼 모니터에 출력
2초 대기 (delay(2000)). 온도센서 읽기 간격
#include <DHT.h> #define DHTPIN 2 // DHT22 데이터 핀 #define DHTTYPE DHT22 // DHT 타입 #define RELAYPIN 3 // 릴레이 모듈 핀 DHT dht(DHTPIN, DHTTYPE); unsigned long previousMillis = 0; const unsigned long interval = 8UL * 60UL * 60UL * 1000UL; // 8시간(밀리초 단위) bool relayState = false; // 릴레이 상태 (true: 켜짐, false: 꺼짐) void setup() { Serial.begin(9600); dht.begin(); pinMode(RELAYPIN, OUTPUT); digitalWrite(RELAYPIN, LOW); // 처음에는 릴레이를 끈 상태로 설정 } void loop() { unsigned long currentMillis = millis(); // DHT22 센서 값 읽기 float h = dht.readHumidity(); float t = dht.readTemperature(); // 릴레이 상태 출력 Serial.print("릴레이 상태: "); Serial.print(relayState ? "켜짐" : "꺼짐"); Serial.print("t"); // 온습도 값 출력 if (isnan(h) isnan(t)) { Serial.println("센서에서 데이터를 읽을 수 없습니다."); } else { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); } // 경과 시간이 8시간(밀리초) 이상일 때마다 릴레이 상태 변경 if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; relayState = !relayState; // 릴레이 상태 토글 digitalWrite(RELAYPIN, relayState ? HIGH : LOW); // 릴레이 상태 적용 Serial.println(relayState ? "릴레이가 켜졌습니다." : "릴레이가 꺼졌습니다."); } delay(2000); // 2초 대기 (센서 읽기 간격) }