Phần 6. Ứng dụng IoT để tưới cây tự động

0
3720

Bài viết trước đã đề cập đến cách theo dõi độ ẩm của đất. Bài viết này sẽ giới thiệu cách xây dựng các thành phần cốt lõi của hệ thống tưới nước tự động tùy thuộc độ ẩm của đất và thời gian cần thiết để các cảm biến phản ứng với các thay đổi và để các bộ truyền động thay đổi các đặc tính.

Một số nội dung chính của bài viết:

1. Cách điều khiển các thiết bị công suất lớn bằng các thiết bị IoT công suất thấp

2. Cách điều khiển Rơ le

3. Cách kiểm soát cây trồng qua MQTT

4. Vấn đề thời gian khi sử dụng cảm biến và cơ cấu truyền động

5. Cách thêm thời gian để kiểm soát cây trồng

1. Cách điều khiển các thiết bị công suất lớn từ thiết bị IoT công suất thấp

Các thiết bị IoT sử dụng điện áp thấp. Mặc dù các cảm biến và thiết bị truyền động công suất thấp như đèn LED chỉ cần nguồn điện áp thấp, nhưng để điều khiển thiết bị lớn hơn như máy bơm nước để tưới tiêu thì cần mức điện áp cao hơn. Với những máy bơm nhỏ sử dụng cho cây trồng trong nhà cũng cần bộ IoT dev với dòng điện lớn do đó có thể làm cháy bảng mạch.

Giải pháp đưa ra là kết nối máy bơm với nguồn điện bên ngoài và sử dụng bộ truyền động để bật máy bơm, tương tự như cách bật bóng đèn (chỉ tốn ít năng lượng để bật công tắc và đèn sẽ được kết nối với điện lưới 110v/240v).

Các thiết bị IoT thường cung cấp điện áp 3,3V hoặc 5V, ở mức dòng điện nhỏ hơn 1A.

Rơ le

Rơ le là một công tắc cơ điện có lõi là nam châm điện, có chức năng chuyển đổi tín hiệu điện thành chuyển động cơ học làm bật công tắc.

Nam châm điện là nam châm được tạo ra bằng cách cho dòng điện đi qua một cuộn dây. Khi bật điện, cuộn dây nhiễm từ còn khi ngắt điện, cuộn dây mất từ tính.

Trong một rơ le, mạch điều khiển có nhiệm vụ cấp nguồn cho nam châm điện. Khi nam châm điện bật sẽ kéo cần gạt di chuyển công tắc, đóng cặp tiếp điểm và tạo thành mạch kín đầu ra.

Khi mạch điều khiển tắt, nam châm điện tắt, nhả cần gạt và mở các tiếp điểm, tắt mạch đầu ra. Rơ le là thiết bị truyền động kỹ thuật số, khi có tín hiệu cao tới rơ le sẽ bật, tín hiệu thấp thì rơ le tắt.

Mạch đầu ra cấp nguồn cho phần cứng bổ sung, như hệ thống tưới tiêu. Thiết bị IoT bật rơ le, tạo thành mạch kín cấp nguồn cho hệ thống tưới nước cho cây. Khi thiết bị IoT làm tắt rơ le, ngắt nguồn điện vào hệ thống tưới do đó tắt nguồn nước.

Ví dụ với hệ thống trên: Khi bật rơ le, đèn LED trên rơ le sáng (báo rơ le đang bật), cấp nguồn cho máy bơm, máy bơm được bật và tưới nước cho cây.

Rơle cũng sử dụng để chuyển đổi giữa hai mạch đầu ra thay vì bật và tắt một mạch.

Rơ le điện

Nam châm điện không cần nguồn lớn để kích hoạt và kéo cần gạt, chỉ cần điều khiển bằng nguồn 3.3V hoặc 5V từ bộ IoT dev. Mạch đầu ra có thể có công suất lớn hơn tùy thuộc vào rơ le, gồm điện áp chính hoặc các mức nguồn cao hơn sử dụng trong công nghiệp. Do đó, bộ IoT Dev có thể điều khiển một hệ thống tưới tiêu, từ một máy bơm nhỏ tưới nước cho cây cho đến một hệ thống công nghiệp lớn cho toàn bộ trang trại.

Rơle Grove sử dụng nguồn 3.3V hoặc 5V để bật, tắt . Mạch điều khiển được kết nối với thiết bị IoT. Mạch đầu ra có hai đầu cuối nối với nguồn và đất. Mạch đầu ra có thể lên đến 250V ở 10A, đủ cấp nguồn chính cho một loạt các thiết bị.

