Re: 스마트팜부화기 2차

Re: 스마트팜부화기 2차

Makerist 1 1623

#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;
  }
}

1 Comments
Makerist 2024.04.06 02:54  
릴레이 제어가 불안정함..