[Đảm đang trong nhà] ESP8266 điều khiển cửa cuốn thông qua Blynk

Cách đây 10 năm nhà mình bắt đầu dùng cửa cuốn để che chắn cửa gương, đồng thời đảm bảo an toàn. Vì lý do đơn giản là World Cup xong mấy đứa cay cú ném đá cửa nhà mình (trong khi cả nhà mình không làm gì kể cả xem World Cup). Có điều thời đó còn dùng RF loại mã nhảy và điều bất tiện tất nhiên là gia đình 4 người nhưng chỉ có một bộ RF này. Mình có hỏi bên bán thì loại này họ bán 500k một bộ, khá là đắt :(. Mặt khác bộ RF này cũng khá là dễ hư nên mình nghĩ tới lúc tiễn nó về miền cực lạc luôn cho rồi. Vậy nên hôm nay mình sẽ làm bộ điều khiển cửa cuốn thông qua Blynk các bạn nhé!

Phân tích vấn đề

Cửa cuốn lúc lắp đặt ở nhà mình đã có các nút nhấn sẵn: lên, xuống và dừng lại. Bởi vậy mình sẽ đặt hộp điều khiển bên cạnh hộp nút nhấn với mục đích là khi điều khiển trên Blynk, chân NO của relay sẽ đóng làm thông mạch cho nút nhấn (kiểu như có một cọng dây nối tắt hai đầu của nút nhấn vậy :D). Mình làm như vậy mà không kích trực tiếp vào IO của bộ điều khiển cửa cuốn bởi vì mình sợ ảnh hưởng tới nó rồi không có tiền mà đền đâu :)).

Lưu ý: Chỉ thao tác cửa cuốn khi các bạn có mặt ở hiện trường hoặc có camera theo dõi. Điều khiển từ xa rất nguy hiểm nếu nhà có em nhỏ hoặc cửa cuốn có vấn đề như bị mắc cứng vật thể lạ…

Chuẩn bị

ESP8266 NodeMCU x1

Nguồn 220VAC sang 5VDC HLK-PM01 x1

Bộ relay 4 kênh x1

Board mạch xanh để hàn dây loại x1 (kích thước các bạn tự chọn)

Hộp chống cháy x1 (mình làm cây nhà lá vườn thôi, các bạn có thể thay hộp khác)

Công tắc ngắt nguồn nuôi 220VAC cho board mạch

Mình tính sơ qua tổng thiệt hại tối đa tầm 200k đấy các bạn, rẻ quá phải không?

Kết nối dây

Nguồn nuôi cho ESP8266 và relay

Mình sử dụng bộ nguồn HLK-PM01 để cấp nguồn cho toàn bộ hệ thống. Vì sao mình chọn nó, đơn giản là nó ngon và bền theo như quảng cáo :D.

Đầu vào nguồn là điện 220VAC, mình sẽ kết nối nó sau cùng.

Đầu ra bao gồm V+ và V-. V+ sẽ chia ra hai đầu kết nối đến chân Vin của ESP8266 và chân VCC của relay, V- kết nối đến GND của ESP8266 và GND của relay.

Kết nối dây điều khiển giữa ESP8266 và relay

Hình bên là ESP8266 đang sử dụng các chân GPIO kết nối đến các chân IN1, IN2, IN3, IN4 của relay.

Mình chỉ sử dụng 3 kênh của reay nên chỉ dùng các chân GPIO 4, 5, 14 kết nối đến IN1, IN2, IN3.

Kết nối dây giữa relay và hộp nút nhấn

Vì nút nhấn của mình là thường mở (NO) nên relay của mình cũng sẽ sử dụng tiếp điểm NO

Ứng với bên hình tại 3 đầu terminal K1, vị trí 1, 2, 3 ứng với từ phải sang trái. Tiếp điểm NO sẽ là terminal vị trí 2 và 3.

Vì vậy ứng với relay K1 nối với nút lên, mình sẽ nối vị trí terminal thứ 2 với một đầu của nút nhấn, vị trí terminal thứ 3 nối với một đầu còn lại.

Tương tự ứng với K2 nối với nút dừng lại, K3 nối với nút xuống.

Hình bên là 6 đầu dây tương tứng với 3 relay chạy qua, chia ra 2 bên ứng với 3 nút nhấn. Ez thôi phải không các bạn?

Code

Phía Blynk

Giao diện Blynk mình thiết kế như vậy, V0 là dừng lại, V2 là đóng cửa, V1 là mở cửa.

Ngoài ra mình có để thêm khung Terminal nhập mật khẩu. Cái này chưa phải là bảo mật, chỉ có chức năng kích hoạt điều khiển cửa cuốn trong vòng 2 phút, hết 2 phút thì phải nhập mật khẩu lại. Mình làm cái này với mục đích là lỡ các em nhỏ mượn điện thoại chơi hoặc ai đó vô tình thao tác cửa cuốn nhưng lại không có ở hiện trường thì khá nguy hiểm.

