#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Định nghĩa chân
#define TRIG_PIN 14
#define ECHO_PIN 12
#define DHT_PIN 4
#define LIGHT_SENSOR_PIN 33
#define LED_PIN 16
// Khởi tạo cảm biến DHT
DHT dht(DHT_PIN, DHT22);
// Khởi tạo màn hình LCD
LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
// Khởi động cảm biến DHT
dht.begin();
// Khởi động màn hình LCD
lcd.begin(16, 2);
lcd.print("IOT Quan Ly Rac");
delay(2000);
}
void loop() {
// Đo khoảng cách từ cảm biến siêu âm
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration / 2) / 29.1;
// Đo nhiệt độ và độ ẩm từ DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Đọc cường độ ánh sáng
int lightLevel = analogRead(LIGHT_SENSOR_PIN);
// Hiển thị thông tin trên màn hình LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rac: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("T: ");
lcd.print(temperature);
lcd.print("C H: ");
lcd.print(humidity);
lcd.print("%");
// Nếu thùng rác đầy (khoảng cách < 10 cm), bật LED đỏ
if (distance < 10) {
digitalWrite(LED_PIN, HIGH); // Bật LED
} else {
digitalWrite(LED_PIN, LOW); // Tắt LED
}
delay(2000);
}