1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Hệ thống giám sát và điều khiểntưới tiêu thông qua các cảmbiến và ứng dụng web

58 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hệ Thống Giám Sát Và Điều Khiển Tưới Tiêu Thông Qua Các Cảm Biến Và Ứng Dụng Web
Tác giả Ngô Vũ Trường Sơn, Vũ Đức Thịnh, Trần Ngọc Minh, Đặng Hữu Công Hiếu
Người hướng dẫn TS. Hàn Huy Dũng
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ Thuật Vi Xử Lý
Thể loại báo cáo môn học
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 58
Dung lượng 6,74 MB

Cấu trúc

  • CHƯƠNG 2. MÔ TẢ ĐỀ TÀI 4 (12)
    • 1.1 Yêu cầu chức năng (12)
    • 1.2 Yêu cầu phi chức năng (12)
  • CHƯƠNG 3. CƠ SỞ LÝ THUYẾT 6 (14)
    • 2.1 Chế độ Station trong kết nối Wifi (14)
    • 2.2 Cơ chế ESP32 Webserver làm việc ở chế độ Wifi Station (15)
    • 2.3 Đọc tín hiệu analog bằng thư viện driver/adc.h (15)
    • 4.1 ESP32 (19)
    • 4.2 Cảm biến nhiệt độ, độ ẩm không khí DHT11 (20)
    • 4.3 Cảm biến độ ẩm đất (21)
    • 4.4 Relay (22)
    • 4.5 Mạch hạ áp LM2596 (23)
    • 4.6 Nguồn 5V (23)
  • CHƯƠNG 4. THIẾT KẾ HỆ THỐNG 15 (24)
    • 1.1 Sơ đồ khối hệ thống (24)
    • 1.2 Biểu đồ tuần tự (24)
    • 1.3 Sơ đồ thuật toán tự động bật tắt Relay máy bơm (25)
    • 1.4 Sơ đồ mạch (27)
    • 2.1 Thiết kế mạch điều khiển Relay (28)
    • 2.2 Tính toán công suất thành phần (29)
    • 3.1 Sơ đồ khối phần mềm (31)
    • 3.2 Xây dựng các Component (31)
    • 3.3 Xây dựng giao diện người dùng (45)
  • CHƯƠNG 5. KẾT QUẢ VÀ ĐÁNH GIÁ 40 (51)
    • 2.1 Chạy thử nghiệm chức năng hiển thị thông số (54)
    • 2.2 Chạy thử nghiệm chức năng điều khiển máy bơm (55)
    • 2.3 Chạy thử nghiệm chức năng tự động tưới tiêu (55)
    • 2.4 Đánh giá tổng quan toàn bộ hệ thống (55)

Nội dung

MÔ TẢ ĐỀ TÀI 4

Yêu cầu chức năng

Thu thập dữ liệu nhiệt độ và độ ẩm từ nhiều cảm biến khác nhau là bước quan trọng trong việc kiểm soát và điều chỉnh quá trình tưới tiêu Việc kết nối và thu thập thông tin từ các cảm biến này giúp tối ưu hóa hiệu quả tưới tiêu, đảm bảo cây trồng nhận được lượng nước cần thiết.

Hệ thống cần có khả năng hiển thị dữ liệu nhiệt độ và độ ẩm trên màn hình LED hoặc máy chủ web Điều này giúp người dùng theo dõi trạng thái môi trường hiện tại và nhận các cảnh báo nhanh chóng khi có sự thay đổi.

Hệ thống tưới tiêu thông minh cần xây dựng kịch bản tưới dựa trên dữ liệu nhiệt độ và độ ẩm từ cảm biến, với các thông số như mức độ ẩm tối thiểu, tối đa, ngưỡng nhiệt độ, thời gian và tần suất tưới Đồng thời, hệ thống cũng phải tự động điều khiển quá trình tưới, kích hoạt thiết bị như bơm nước hoặc van điều khiển, và điều chỉnh thời gian cũng như lượng nước cung cấp dựa trên thông tin thu thập được.

Yêu cầu phi chức năng

Hệ thống cần phải đạt độ tin cậy và ổn định cao để đảm bảo rằng dữ liệu về nhiệt độ và độ ẩm được thu thập chính xác, đồng thời quy trình tưới tiêu diễn ra theo đúng kế hoạch.

Hệ thống cần được trang bị các biện pháp bảo mật hiệu quả nhằm bảo vệ dữ liệu thu thập và quá trình điều khiển khỏi việc truy cập trái phép và ngăn chặn mất mát thông tin.

Hệ thống tưới tiêu cần phải thân thiện và dễ sử dụng, cho phép người dùng dễ dàng cấu hình các kịch bản tưới cũng như theo dõi trạng thái hoạt động của hệ thống.

Hệ thống cần được thiết kế với khả năng mở rộng và linh hoạt, cho phép kết nối dễ dàng với các cảm biến và thiết bị khác Đồng thời, hệ thống cũng nên có khả năng tích hợp với các hệ thống quản lý thông minh trong tương lai.

II Đặc điểm kỹ thuật

Tổng quan các yêu cầu chức năng của hệ thống:

• Tín hiệu đầu vào: Thông số môi trường như nhiệt độ, độ ẩm, độ ẩm đất

• Nguồn điện cung cấp cho mạch: 3.3V - 5V

• Tín hiệu đầu ra: Giao diện Webserver đưa ra thông báo để người dùng tương tác.

• Độ trễ tương tác giữa tín hiệu đầu vào và đầu ra: < 3s.

III Kế hoạch thực hiện

Bảng 2.1 Kế hoạch thực hiện

Thời gian Công việc Người thực hiện Ghi chú

31/5 - 10/6 Tìm hiểu đề tài, đặt ra các yêu cầu Cả nhóm

11/6 - 30/6 Lên kế hoạch thực hiện Cả nhóm

1/7 - 10/7 Bắt đầu viết báo cáo, slide Công Hiếu, Ngọc Minh Hoàn thiện 10/7 - 22/7 Mua linh kiện, lắp mạch Công Hiếu, Ngọc Minh

