본문 바로가기
에코그로우 스마트팜

EcoGrow_4차시 수위 센서 확인 하고 액체펌프 자동화 만들기.

by SwMaker_Jun 2024. 4. 17.
728x90
반응형

1. 기존 코드에서 수위 센서 정의하고 확인하기.

#include "DHT.h"   
#include <LiquidCrystal_I2C.h>  

#define DHTPIN A0               
#define DHTTYPE DHT11           

#define fan 10                  
#define led 23                  
 
DHT dht(DHTPIN, DHTTYPE);       

LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup() {
  Serial.begin(9600);
  dht.begin();                   
  lcd.init();                    
  lcd.backlight();               
  pinMode(fan,OUTPUT);           
  pinMode(led, OUTPUT);          
}
 
void loop() {
  float humidity = dht.readHumidity();      
  float temperature = dht.readTemperature();
 
  if (isnan(humidity) || isnan(temperature) ) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  
  //Serial.print((int)temperature); Serial.print(" *C, ");
  //Serial.print((int)humidity); Serial.println(" %");   
  // 온습도 센서값 주석처리.
  
  String humi = "Humi : ";      
  humi += (String)humidity;
  humi += "%";
 
  String temp = "temp : ";      
  temp += (String)temperature;
  temp += "C";
 
  lcd.setCursor(0, 0);          
  lcd.print(humi);
  lcd.setCursor(0, 1);
  lcd.print(temp);
  
  int cds = analogRead(A3);
  // Serial.print("cds = ");    
  // Serial.println(cds);           
  // CDS 조도센서값 주석처리 
  
  if (cds>880){              
    digitalWrite(led,LOW);
  }
  else{
    digitalWrite(led,HIGH);
  }
  
  digitalWrite(fan,HIGH);    
  
  // 수위센서 확인
  int water = analogRead(A1);
  Serial.print("water = ");      // 수위센서 값 출력    
  Serial.println(water);   
    
}

 

 

수위 센서 아날로그 1번 핀(A1)에 연결

수위 센서 값을 읽어서 변수 water에 저장하고 시리얼 모니터로 출력하여 

수위 값을 측정

 

수위센서 값 출력

 

 

 

물 수위가 센서보다 낮을때                                                       물 수위가 센서보다 높거나 잠겨 있을때 

 

우리가 사용하는 수위센서는 물 접촉 수위에 따라 센서 값이 다르다.

 

 

 

2. 수위센서를 활용하여 물이 없을때 액체 펌프로 물을 공급해 보자.

액체펌프 연결 디지털 9번 핀

 

#include "DHT.h"   
#include <LiquidCrystal_I2C.h>  

#define DHTPIN A0               
#define DHTTYPE DHT11           

#define fan 10                  
#define led 23                  
#define pump 9          // 액체펌프 디지털핀 9번으로 정의하기 (릴레이 모듈)
 
DHT dht(DHTPIN, DHTTYPE);       

LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup() {
  Serial.begin(9600);
  dht.begin();                   
  lcd.init();                    
  lcd.backlight();               
  pinMode(fan,OUTPUT);           
  pinMode(led, OUTPUT);          
  pinMode(pump, OUTPUT);               //디지털 핀 9번 출력모드 설정(액체펌프 릴레이)    
}
 
void loop() {
  float humidity = dht.readHumidity();      
  float temperature = dht.readTemperature();
 
  if (isnan(humidity) || isnan(temperature) ) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  
  //Serial.print((int)temperature); Serial.print(" *C, ");
  //Serial.print((int)humidity); Serial.println(" %");   
  // 온습도 센서값 주석처리.
  
  String humi = "Humi : ";      
  humi += (String)humidity;
  humi += "%";
 
  String temp = "temp : ";      
  temp += (String)temperature;
  temp += "C";
 
  lcd.setCursor(0, 0);          
  lcd.print(humi);
  lcd.setCursor(0, 1);
  lcd.print(temp);
  
  int cds = analogRead(A3);
  // Serial.print("cds = ");    
  // Serial.println(cds);           
  // CDS 조도센서값 주석처리 
  
  if (cds>880){              
    digitalWrite(led,LOW);
  }
  else{
    digitalWrite(led,HIGH);
  }
  
  digitalWrite(fan,HIGH);    
  
  // 수위센서 확인
  int water = analogRead(A1);
  Serial.print("water = ");      
  Serial.println(water);   
  
  if (water>850){                        // 조건문 물수위가 낮으면 액체펌프를 가동하고
    digitalWrite(pump,1);
  }
  if (water<300){                        // 조건문 물수위가 오르면 액체펌프를 정지한다. 
    digitalWrite(pump,0);
  }
    
}

 

보조 물 공급 통에 물이 없을 경우 

물의 수위를 맞추지 못하면 액체펌프가 계속 동작하므로 이를 해결할 방안을 구상해 보자 !

 

 

728x90
반응형