Đang tải dữ liệu...
Đang tải dữ liệu...
“Chào dev! Hôm nay đã nạp code cho ESP32 chưa? 🚀”
Tóm tắt dự án:
Project tự động kích hoạt máy bơm mini khi đất khô và tự ngắt khi độ ẩm đạt chuẩn, kèm màn hình LCD I2C hiển thị thông số chi tiết.| Chân Board | Linh kiện / Module | Mô tả chức năng |
|---|
| A0 | Soil Moisture Sensor | Đọc tín hiệu Analog độ ẩm đất |
| D7 | Relay Module 5V | Kích hoạt đóng ngắt máy bơm nước |
| SDA (A4) | LCD 1602 I2C | Giao tiếp I2C Data |
| SCL (A5) | LCD 1602 I2C | Giao tiếp I2C Clock |
| Linh kiện | SL | Thông số |
|---|---|---|
| Arduino UNO R3 kèm cáp nạp | 1 | ATmega328P |
| Cảm biến độ ẩm đất điện trở hoặc điện dung | 1 | Analog output |
| Màn hình LCD 1602 kèm module I2C | 1 | Địa chỉ I2C 0x27 |
| Module Relay 1 kênh 5V | 1 | Opto cách ly |
| Máy bơm mini chìm 5V kèm ống dẫn nước | 1 | Lưu lượng 120L/h |
#include <Wire.h>#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); const int sensorPin = A0;const int relayPin = 7;const int DRY_THRESHOLD = 600; // Ngưỡng đất khô void setup() { Serial.begin(9600); pinMode(relayPin, OUTPUT); digitalWrite(relayPin, HIGH); // Tắt relay ban đầu (Active Low) lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Auto Watering"); delay(1500); lcd.clear();} void loop() { int sensorValue = analogRead(sensorPin); int moisturePercent = map(sensorValue, 1023, 300, 0, 100); moisturePercent = constrain(moisturePercent, 0, 100); lcd.setCursor(0, 0); lcd.print("Do am: "); lcd.print(moisturePercent); lcd.print("% "); if (sensorValue > DRY_THRESHOLD) { lcd.setCursor(0, 1); lcd.print("Status: DANG TUOI"); digitalWrite(relayPin, LOW); // Bật bơm } else { lcd.setCursor(0, 1); lcd.print("Status: TOT "); digitalWrite(relayPin, HIGH); // Tắt bơm } delay(2000);}@haile_iot
Kỹ sư IoT, Embedded Developer và Web Full-Stack. Đam mê ESP32, Arduino và AI Automation.