6/7 - 22/7 Lập trình Đức Thịnh, Trường Sơn Ổn

22/7 - 2/8 Hoàn thiện sản phẩm Cả nhóm

2/8 - 8/8 Kiểm thử Cả nhóm Ổn

1/8 - 8/8 Hoàn thiện báo cáo Cả nhóm Hoàn thiện

Bảng 2.2 Phân chia công việc chính Người thực hiện Công việc thực hiện Đóng góp Đặng Hữu Công Hiếu Viết báo cáo, xây dựng phần cứng, kiểm thử 25%

Vũ Đức Thịnh Viết báo cáo, thiết kế phần mềm, kiểm thử 25%

Ngô Vũ Trường Sơn Viết báo cáo, thiết kế phần mềm, kiểm thử 25%

Trần Ngọc Minh Viết báo cáo,xây dựng phần cứng, kiểm thử 25%

CƠ SỞ LÝ THUYẾT 6

Chế độ Station trong kết nối Wifi

Chế độ Station trong kết nối WiFi cho phép thiết bị như ESP32, điện thoại thông minh và các thiết bị IoT hoạt động như một "station", kết nối vào mạng WiFi đã có Điều này giúp thiết bị truy cập mạng, giao tiếp với máy chủ và các thiết bị khác, đồng thời tận dụng các dịch vụ mạng như truy cập Internet.

Cách chế độ Station hoạt động:

Trong chế độ Station, thiết bị tìm kiếm và liệt kê các mạng WiFi khả dụng trong phạm vi Người dùng hoặc mã lập trình có thể nhập thông tin đăng nhập, bao gồm tên mạng và mật khẩu, để kết nối với mạng WiFi mong muốn Khi thông tin chính xác được cung cấp, thiết bị sẽ gửi yêu cầu kết nối đến trạm cơ sở WiFi.

Trạm cơ sở thực hiện việc xác nhận thông tin đăng nhập và kết nối từ thiết bị Khi thông tin được xác minh hợp lệ, trạm cơ sở sẽ cấp phát địa chỉ IP cho thiết bị trong mạng.

Khi thiết bị kết nối thành công với mạng WiFi, nó có khả năng gửi và nhận dữ liệu, cho phép truy cập các dịch vụ mạng và tương tác với máy chủ Thiết bị có thể truyền tải thông tin qua các giao thức TCP/IP hoặc UDP, mở ra nhiều cơ hội cho việc trao đổi dữ liệu hiệu quả.

Khi không cần thiết hoặc khi gặp sự cố mất kết nối, thiết bị có thể ngắt kết nối với mạng WiFi bằng cách tắt chế độ WiFi hoặc yêu cầu thiết bị ngắt kết nối khỏi mạng.

Cơ chế ESP32 Webserver làm việc ở chế độ Wifi Station

ESP32 có thể hoạt động ở chế độ WiFi Station, cho phép nó kết nối với mạng không dây như một thiết bị Khi sử dụng chức năng máy chủ web, ESP32 có khả năng tạo ra một máy chủ web, giúp tương tác với các thiết bị khác trong mạng thông qua trình duyệt web.

Cơ chế hoạt động cơ bản của ESP32 Webserver khi hoạt động ở chế độ WiFi Station:

Để kết nối WiFi, ESP32 cần truy cập vào mạng WiFi như một thiết bị thông thường Việc này thường được thực hiện bằng cách cung cấp tên và mật khẩu mạng cho ESP32 thông qua mã lập trình Khi kết nối thành công, ESP32 sẽ nhận được một địa chỉ IP trong mạng WiFi đó.

Để khởi tạo máy chủ web, mã lập trình trên ESP32 sử dụng thư viện như ESPAsyncWebServer, cho phép tạo ra một máy chủ web lắng nghe các yêu cầu HTTP gửi đến địa chỉ IP của nó.

Khi một yêu cầu HTTP, như truy cập trang web, được gửi từ trình duyệt trên thiết bị khác trong mạng WiFi, ESP32 sẽ nhận yêu cầu qua kết nối mạng Máy chủ web trên ESP32 sẽ xử lý yêu cầu này theo cấu hình đã được thiết lập.

Máy chủ web ESP32 sẽ tạo ra dữ liệu HTML, CSS, JavaScript hoặc các dữ liệu khác cần thiết để hiển thị trang web, dựa trên loại yêu cầu và các xử lý lập trình Dữ liệu này sau đó được gửi qua kết nối mạng đến trình duyệt của người dùng.

Khi dữ liệu được gửi đến trình duyệt, nội dung trang web sẽ được hiển thị cho người dùng Người dùng có khả năng tương tác với trang web, và những tương tác này sẽ được gửi trở lại ESP32 thông qua các yêu cầu HTTP mới.

Đọc tín hiệu analog bằng thư viện driver/adc.h

Tín hiệu analog là những tín hiệu biểu thị giá trị dưới dạng điện áp liên tục và thay đổi theo thời gian Để đọc tín hiệu này từ cảm biến hoặc thiết bị trong các dự án điện tử, cần sử dụng chức năng chuyển đổi tương tự-số (ADC - Analog to Digital Converter) có sẵn trên vi điều khiển ESP32, thông qua thư viện driver/adc.h Dưới đây là hướng dẫn cơ bản về cách thực hiện quá trình này.

Trước khi đọc tín hiệu analog, cần bật chức năng ADC cho các chân sử dụng Để thực hiện điều này, hãy sử dụng hàm adc1_config_width() để cấu hình độ rộng của ADC (8 bit, 10 bit, 12 bit) và sau đó gọi adc1_config_channel_atten() để thiết lập chế độ chia độ nhỏ cho chân.

Sau khi cấu hình ADC, bạn có thể sử dụng hàm adc1_get_raw() để đọc giá trị tín hiệu analog từ chân đã được thiết lập Kết quả trả về là giá trị số nguyên, đại diện cho tín hiệu analog đã đo.

