Khối điều khiển trung tâm chính

Một phần của tài liệu Thiết kế và thi công mô hình vườn thông minh (Trang 55 - 69)

CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG

3.2. THIẾT KẾ HỆ THỐNG PHẦN CỨNG

3.2.1. Khối điều khiển trung tâm chính

Khối xử lý trung tâm với nhiệm vụ kết nối Internet thông qua Wifi, kết nối các cảm biến, điều khiển động cơ và trao đổi dữ liệu với CSDL.

Về thiết bị phần cứng, chúng ta có rất nhiều sự lựa chọn vi điều khiển phù hợp với mức độ muốn tìm hiểu và khả năng của mình. Hiện nay, tập trung chủ yếu vào các loại như PIC, AT mega, AVR…

Bên cạnh việc xử lý dữ liệu từ cảm biến, khối xử lý trung tâm còn phải đảm bảo giao tiếp được với Wifi để có thể trao đổi dữ liệu với CSDL. Một trong những linh kiện đặc thù đảm nhiệm vai trò Wireless hiện nay tại thị trường Việt Nam đó là ESP8266. Tuy nhiên với số lượng cảm biến cần giao tiếp cũng như điều khiển phần động cơ thì các dòng sản phẩm của Arduino rất phổ biến hiện nay với các mã nguồn, thư viện phong phú. Tiêu biểu cho dòng vi điều khiển này là các board Arduino Uno, Mega...

Với những đặc điểm thuận lợi trên nhóm thực hiện quyết định chọn board NodeMCU v1.0 để giao tiếp với cảm biến cũng như đảm nhiệm chức năng đưa dữ liệu lên Internet và board Arduino Uno R3 để điều khiển động cơ cho đề tài của mình.

Hình 3.3 Board NodeMCU v1.0 và board Arduino Uno R3

Hai vi điều khiển sử dụng kỹ thuật truyền UART để trao đổi dữ liệu với nhau qua 2 chân Tx và Rx.

Hình 3.4 Sơ đồ kết nối khối trung tâm 3.2.1.1. Board NodeMCU

Hình 3.5 Sơ đồ kết nối khối cảm biến và đèn của hệ thống với NodeMCU Cảm biến DHT11, cảm biến mưa và cảm biến quang trở được kết nối với board NodeMCU qua 2 chân D1, D5 và A0. Module Relay kết nối với NodeMCU qua chân D2 có công dụng bật, tắt đèn của hệ thống.

Lưu đồ thuật toán:

Hình 3.6 Lưu đồ thuật toán khối điều khiển giữa khối trung tâm và CSDL

 Để hệ thống hoạt động trước tiên cần khai báo các thư viện hỗ trợ đọc cảm biến, kết nối WiFi, kết nối Firebase, kết nối web server.

 Tiếp theo là khai báo và định nghĩa các chân để đọc cảm biến cũng như tốc độ của chip.

 Kiểm tra kết nối WiFi, nếu chưa kết nối thì chờ kết nối. Khi đã kết nối được đến WiFi thì sẽ gửi lệnh kết nối đến FireBase và website.

 Sau khi thiết lập các kết nối thì vi xử lý đọc các giá trị cảm biến nhiệt độ, độ ẩm và ánh sáng, cảm biến mưa để đẩy lên Firebase và website.

 NodeMCU sẽ tiếp tục giao tiếp với Arduino để nhận dữ liệu cảm biến độ ẩm đất từ Arduino gửi qua đồng thời xem xét các điều kiện để điều khiển bật tắt đèn.

 Các trạng thái bơm được điều khiển từ app android sẽ được cập nhật đến Firebase, NodeMCU có nhiệm vụ lấy các tín hiệu điều khiển này để gửi qua cho Arduino thông qua giao tiếp UART để Arduino điều khiển máy bơm.

Hình 3.7 Lưu đồ đọc cảm biến ánh sáng

NodeMCU đọc giá trị cảm biến ánh sáng để điều khiển trạng thái của đèn. Nếu giá trị ánh sáng đọc được lớn hơn 450 thì NodeMCU cho chân D2 lên mức High làm cho relay điều khiển đèn được bật.

Hình 3.8 Lưu đồ đọc cảm biến nhiệt độ, độ ẩm DHT11

Cảm biến DHT11 được đọc tại chân D1 của NodeMCU để đo giá trị nhiệt độ và độ ẩm của môi trường.

Hình 3.9 Lưu đồ đẩy dữ liệu cảm biến lên Firebase

Khi các giá trị cảm biến được đọc và xử lý thì NodeMCU có nhiệm vụ đẩy các thông số này lên Firebase.

Cấu trúc Firebase có 6 user từ user1 đến user6. Các thông số của khu vực nào sẽ được đẩy lên user tương ứng đó.

 Nhiệt độ sẽ được đẩy vào trường user/data/temp.

 Độ ẩm được đẩy vào trường user/data/air_humi.

 Độ ẩm đất được đẩy vào trường user/data/soilmoist.

 Ánh sáng được đẩy vào trường user/data/flux.

