본문 바로가기
ESP32

스마트 플랜팅 박스 프로젝트

by 모빌리티키즈 2025. 5. 31.
728x90
반응형

스마트 플랜팅 박스는 식물 재배를 위한 자동화 시스템으로, 온도와 습도, 조도, 그리고 수위 센서를 이용하여 최적의 환경을 조성하는 프로젝트입니다. 이 시스템은 ESP32 마이크로컨트롤러를 기반으로 하며, LCD 디스플레이를 활용하여 실시간 데이터를 표시하고 팬, LED, 서보 모터를 제어합니다.

🛠️ 사용 부품 설명

  • ESP32: Wi-Fi 기능을 갖춘 강력한 마이크로컨트롤러
  • LCD 디스플레이 (LiquidCrystal_I2C): 16x2 문자형 디스플레이
  • DHT22 센서: 온도 및 습도 측정
  • LDR 센서: 조도를 측정하여 빛의 양을 감지
  • 초음파 센서 (HC-SR04): 수위 측정
  • 서보 모터 (ESP32Servo): 환기 시스템 제어
  • LED: 빛을 보완하는 역할
  • : 공기 순환 기능
  • 점퍼 와이어 및 저항: 연결을 위한 기본 부품

🔌 회로 연결 방법

  1. LCD 디스플레이는 I2C 통신을 사용하며 ESP32의 21번(SDA)과 22번(SCL) 핀에 연결
  2. DHT22 센서는 데이터 핀을 ESP32의 4번 핀에 연결
  3. LDR 센서는 ESP32의 아날로그 핀 12번에 연결
  4. 초음파 센서의 TRIG와 ECHO 핀을 각각 5번, 35번에 연결
  5. 서보 모터는 ESP32의 19번 핀에 연결
  6. LED는 2번 핀, 은 23번 핀에 연결

💻 소스 코드 설명

프로그램은 여러 센서를 통해 데이터를 수집한 후 LCD 디스플레이에 표시하며, 특정 조건이 만족되면 팬, LED, 서보 모터를 자동으로 제어합니다.

🔍 주요 코드 분석

 
void setup() {
  Wire.begin(21, 22);  // I2C 초기화
  lcd.init();          // LCD 초기화
  lcd.backlight();     // 백라이트 활성화
  lcd.print("Smart Planting Box");
  Serial.begin(115200);
  dht.begin();
  ventilasi.attach(SERVO_PIN);

  pinMode(LED_PIN, OUTPUT);
  pinMode(FAN_PIN, OUTPUT);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}
  • I2C 통신을 설정하여 LCD와 연결
  • LCD에 초기 메시지를 출력한 후 DHT22, 서보 모터를 초기화
  • 센서 및 출력 장치를 설정

🌡️ 센서 데이터 처리

cpp
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
int cahaya = analogRead(LDR_PIN);
float tinggiAir = bacaTinggiAir();

각 센서 데이터를 읽고, 온도·습도, 조도, 수위 정보를 가져옵니다.

⚙️ 자동 제어 로직

 
if (suhu > 30 && kelembaban > 70) {
  digitalWrite(FAN_PIN, HIGH);   // 팬 ON
  ventilasi.write(90);           // 환기 개방
} else {
  digitalWrite(FAN_PIN, LOW);    // 팬 OFF
  ventilasi.write(0);            // 환기 닫힘
}

if (cahaya < 250) {
  digitalWrite(LED_PIN, HIGH);   // LED ON
} else {
  digitalWrite(LED_PIN, LOW);    // LED OFF
}

if (tinggiAir < 6) {
  Serial.println("Air penampungan habis!");
}
  • 온도·습도가 높을 경우 팬을 가동하고 환기를 개방
  • 조도가 낮으면 LED를 켜서 빛을 보완
  • 수위가 낮을 경우 경고 메시지 출력

📊 LCD 화면 출력

 
lcd.setCursor(0, 0);
lcd.print("S:"); lcd.print(suhu); lcd.print((char)223); lcd.print("C H:"); lcd.print(kelembaban);

lcd.setCursor(0, 1);
lcd.print("Cah:"); lcd.print(cahaya); lcd.print(" Air:"); lcd.print(tinggiAir); lcd.print("cm");
  • 온도(°C), 습도(%), 조도 및 수위(cm)를 16x2 LCD에 표시

📊 전체 소스

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <ESP32Servo.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

#define DHTPIN  4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

#define LDR_PIN 12
#define TRIG_PIN 5
#define ECHO_PIN 35
#define SERVO_PIN 19
#define LED_PIN 2
#define FAN_PIN 23

Servo ventilasi;

void setup() {
  Wire.begin(21,22);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Smart Planting Box");
  delay(2000);
  lcd.clear();
  Serial.begin(115200);
  dht.begin();
  ventilasi.attach(SERVO_PIN);

  pinMode(LED_PIN, OUTPUT);
  pinMode(FAN_PIN, OUTPUT);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

float bacaTinggiAir() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long durasi = pulseIn(ECHO_PIN, HIGH);
  float jarak = durasi * 0.034 / 2;
  return jarak;  // dalam cm
}

void loop() {
  float suhu = dht.readTemperature();
  float kelembaban = dht.readHumidity();
  int cahaya = analogRead(LDR_PIN);
  float tinggiAir = bacaTinggiAir();

  Serial.print("Suhu: "); Serial.print(suhu); Serial.print(" °C, ");
  Serial.print("Kelembaban: "); Serial.print(kelembaban); Serial.print(" %, ");
  Serial.print("Cahaya: "); Serial.print(cahaya); Serial.print(", ");
  Serial.print("Tinggi Air: "); Serial.print(tinggiAir); Serial.println(" cm");

  // Kontrol suhu dan kelembaban
  if (suhu > 30 && kelembaban > 70) {
    digitalWrite(FAN_PIN, HIGH);      // Kipas ON
    ventilasi.write(90);              // Buka ventilasi
  } else {
    digitalWrite(FAN_PIN, LOW);       // Kipas OFF
    ventilasi.write(0);               // Tutup ventilasi
  }

  // Kontrol cahaya
  if (cahaya < 250) {
    digitalWrite(LED_PIN, HIGH);      // LED ON
  } else {
    digitalWrite(LED_PIN, LOW);       // LED OFF
  }

  // Peringatan air
  if (tinggiAir < 6) {
    Serial.println(" Air penampungan habis!");
  }

  lcd.setCursor(0, 0);
  lcd.print("S:");
  lcd.print(suhu);
  lcd.print((char)223); // Simbol derajat
  lcd.print("C H:");
  lcd.print(kelembaban);

  lcd.setCursor(0, 1);
  lcd.print("Cah:");
  lcd.print(cahaya);
  lcd.print(" Air:");
  lcd.print(tinggiAir);
  lcd.print("cm");


  delay(2000);
}

🏁 결론

스마트 플랜팅 박스는 환경을 실시간으로 감지하고 자동으로 최적화하는 시스템입니다. 팬, LED, 서보 모터를 활용하여 식물이 건강하게 자랄 수 있도록 도와줍니다. 이 프로젝트를 확장하여 IoT 기능을 추가하거나 모바일 앱과 연동하면 더욱 스마트한 시스템을 구현할 수 있습니다!

다른 기능을 추가하고 싶다면, 예를 들어 토양 수분 센서를 연결해 볼 수도 있겠네요. 😊

728x90
반응형