Để chuyển đổi giá trị số nguyên thu được từ ADC thành giá trị analog tương ứng, chúng ta cần sử dụng hàm esp_adc_cal_get_voltage() Giá trị số này không phản ánh chính xác tín hiệu analog, do đó việc chuyển đổi là cần thiết để có được thông tin chính xác hơn.

III Lựa chọn nền tảng lập trình

Hình 1 Espressif IoT Development Framework

The Espressif IoT Development Framework (ESP-IDF) is a robust and comprehensive development toolkit specifically designed for the ESP32 and ESP8266 microcontrollers by Espressif Systems Tailored to facilitate the development of Internet of Things (IoT) applications, ESP-IDF offers a complete development environment for creating high-quality embedded applications on these platforms.

ESP-IDF cung cấp nhiều tính năng mạnh mẽ, bao gồm thư viện hỗ trợ WiFi, Bluetooth, giao diện truyền thông UART và các giao thức mạng, giúp ứng dụng kết nối và tương tác với thiết bị trong môi trường IoT Ngoài ra, nó còn cung cấp công cụ và tài liệu phong phú để phát triển ứng dụng hiệu suất cao và tiết kiệm năng lượng.

Với ESP-IDF, các nhà phát triển dễ dàng tùy chỉnh và tối ưu hóa ứng dụng IoT của mình, từ quản lý nguồn điện cho đến giao tiếp mạng phức tạp Framework này cung cấp nhiều ví dụ thực tế và tài liệu hướng dẫn chi tiết, giúp người dùng nắm vững các khía cạnh quan trọng trong quá trình xây dựng ứng dụng.

ESP-IDF, với sức mạnh và tính linh hoạt vượt trội, đã trở thành một công cụ quan trọng trong việc phát triển các ứng dụng IoT đa dạng và chất lượng trên nền tảng ESP32 và ESP8266.

Vì vậy, nhóm chúng em quyết định lựa chọn Epressif-idf để thực hiện cho project cuối kỳ này

IV Thiết bị sử dụng

Từ những yêu cầu được đề ra, đồng thời tham khảo từ nhiều nguồn, nhóm quyết định sử dụng những linh kiện sau:

• Vi xử lý sử dụng : ESP32

• Cảm biến nhiệt độ, độ ẩm không khí : DHT11

• Cảm biến độ ẩm đất : Bộ kit gồm đầu dò độ ẩm và Module cảm biến LM393

• Rơ-le điều khiển máy bơm : Module Relay 1 kênh 5V

• Bộ nguồn : Nguồn 5V từ sạc điện thoại

• Điện trở và dây dẫn

ESP32

Module Wifi BLE ESP32 Node MCU LuaNode32 CP2102

Về vi xử lí: Xtensa lõi kép 32-bit LX6, tốc độ hoạt động là

240MHz Bộ nhớ (SRAM): 512 KB

Kết nối không dây: Chuẩn Wifi 802.11 b/g/n và Bluetooth ( v4.2 BR/EDR và BLE)

• 10 chân có cảm ứng chạm

• Chuẩn giao giao tiếp không đồng bộ: SPI, I2C, I2S.

• Chuẩn giao tiếp không đồng bộ: UART.

Cảm biến nhiệt độ, độ ẩm không khí DHT11

Bảng 3.1 Bảng so sánh DHT11 với các linh kiện cùng loại khác

Tiêu chí DHT11 DHT22 BME280

Giá thành 35.000VND 65.000VND 130.000VND

Dòng sử dụng 2.5mA 2.5mA 2.5mA

Chúng em lựa chọn DHTT11 thay vì các cảm biến nhiệt độ và độ ẩm khác [3]

Mặc dù DHT11 có độ chính xác không cao, nhưng với giá thành rẻ và tính phổ biến, nhóm quyết định sử dụng cảm biến này để thuận tiện cho dự án học tập Sự lựa chọn này giúp nhóm tập trung vào việc tìm hiểu nguyên lý hoạt động, cách sử dụng và ứng dụng của DHT11, đồng thời chấp nhận những hạn chế về độ chính xác của kết quả đầu ra so với thực tế.

Hình 3 Cảm biến nhiệt độ, độ ẩm DHT11

DHT11 là một cảm biến nhiệt độ và độ ẩm phổ biến, giá rẻ, thường được sử dụng trong các ứng dụng Arduino và hệ thống nhúng khác Cảm biến này cung cấp thông tin cơ bản về nhiệt độ và độ ẩm, giúp người dùng dễ dàng tích hợp vào các dự án điện tử.

Chức năng chính: DHT11 có chức năng đo nhiệt độ và độ ẩm môi trường xung quanh.

Cảm biến DHT11 hoạt động dựa trên một cặp cảm biến chuyên dụng để đo nhiệt độ và độ ẩm, sau đó truyền tải dữ liệu về vi điều khiển như Arduino qua giao diện số.

DHT11 sử dụng giao thức giao tiếp 1-wire, cho phép truyền dữ liệu và điều khiển chỉ qua một chân GPIO.

• Dòng sử dụng: 2.5mA max (khi truyền dữ liệu)