Xét một máy bơm được cấp nguồn thông qua rơ le. Dây màu đỏ kết nối nguồn + 5V từ nguồn USB với một đầu cuối của mạch đầu ra của rơle, dây màu đỏ khác kết nối đầu kia của mạch đầu ra với máy bơm. Dây màu đen nối máy bơm với đất qua nguồn USB. Khi rơ le bật, tạo thành mạch kín cấp 5V để bật máy bơm.

2. Cách điều khiển rơ le

Các đường link bên dưới hướng dẫn cách điều khiển rơ le bằng thiết bị IoT:

Arduino – Wio Terminal

Single-board computer – Raspberry Pi

Single-board computer – Virtual device

3. Cách kiểm soát cây trồng qua MQTT

Trong ứng dụng tưới nước tự động, rơ le được điều khiển trực tiếp bởi thiết bị IoT tùy theo độ ẩm của đất. Trong hệ thống tưới tiêu, logic điều khiển cho phép đưa ra quyết định việc tưới nước bằng cách sử dụng dữ liệu từ nhiều cảm biến và cho phép thay đổi bất kỳ cấu hình nào từ một bộ điều khiển duy nhất. Sử dụng điều khiển rơle qua MQTT để mô phỏng tính năng trên.

Cách điều khiển rơle qua MQTT

1. Thêm các thư viện/pip package MQTT và code vào project soil-moisture-sensor để kết nối với MQTT. Đặt tên cho client ID là soilmoisturesensor_client có tiền tố là ID.

2. Thêm device code liên quan để gửi phép đo từ xa với cài đặt độ ẩm của đất. Với thông báo đo từ xa, đặt tên cho thuộc tính là soil_moisture.

3. Tạo một số server code cục bộ để subscribe đo từ xa và gửi lệnh điều khiển rơ le trong thư mục soil-moisture-sensor-server. Đặt tên cho thuộc tính trong thông báo lệnh relay_on và đặt ID cho client là soilmoisturesensor_server với tiền tố là ID.

4. Thêm device code liên quan để điều khiển rơle từ các lệnh đã nhận, sử dụng thuộc tính relay_on từ thông báo. Gửi true cho relay_on nếu soil_moisture lớn hơn 450, nếu không thì gửi false.

Đảm bảo code đang chạy trên thiết bị và máy chủ cục bộ, kiểm tra bằng cách thay đổi độ ẩm của đất hoặc thay đổi các giá trị do cảm biến ảo gửi hoặc thay đổi độ ẩm của đất bằng cách thêm nước hoặc tháo cảm biến từ đất.

4. Vấn đề thời gian khi sử dụng cảm biến và cơ cấu truyền động

Thời gian cho sự thay đổi độ ẩm của đất

Sau khi tưới nước cho cây, phải mất vài giây để chỉ số độ ẩm cần bổ sung của đất giảm xuống. Thực chất không phải do cảm biến hoạt động chậm, mà vì cần thời gian để nước ngấm qua đất.

Nếu tưới nước ngay gần cảm biến, chỉ số bổ sung độ ẩm của đất giảm rất nhanh, sau đó chỉ số này tăng ngược lại do nước gần cảm biến lan ra khắp phần còn lại của đất.

Trong sơ đồ trên, chỉ số độ ẩm của đất là 658. Khi tưới nước cho cây, chỉ số đọc được không thay đổi ngay lập tức vì nước vẫn chưa đến được cảm biến. Việc tưới nước thậm chí có thể kết thúc trước khi nước đến cảm biến và khi đó chỉ số chưa kịp giảm để phản ánh mức độ ẩm mới.

Khi viết code để điều khiển hệ thống tưới tiêu thông qua rơ le dựa trên mức độ ẩm của đất, cần cân nhắc độ trễ này và xây dựng thời gian thông minh cho thiết bị IoT.

Điều khiển cảm biến và thiết bị truyền động có tính đến yếu tố thời gian.

Bài toán: xây dựng hệ thống tưới tiêu cho một trang trại. Dựa trên loại đất, độ ẩm đất lý tưởng cho cây trồng phù hợp với điện áp tương tự là 400-450.

Cách giải bài toán này là lập trình thiết bị theo cách tương tự như đèn ngủ – khi cảm biến đọc được giá trị trên 450 thì bật rơ le để bật máy bơm. Vấn đề là cần khoảng thời gian để nước đi từ máy bơm qua đất đến cảm biến. Cảm biến sẽ phát tín hiệu dừng bơm nước khi phát hiện mức 450, nhưng mực nước sẽ tiếp tục giảm do nước được bơm tiếp tục ngấm qua đất do đó cuối cùng dẫn đến lãng phí nước, và nguy cơ bị hỏng rễ.