Phía Arduino

Mình sử dụng Arduino IDE để nạp code cho ESP8266

Khai báo thư viện

#include <ESP8266mDNS.h>
#include <WiFiClient.h>
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <BlynkSimpleEsp8266.h>

Không hẳn dùng hết đâu mà kệ cứ để vậy đi :D.

Khai báo biến

[code]
String password = “”;
String income = “”;
String passcompare = “”;
int relay[] = {4, 5, 14};
int relay_state[] = {0, 0, 0};
unsigned long repeat = 0;

[/code]

Ở chỗ này các bạn đổi password thành password muốn nhập ở Blynk nha.

Thiết lập các chân Virtual Pin Blynk

[code]
BLYNK_WRITE(V0) {
relay_state[0] = param.asInt();
if (relay_state[0] == 0)
{
if (password.equals(passcompare))
{
digitalWrite(relay[0], relay_state[0]);
}
else
{
terminal.println(“Hay nhap mat khau”);
terminal.flush();
}
}
else
{
digitalWrite(relay[0], relay_state[0]);
}

}
BLYNK_WRITE(V1) {
relay_state[1] = param.asInt();
if (relay_state[1] == 0)
{
if (password.equals(passcompare))
{
digitalWrite(relay[1], relay_state[1]);
}
else
{
terminal.println(“Hay nhap mat khau”);
terminal.flush();
}
}
else
{
digitalWrite(relay[1], relay_state[1]);
}
}
BLYNK_WRITE(V2) {
relay_state[2] = param.asInt();
if (relay_state[2] == 0)
{
if (password.equals(passcompare))
{
digitalWrite(relay[2], relay_state[2]);
}
else
{
terminal.println(“Hay nhap mat khau”);
terminal.flush();
}
}
else
{
digitalWrite(relay[2], relay_state[2]);
}
}
BLYNK_WRITE(V3) {
income = param.asStr();
income.trim();
Serial.println(income);
if(String(password) == param.asStr())
{
terminal.println(“Dung mat khau. OK!”);
terminal.println(“Thoi gian dung mat khau la 2 phut”);
passcompare = password;
repeat = millis();
}
else
{
terminal.println(“Sai mat khau. Not OK!”);
passcompare = “”;
}
terminal.flush();
}

[/code]

Khai báo hàm Setup

[code]
Serial.begin(115200);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(14, OUTPUT);
digitalWrite(4, HIGH);
digitalWrite(14, HIGH);
digitalWrite(5, HIGH);
WiFi.begin(“”, “”);
int c = 0;
while (WiFi.status() != WL_CONNECTED) {
c++;
delay(300);
Serial.print(“.”);
if (c >= 20)
{
break;

}
}
if (WiFi.status() == WL_CONNECTED)
{
Blynk.begin(“”, “”, “”);
Blynk.syncAll();
Serial.println(“ket noi”);
}
else
{
Serial.println(“khong the ket noi”);
}
[/code]

Ở hàm này các bạn tự thêm mật khẩu wifi, password và mã auth token của blynk nhé.

Hàm chạy void loop()

[code]
void loop() {
if (Blynk.connected())
{
Blynk.run();
}
}
[/code]

Thành quả

Sau khi nạp code xong, các bạn thử thành quả của mình nhé, dưới đây là video mình điều khiển cửa cuốn hoạt động:

Kết luận

Vậy là mình hoàn thành xong bộ điều khiển cửa cuốn với chi phí khá thấp, đồng thời rất tiện lợi cho mọi người trong nhà vì ai giờ cũng dùng điện thoại cả rồi. Project này vẫn có một số hạn chế:
– Phụ thuộc vào wifi nên nếu mất mạng thì đứng ngoài chơi với dế :)). Nên các bạn có thể backup thêm khi rớt mạng thì esp8266 chuyển qua phát server để điện thoại truy cập.
– Thiếu code thay đổi wifi khi cần thiết. Các bạn có thể sử dụng thư viện wifi manager. Riêng mình thì mình tự code webserver riêng cho nhẹ nợ :D.
– Thiếu hàm reconnect để kết nối lại wifi. Các bạn có thể tìm hiểu thêm.
Với dự án này thì các bạn có thể làm thêm nhiều thứ hay ho khác như điều khiển thiết bị điện trong nhà kiểu: blynk điều khiển ổ cắm, công tắc… Mình cũng đã và đang làm một vài thiết bị trong nhà mình rồi ví dụ như:

Mình thiết kế mạch này để điều khiển thiết bị 220VAC trong nhà, phù hợp với công tắc âm tường luôn các bạn nhé :D.

Mọi chi tiết thắc hãy liên hệ mình

Nguyễn Hữu Phước

Zalo: 0905021462

 717 total views,  9 views today

Leave a Reply

Your email address will not be published. Required fields are marked *