• Khoảng đo độ ẩm: 20% - 90% RH (sai số 5

• Khoảng đo nhiệt độ: 0-50°C (sai số 2°C)

• Tần số lấy mẫu tối đa: 1Hz (1 giây / lần)

• Kích thước 15mm x 12mm x 5.5mm

Cảm biến độ ẩm đất

Hình 4 Cảm biến độ ẩm đất

Cảm biến độ ẩm đất là thiết bị đo lường lượng nước có trong đất, đóng vai trò quan trọng trong nông nghiệp thông minh và tự động hóa Công cụ này giúp tối ưu hóa việc tưới tiêu, nâng cao hiệu quả sản xuất nông nghiệp và bảo vệ tài nguyên nước.

Bài viết mô tả một đầu dò độ ẩm kết nối với module cảm biến, được sử dụng trong hệ thống tưới tiêu tự động Độ nhạy của thiết bị có thể điều chỉnh thông qua biến trở, với đầu ra tín hiệu bao gồm cả tín hiệu tương tự và tín hiệu số.

Cảm biến độ ẩm đất hoạt động dựa trên nguyên lý đo điện trở hoặc điện dung của đất Khi độ ẩm trong đất thay đổi, điện trở hoặc điện dung của chất đất cũng sẽ thay đổi, và cảm biến sử dụng thông số này để xác định mức độ ẩm chính xác.

Cảm biến độ ẩm đất được thiết kế với hai chân dẹt hoặc cổng đấu nối để gắn vào đất, trong đó một chân cung cấp điện cho cảm biến và chân còn lại được sử dụng để đọc dữ liệu độ ẩm đất.

Thông số kĩ thuật bộ kit:

• Điện áp hoạt động: 3.3 - 5 VDC

• Có lỗ cố định để lắp đặt thuận tiện

• PCB có kích thước nhỏ 3.2 x 1.4 cm

• Sử dung chip LM393 để so sánh, ổn định làm việc

Thông số kĩ thuật Module LM393:

• Điện áp hoạt động 3.3 – 5 V - Kết nối 4 chân với 2 chân cấp nguồn (VCC và GND) và 2 chân tín hiệu ngõ ra (AO và DO).

• Hổ trợ cả 2 dạng tín hiệu ra Analog và TTL Ngõ ra Analog 0 – 5V tỷ lệ thuận với cường độ ánh sáng, ngõ TTL tích cực mức thấp.

• Độ nhạy cao với ánh sáng được tùy chỉnh bằng biến trở.

Relay

Mô-đun Relay 5VDC 2 Kênh High/Low - 220V/10A là thiết bị điều khiển hiệu quả, sử dụng nguồn 5VDC để kiểm soát hai kênh độc lập Với khả năng chịu tải lên đến 220V và dòng tối đa 10A, mô-đun này lý tưởng cho việc điều khiển các thiết bị tiêu thụ điện cao như đèn, quạt, máy bơm, và nhiều thiết bị điện gia đình khác.

• Tương thích với các vi điều khiển có mức điện áp 5V

• Có thể sử dụng GPIO của Raspberry Pi để bật/tắt relay (3.3V)

• Dòng điện hỗ trợ: 250VAC/110VDC

• Tín hiệu điều khiển: TTL level

• Công suất tối đa: 10A 125VAC

• Hiệu điệu thế tối đa cho phép: 800VAC/240W

• Nguyên lý hoạt động: Kích mức thấp

Relay này sẽ được kích hoạt khi điện áp ở chân IN là 0V (kích mức thấp), Relay sử dụng để bật tắt máy bơm tự động.

Mạch hạ áp LM2596

Mạch hạ áp có chức năng hạ điện áp từ 5V xuống 3.3V để cung cấp cho 2 cảm biến Thông số kỹ thuật:

• Điện áp đầu vào: Từ 3V đến 30V

• Điện áp đầu ra: Điều chỉnh được trong khoảng 1.5V đến 30V.

• Dòng đáp ứng tối đa là 3A.

Nguồn 5V

Cung cấp điện áp cho ESP32, ở đây nhóm sử dụng sạc pin điện thoại có điện áp đầu ra 5V.

THIẾT KẾ HỆ THỐNG 15

Sơ đồ khối hệ thống

Hình 1 Sơ đồ tổng quan hệ thống

Biểu đồ tuần tự

1 Kiểm tra kết nối wifi

3 Kết nối wifi thành công

5 Phản hồi kết quả nếu thành công sẽ gửi kèm địa chỉ IP

6 Gửi yêu cầu đọc giá trị nhiệt độ, độ ẩm không khí

7 Phản hồi giá trị nhiệt độ, độ ẩm không khí, trạng thái của cảm biến

8 Gửi yêu cầu đọc độ ẩm đất

9 Phản hồi giá trị độ ẩm đất, trạng thái của cảm biến

19 So sánh giá trị nhiệt độ, độ ẩm không khí, độ ẩm đất với ngưỡng

10 Gửi yêu cầu bật Relay -> Máy bơm được bật

11 Gửi yêu cầu tắt Relay -> Máy bơm được tắt

12 Client gửi yêu cầu lấy giá trị các cảm biến và trạng thái tới HTTP Server

13 HTTP Server gửi yêu cầu lấy các giá trị tới ESP32

14 ESP32 phản hồi lại dữ liệu cho HTTP Server

15 HTTP Server phản hồi lại dữ liệu cho Client

16 Client gửi yêu cầu bật/tắt máy bơm tới HTTP Server

17 HTTP Server gửi yêu cầu tới ESP32

18 ESP32 gửi yêu cầu bật/tắt tới Relay -> Máy bơm được bật/tắt.

Sơ đồ thuật toán tự động bật tắt Relay máy bơm

Hình 3 Sơ đồ thuật toán tự động bật tắt Relay máy bơm

Sơ đồ mạch

Hình 4 Sơ đồ mạch điện

Hình 5 Ảnh chụp mạch điện thực tế

II Thiết kế chi tiết

Thiết kế mạch điều khiển Relay

Do đầu ra tối đa của các chân GPIO của ESP32 chỉ đạt 3.3V, việc kích hoạt Relay trở nên khó khăn Để khắc phục vấn đề này, chúng tôi đã sử dụng mạch khuếch đại.

BJT 2N2222 được sử dụng kết hợp với hai trở 1K để điều khiển Relay Khi chân GPIO có điện áp 3.3V (mức HIGH), BJT được phân cực và dòng điện sẽ chảy từ chân C xuống chân E Ngược lại, khi chân GPIO có điện áp 0V (mức LOW), BJT không được phân cực, dẫn đến việc không có dòng điện chảy từ C xuống E.

Hình 6 Relay bật khi đầu ra chân GPIO18 được kích HIGH

Hình 7 Relay tắt khi đầu ra chân GPIO18 được kích LOW

Tính toán công suất thành phần

Hình 8 Công suất tiêu thụ ESP32

Dựa vào bảng trên, ESP32 yêu cầu dòng điện 240mA và điện áp 3.3V khi sử dụng Wifi và các ngoại vi Từ thông số này, chúng ta có thể tính toán công suất tiêu thụ của nó.

Hình 9 Công suất tiêu thụ DHT11

Theo bảng trên, khi cảm biến DHT11 hoạt động, nó tiêu thụ một công suất bằng :

– Cảm biến độ ẩm đất

Theo Datasheet của LM393, dòng điện cung cấp tối đa cho cảm biến là 2.5mA, do đó công suất tiêu thụ tối đa của LM393 được xác định là.

Relay là một linh kiện tiêu thụ dòng điện khoảng 80mA và hoạt động với điện áp 5V Từ thông số này, ta có thể tính toán công suất tiêu thụ của Relay.

Công suất tiêu thụ trên điện trở được tính toán dựa trên điện áp đo được trên chân B và C của BJT, với giá trị lần lượt là 2.293V và 4.03V.

Công suất tiêu thụ của BJT 2N2222 được tính toán dựa trên điện áp Vce là 0.71V và dòng điện Ic là 4.29mA.

P total = P ESP 32 + P DHT 11 + P LM 393 + P Relay + P R B + P R C + P 2 N 2222

III Thiết kế phần mềm

Sơ đồ khối phần mềm

Hình 11 Sơ đồ khối phần mềm

Xây dựng các Component

• Dht11: Đọc dữ liệu từ cảm biến dht11.

• Http-server: Tạo 1 http server để xử lý yêu cầu của người dùng.

• Soil-moisture-sensor: Đọc dữ liệu từ cảm biến độ ẩm đất.

• Wifi-station: Kết nối đến wifi để gửi dữ liệu lên web.

• Output_iot: Điều khiển chân relay.

Bài viết này giới thiệu các thư viện quan trọng khi làm việc với vi điều khiển ESP32 và ESP8266 Thư viện driver/gpio.h cho phép tương tác với các chân GPIO, cung cấp các hàm để cấu hình, đọc và ghi trạng thái của chúng Thư viện esp_timer.h hỗ trợ quản lý hẹn giờ và tác vụ thời gian thực, cho phép thực hiện các tác vụ theo khoảng thời gian hoặc sự kiện cụ thể Thư viện rom/ets_sys.h cung cấp các hàm hệ thống cơ bản như khởi tạo hệ thống và đọc thời gian chạy Cuối cùng, freertos/FreeRTOS.h và freertos/task.h là các thư viện liên quan đến hệ thống thời gian thực FreeRTOS, giúp tạo và quản lý các nhiệm vụ đồng thời và lập lịch thời gian hiệu quả.

Hình 13 Các hàm và kiểu dữ liệu khai báo của thư viện dht11.h

– Kiểu enum dht11_status: mô tả trạng thái của cảm biến (lỗi đọc dữ liệu, lỗi timeout, OK).

– Kiểu dữ liệu struct dht11_reading: lưu dữ liệu của cảm biến(trạng thái, nhiệt độ, độ ẩm).

– Hàm void DHT11_init(): khởi tạo chân gpio của esp32 để đọc dữ liệu từ cảm biến.

– Hàm static int _waitOrTimeout(uint16_t microSeconds, int level): Trả về thời

Hình 14 Các hàm của thư viện dht11.h gian để chân gpio đọc cảm biến chuyển mức.

– Hàm static int _checkCRC(uint8_t data[]): Kiểm tra tính đúng sai của dữ liệu đọc được.

– Hàm static void _sendStartSignal(): Gửi tín hiệu bắt đầu đọc cho cảm biến.

Hình 15 Các hàm của thư viện dht11.h

– Hàm static int _checkResponse(): Kiểm tra phản hồi cảm biến.

Hình 16 Hàm đọc dữ liệu cảm biến dht11

– Hàm struct dht11_reading DHT11_read(): Hàm đọc dữ liệu từ cảm biến, trả về biến kiểu struct dht11_reading lưu dữ liệu đọc được từ cảm biến.

Đọc 40 bit dữ liệu từ cảm biến, bao gồm 16 bit đầu tiên thể hiện giá trị độ ẩm, 16 bit tiếp theo phản ánh giá trị nhiệt độ, và 8 bit cuối cùng dùng để kiểm tra tính chính xác của kết quả.

• Nếu dữ liệu đọc được hợp lệ thì lưu kết quả vào biến kiểu struct dht11_reading. 3.2.2 Http-server

Hình 17 Khai báo các thư viện gốc sử dụng esp_wifi.h: Thư viện liên quan đến quản lý kết nối Wi-Fi trên vi điều khiển ESP32.

Nó cung cấp các chức năng để cấu hình và quản lý mạng Wi-

Các thư viện quan trọng trên ESP32 bao gồm esp_event.h, cung cấp chức năng quản lý và xử lý sự kiện hệ thống và Wi-Fi; esp_log.h, cho phép ghi log hoạt động và thông điệp gỡ lỗi; esp_system.h, quản lý thông tin hệ thống và chức năng khởi động lại, tắt nguồn; sys/param.h, chứa các macros và hàm tiện ích cho tham số hệ thống; esp_netif.h, quản lý giao diện mạng như Wi-Fi và Ethernet; esp_eth.h, cấu hình và quản lý kết nối Ethernet; esp_tls_crypto.h, liên quan đến mã hóa và bảo mật kết nối mạng; và esp_http_server.h, xây dựng và quản lý máy chủ HTTP để phát triển ứng dụng web trên ESP32.

Hình 18 Các con trỏ hàm của thư viện http-server.h – Con trỏ hàm http_get_callback_t, http_post_callback_t.

Hình 19 Các hàm trong thư viện http-server.h – Hàm start_webserver: khởi tạo http server.

– Hàm stop_webserver: dừng http server đã khởi tạo.

• http_set_sw1_callback(void *cb): set hàm callback để xử lý sự kiện nút bấm điều khiển relay trên giao diện web

• void http_set_status_sw1_callback(void *cb): hàm callback gửi trạng thái của relay lên server.

• void http_set_data_callback(void *cb): hàm callback gửi dữ liệu đọc được từ các cảm biến cho server

• void http_set_threshold_callback(void *cb): hàm callback set mức nhiệt độ, độ ẩm không khí, độ ẩm đất để điều khiển relay và gửi lên server.

• void http_set_post_threshold_callback(void *cb): hàm callback lấy các mức nhiệt độ, độ ẩm không khí, độ ẩm đất từ webserver.

– Các hàm response: void sw1_response(char* data, int len), void data_response(char* data, int len);

Hình 20 Uri để hiện thị dashboard

Hình 21 Uri lấy thông tin trạng thái của relay

Hình 22 Uri để thay đổi trạng thái relay

Hình 23 Uri lấy data từ cảm biến

Hình 24 Uri set các mức nhiệt độ không khí, độ ẩm đất, độ ẩm không khí

Hình 25 Uri lấy các mức nhiệt độ không khí, độ ẩm đất, độ ẩm không khí

Hình 26 Các kiểu dữ liệu và các hàm sử dụng trong thư viện soil_moisture_sensor.h

– Thư viện esp_log.h: Thư viện này hỗ trợ ghi log trong phần mềm – Thư viện

Thư viện "esp_err.h" trong ESP-IDF chứa mã lỗi và hàm hỗ trợ xử lý lỗi, giúp xác định và xử lý các lỗi trong chương trình Thư viện "hal/gpio_types.h" cung cấp định nghĩa cho các kiểu dữ liệu liên quan đến GPIO Ngoài ra, "esp_adc_cal.h" cung cấp các hàm hỗ trợ để hiệu chỉnh và tính toán giá trị chính xác từ giá trị ADC đo được từ vi điều khiển.

– Kiểu dữ liệu struct soil_reading: lưu dữ liệu đọc được từ cảm biến.

The function `void soil_moisture_set_characterize(adc_unit_t unit, adc_atten_t atten, adc_bits_width width)` is designed to configure parameters for the ADC pin, including the unit, attenuation, and bit width settings.

Hàm void set_max_min_voltage(int max, int min) được sử dụng để thiết lập giá trị điện áp tối đa và tối thiểu Khi điện áp gần giá trị tối thiểu, độ ẩm sẽ tăng cao, trong khi nếu điện áp gần giá trị tối đa, độ ẩm sẽ giảm.

– Hàm void set_channel(adc1_channel_t): khởi tạo chân gpio để đọc dữ liệu analog từ cảm biến.

– Hàm uint32_t read_voltage_moisture(void): đọc giá trị điện áp từ chân cảm biến.

Hàm `struct soil_reading soil_moisture_read()` có chức năng chuyển đổi giá trị đọc được từ cảm biến thành độ ẩm đất Hàm này sẽ trả về một biến kiểu struct `soil_reading`, trong đó lưu trữ giá trị độ ẩm đã được chuyển đổi.

Thư viện "esp_err.h" trong ESP-IDF cung cấp mã lỗi và các hàm hỗ trợ xử lý lỗi, giúp xác định và quản lý các lỗi trong chương trình một cách hiệu quả.

"hal/gpio_types.h": Đây là thư viện của ESP-IDF cung cấp các định nghĩa cho các kiểu

Để khai báo các thư viện gốc sử dụng dữ liệu liên quan đến GPIO, cần sử dụng các thư viện sau: esp_wifi.h để quản lý kết nối Wi-Fi trên vi điều khiển ESP32; esp_event.h cung cấp chức năng quản lý và xử lý sự kiện hệ thống cũng như sự kiện liên quan đến Wi-Fi; esp_log.h cho phép ghi log hoạt động và thông điệp gỡ lỗi; lwip/err.h và lwip/sys.h là các thư viện liên quan đến "Lightweight IP" (lwIP), hỗ trợ triển khai mạng trên thiết bị nhúng; và freertos/event_groups.h liên quan đến hệ thống thời gian thực.

FreeRTOSvà quản lý các nhóm sự kiện để đồng bộ hóa nhiều nhiệm vụ trong môi trường đa nhiệm

Hình 28 Các kiểu dữ liệu và các hàm sử dụng trong thư viện wifi- station.h

– EXAMPLE_ESP_WIFI_SSID: Tên của mạng wifi cần kết nối.

– EXAMPLE_ESP_WIFI_PASS: Mật khẩu của mạng wifi.

– EXAMPLE_ESP_MAXIMUM_RETRY: Số lần thử kết nối lại với wifi.

– Hàm void wifi_init_station(void): Hàm khởi tạo và kết nối ESP32 vào mạng Wi-Fi (station mode).

– Hàm void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data): Hàm xử lý sự kiện Wi-Fi.