Quá nhiều nước cũng có thể có hại cho cây trồng như quá ít nước, và còn lãng phí một nguồn tài nguyên nước quý giá.

Giải pháp ở đây là cần phải hiểu rõ sự trễ về mặt thời gian từ khi bật thiết bị truyền động đến khi thay đổi chỉ số của cảm biến. Nghĩa là phải đợi một lúc trước khi cảm biến đo lại giá trị, và bộ truyền động cũng cần tắt một lúc trước khi thực hiện phép đo cảm biến tiếp theo.

Bao lâu thì phải bật rơle một lần? Khi cần tưới nước, nên bật rơ le trong thời gian ngắn, sau đó đợi nước ngấm hết rồi bật lại rơ le để kiểm tra lại độ ẩm.

Ví dụ, khi trồng dâu tây sử dụng cảm biến độ ẩm của đất và một máy bơm được điều khiển bằng rơ le. Khi thêm nước, cần khoảng 20 giây để độ ẩm của đất ổn định. Do đó cần tắt rơ le và đợi 20 giây trước khi kiểm tra lại mức độ ẩm. Thiếu nước thì có thể tưới thêm nên vẫn tốt hơn là tưới quá nhiều.

Quy trình tốt nhất để tưới nước như sau:

– Bật máy bơm trong 5 giây

– Chờ 20 giây

– Kiểm tra độ ẩm của đất

– Nếu mức chỉ số vẫn cao hơn mức cần thiết thì lặp lại các bước trên

Trong một số trường hợp, 5 giây có thể là quá lâu đối với máy bơm, đặc biệt nếu độ ẩm chỉ cao hơn mức yêu cầu một chút. Cách tốt nhất để biết thời gian sử dụng hợp lý là thử và điều chỉnh khi có dữ liệu cảm biến, với vòng phản hồi liên tục. Thậm chí có thể thu được thời gian chi tiết hơn, như bật máy bơm trong 1 giây khi chỉ số cao hơn 100 so với độ ẩm yêu cầu của đất, thay vì 5 giây cố định.

Có thể xem xét đến thời tiết khi điều khiển hệ thống tưới nước tự động khi trồng cây ngoài trời. Nếu dự kiến ​​có mưa thì có thể hoãn tưới nước cho đến khi hết mưa vì sau khi mưa đất có thể đủ ẩm vừa hiệu quả và không lãng phí nước.

5. Cách thêm thời gian vào server điều khiển cây trồng

Có thể sửa server code để kiểm soát thời gian của chu kỳ tưới nước và chờ độ ẩm của đất thay đổi. Logic của máy chủ để kiểm soát thời gian trễ là:

1. Đã nhận được tin nhắn từ xa

2. Kiểm tra độ ẩm của đất

3. Nếu độ ẩm trong phạm vi yêu cầu, không làm gì cả. Nếu chỉ số quá cao (độ ẩm của đất quá thấp) thì:

– Gửi lệnh để bật rơ le

– Chờ trong 5 giây

– Gửi lệnh tắt rơ le

– Chờ 20 giây để độ ẩm của đất ổn định

Chu kỳ tưới nước là quá trình từ khi nhận được thông báo đo từ xa đến khi sẵn sàng xử lý lại độ ẩm của đất, mất khoảng 25 giây. Thiết bị gửi chỉ số độ ẩm của đất cứ 10 giây một lần, vì vậy có sự chồng chéo khi nhận được thông báo trong khi máy chủ đang đợi mức độ ẩm của đất ổn định, khi đó có thể bắt đầu một chu kỳ tưới nước khác.

Có hai tùy chọn để giải quyết vấn đề này:

– Thứ nhất, thay đổi device code IoT để chỉ gửi kết quả đo từ xa mỗi phút một lần. Bằng cách này, chu trình tưới nước sẽ được hoàn thành trước khi tin nhắn tiếp theo được gửi đi.

– Thứ hai, hủy đăng ký đo từ xa trong chu kỳ tưới nước

Lựa chọn đầu tiên đôi khi không phù hợp với các trang trại lớn. Người dùng muốn nắm rõ độ ẩm của đất khi đất đang được tưới nước để sau này phân tích, như để biết lưu lượng nước ở các khu vực khác nhau trong trang trại để hướng dẫn cách tưới nước theo mong muốn hơn. Tùy chọn thứ hai hợp lý hơn. Code chỉ bỏ qua phép đo từ xa khi không cần sử dụng, nhưng vẫn hoạt động theo dõi các chỉ số khác.

