ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA VẬT LÝ VẬT LÝ KỸ THUẬT BÁO CÁO ĐỀ TÀI MÔN HỌC PHÁT TRIỂN ỨNG DỤNG INTERNET OF THINGS Đề tài XÂY DỰNG HỆ THỐNG TƯỚI TỰ ĐỘNG DỰA.
THIẾT KẾ HỆ THỐNG IOT
Lập bảng dữ liệu
Trước khi thiết kế hệ thống IoT chúng ta cần lập bảng dữ liệu về các chức năng trên Blynk App và trên NodeMCU
Trên Blynk App Trên NodeMCU
Virtual pin Widget Chức năng
Hiện thị giá trị cảm biến
A0 nối với cảm biến độ ẩm đất analogVal = analogRead(analogPin); // 0 >
1023 phantram=map(analogVal, 0, 1023, 100, 0); Blynk.virtualWrite(V1,phantram);
V2 Styled button Điều chỉnh chế độ Auto/Manual
BLYNK_WRITE(V2) { // điều chỉnh chế độ value1 = param.asInt();
Lấy giá trị ngưỡng trên và dưới từ app Blynk
BLYNK_WRITE(V3) { // Lấy giá trị ngưỡng trên
BLYNK_WRITE(V4) { // Lấy giá trị ngưỡng duoi
V9 Button Bật tắt relay ở chế độ manual
BLYNK_WRITE(V9) { // Nut nhan bat tat relay button=param.asInt();
V6 LCD Hiển thị thông báo
Blynk.virtualWrite(V6,"Độ ẩm cao");
Led Hiển thị Led trên app Blynk
WidgetLED appledy(V12); appledg.off(); appledy.off();
V8 Superchart Đồ thị độ ẩm Blynk.virtualWrite(V8,String(phantram)+"%");
Thiết kế sơ đồ mạch điện
11 Hình 2.1 Mạch điện thực tế
Hình 2.2 Mạch điện điều khiển trên test board
Lưu đồ thuật toán (Flowchart)
Hình 2.3 Lưu đồ thuật toán
Thiết kế ứng dụng trên điện thoại thông minh
Blynk là một ứng dụng chạy trên nền tảng iOS và Android để điều khiển và giám sát thiết bị thông qua internet Blynk không bị ràng buộc với những phần cứng cụ thể nào cả, thay vào đó, nó hỗ trợ phần cứng cho bạn lựa chọn như Arduino,
Raspberry Pi, ESP8266 và nhiều module phần cứng phổ biến khác
Những lý do nên sử dụng Blynk:
– Dễ sử dụng: việc cài đặt ứng dụng và đăng ký tài khoản trên điện thoại rất đơn giản cho cả IOS và Android
BẮT ĐẦU ĐỘ ẨM MODE ON,OFF
= 1 Độ ẩm > ngưỡng trên Độ ẩm < ngưỡng dưới
Bật bơm nước Bật led đỏ LCD "đang tưới
Tắt bơm Bật led vàng LCD"độ ẩm cao"
– Chức năng phong phú: Blynk hỗ trợ rất nhiều chức năng với giao diện đẹp và thân thiện, bạn chỉ việc kéo thả đối tượng và sử dụng nó
– Không phải lập trình ứng dụng: nếu bạn không có kiến thức về lập trình app cho Android cũng như IOS thì Blynk là một ứng dụng tuyệt vời để giúp bạn khám phá thế giới IOTs
– Điều khiển, giám sát thiết bị ở bất kì đâu thông qua internet với khả năng đồng bộ hóa trạng thái và thiết bị
Có ba thành phần chính trong nền tảng:
Blynk App - cho phép tạo giao diện cho sản phẩm của bạn bằng cách kéo thả các widget khác nhau mà nhà cung cấp đã thiết kế sẵn
Blynk Server - chịu trách nhiệm xử lý dữ liệu trung tâm giữa điện thoại, máy tính bảng và phần cứng Bạn có thể sử dụng Blynk Cloud của Blynk cung cấp hoặc tự tạo máy chủ Blynk riêng của bạn Vì đây là mã nguồn mở, nên bạn có thể dễ dàng intergrate vào các thiết bị và thậm chí có thể sử dụng Raspberry Pi làm server của bạn
Library Blynk – support cho hầu hết tất cả các nền tảng phần cứng phổ biến - cho phép giao tiếp với máy chủ và xử lý tất cả các lệnh đến và đi
Cung cấp API & giao diện người dùng tương tự cho tất cả các thiết bị và phần cứng được hỗ trợ
Kết nối với server bằng cách sử dụng:
Các tiện ích trên giao diện được nhà cung cấp dễ sử dụng
Thao tác kéo thả trực tiếp giao diện mà không cần viết mã
Dễ dàng tích hợp và thêm chức năng mới bằng cách sử dụng các cổng kết nối ảo được tích hợp trên blynk app
Theo dõi lịch sử dữ liệu
Thông tin liên lạc từ thiết bị đến thiết bị bằng Widget
Gửi email, tweet, thông báo realtime, v.v
được cập nhật các tính năng liên tục!
2.4.2 Cấu hình các nút chức năng
Hình 2.4 Chức năng Value Display (V1)
Hình 2.5 Chức năng Styled button (V2)
Hình 2.6 Chức năng Numeric Input (V3,V4)
23 2.4.3 Giao diện ứng dụng hoàn chỉnh
Hình 2.13 Giao diện ứng dụng hoàn chỉnh
Viết code chương trình điều khiển
Phần kết nối và khai báo các biến:
BlynkTimer timer; char auth[] = "rdhAobpDdWH-gPwGmqJq0Z-azdBhckwl"; char ssid[] = "FPT Cao Van Sa"; char pass[] = "11118888";
#define relay D2 int value1,value2,analogVal,button,Ref1,Ref2; int phantram;
Phần thiết lập điều khiển và giao tiếp giữa app blynk với nodeMCU void setup()
Blynk.begin(auth, ssid, pass,"sv.bangthong.com",8080); pinMode(ledr,OUTPUT); pinMode(ledy,OUTPUT); pinMode(ledg,OUTPUT); pinMode(relay,OUTPUT);
BLYNK_WRITE(V2) { // điều chỉnh chế độ value1 = param.asInt();
BLYNK_WRITE(V3) { // Lấy giá trị ngưỡng trên
BLYNK_WRITE(V4) { // Lấy giá trị ngưỡng duoi
BLYNK_WRITE(V9) { // Nut nhan bat tat relay button=param.asInt();
Phần dòng lệnh chạy chương trình và các điều kiện ràng buộc void loop()
Blynk.run(); timer.run(); analogVal = analogRead(analogPin); // 0 > 1023 phantram=map(analogVal, 0, 1023, 100, 0); // chuyen sang phantram Blynk.virtualWrite(V1,phantram);
Blynk.virtualWrite(V8,String(phantram)+"%"); if (value1 == 1){ if (phantram > Ref1){ appledr.off(); appledg.off(); appledy.on(); digitalWrite(ledr,LOW); digitalWrite(ledg,LOW); digitalWrite(ledy,HIGH);
Blynk.notify("Độ ẩm cao");
Blynk.virtualWrite(V6,"Độ ẩm cao"); //hiển thị trên LCD dòng 1 } else if (phantram < Ref2){ appledr.on(); appledg.off(); appledy.off(); digitalWrite(ledr,HIGH); digitalWrite(ledg,LOW); digitalWrite(ledy,LOW); digitalWrite(relay,HIGH);
Blynk.notify("Độ ẩm thấp");
Blynk.virtualWrite(V6,"Đang tưới nước");
} else { appledr.off(); appledg.on(); appledy.off(); digitalWrite(ledr,LOW); digitalWrite(ledg,HIGH); digitalWrite(ledy,LOW);
Blynk.virtualWrite(V6,"Độ ẩm BT"); }
} else { if (button == 1){ digitalWrite(relay,HIGH);
Chương 3: KIỂM TRA HOẠT ĐỘNG CỦA HỆ THỐNG
Kiểm tra kết nối sever giữa NodeMCU và Blynk App có đang hoạt động tốt không Tránh trường hợp mất kết nối hệ thống không hiện các thông báo về độ ẩm đất Chúng ta sẽ không thể theo dõi được tình hình của độ ẩm để có thể điều khiển các ngưỡng cũng như tắt mở bơm nước gây ảnh hưởng xấu đến cây trồng
Hình 3.1 Kiểm tra kết nối giữa NodeMCU và Blynk app
Lỗi trên là do Blynk app và NodeMCU không giao tiếp được với nhau do 1 trong số những nguyên nhân sau:
+ Lỗi kết nối do mất mạng, mất wifi
+ Do NodeMCU bị mất nguồn hoặc cổng USB bị lỏng
+ Do chưa cắm cổng USB của NodeMCU vào nguồn
+ Do không tìm được sever băng thông để kết nối
Kiểm tra độ nhạy của cảm biến độ ẩm đất
Theo thời gian có thể đầu cảm biến bị ăn mòn không còn chính xác nên cần theo dõi thường xuyên và đưa ra biện pháp xử lý thích hợp tránh trường hợp cảm biến bị sai lệch ảnh hưởng xấu đến cây trồng
Hình 3.2 Hoạt động của cảm biến và chức năng hiển thị trên Blynk App
Lỗi trên là do 1 trong những nguyên nhân sau:
+ Do cảm biến sử dụng lâu năm bị ăn mòn hư hại dẫn đến việc không còn cập nhật chính xác giá trị độ ẩm Cần thay mới cảm biến
+ Do lỗi kết nối giữa NodeMCU và Blynk app dẫn đến việc không thể chuyển giá trị độ ẩm thu được từ chân của NodeMCU lên Blynk app
Kiểm tra hệ thống thông báo của Blynk app (chức năng notifications) Đôi khi xảy ra trường hợp độ ẩm vượt ngưỡng trên hoặc thấp hơn ngưỡng dưới mà hệ thống thông báo (chức năng nitifications) của Blynk không hiển thị thông báo dẫn đến chúng ta không biết được rủi ro xảy ra có thể có tác hại rất xấu đến cây trồng
Hình 3.3 Lỗi hoạt động của chức năng notifications
Không hiển thị thông báo khi độ ẩm vượt ngưỡng có thể do một trong các nguyên nhân sau:
+ Do sai lệnh điều khiển hoặc thiết lập sai chân Virtual trên Code và Blynk app + Do chưa cập nhật phiên bản và chức năng timer run
3.4 Đánh giá hoạt động của hệ thống:
Hệ thống tưới phun mưa được sử dụng nhiều trong nông nghiệp với các cây trồng cần nhiều nước tưới cho cả tán lá Ngoài ra phương pháp này còn được áp dụng cho việc tưới các bãi cỏ, các tán cây cảnh ở các địa điểm công cộng, khu nghỉ dưỡng với thiết kế đảm bảo cả tính mỹ quan
Hệ thống được áp dụng cho các vườn chè, khu vực trồng hoa, các vườn rau lớn tại Việt Nam Với thiết kế hiện đại, hệ thống phun mưa đang giúp các nông dân tiết kiệm được chi phí đầu tư, sức lao động, nguồn nước nhất là vào mùa khô Được tưới nước trên toàn bề mặt, cây trồng phát triển tốt từ bộ rễ lên đến bề mặt lá, tăng được hiệu quả sản xuất nông nghiệp, chất lượng nông sản tốt nhất
Hệ thống do bọn mình thiết kế áp dụng tốt được trong phòng thí nghiệm và các mô hình trồng rau tại nhà Ưu điểm của hệ thống là nhỏ gọn giá thành rẻ tiện dụng cho các mô hình trồng rau nhỏ vừa, dễ chỉnh sửa phương thức và có thể phát triển thành những dự án lớn hơn về phát triển nông nghiệp Tuy nhiên, để mở rộng cho các dự án lớn hơn thì cần phải cải tiến hệ thống rất nhiều về các mặt kỹ thuật cũng như cảm biến
Chương 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Sau một thời gian tìm hiểu, tham khảo tài liệu từ nhiều nguồn khác nhau, cũng như được sự giúp đỡ của giảng viên bộ môn và bạn bè, nhóm em đã hoàn thành đề tài:
“xây dựng hệ thống tưới tự động dựa trên độ ẩm đất và theo dõi từ xa thông qua điện thoại di động”
Nhìn chung đề tài của nhóm em có ưu điểm:
- Mạch có cấu tạo và hoạt động đơn giản không phức tạp nhưng tính chính xác và khả năng áp dụng thực tế cao, giảm bớt công sức của con người trong việc chăm sóc vườn
- Mạch được thiết kế với các module có biến trở, ta có thể dễ dàng điều chỉnh tùy thuộc vào yêu cầu và trường hợp cụ thể
- Các thiết bị dễ mua được ngoài thị trường, giá thành rẻ
- Dễ lắp ráp đối với người mới tập làm mạch điện tử
- Có thể mở rộng và phát triển dễ dàng Đề tài trình bày được những nguyên lý cơ bản nhất của một hệ thống tưới nước tự động và theo dõi từ xa, từ đây có thể phát triển đề tài thành hệ thống vườn thông minh phù hợp với nhu cầu của xã hội
- Đề xuất hướng phát triển
Với đề tài này nếu có đủ thời gian nghiên cứu thì có thể mở rộng ra ngoài việc sử dụng cảm biến độ ẩm còn có thể sử dụng thêm các loại cảm biến khác như: cảm biến độ ẩm, cảm biến nhiệt độ ,cảm biến tốc độ động cơ để điều chỉnh lượng nước tưới tiết kiệm hiệu quả, cảm biến đo độ pH để đo độ pH trong nước tưới, từ đó kịp thời xử lý nếu nước bị nhiễm phèn
1 Code khai báo, điều khiển
BlynkTimer timer; char auth[] = "rdhAobpDdWH-gPwGmqJq0Z-azdBhckwl"; char ssid[] = "FPT Cao Van Sa"; char pass[] = "11118888";
#define relay D2 int value1,value2,analogVal,button,Ref1,Ref2; int phantram;
2 Code xuất ra chân tín hiệu pinMode(ledr,OUTPUT); pinMode(ledy,OUTPUT); pinMode(ledg,OUTPUT); pinMode(relay,OUTPUT);
3 Code giao tiếp giữa blynk app và NodeMCU
BLYNK_WRITE(V2) { // điều chỉnh chế độ value1 = param.asInt();
BLYNK_WRITE(V3) { // Lấy giá trị ngưỡng trên
BLYNK_WRITE(V4) { // Lấy giá trị ngưỡng duoi
BLYNK_WRITE(V9) { // Nut nhan bat tat relay button=param.asInt();
4 Code xuất tín hiệu lên các chức năng hiển thị
Blynk.virtualWrite(V6,"Độ ẩm cao"); //hiển thị trên LCD dòng 1
5 Code lệnh điều khiển chương trình if (value1 == 1){ if (phantram > Ref1){ appledr.off(); appledg.off(); appledy.on(); digitalWrite(ledr,LOW); digitalWrite(ledg,LOW); digitalWrite(ledy,HIGH); digitalWrite(relay,LOW);
Blynk.notify("Độ ẩm cao");
Blynk.virtualWrite(V6,"Độ ẩm cao"); //hiển thị trên LCD dòng 1 } else if (phantram < Ref2){ appledr.on(); appledg.off(); appledy.off(); digitalWrite(ledr,HIGH);
37 digitalWrite(ledg,LOW); digitalWrite(ledy,LOW); digitalWrite(relay,HIGH);
Blynk.notify("Độ ẩm thấp");
Blynk.virtualWrite(V6,"Đang tưới nước"); } else { appledr.off(); appledg.on(); appledy.off(); digitalWrite(ledr,LOW); digitalWrite(ledg,HIGH); digitalWrite(ledy,LOW); digitalWrite(relay,LOW);
Blynk.virtualWrite(V6,"Độ ẩm BT"); }
} else { if (button == 1){ digitalWrite(relay,HIGH);