Hình 29 Các hàm sử dụng trong thư viện output-iot.h

– Hàm void output_io_create(gpio_num_t gpio_num) : Khởi tạo chân gpio dùng để điều khiển relay.

– Hàm void output_io_set_level(gpio_num_t gpio_num, int level) : Hàm set level của chân gpio để điều khiển relay.

– Hàm int output_io_get_level(gpio_num_t gpio_num) : Trả về level của chân gpio điều khiển relay.

– Hàm void output_io_toggle(gpio_num_t gpio_num) : Hàm chuyển trạng thái chân gpio điều khiển relay.

– nvs_flash_init(): lưu trữ cấu hình khi esp32 bị tắt nguồn.

– wifi_init_station(): Kết nối đến wifi

– Các hàm khởi tạo các chân gpio để đọc dữ liệu từ các cảm biến

– Khởi tạo chân gpio để điều khiển relay

• output_io_create(GPIO_NUM_2);

• output_io_set_level(GPIO_NUM_2, 0);

• output_io_create(GPIO_NUM_18);

• output_io_set_level(GPIO_NUM_18, 0);

Hình 30 Hàm main của chương trình

• xTaskCreate(read_data, "Read Data", 2048, NULL, 4, NULL): Task đọc dữ liệu cảm biến, sau 2 giây đọc 1 lần.

