// Bài tập 6: Tự động điều khiển quạt dựa trên tín hiệu cảm biến DHT22
// ESP32 sẽ đọc dữ liệu nhiệt độ từ cảm biến DHT22 và tự động điều khiển quạt dựa trên
// ngưỡng nhiệt độ đã cài đặt. Nếu nhiệt độ vượt quá ngưỡng, quạt sẽ bật, và nếu nhiệt độ giảm
// xuống dưới ngưỡng, quạt sẽ tắt. Tín hiệu điều khiển quạt sẽ được thực hiện thông qua một
// LED (đại diện cho quạt).
// Yêu cầu:
// • - Kết nối cảm biến DHT22 với ESP32 để đọc dữ liệu nhiệt độ.
// • - Kết nối một LED với ESP32 để đại diện cho quạt.
// • - Cài đặt ngưỡng nhiệt độ (ví dụ: 28°C). Nếu nhiệt độ đo được từ DHT22 cao hơn ngưỡng
// này, bật LED (quạt); nếu thấp hơn, tắt LED.
// • - Hiển thị trạng thái quạt (bật/tắt) và giá trị nhiệt độ hiện tại trên Serial Monitor.
// • - Mở rộng: Thêm một nút nhấn để thay đổi ngưỡng nhiệt độ trực tiếp khi chương trình
// đang chạy
#include <DHT.h>
#define DHTPIN 4 // Chân dữ liệu của DHT22
#define DHTTYPE DHT22 // Loại cảm biến DHT
#define LEDPIN 2 // Chân LED đại diện cho quạt
#define BUTTONPIN 5 // Chân nút nhấn
DHT dht(DHTPIN, DHTTYPE);
float thresholdTemperature = 28.0; // Ngưỡng nhiệt độ ban đầu
void setup() {
Serial.begin(115200); // Khởi động giao tiếp UART
dht.begin(); // Khởi động cảm biến DHT22
pinMode(LEDPIN, OUTPUT); // Đặt chân LED làm đầu ra
pinMode(BUTTONPIN, INPUT_PULLUP); // Đặt chân nút nhấn với điện trở kéo lên
}
void loop() {
// Đọc nhiệt độ
float t = dht.readTemperature();
// Kiểm tra nếu có lỗi trong việc đọc
if (isnan(t)) {
Serial.println("Không thể đọc dữ liệu từ DHT22!");
return;
}
// Xử lý trạng thái quạt
if (t > thresholdTemperature) {
digitalWrite(LEDPIN, HIGH); // Bật LED (quạt)
Serial.println("Quạt đang bật.");
} else {
digitalWrite(LEDPIN, LOW); // Tắt LED (quạt)
Serial.println("Quạt đang tắt.");
}
// Hiển thị nhiệt độ hiện tại
Serial.print("Nhiệt độ: ");
Serial.print(t);
Serial.println(" °C");
// Kiểm tra nút nhấn để thay đổi ngưỡng nhiệt độ
if (digitalRead(BUTTONPIN) == LOW) {
thresholdTemperature += 1.0; // Tăng ngưỡng nhiệt độ
Serial.print("Ngưỡng nhiệt độ mới: ");
Serial.println(thresholdTemperature);
delay(500); // Đợi để tránh đọc nhầm
}
delay(2000); // Đợi 2 giây trước khi đọc lại
}