Hình 3.10 Lưu đồ gửi dữ liệu lên web server

Các dữ liệu cảm biến được lưu trữ tại Firebase và các dữ liệu cảm biến sẽ được NodeMCU tổng hợp lại thành một chuỗi có dạng “tencay=" + tencay5 +

"&ngaytrong=" + ngaytrong5 + "&nhietdo=" + String(t) + "&doam=" + String(h) + "&doamdat=" + String(sm5) + "&anhsang=" + String(l) + "&username=" + user5 + "&password=" + password5 + "&phone=" + phone5” và được gửi lên web server thông qua url nhờ giao thức HTTP để các thông số này được cập nhật vào CSDL.

Hình 3.11 Đọc dữ liệu cảm biến từ UART

Sau khi được khởi chạy, chương trình tiến hành đọc dữ liệu từ UART. Tìm ký tự “,” và tách chuỗi dữ liệu nhận ra. Chuyển các chuỗi này thành kiểu dữ liệu số thực và lưu vào giá trị cảm biến độ ẩm đất.

Hình 3.12 Lưu đồ lấy dữ liệu từ Firebase

NodeMCU kết nối đến Firebase và lấy các thông số tên cây, ngày trồng, user name, pass, phone được gửi qua từ app android để gửi qua url nhằm cập nhật các thông số này vào CSDL.

Hình 3.13 Lưu đồ điều khiển bơm bằng tay

Sau khi người dùng chuyển qua chế độ điều khiển bằng tay và muốn bật ON bơm lên, chương trình sẽ gửi vị trí khu vực cần được bơm qua UART cho Arduino.

Sau đó sẽ kiểm tra tín hiệu từ cảm biến mưa. Nếu tín hiệu đọc về là 0 tương ứng với bơm đã được bật, NodeMCU sẽ cập nhật trạng thái bơm lên CSDL. Sau 3 giây bơm sẽ OFF và cập nhật lại trạng thái bơm đồng thời gọi chương trình đọc cảm biến để lấy giá trị cảm biến mới nhất. Cuối cùng là cập nhật giá trị độ ẩm đất lên CSDL và kết thúc chương trình.

3.2.1.2. Board Arduino Uno R3

Hình 3.14 Lưu đồ giải thuật điều khiển động cơ và đọc cảm biến độ ẩm đất

Sau khi cấp nguồn, Arduino tiến hành khởi tạo các giá trị ban đầu. Nếu có tín hiệu từ NodeMCU gửi dữ liệu thông qua UART Arduino sẽ đọc dữ liệu và khởi chạy chương trình điều khiển động cơ bơm. Tín hiệu từ NodeMCU gửi cho Ardu0ino chính là vị trí của cây trồng cần được bơm nước theo cơ chế điều khiển bằng tay. Nếu không có tín hiệu UART thì tiến hành đọc giá trị cảm biến độ ẩm đất từ 6 chân analog trên board (A0-A5). Sau đó board sẽ kiểm tra xem có tín hiệu cảm biến nào có giá trị nhỏ hơn 70 hay không. Nếu có sẽ gọi chương trình điều khiển động cơ để bơm nước vào đúng vị trí cần bơm và kết thúc chương trình.

Hình 3.15 Sơ đồ kết nối điều khiển bơm

2 module điều khiển động cơ L298N được kết nối với Arduino qua các chân 4-7 (động cơ trục x) và 8-11 (động cơ trục y). Các ngõ ra OUT1X-OUT4X và OUT1Y-OUT4Y được kết nối với 3 motor Step tượng trưng cho 2 trục X, Y của mô hình. Động cơ bơm DC được kết nối với chân số 2 trên Arduino.

Hình 3.16 Lưu đồ giải thuật điều khiển động cơ bơm

Sau khi nhận giá trị vị trí cây trồng cần bơm, hệ thống tiến hành xử lý chọn chiều chuyển động cũng như khoảng cách để điều khiển cho 2 trục X và Y để có thể di chuyển đến vị trí cần được bơm 1 cách chính xác nhất.

Khi đến được vị trí cần bơm Arduino sẽ tiến hành bật tín hiệu ON bơm qua chân PIN 2 để bật Relay máy bơm lên và sau 3 giây bơm sẽ tắt rồi kết thúc chương trình.

Hình 3.17 Sơ đồ kết nối cảm biến độ ẩm đất

6 cảm biến độ ẩm đất được kết nối lần lượt với 6 chân ADC của Arduino từ A0-A5.

Hình 3.18 Lưu đồ giải thuật đọc cảm biến độ ẩm đất

Sau khi khởi động chương trình tiến hành đọc 6 giá trị cảm biến độ ẩm đất qua các chân analog của board Arduino (A0-A5) rồi ghép các giá trị cảm biến thành chuỗi và gửi cho NodeMCU thông qua UART.

Một phần của tài liệu Thiết kế và thi công mô hình vườn thông minh (Trang 55 - 69)

Tải bản đầy đủ (PDF)

(102 trang)