• xTaskCreate(auto_on_off_relay, "On/Off relay", 2048, NULL, 4, NULL): Task tự động điều khiển relay.

– Các biến lưu mức threshold: tempThreshold, humThreshold, soilThreshold – Biến autoPump:

• 1: Trạng thái tự động tưới nước được kích hoạt

• 0: Trạng thái tưới nước tự động tắt

The `struct post_data` data type is designed to store data retrieved from sensors, while the function `void sw1_data_callback(char *data, int len)` is responsible for controlling a relay based on the data received from the web server.

Hình 31 Các biến và kiểu dữ liệu tạo trong file main chương trình

Hình 32 Hàm callback thay đổi trạng thái relay

Xây dựng giao diện người dùng

Khối hiển thị hoạt động bằng cách yêu cầu dữ liệu từ server theo khoảng thời gian xác định và hiển thị thông tin đó Các chức năng bật/tắt máy bơm tự động sẽ nhận dữ liệu từ người dùng và gửi lại server để xử lý.

Dưới đây là một số hình ảnh giao diện chính của trang web ở trên các thiết bị phổ biến :

Hình 33 Giao diện trên máy tính

Hình 34 Giao diện trên máy tính bảng

Hình 35 Giao diện trên điện thoại

3.3.2 Một số chức năng trên trang Web

