Re: 스마트팜부화기 2차
Makerist
예제&실습
1
1623
2024.04.06 02:51
#include <DHT.h> #define DHTPIN 2 // DHT11 센서가 연결된 핀 #define DHTTYPE DHT11 // DHT 11 모델 사용 #define HEATER_PIN 3 // 히터 제어를 위한 릴레이 연결 핀 #define FAN_PIN 4 // 팬 제어를 위한 릴레이 연결 핀 #define HUMIDIFIER_PIN 5 // 가습기 제어를 위한 릴레이 연결 핀 #define HEATER_CHANNEL 1 // 히터 제어를 위한 릴레이 채널 #define FAN_CHANNEL 2 // 팬 제어를 위한 릴레이 채널 #define HUMIDIFIER_CHANNEL 3 // 가습기 제어를 위한 릴레이 채널 #define TEMP_LOWER_THRESHOLD_HEATER 0 // 히터를 켜는 온도 임계값 #define TEMP_UPPER_THRESHOLD_HEATER 37 // 히터를 끄는 온도 임계값 #define TEMP_LOWER_THRESHOLD_FAN 37 // 팬을 끄는 온도 임계값 #define TEMP_UPPER_THRESHOLD_FAN 39 // 팬을 켜는 온도 임계값 #define HUMIDIFIER_THRESHOLD_LOW 60 // 가습기를 켜는 습도 임계값 #define HUMIDIFIER_THRESHOLD_HIGH 90 // 가습기를 끄는 습도 임계값 DHT dht(DHTPIN, DHTTYPE); bool fanState = false; // 팬 상태 (켜짐/꺼짐) bool humidifierState = false; // 가습기 상태 (켜짐/꺼짐) void setup() { Serial.begin(9600); pinMode(HEATER_PIN, OUTPUT); pinMode(FAN_PIN, OUTPUT); pinMode(HUMIDIFIER_PIN, OUTPUT); digitalWrite(HEATER_PIN, LOW); digitalWrite(FAN_PIN, LOW); digitalWrite(HUMIDIFIER_PIN, LOW); dht.begin(); } void loop() { delay(2000); float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); if (isnan(temperature) || isnan(humidity)) { Serial.println("Failed to read temperature or humidity from DHT sensor!"); return; } Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %"); // 온도가 히터를 켜는 임계값 범위 내에 있는지 확인 if (temperature <= TEMP_UPPER_THRESHOLD_HEATER) { digitalWrite(HEATER_PIN, HIGH); // 히터를 켬 } else if (temperature >= TEMP_LOWER_THRESHOLD_HEATER && temperature <= TEMP_UPPER_THRESHOLD_HEATER) { // 히터를 1초마다 꺼지고 켜지게 함 digitalWrite(HEATER_PIN, !digitalRead(HEATER_PIN)); delay(1000); } else if (temperature >= TEMP_UPPER_THRESHOLD_HEATER) { digitalWrite(HEATER_PIN, LOW); // 히터를 끔 } // 온도가 팬을 켜는 임계값 범위 내에 있는지 확인 if (temperature >= TEMP_UPPER_THRESHOLD_FAN && !fanState) { digitalWrite(FAN_PIN, HIGH); // 팬을 켬 fanState = true; } else if (temperature <= TEMP_LOWER_THRESHOLD_FAN && fanState) { digitalWrite(FAN_PIN, LOW); // 팬을 끔 fanState = false; } // 습도가 가습기를 켜는 임계값 범위 내에 있는지 확인 if (humidity <= HUMIDIFIER_THRESHOLD_LOW && !humidifierState) { digitalWrite(HUMIDIFIER_PIN, HIGH); // 가습기를 켬 humidifierState = true; } else if (humidity >= HUMIDIFIER_THRESHOLD_HIGH && humidifierState) { // 가습기를 2초마다 꺼졌다가 켜지게 함 digitalWrite(HUMIDIFIER_PIN, !digitalRead(HUMIDIFIER_PIN)); delay(2000); } else if (humidity >= HUMIDIFIER_THRESHOLD_LOW) { digitalWrite(HUMIDIFIER_PIN, LOW); // 가습기를 끔 humidifierState = false; } }