Dữ liệu IoT không chỉ được gửi từ một thiết bị với chỉ một dịch vụ, mà nhiều thiết bị có thể gửi dữ liệu đến một bộ chuyển tiếp và nhiều dịch vụ có thể nhận dữ liệu từ bộ chuyển tiếp này. Ví dụ, một dịch vụ có thể nhận dữ liệu độ ẩm của đất và lưu trữ trong cơ sở dữ liệu để phân tích sau đó. Một dịch vụ khác cũng có thể thu dữ liệu từ một thiết bị đo từ xa để điều khiển hệ thống tưới tiêu.

Cách thêm thời gian vào máy chủ điều khiển cây trồng

Cập nhật server code để bật rơ le trong 5 giây, sau đó đợi 20 giây.

1. Mở thư mục soil-moisture-sensor-server trong VS Code. Đảm bảo môi trường ảo đã được kích hoạt.

2. Mở file app.py

3.Thêm code sau vào cuối file app.py:

import threading

Câu lệnh này nhập luồng từ các thư viện Python, việc phân luồng cho phép python thực thi mã khác trong khi chờ đợi.

4. Thêm code sau vào trước hàm handle_telemetry để xử lý các thông báo đo từ xa mà server code nhận được:

water_time = 5
wait_time = 20

Code này xác định thời gian chạy rơ le (water_time) và thời gian chờ sau đó để kiểm tra độ ẩm của đất (water_wait).

5. Thêm phần sau:

def send_relay_command(client, state):
    command = { 'relay_on' : state }
    print("Sending message:", command)
    client.publish(server_command_topic, json.dumps(command))

Code này xác định hàm send_relay_command để gửi một lệnh qua MQTT để điều khiển rơle. Phép đo từ xa được tạo dưới dạng từ điển, sau đó được chuyển đổi thành chuỗi JSON. Giá trị được chuyển vào trạng thái xác định xem rơle nên bật hay tắt.

6. Sau hàm send_relay_code, thêm mã sau:

def control_relay(client):
    print("Unsubscribing from telemetry")
    mqtt_client.unsubscribe(client_telemetry_topic)

    send_relay_command(client, True)
    time.sleep(water_time)
    send_relay_command(client, False)

    time.sleep(wait_time)

    print("Subscribing to telemetry")
    mqtt_client.subscribe(client_telemetry_topic)

Các lệnh trên xác định hàm điều khiển rơle dựa trên thời gian cần thiết, bắt đầu bằng cách hủy đăng ký đo từ xa để không xử lý các thông báo về độ ẩm của đất trong khi đang tưới nước. Tiếp theo, gửi lệnh để bật rơ le, sau đó, chờ water_time trước khi gửi lệnh tắt rơ le. Cuối cùng, đợi độ ẩm của đất ổn định trong wait_time, sau đó đăng ký lại phép đo từ xa.

7. Thay đổi hàm handle_telemetry function như sau:

def handle_telemetry(client, userdata, message):
    payload = json.loads(message.payload.decode())
    print("Message received:", payload)

    if payload['soil_moisture'] > 450:
        threading.Thread(target=control_relay, args=(client,)).start()

Code này kiểm tra độ ẩm của đất. Nếu chỉ số lớn hơn 450, cần tưới nước, vì vậy gọi là hàm control_relay. Chức năng này được chạy ở chế độ nền trên một luồng riêng biệt.

8. Đảm bảo thiết bị IoT đang chạy, sau đó chạy code dưới đây. Thay đổi độ ẩm của đất và quan sát rơ le: rơ le sẽ bật trong 5 giây rồi tắt trong ít nhất 20 giây, chỉ bật nếu độ ẩm của đất không đủ

(.venv) ➜  soil-moisture-sensor-server ✗ python app.py
Message received: {'soil_moisture': 457}
Unsubscribing from telemetry
Sending message: {'relay_on': True}
Sending message: {'relay_on': False}
Subscribing to telemetry
Message received: {'soil_moisture': 302}

Cách để kiểm tra code này trong hệ thống mô phỏng là sử dụng đất khô, sau đó tưới nước bằng tay khi rơ le đang bật, ngừng tưới khi rơ le tắt.

Nếu muốn sử dụng máy bơm để xây dựng hệ thống tưới tiêu thực thì có thể sử dụng máy bơm nước 6V với nguồn điện đầu cuối USB sao cho nguồn điện được lấy từ máy bơm được kết nối qua rơ le.

Biên dịch: Bắc Đặng

Để cập nhật tin tức công nghệ mới nhất và các sản phẩm của công ty AIoT JSC, vui lòng truy cập link: http://aiots.vn hoặc linhkienaiot.com

0 0 Phiếu bầu
Article Rating
Subscribe
Notify of
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các bình luận