공부/공학

아두이노로 스마트팜 만들기

theplainest 2023. 7. 24. 20:35

아두이노 학습을 목적으로 스마트팜(smart farm)을 만드는 실습을 해 보았다.

 

스마트팜 개발 시나리오

  • 아두이노 UNO 보드에 모듈을 연결하여 스마트팜을 구성
  • 가변저항을 다이얼처럼 돌려서 5등분하여 메뉴를 조절
  • LED와 물 펌프의 동작은 2채널 릴레이 모듈로 조절
  • 온습도 센서: 온도 감지 / 조도 센서: 조도 감지 / 토양 수분감지 센서: 토양 습도 감지
  • 현재 메뉴와 상태를 표시하는 LCD: 16×2 디스플레이 모듈

 

메뉴 활동
4 물 펌프 동작 LCD‘Pump ON’ 표시, 물 펌프 동작
3 LED 동작 LCD‘LED ON’ 표시, LED 동작
2 온도 LCD에 현재 온도 표시
1 토양 습도 LCD에 현재 토양 습도 표시
0 AUTO 토양 습도와 온도 LCD에 표시. 습도가 낮으면 물펌프 작동, 조도가 약하면 LED 작동
 
 

BOM (Bill of Material)

품명 금액 [] 수량 합계 [] 판매처
아두이노 우노 Uno R3 SMD 호환보드 4,400 1 4,400 에듀이노 A-1
아두이노 우노용 USB B 케이블 50cm 1,000 1 1,000 에듀이노 E-51
아두이노 브레드보드 400투명) 2,900 1 2,900 에듀이노 E-81
아두이노 보드 전원 공급용 9V 1A 어댑터 12,500 1 12,500 에듀이노 E-62
아두이노 점퍼케이블 암-20cm 40 3,000 1 3,000 에듀이노 E-44
아두이노 점퍼케이블 수-10cm 40 2,500 1 2,500 에듀이노 E-49
아두이노 LCD 16×2(I2C 제어) 디스플레이 모듈 3,400 1 3,400 에듀이노 D-23
아두이노 광 포토셀 CdS 조도센서 모듈 1,100 1 1,100 에듀이노 C-54
아두이노 2채널 5V 릴레이 모듈 3,300 1 3,300 에듀이노 D-43
아두이노 토양 수분감지 센서 모듈 2,200 1 2,200 에듀이노 C-5

물 펌프와 같은 모듈은 그냥 교수님께 받아서 썼는데 판매처를 찾지 못해서 기록하지 못했다...

 

 

아두이노 소스코드

// LCD 출력 설정
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// 온습도 센서 설정
#include <DHT.h>
#define DHTTYPE DHT11
#define DHTPIN 2
DHT dht(DHTPIN, DHTTYPE);
#define LPIN 3 // LED PIN, HIGH에서 켜짐
#define PPIN 4 // Pump PIN, LOW에서 켜짐

void setup() {
  pinMode(LPIN, OUTPUT);
  pinMode(PPIN, OUTPUT);
  lcd.begin();
  lcd.backlight();
  lcd.home();
}

void loop() {
  delay(2000);
  lcd.clear();
  int menu = map(analogRead(A0), 0, 1023, 0, 5); // 가변저항으로 메뉴 조절
  if(menu!=3) digitalWrite(LPIN, LOW);
  if(menu!=4) digitalWrite(PPIN, HIGH);
  if(menu==0) { // AUTO
    lcd.print("AUTO");
    lcd.setCursor(0, 1); // 다음 줄
    int h = map(1023-analogRead(A1), 0, 1023, 0, 100); // 토양 습도
    int t = dht.readTemperature(); // 온도
    lcd.print("Hu:");
    lcd.print(h);
    lcd.print("%  ");
    lcd.print("Tp:");
    lcd.print(t);
    lcd.print("C");
     if(map(1023-analogRead(A1), 0, 1023, 0, 100)<10){ // 습도가 낮으면
      lcd.setCursor(0, 0);
      lcd.print("PUMP ON");
      digitalWrite(PPIN, LOW); // 물펌프 작동
    }
    if(analogRead(A2)<300){ // 조도가 낮으면
      lcd.setCursor(0, 0);
      lcd.print("LED ON");
      digitalWrite(LPIN, HIGH); // LED 작동
      delay(1000);
    }
  }
  else if(menu==1) { // Soil Humidity
    int h = map(1023-analogRead(A1), 0, 1023, 0, 100);
    lcd.print("Soil Humidity: ");
    lcd.setCursor(0, 1);
    lcd.print(h);
    lcd.print("%");
  }
  else if(menu==2) { // Temperature
    int t = dht.readTemperature();
    lcd.print("Temperature: ");
    lcd.setCursor(0, 1);
    lcd.print(t);
    lcd.print("C");
  }
  else if(menu==3) { // LED ON
    lcd.print("LED ON");
    digitalWrite(LPIN, HIGH);
    delay(1000);
  }
  else if(menu==4) { // Pump ON
    lcd.print("PUMP ON");
    digitalWrite(PPIN, LOW);
    delay(1000);
  }
}

 

 

사진

스마트팜이 메뉴 별로 동작하는 모습

메뉴 별로 LCD에 나오는 글자에 집중해서 보면 좋을 것 같다.

손으로 돌리고 있는 게 가변저항이고, 옆에 원기둥 모양이 물펌프, 물티슈로 싸 놓은 게 토양 수분감지 센서이다.