ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • IoT 발아기(4) - 상추 모종 발아, 시험 가동
    Projects/Arduino 2020. 1. 22. 11:16

    상추 씨를 다이소에서 구매했다.

     

    배양토도 같이 있어서 발아 시킨 다음에 옮겨심을 수 있다.

    발아에 적합한 온도는 20~25C 라고 한다. 그래서 일단 발아기 내부 온도와 습도만 컨트롤 할 수 있도록 세팅해놨다.

     

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include "DM_G_I2C.h"
    #include "DHT.h"
    //#include "MQ135.h"

    #include "Time.h"
    #include "TimeLib.h"

    #include "time.h"
    #define DHTPIN 2        // SDA 핀의 설정
    #define DHTTYPE DHT22   // DHT22 (AM2302) 센서종류 설정

    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal_I2C lcd(0x27,20,4);

    #define ANALOGPIN A0    //  Define Analog PIN on Arduino Board
    #define RZERO 206.85    //  Define RZERO Calibration Value
    //MQ135 gasSensor = MQ135(ANALOGPIN);

    #define HEAT 13
    #define FAN 12
    #define MOIST 11
    #define LEDPIN 10


    int fan_turn = 0;

    void setup() {

    Wire.begin();
    dht.begin();

    lcd.init();
    lcd.backlight();    
    lcd.clear();     
    G_I2C_Scanner();

    pinMode(HEAT,OUTPUT);
    pinMode(MOIST,OUTPUT);


    }

    void loop() {
        
     float h = dht.readHumidity();
     float t = dht.readTemperature();
     //float ppm = gasSensor.getPPM();
      
      
      
     
      
      if (isnan(t) || isnan(h)) {
        //값 읽기 실패시 시리얼 모니터 출력
        lcd.setCursor(0,0);
        lcd.println("Failed to read from DHT");
      } else {
        //온도, 습도 표시 시리얼 모니터 출력
        lcd.setCursor(0,0);
        lcd.print("Temp: "); 
        lcd.print(t);
        lcd.print(" C");
        
        lcd.setCursor(0,1);
        lcd.print("RH  : "); 
        lcd.print(h);
        lcd.print(" %");

       
       HeaterControl(t);
       RHControl(h);
      
       
       
      //FanControl(ppm);
       
     
      }
      lcd.setCursor(0,2);
      lcd.print("CO2 : ");
      //lcd.print(ppm);
      lcd.print("  ppm");

      
      delay(2000);


    }


    void HeaterControl(float temp){

      if(temp<20)
      {
        FanControl();
      digitalWrite(HEAT,LOW);
      }
      else if(temp>27) 
      digitalWrite(HEAT,HIGH);
    }


    void FanControl(){

    if(fan_turn == 4){
       digitalWrite(FAN,LOW);
       delay(30*1000);
       digitalWrite(FAN,HIGH);
       fan_turn = 0;
    }
    else
    fan_turn++;

      
    }

    void RHControl(float rh){
      if(rh < 50)
      digitalWrite(MOIST,LOW);
      else if(rh > 70)
      digitalWrite(MOIST,HIGH);
    }

     

    설정하고자하는 온도는 20~25도지만 온도가 금방 낮아지는점때문에 27도까지 올라갔을때 히터가 꺼지도록 설정했다.

     

    습도는 50~70%로 설정했다.

     

    릴레이에 히터와 가습기를 NC(Normal Close)로 되어있어서 아두이노에서 릴레이에 Low 신호를 줘야 작동한다.

     

    직접 찍은 사진이 없어서 가장 흡사한 퍼온 사진으로 대체한다.

    이런식으로 물에 적신 티슈에 씨앗을 둔다. 3일정도 기다리자

     

     

    센서가 2초에 한번씩 값을 받아오기 때문에 히터가 꺼진 직후에도 27보다 조금 더 올라간다. MQ-135(대기질 센서)는 여기서 사용하지 않았다.

     

    2초 주기로 온습도 값을 LCD모니터를 통해 볼 수 있다. 20C에서 27C로 올리는데 대략 2분정도 히터가 작동한다.

     

     

    아두이노 배선. JSN270은 끼워뒀지만 아직 와이파이연결은 없는 상태다.

     

Designed by Tistory.