Dự Án IoT 2: KIT HE8 Điều Khiển Quạt Theo Nhiệt Độ Độ Ẩm
Với các nhà trồng nấm hay trong các máy ấp trứng việc đảm bảo nhiệt độ, độ ẩm dao động trong khoảng nhất định là điều kiện quyết định sự thành công của quá trình. Để ổn định nhiệt độ người ta có thể sử dụng cây tăng nhiệt, quạt . . ., với độ ẩm thì dùng máy phun sương, béc phun sương . . . và một thứ không thể thiếu là bộ điều khiển các thiết bị trên. Hôm nay mình sẽ hướng dẫn các bạn làm 1 bộ điều khiển nhiệt độ, bằng cách bật tắt quạt theo điều kiện cho trước và thống kê biểu đồ nhiệt độ theo thời gian với kit HE8_v1 module DHT11.
Phần cứng
Kit HE8 phiên bản 1
Module DHT11
Link Mua Sản Phẩm: KIT HE8-V1 + DHT11
Tạo dự án trên Blynk 01
Với các bạn chưa biết cách tạo tài khoản blynk trên server hackanidea.net thì vào đây để xem hướng dẫn. Ở đây mình bắt đầu với việc tạo dự án mới:
- Đặt tên cho dự án DHT11
- Nhấn Create
Vào Widget Box lấy Button và cấu hình theo bên dưới
Lấy Menu để làm thanh chọn chế độ hoạt động và thiết lập như bên dưới
Lấy Numeric Input để nhập chu kì đo cho máy
Tiếp theo là hiển thị nhiệt độ và độ ẩm ta chọn 2 cái Gauge.
Đây là cấu hình của nó
Vì chương trình của chúng ta có phần chạy theo điều kiện nhiệt độ và độ ẩm, khi nhiệt độ cao hơn mức trên thì bật quạt và khi thấp hơn mức dưới thì tắt quạt. Và ngược lại với độ ẩm, các giá trị này ta có thể truyền xuống thiết bị thông qua 4 Numeric Input sau:
Và cuối cùng là biểu đồ Super Chart
- Add Datastream: Nhiệt Độ, Độ Ẩm
Cấu hình nó bên trong nút vàng của nhiệt độ và độ ẩm
Sau khi thiết lập tất cả các Widget, các bạn hãy sắp xếp chúng cho hợp lý. Đây là cái của mình
Code
Sau khi đã hoàn thành thiết lập app trên blynk các bạn hãy tải file DHT11.ino để nạp.
Trong code trên, mình sử dụng thư viện DHT.h để đo nhiệt độ và độ ẩm. Nếu các bạn chưa cài thư viện cho DHT thì sau đây là hướng dẫn.
Vào Sketch -> Include Library -> Manage Libraries … Hoặc nhấn tổ hợp phím Ctrl + Shift + I
Nhấn dht vào ô tìm kím, kéo xuống DHT sensor library by Adafruit, chọn INSTALL
Lưu ý: Đừng quên thay đổi "YourNetworkName", "YourPassword", "YourAuthToken" bằng tên wifi, pass và bằng Auth Token của project trên Blynk của bạn.
// Thay Auth Token của bạn vào "YourAuthToken" .
const char *auth = "YourAuthToken";
// Thay tên wifi của bạn vào "YourNetworkName"
const char *ssid = "YourNetworkName";
// Thay pass wifi của bạn vào "YourPassword"
const char *pass = "YourPassword";
Các bạn có thể tham khảo cách lấy Auth Token ở đây.
Mình xin giải thích một xíu về các biến mà mình dùng. Đầu tiên là:
byte runMode = 0; // 0 là Tự Động, 1 là Thủ Công
Biến runMode để chọn chế độ hoạt động 0 là Tự Động, 1 là Thủ Công. Khi ở chế độ tự động thì quạt sẽ chạy theo giá trị nhiệt độ và độ ẩm. Còn chế độ thủ công ta có thể sử dụng nút nhấn để bật tắt quạt mà không phụ thuộc vào giá trị nhiệt độ, độ ẩm.
Nếu nhiệt độ cao hơn NHIỆT ĐỘ TRÊN thì quạt sẽ bật:
if (t > temperatureOn && relayState != 1)
{
// nếu quạt đang tắt thì bật quạt
relayState = 1;
digitalWrite(relayPin, relayState);
digitalWrite(ledPin, relayState);
Serial.println("Nhiet do cao bat relay: " + String(relayState));
Blynk.virtualWrite(V0, relayState);
}
relayState != 1 giúp đoạn lệnh này chỉ chạy 1 lần.
digitalWrite(relayPin, relayState); - là hàm bật quạt
digitalWrite(ledPin, relayState); - là hàm bật led
Blynk.virtualWrite(V0, relayState); - là hàm gửi dữ liệu lên nút blynk
Nếu nhiệt độ thấp hơn NHIỆT ĐỘ DƯỚI thì quạt sẽ tắt:
else if (t < temperatureOff && relayState != 0)
{
// nếu quạt đang bật thì tắt quạt
relayState = 0;
digitalWrite(relayPin, relayState);
digitalWrite(ledPin, relayState);
Serial.println("Nhiet do thap tat relay: " + String(relayState));
Blynk.virtualWrite(V0, relayState);
}
Và ngược lại với giá trị độ ẩm.
Nếu độ ẩm thấp hơn ĐỘ ẨM DƯỚI thì quạt sẽ bật:
if (h < humidityOn && relayState != 1)
{
// nếu quạt đang tắt thì bật quạt
relayState = 1;
digitalWrite(relayPin, relayState);
digitalWrite(ledPin, relayState);
Serial.println("Do am cao bat relay: " + String(relayState));
Blynk.virtualWrite(V0, relayState);
}
Nếu độ ẩm cao hơn ĐỘ ẨM TRÊN thì quạt sẽ tắt:
else if (h > humidityOff && relayState != 0)
{
// nếu quạt đang bật thì tắt quạt
relayState = 0;
digitalWrite(relayPin, relayState);
digitalWrite(ledPin, relayState);
Serial.println("Do am thap tat relay: " + String(relayState));
Blynk.virtualWrite(V0, relayState);
}
Cuối cùng là nạp code cho mạch và mở app xem mạch đã gửi dữ liệu lên chưa.
Đây chỉ là chương trình demo, ngoài thực tế có thể phải sử dụng nhiều quạt và bơm hơn. Chương trình cần thêm các điều kiện khác để có thể ứng dụng được trong thực tế.
Nếu các bạn có thắc mắc gì về code và kết nối thì hãy liên hệ với chúng mình qua nhóm FB: hackanidea.net