– Khối “Environment Parameters” : Hiển thị thông số môi trường đo được (nhiệt độ, độ ẩm không khí, độ ẩm đất) và trạng thái kết nối các thiết bị.

– Khối “Set up automatic watering plants” : Cài đặt thông số để hệ thống tự động bật máy bơm tưới nước.

– Cần gạt “ON/OFF Pump” : Bật/tắt máy bơm.

– Cần gạt “Auto Pump”: Kích hoạt/bỏ kích hoạt chế độ tự động tưới nước với các thông số được nhập ở trên khối “Set up automatic watering plants”.

Trong phần "Tham số Môi trường", trước tiên chúng ta khai báo biến xhttp1 là một giao thức HTTP Tiếp theo, chúng ta tạo một hàm để lấy dữ liệu từ Server qua đường dẫn "/data", với chu kỳ 2000ms, thực hiện việc lấy dữ liệu một lần.

Hàm xử lý sự kiện “onreadystatechange” của đối tượng xhttp1 được gọi mỗi khi trạng thái yêu cầu HTTP thay đổi Hàm này kiểm tra xem yêu cầu HTTP có thành công hay không.

Để đảm bảo yêu cầu được khởi tạo thành công và nhận được dữ liệu trả về, cần phải có status = 200, điều này cho thấy dữ liệu không bị lỗi Nếu yêu cầu thành công, chúng ta sẽ tiến hành bước tiếp theo.

Hàm chuyển đổi dữ liệu JSON sang dữ liệu JavaScript và khởi tạo biến “element1” để lấy dữ liệu từ thẻ có ID “dht11” sẽ được thực hiện kiểm tra.

Nếu thuộc tính "obj.status1" của đối tượng obj bằng 0, đoạn text trong thẻ element1 sẽ được thay đổi thành ACTIVE; ngược lại, nếu khác 0, nó sẽ được đổi thành ERROR Đoạn mã này thực hiện việc kiểm tra trạng thái kết nối của cảm biến dht11.

• Tương tự chúng ta sẽ kiểm tra được trạng thái của Module đo độ ẩm đất SOIL.

Tiến hành lấy dữ liệu từ các thẻ có ID t1, h1, m1, tương ứng với nhiệt độ, độ ẩm không khí và độ ẩm đất do cảm biến đo được và gửi lên server Sau khi thu thập dữ liệu, nếu giá trị nằm trong khoảng cho phép, cập nhật nội dung trong thẻ element1 bằng giá trị thu được; nếu không, thay đổi nội dung thành “OVR”.

Khối “Set up automatic watering plants”Đầu tiên ta khai báo các biến cần thiết

Khối "Thiết lập tưới cây tự động" bao gồm các nút và giá trị mặc định cho các thông số tự động Tiếp theo, tạo một hàm onEdit nhận đầu vào là một biến Boolean; tùy thuộc vào giá trị của biến này, các nút và ô nhập dữ liệu sẽ được kích hoạt hoặc vô hiệu hóa.

Tiếp theo là các hàm xử lý chức năng của các nút bấm:

Nút “Save” được xử lý bởi hàm “saveHandle”, có chức năng kiểm tra dữ liệu nhập từ người dùng Nếu dữ liệu hợp lệ, nó sẽ gửi thông tin lên server qua đường dẫn “/setthreshold” và hiển thị thông báo “Save Success!” Ngược lại, nếu dữ liệu không hợp lệ, hệ thống sẽ thông báo lỗi trên màn hình.

• Nút “Change” : hàm xử lý nút này là “changeHandle”, truyền vào cho hàm “onEdit” biến “true” giúp cho người dùng có thể nhập dữ liệu vào ô input.

• Nút “Cancel” : hàm xử lý nút này là “cancelHandle”, truyền vào cho hàm “onEdit” biến “false”, lúc này ô input sẽ ở chế độ đọc, không thể nhập dữ liệu.

• Nút “Update” : hàm xử lý nút này là “updateHandle”, lấy lại dữ liệu mặc định ban đầu.

Hình 38 Khối “Set up automatic watering plants”

Cần gạt “ON/OFF Pump” & Cần gạt “Auto Pump”

Cần gạt “ON/OFF Pump” và “Auto Pump” hoạt động tương tự như các khối trước đó Hàm toggleRelay sẽ kiểm tra trạng thái của hai cần gạt này và gửi tín hiệu tương ứng lên server, với 0 biểu thị OFF và 1 biểu thị ON.

Hình 40 Cần gạt “ON/OFF Pump” & Cần gạt “Auto Pump”

Hàm cập nhật trạng thái các cần gạt sẽ được thực hiện với chu kỳ 1000ms, cho phép lấy dữ liệu trạng thái của các cần gạt để cập nhật lên trang web Nhờ đó, khi máy bơm đang hoạt động, người dùng có thể dễ dàng tắt máy thông qua cần gạt “ON/OFF Pump”.

