#include "DHT.h"
#include "LiquidCrystal.h"
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Khởi tạo với các chân
#define DHTPIN 12 // pin được kết nối
#define DHTTYPE DHT22 // DHT 11
#define pwm 9
byte degree[8] =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
// Khởi tạo cảm biến
DHT dht(DHTPIN, DHTTYPE);
void setup() {
lcd.begin(16, 2); //lcd 16x2
lcd.createChar(1, degree); // Tạo kí tự 1, với dữ liệu là nhiệt độ
lcd.clear();
lcd.print(" Fan Speed ");
lcd.setCursor(0,1); // Đặt con trỏ vào cột 0, dòng 1
lcd.print(" Controlling ");
delay(2000);
analogWrite(pwm, 255); //Viết giá trị tín hiệu tương tự
lcd.clear();
lcd.print("Ready ");
delay(2000);
Serial.begin(9600); //Thiết lập giao tiếp nối tiếp
dht.begin();
}
void loop() {
// Đợi vài giây giữa mấy lần đo
delay(2000);
// Đọc nhiệt độ và độ ẩm tốn 250 ms
// Việc đọc cảm biến có thể đến 2 giây (cảm biến chậm)
float h = dht.readHumidity();
// Đọc nhiệt độ với độ C
float t = dht.readTemperature();
// Đọc nhiệt độ với độ F
float f = dht.readTemperature(true);
// Kiểm tra từng phần đọc có thất bại hay không
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Tính chỉ số nóng bức
// Phải gửi t trong độ F
float hi = dht.computeHeatIndex(f, h);
//In các thông tin lên màn hình
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(t); // In nhiệt độ trên LCD
lcd.print(" C");
lcd.setCursor(0,1);
// Thay đổi tốc độ quạt
if(t <25 )
{
analogWrite(9,0);
lcd.print("Fan OFF ");
delay(100);
}
else if(t==25)
{
analogWrite(pwm, 51);
lcd.print("Fan Speed: 20% ");
delay(100);
}
else if(t==27)
{
analogWrite(pwm, 102);
lcd.print("Fan Speed: 40% ");
delay(100);
}
else if(t==29)
{
analogWrite(pwm, 153);
lcd.print("Fan Speed: 60% ");
delay(100);
}
else if(t==31)
{
analogWrite(pwm, 204);
lcd.print("Fan Speed: 80% ");
delay(100);
}
else if(t>31)
{
analogWrite(pwm, 255);
lcd.print("Fan Speed: 100% ");
delay(100);
}
delay(3000);
}