Hệ thống tưới nước thông minh có sử dụng học máy, đồ án lập trình hệ thống và vi điều khiển bách khoa đà nẵng, bách khoa đà nẵng, Hệ thống tưới nước thông minh, học máy trong tưới nước , đồ án vi điều khiển, đồ án lập trình hệ thống và vi điều khiển điều khiển
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
-o0o -
BÁO CÁO ĐỒ ÁN LẬP TRÌNH HỆ THỐNG VÀ VI ĐIỀU KHIỂN
ĐỀ TÀI:
HỆ THỐNG TƯỚI CÂY THÔNG MINH
GIẢNG VIÊN HƯỚNG DẪN: Huỳnh Hữu Hưng
STT NHÓM: 8
HỌ VÀ TÊN SINH VIÊN
LỚP HỌC PHẦN
ĐỒ ÁN
ĐIỂM QUÁ TRÌNH (do GVHD ghi)
ĐIỂM BẢO VỆ (do GV chấm ghi) Nguyễn Đăng Bin 17N10C
Lê Xuân Mạnh 17N10A
Nguyễn Đức Minh 17N10C
Hoàng Long Nhật 17N10C
ĐÀ NẴNG, 07/2020
Trang 2TÓM TẮT ĐỒ ÁN
Hiện nay, hệ thống tưới nước thông minh là một nhu cầu cần thiết đối với nhiều người
có thú vui trồng cây cảnh hay vườn rau trong không gian trống của nhà mình nhưng công việc lại bận rộn Bài báo cáo này sẽ trình bày việc xây dựng một mô hình hệ thống tưới nước sử dụng arduino, esp8266, các cảm biến liên kết với ứng dụng máy tính để thực hiện việc tưới nước dựa trên việc thu thập dữ liệu và sử dụng thuật toán Regression trong học máy Sau khi tìm hiểu lắp ráp mạch, xây dựng mô hình thì hệ thống đã tự động tính toán được lượng nước tối ưu nhất cần tưới cho cây trồng trong một lượng đất cố định
Trang 3Mục lục
I Giới thiệu 3
I.1 Thực trạng và vấn đề cần giải quyết 3
I.2 Đề xuất giải pháp 3
I.3 Phân công nhiệm vụ 3
II Giải pháp 4
II.1 Sơ đồ mạch 4
II.1.1 Sơ đồ tổng quan 4
II.1.2 Sơ đồ kết nối các linh kiện 5
II.1.3 Sơ đồ giải thuật 5
II.2 Linh kiện 10
III Kết quả 13
III.1 Mô hình sản phẩm 13
III.2 Dữ liệu đã sử dụng 14
III.2.1 Nguồn gốc dữ liệu và cách thức thu thập 14
III.2.2 Tính chất dữ liệu 14
III.2.3 Cách phân chia và kích thước tập huấn luyện, kiểm thử 15
III.3 Điều kiện tiến hành thực nghiệm 15
III.4 Quy trình và điều kiện kiểm thử hệ thống 15
IV Kết luận 16
IV.1 Kết quả đạt được 16
IV.2 Hướng phát triển 16
V Tài liệu tham khảo 16
Trang 4I Giới thiệu
I.1 Thực trạng và vấn đề cần giải quyết
Hiện nay, nhiều người có thú vui trồng cây cảnh, vườn rau trong không gian trống của nhà mình như: sân thượng, ban công, Tuy nhiên sẽ có những lúc công việc bận rộn vườn rau sẽ không được ai chăm sóc Ở nước ta, các hệ thống phục vụ nhu cầu vẫn còn ít, yêu cầu đặt ra cần có hệ thống tưới nước tự động có thể tính toán các thông
số cần thiết để tự động tưới nước
I.2 Đề xuất giải pháp
- Kết hợp chức năng của Arduino Uno, esp8266, cảm biến nhiệt độ, độ ẩm đất để thu thập dữ liệu và thực hiện việc tưới thông qua ứng dụng máy tính
- Sử dụng thuật toán Regression trong học máy để tính toán lượng nước tối ưu nhất cho cây trồng
I.3 Phân công nhiệm vụ
Dưới đây là bảng phân công nhiệm vụ của các thành viên :
Bảng 1 Phân công nhiệm của các thành viên
Thành viên Nhiệm vụ
Nguyễn Đăng Bin Tìm hiểu về Arduino & ESP8266, lập trình Arduino &
ESP8266, gửi và nhận dữ liệu giữa Arduino, ESP8266 với server, lắp ráp mạch, viết báo cáo
Lê Xuân Mạnh Tìm hiểu về Machine learning, viết app nhận dữ liệu để xử lý,
gửi và nhận dữ liệu giữa app với server, thu thập và xử lí dữ liệu, viết báo cáo
Nguyễn Đức Minh Tìm hiểu về server, liên kết server với App, gửi và nhận dữ
liệu giữa App với server, thu thập dữ liệu, viết báo cáo Hoàng Long Nhật Tìm hiểu về server, liên kết server với Arduino, gửi và nhận dữ
liệu giữa Arduino với server, làm slide, viết báo cáo
Trang 5II Giải pháp
II.1 Sơ đồ mạch
II.1.1 Sơ đồ tổng quan
Hình 1 Sơ đồng tổng quan của sản phẩm
Nguyên lý hoạt động:
(1) App gửi yêu cầu lấy dữ liệu đến Server
(2) (3) Yêu cầu được chuyển tiếp từ Server sang Esp8266 rồi đến Arduino (4) Arduino thu thập nhiệt độ, độ ẩm từ các cảm biển gắn ở vườn cây
(5) (6) (7) Dữ liệu được truyền từ Arduino sang Esp8266 qua Server rồi vể App
(8) (9) (10) Lượng nước tưới sau khi tính toán được gửi từ App đến Arduino thông qua Server và Esp8266
(11) Arduino tiến hành tưới cây bằng lượng nước từ dữ liệu nhận được
Trang 6II.1.2 Sơ đồ kết nối các linh kiện
Hình 2 Sơ đồ kết nối linh kiện phần cứng
II.1.3 Sơ đồ giải thuật
a) Sơ đồ nguyên lý hoạt động của server
Hình 3 Sơ đồ nguyên lý hoạt động của server
Server đóng vai trò chuyển tiếp lệnh và dữ liệu qua lại app và esp8266
Trang 7b) Giao tiếp giữa Arduino với Esp8266, cảm biến và bơm nước
Hình 4 Sơ đồ giao tiếp giữa Arduio với các linh kiện
Sau khi thiết lập các thông số, khai báo linh kiện, các hàm lệnh, chương trình sẽ
đi vào vòng lặp để chờ nhận lệnh bao gồm lệnh send để nhận dữ liệu tưới nước hoặc lệnh flow để thu thập nhiệt độ, độ ẩm và gửi đi dữ liệu cho esp8266
Trang 8c) Giao tiếp giữa Esp8266 với Server và Arduino
Hình 5 Sơ đồ giao tiếp giữa Esp8266 với Server và Arduino
Khi bắt đầu, eps8266 sẽ tiến hành kết nối tới mạngWIFI và Socket Server Khi
đã kết nối thành công, esp8266 sẽ tiến vào vòng lặp đợi lệnh, nó sẽ bắt lệnh flow từ server rồi chuyển tiếp sang arduino và bắt lệnh Farduino để lấy dữ liệu nhiệt độ, độ ẩm
từ arduino và gửi lên server
Trang 9d) Giao tiếp App và Server
Hình 6 Sơ đồ giao tiếp giữa App và Server
Sau khi chạy chương trình, hệ thống sẽ tiến hành kết nối với WIFI và Socket server Tiếp đó kiểm tra thời gian, nếu đã đến thời gian tưới thì sẽ gửi lệnh flow về server để yêu cầu dữ liệu Sau khi nhận được thì tiến hành tính toán và gửi lệnh send chứa lượng nước cần tưới về server
Trang 10e) Sơ đồ học máy
Hình 7 Sơ đồ học máy
Quá trình huấn luyện mô hình (training model): Mô hình lấy dữ liệu từ file
csv đã lưu các dữ liệu Sau đó ta chia dữ liệu thành 90% để cho máy học thông qua thuật toán regression và 10% còn lại để dùng đánh giá model Thực hiện huấn luyện
mô hình thông qua thư viện sciki-sklearn bằng thuật toán regression Sau khi thực hiện quá trình training ta dùng thuật toán sai số trung bình bình phương MSE(Mean Squared Error) Mean Square Error là phương pháp đo sự chênh lệch trung bình bình phương giữa giá trị thực tế và giá trị dự đoán[3] Lưu mô hình đã được training để dự đoán giá trị sau này
Trang 11Quá trình dự đoán: Mô hình nhận dữ liệu từ server gửi xuống rồi thông qua
mô hình đã được học qua quá trình huấn luyện để dự đoán lượng nước cần tưới Lưu giá trị dự đoán vào file dữ liệu và gửi giữ liệu lên server
II.2 Linh kiện
Trong quá trình thực hiện đồ án, những linh kiện được sử dụng là: Arduino Uno R3, ESP8266, cảm biến nhiệt độ đất, cảm biến độ ẩm đất, Modelu Relay 5VDC, động
cơ DC bơm nước P385 12VDC, …
Bảng 2 Bảng mô tả linh kiện
Linh kiện Thông số kĩ thuật và nguyên lý hoạt động Arduino Uno R3
- Arduino là một bo mạch xử lý
được dùng để lập trình tương tác
với các thiết bị phần cứng như
cảm biến nhiệt độ, độ ẩm, động
cơ, đèn LED nhấp nháy, màn
hình LCD,… hay những ứng
dụng khác
- Thông số kỹ thuật:
+ Điện áp hoạt động: 5V DC + Số chân Digital I/O: 14 (6 chân hardware PWM)
+ Số chân Analog: 6 + Dòng ra tối đa (5V): 500mA + Dòng ra tối đa (3.3V): 50mA
- Nguyên lý hoạt động:
+ Thu thập nhiệt độ từ cảm biến nhiệt độ qua chân serial 8 bằng thư viện DallasTemperature
+ Thu thập độ ẩm từ cảm biến độ ẩm thông qua chân Analog 0
+ Nhận và truyền lệnh với esp8266 thông qua 2 chân serial 2, 3 bằng cách sử dụng thư viện SoftwareSerial và SerialCommand
+ Bật tắt Module Relay để điều khiển tưới nước thông qua chân serial 7
- Code kết nối Arduino với ESP8266:
sCmd.readSerial();
SoftwareSerial mySerial(RX, TX); SerialCommand sCmd(mySerial);
mySerial.print(command);
root2.printTo(mySerial);
Trang 12Esp8266
- ESP8266 là kít phát triển dựa
trên nền chíp Wifi SoC Bên
trong ESP8266 có sẵn một lõi vi
xử lý Hiện tại có hai ngôn ngữ
có thể lập trình cho ESP8266: sử
dụng trực tiếp phần mềm IDE
của Arduino để lập trình với bộ
thư viện riêng hoặc sử dụng
phần mềm node MCU
- Thông số kỹ thuật:
+ Nguồn cấp 5VDC + GPIO giao tiếp mức logic 3.3V
- Nguyên lý hoạt động:
+ Nhận và truyền lệnh và dữ liệu từ Arduino thông qua chân D1, D2 bằng thư viện SoftwareSerial và SerialCommand
+ Nhận và truyền lệnh và dữ liệu từ Socket server thông qua thư viện SocketIOClient và ESP8266WiFi
- Code kết nối:
+ Kết nối với ardunio:
SoftwareSerial mySerial(RX, TX);
SerialCommand sCmd(mySerial);
sCmd.readSerial();
mySerial.print(RID);
mySerial.print(Rfull);
+ Kết nối với Server:
socket.monitor();
socket.send(command, json);
Cảm biến nhiệt độ đất DS18B20
- Cảm biến nhiệt độ đất rất hay
được ứng dụng trong các ứng
dụng đo nhiệt độ thời gian thực
Vì nó hoạt động khá chính xác
với sai số nhỏ, đồng thời với
kích thước nhỏ và giá thành rẻ là
một trong những ưu điểm của
nó
- Thông số kỹ thuật:
+ Điện áp đầu vào: 3.0-5.5V + Khoảng nhiệt độ đo: -55 °C đến +125°C + Độ chính xác từ ± 0.5 °C trong khoảng
10 °C đến +85 °C + Đầu ra : VCC (Red), DATA (Blue), GND (Black)
- Nguyên lý hoạt động:
+ Thu thập nhiệt độ rồi gửi đến Ardunio qua chân serial 8
- Kết nối với Arduino:
#define ONE_WIRE_BUS 8 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); Sensors.requestTemperatures();
Celsius =sensors.getTempCByIndex(0);
Trang 13Cảm biến độ ẩm đất
- Cảm biến độ ẩm đất thường
được sử dụng trong các mô hình
tưới nước tự động, vườn thông
minh, Cảm biến giúp xác định
độ ẩm của đất qua đầu dò và trả
về giá trị analog, digital qua 2
chân tương ứng để giao tiếp với
vi điều khiển để thực hiện vô số
các ứng dụng khác nhau [2]
- Thông số kỹ thuật:
+ Điện áp hoạt động: 3.3~5VDC
+ Tín hiệu đầu ra: Analog theo điện áp cấp nguồn tương ứng Digital có High hoặc Low, có thể điều chỉnh độ ẩm mong muốn bằng biến trở thông qua
mạch so sánh LM393 tích hợp
- Nguyên lý hoạt động:
+ Thu thập độ ẩm đất rồi truyền đến Arduino qua chân Analog 0
- Kết nối với Arduino:
int sensor = A0;
int j = analogRead(sensor);
j=map(j,0,1023,100,0);
Module Relay 5VDC
- Module Relay 1 kênh 5V dùng
dòng điện nhỏ của vi điều khiển,
arduino, PLC, esp8266, để
điều khiển các thiết bị điện, đồ
dùng điện hoạt động ở mức điên
áp cao như điện sinh hoạt, hay
trong các ứng dụng thiết bị
thông minh
- Thông số kỹ thuật:
+ Tải tối đa: AC 250V / 10A, DC 30V / 10A
+ Dòng kích hoạt: 5mA + Điện áp làm việc: 5V
- Nguyên lý hoạt động:
+ Chân kích để bật tắt Module relay được nối với chân serial 7 của arduino để nhận tín hiệu điều khiển để điều khiển bơm nước
- Kết nối Module relay với Arduino và ESP8266:
digitalWrite(7, LOW);
delay(t);
digitalWrite(7, HIGH);
Động cơ DC bơm nước Water
Pump P385 12VDC
- Thông số kỹ thuật:
+ Loại động cơ: P385
+ Điện áp sử dụng: 6~12VDC + Dòng điện sử dụng: 0.5~0.7A + Lưu lượng bơm: 1~2L / 1 phút
- Nguyên lý hoạt động:
+ Tưới nước theo điều khiển của Module
Trang 14Bảng 3 Bảng chi phí các linh kiện
lượng
Đơn giá (VNĐ)
Thành tiền (VNĐ)
6 Động cơ DC bơm nước Water Pump P385 12VDC 1 60.000 60.000
III Kết quả
III.1 Mô hình sản phẩm
Hình 8 Mô hình sản phẩm tưới nước thông minh
Trang 15III.2 Dữ liệu đã sử dụng
III.2.1 Nguồn gốc dữ liệu và cách thức thu thập
- Nguồn gốc dữ liệu từ quá trình thu thập dữ liệu hàng ngày trong các khung giờ với điều kiện nhiệt độ, độ ẩm khác nhau
- Cách thức thu thập:
Mỗi ngày dựa vào mức độ chiếu sáng của mặt trời thì nhiệt độ đất và độ ẩm đất khác nhau, do đó chúng ta chia thành 4 khung giờ: 6h - 9h (sáng sớm), 9h – 16h (ánh nắng mặt trời lớn), 16h – 19h (mặt trời bắt đầu tắt nắng), 19h - 24h (trời tối) Mỗi khung giờ chúng ta sẽ có 8 mẫu do đó mỗi ngày ta sẽ thu được 32 mẫu Để thu thập một mẫu:
+ Bước 1: Đo nhiệt độ đất và độ ẩm đất ban đầu
+ Bước 2: Tưới từng lượng nước nhỏ rồi cộng với lượng nước đã tưới trước đó (lượng nước khi chưa tưới bằng 0)
+ Bước 3: Tiếp tục đo lại, nếu độ ẩm nhỏ hơn 82% thì quay lại bước 2
+ Bước 4: Kết thúc quá trình đo, ta có được nhiệt độ đất và độ ẩm đất ban đầu và tổng lượng nước đã tưới
III.2.2 Tính chất dữ liệu
Hình 9 Bản ghi dữ liệu của 5 giá tri đầu tiên
Tất cả có 1040 mẫu được đo trong 33 ngày từ: 28/5/2020 – 29/6/2020 Trong đó:
- Nhiệt độ đất đo được dao động trong khoảng 28oC - 34oC Nhiệt độ lớn nhất trong khoảng thời gian 11h – 16h và nhỏ nhất trong các khoảng thời gian: 6h – 8h và 21h – 24h
Trang 16- Độ ẩm đất đo được dao động trong khoảng từ 20% - 86% Độ ẩm lớn nhất vào các khoảng thời gian: 6h – 8h, 23h – 24h hoặc vào những ngày mưa và nhỏ nhất vào khoảng thời gian: 14h -16h
III.2.3 Cách phân chia và kích thước tập huấn luyện, kiểm thử
Dữ liệu gồm có 1040 mẫu, được chia thành hai phần: 90% dùng để huấn luyện (training) và 10% dùng để kiểm thử (test)
III.3 Điều kiện tiến hành thực nghiệm
- Sử dụng hàm regression thư viện scikit-learn của Python để dự đoán giá trị thực nghiệm với tham số đầu vào là nhiệt độ, độ ẩm, thể tích đất và đầu ra là lượng nước cần tưới
- Điều kiện môi trường: dữ liệu được thu thập vào cả ngày mưa lần ngày nắng, vào tất cả các giờ trong khoảng 6h – 24h
III.4 Quy trình và điều kiện kiểm thử hệ thống
Hệ thống và thuật toán được đánh giá thông qua các tiêu chí như độ chính xác, độ
ổn định, tốc độ thực thi, khả năng mở rộng dự án cụ thể:
- Tốc độ thực thi một quá trình tưới là thời gian phản hồi giữa arduino, esp8266, server, app với điều kiện mạng ổn định là không quá 2 giây
- Độ chính xác của thuật toán được đánh giá qua tập test bằng hàm đánh giá Mean Square Error trong thư viện scikit-learn của python Mean Square Error (MSE) là phương pháp đo sự chênh lệch trung bình bình phương giữa giá trị thực tế và giá trị dự đoán[3], giá trị này càng nhỏ thì mô hình học càng chính xác Khi đánh giá
mô hình sản phẩm ta thấy MSE = 5.67 nên mô hình học tương đối tốt
- Độ ổn định: hệ thống có thể dự đoán với nhiệt độ đất, độ ẩm đất bất kì trong điều kiện mạng ổn định
- Khả năng mở rộng: hệ thống có thể áp dụng với nhiều cây trồng khác nhau với những diện tích đất khác nhau và điều kiện thời tiết khác nhau
Trang 17IV Kết luận
IV.1 Kết quả đạt được
Qua đồ án này nhóm chúng em đã thiết kế và xây dựng thành công hệ thống tưới nước thông minh được thực hiện thông qua ứng dụng trên máy tính, hệ thống có thể thực hiện các công việc sau:
- Thực hiện đo nhiệt độ đất và độ ẩm đất tại một thời điểm bất kì trong ngày dựa vào cảm biến nhiệt độ đất và cảm biến độ ẩm đất
- Sử dụng học máy để tính toán lượng nước cần tưới tối ưu nhất cho cây trồng
- Điều khiển hệ thống một cách dễ dàng, thuận tiện thông qua một ứng dựng trên máy tính
Ngoài ra thông qua đồ án này giúp cho mỗi cá nhân hoàn thiện hơn về khả năng làm việc nhóm, khả năng trình bày báo cáo, cũng như biết thêm nhiều kiến thức mới trong lập trình và trong cuộc sống
Bên cạnh đó nhóm cũng gặp không ít khó khăn như: tình trạng dịch nCovid kéo dài, các thành viên ở cách xa nhau nên khó khăn trong làm việc nhóm; khó khăn trong việc thu lượng lớn dữ liệu phục vụ cho học máy; hay khó khăn trong việc tìm hiểu những kiến thức chưa được học,… Vì vậy việc sai sót là không thể tránh khỏi mong thầy (cô) thông cảm Nhóm chúng em rất mong nhận được sự ủng hộ cũng như những đánh giá, nhận xét để có thể hoàn thiện hơn về hệ thống này
IV.2 Hướng phát triển
Trong tương lai, nếu có thời gian và kinh phí chúng em có thể tích hợp sử dụng thêm ứng trên điện thoại nhằm tạo thuận lợi cho người sử dụng Ngoài ra có thể thu thập nhiều dữ liệu hơn trên nhiều vùng miền khác nhau để tăng độ chính xác hơn, có thể sử dụng ở các vùng miền khác nhau Bên cạnh đó có thể tính toán chính xác lượng nước cần tưới cho từng loại cây trồng; sử dụng đồng thời nhiều cảm biến nhiệt độ và
độ ẩm để thực hiện tưới đồng thời nhiều cây ở những vị trí khác nhau
V Tài liệu tham khảo
[1] Link : http://arduino.vn/
[2] Link: https://hshop.vn/