KẾT QUẢ VÀ ĐÁNH GIÁ 40

Chạy thử nghiệm chức năng hiển thị thông số

Nhóm tiến hành chạy thử hệ thống và so sánh với số liệu trên Google thu được kết quả như sau:

Hình 1 Kết quả hệ thống đo được

Hình 2 Kết quả của Google Đánh giá kết quả :

Kết quả đo nhiệt độ từ cảm biến DHT11 có sự chênh lệch 2 độ C so với dự báo thời tiết, điều này có thể do vị trí đặt cảm biến ngoài trời và sự khác biệt nhiệt độ trong phòng Ngoài ra, độ tin cậy của dự báo thời tiết và sai số cho phép của linh kiện DHT11 (2 độ C) cũng góp phần vào sự khác biệt này, khiến kết quả thu được hoàn toàn chấp nhận được.

Khi xem xét thông số độ ẩm, kết quả đo thực tế từ cảm biến DHT11 cho thấy có sự chênh lệch 5% so với dự báo thời tiết Sự khác biệt này có thể được lý giải bởi nhiều yếu tố, bao gồm vị trí lắp đặt cảm biến, độ tin cậy của dự báo thời tiết và sai số của linh kiện DHT11 Tuy nhiên, chênh lệch 5% này là hoàn toàn chấp nhận được.

Trong việc đánh giá độ ẩm đất, kết quả đo thường mang tính tương đối và thiếu giá trị chuẩn để so sánh, chủ yếu do hạn chế trong khả năng thực hiện thí nghiệm Mặc dù không thể so sánh trực tiếp, các kết quả thu thập từ các bài kiểm tra tự đặt ra bởi nhóm nghiên cứu vẫn có giá trị quan trọng trong việc định hướng và hiểu rõ sự biến đổi của độ ẩm đất.

Chạy thử nghiệm chức năng điều khiển máy bơm

The video testing demonstrates the use of LED lights on a relay to verify operational results When the pump is set to the ON mode, the LED lights up, indicating that the pump is active Conversely, in the OFF mode, the LED turns off, signifying that the pump is inactive This clear correlation between the LED status and the pump operation provides an effective visual confirmation of the system's functionality.

Qua đây có thể thấy hệ thống đã hoạt động đúng với yêu cầu của nhóm đề ra.

Chạy thử nghiệm chức năng tự động tưới tiêu

Video kiểm thử: https://youtube.com/shorts/mpFVMw0yCLE?feature=share Đánh giá về chức năng chuyển đổi chế độ ON/OFF của hệ thống Auto Pump cho thấy: khi ở chế độ OFF, đèn LED trên Relay không sáng nếu các thông số giảm xuống dưới ngưỡng cài đặt; ngược lại, ở chế độ ON, đèn LED sẽ sáng khi các thông số giảm xuống dưới ngưỡng cài đặt, đồng thời cần gạt ON/OFF Pump sẽ chuyển từ chế độ OFF sang ON.

ON, báo hiệu cho người dùng rằng máy bơm đang bật, như vậy hệ thống đã hoạt động đúng với yêu cầu của nhóm đề ra.

Đánh giá tổng quan toàn bộ hệ thống

Trong quá trình vận hành, hệ thống có thể gặp phải sai số từ nhiều yếu tố khác nhau, bao gồm sai số nội tại và sai số ngẫu nhiên do tác động của môi trường Để nâng cao độ tin cậy của hệ thống, cần thực hiện các bài kiểm tra định kỳ nhằm giám sát hoạt động và áp dụng phương pháp đánh giá phù hợp với yêu cầu thiết kế.

Trong báo cáo này, chúng tôi đã nghiên cứu và triển khai một hệ thống giám sát và điều khiển tưới tiêu bằng cách sử dụng cảm biến và ứng dụng web Đề tài này giúp chúng tôi nắm bắt cách áp dụng công nghệ hiện đại để tối ưu hóa quản lý tưới tiêu trong nông nghiệp.

Trong quá trình thực hiện đề tài, chúng em đã đạt được một số kết quả quan trọng, bao gồm việc thiết kế và xây dựng hệ thống giám sát tưới tiêu sử dụng cảm biến đo độ ẩm đất và nhiệt độ Dữ liệu từ các cảm biến này được thu thập và truyền đến ứng dụng web, giúp người dùng theo dõi tình trạng đất và môi trường xung quanh cây trồng một cách chính xác và dễ dàng.

Một phần quan trọng của dự án là khả năng điều khiển tưới tiêu từ xa qua ứng dụng web Chúng tôi đã phát triển giao diện điều khiển thân thiện với người dùng, cho phép điều chỉnh ngưỡng cho cây trồng trong hệ thống tưới tự động, theo dõi các thông số môi trường và bật tắt thiết bị tưới tiêu Điều này giúp tối ưu hóa việc sử dụng nước và nâng cao hiệu suất tưới tiêu.

Chúng em đã nghiên cứu các thách thức và hạn chế trong việc triển khai hệ thống, bao gồm tiêu thụ năng lượng, hiệu suất cảm biến và tích hợp ứng dụng web Những vấn đề này cần được giải quyết thông qua đổi mới và nghiên cứu liên tục trong tương lai.

Dự án này đã khai thác tiềm năng của công nghệ thông tin trong nông nghiệp, mở ra một hướng nghiên cứu mới Hệ thống giám sát và điều khiển tưới tiêu sử dụng cảm biến và ứng dụng web cho thấy khả năng cải thiện hiệu suất quản lý tưới tiêu và bảo vệ môi trường.

Trong tương lai, chúng em dự kiến tiếp tục nghiên cứu và phát triển dự án này nhằm tối ưu hóa hiệu suất và tích hợp các tính năng mới Chúng em hy vọng hệ thống này sẽ được áp dụng rộng rãi trong lĩnh vực nông nghiệp, góp phần nâng cao năng suất và bền vững trong sản xuất thực phẩm.

Ngày đăng: 12/12/2023, 15:12

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w