DHT22+Relay를 이용한 온습도측정 및 전원제어

DHT22+Relay를 이용한 온습도측정 및 전원제어

Makerist 1 1662

이 코드는 이제 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초 대기 (센서 읽기 간격)
}

1 Comments
Makerist 2024.05.19 08:40  
상수를 정의할 때는 const를 사용하는 것이 좋습니다. 코드의 안전성과 가독성을 높일 수 있으며, 디버깅 및 유지 보수도 더 쉽습니다. #define은 주로 매크로 상수나 조건부 컴파일 등에 사용되며, 특정한 경우에만 사용하는 것이 권장합니다.
Category
반응형 구글광고 등
State
  • 현재 접속자 73 명
  • 오늘 방문자 1,341 명
  • 어제 방문자 3,368 명
  • 최대 방문자 4,586 명
  • 전체 방문자 676,601 명
  • 전체 게시물 26,447 개
  • 전체 댓글수 36 개
  • 전체 회원수 22 명
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand