728x90
반응형
스마트 플랜팅 박스는 식물 재배를 위한 자동화 시스템으로, 온도와 습도, 조도, 그리고 수위 센서를 이용하여 최적의 환경을 조성하는 프로젝트입니다. 이 시스템은 ESP32 마이크로컨트롤러를 기반으로 하며, LCD 디스플레이를 활용하여 실시간 데이터를 표시하고 팬, LED, 서보 모터를 제어합니다.
🛠️ 사용 부품 설명
- ESP32: Wi-Fi 기능을 갖춘 강력한 마이크로컨트롤러
- LCD 디스플레이 (LiquidCrystal_I2C): 16x2 문자형 디스플레이
- DHT22 센서: 온도 및 습도 측정
- LDR 센서: 조도를 측정하여 빛의 양을 감지
- 초음파 센서 (HC-SR04): 수위 측정
- 서보 모터 (ESP32Servo): 환기 시스템 제어
- LED: 빛을 보완하는 역할
- 팬: 공기 순환 기능
- 점퍼 와이어 및 저항: 연결을 위한 기본 부품
🔌 회로 연결 방법
- LCD 디스플레이는 I2C 통신을 사용하며 ESP32의 21번(SDA)과 22번(SCL) 핀에 연결
- DHT22 센서는 데이터 핀을 ESP32의 4번 핀에 연결
- LDR 센서는 ESP32의 아날로그 핀 12번에 연결
- 초음파 센서의 TRIG와 ECHO 핀을 각각 5번, 35번에 연결
- 서보 모터는 ESP32의 19번 핀에 연결
- 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
반응형
'ESP32' 카테고리의 다른 글
🎮 직접 만드는 레트로 게임기! ESP32 CYD + RetroGo 핸드헬드 제작기 (3) | 2025.07.03 |
---|---|
🌿 ESP32로 구동되는 스마트 테라리움 만들기 (1) | 2025.06.13 |
RD-03D 및 ESP32-C6을 이용한 레이더 기반 홈 시큐리티 시스템 (0) | 2025.05.30 |
Wokwi: 세계에서 가장 발전된 ESP32 시뮬레이터 (0) | 2025.04.30 |
인터랙티브 LED 클라우드란? (0) | 2025.04.15 |