Hầu hết nông dân sử dụng phần lớn đất canh tác và rất khó tiếp cận và theo dõi từng ngóc ngách của những vùng đất rộng lớn. Đôi khi có thể xảy ra hiện tượng phun nước không đều. Điều này dẫn đến chất lượng cây trồng không tốt, dẫn đến thiệt hại về tài chính. Trong trường hợp này, Hệ thống tưới tiêu thông minh sử dụng công nghệ IoT mới nhất rất hữu ích và giúp dễ dàng canh tác.
Các hệ thống tưới tiêu thông minh có phạm vi rộng để tự động hóa hệ thống thủy lợi hoàn chỉnh. Ở đây chúng tôi đang xây dựng Hệ thống tưới tiêu dựa trên IoT sử dụng Mô-đun ESP8266 NodeMCU và Cảm biến DHT11. Nó sẽ không chỉ tự động tưới nước dựa trên độ ẩm trong đất mà còn gửi Dữ liệu đến Máy chủ ThingSpeak để theo dõi tình trạng đất. Hệ thống sẽ bao gồm một máy bơm nước sẽ được sử dụng để tưới nước lên đất tùy thuộc vào điều kiện môi trường của đất như Độ ẩm, Nhiệt độ và Độ ẩm.
Trước đây, chúng tôi đã xây dựng Hệ thống tưới cây tự động tương tự để gửi cảnh báo trên thiết bị di động nhưng không phải trên đám mây IoT. Ngoài ra, mạch báo mưa và phát hiện độ ẩm của đất cũng có thể hữu ích trong việc xây dựng hệ thống tưới thông minh.
Trước khi bắt đầu, điều quan trọng cần lưu ý là các loại cây trồng khác nhau yêu cầu điều kiện độ ẩm, nhiệt độ và độ ẩm của đất khác nhau. Vì vậy, trong hướng dẫn này, chúng tôi đang sử dụng một loại cây trồng như vậy sẽ yêu cầu độ ẩm của đất khoảng 50-55%. Vì vậy, khi đất mất độ ẩm dưới 50% thì máy bơm Motor sẽ tự động bật để tưới nước và tiếp tục tưới nước cho đến khi độ ẩm lên đến 55% và sau đó máy bơm sẽ được tắt. Dữ liệu cảm biến sẽ được gửi đến Máy chủ ThingSpeak trong khoảng thời gian xác định để có thể giám sát dữ liệu từ mọi nơi trên thế giới.
Thành phần bắt buộc
- NodeMCU ESP8266
- Mô-đun cảm biến độ ẩm của đất
- Mô-đun máy bơm nước
- Mô-đun chuyển tiếp
- DHT11
- Kết nối dây
Bạn có thể mua tất cả các thành phần cần thiết cho dự án này.
Sơ đồ mạch
Sơ đồ mạch cho Hệ thống tưới thông minh IoT này được đưa ra dưới đây:
Lập trình ESP8266 NodeMCU cho Hệ thống tưới tự động
Để lập trình mô-đun NodeMCU ESP8266, chỉ thư viện cảm biến DHT11 được sử dụng làm thư viện bên ngoài. Cảm biến độ ẩm cho đầu ra tương tự có thể được đọc thông qua chân A0 tương tự ESP8266 NodeMCU. Vì NodeMCU không thể cung cấp điện áp đầu ra lớn hơn 3,3V từ GPIO của nó, vì vậy chúng tôi đang sử dụng mô-đun chuyển tiếp để điều khiển động cơ bơm 5V. Ngoài ra, cảm biến Độ ẩm và cảm biến DHT11 được cấp nguồn từ nguồn 5V bên ngoài.
Mã hoàn chỉnh với một video làm việc được đưa ra ở cuối hướng dẫn này, ở đây chúng tôi đang giải thích chương trình để hiểu quy trình làm việc của dự án.
Bắt đầu với việc bao gồm thư viện cần thiết.
#include
Vì chúng tôi đang sử dụng Máy chủ ThingSpeak, nên Khóa API là cần thiết để giao tiếp với máy chủ. Để biết cách chúng tôi có thể lấy API Key từ ThingSpeak, bạn có thể truy cập bài viết trước về Giám sát nhiệt độ và độ ẩm trực tiếp trên ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Bước tiếp theo là viết thông tin đăng nhập Wi-Fi như SSID và Mật khẩu.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Xác định Chân cảm biến DHT nơi DHT được kết nối và Chọn loại DHT.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
Đầu ra của cảm biến độ ẩm được kết nối với Chân A0 của ESP8266 NodeMCU. Và chân động cơ được kết nối với D0 của NodeMCU.
const int ẩmPin = A0; const int motorPin = D0;
Chúng tôi sẽ sử dụng hàm millis () để gửi dữ liệu sau mỗi khoảng thời gian xác định ở đây là 10 giây. Độ trễ () được tránh vì nó dừng chương trình trong một khoảng thời gian trễ xác định mà vi điều khiển không thể thực hiện các tác vụ khác. Tìm hiểu thêm về sự khác biệt giữa delay () và millis () tại đây.
khoảng dài không dấu = 10000; unsigned long beforeMillis = 0;
Đặt chân động cơ làm đầu ra và tắt động cơ ban đầu. Bắt đầu đọc cảm biến DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // tắt động cơ initally dht.begin ();
Cố gắng kết nối Wi-Fi với SSID và Mật khẩu đã cho và đợi Wi-Fi được kết nối và nếu được kết nối thì hãy chuyển sang các bước tiếp theo.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("Đã kết nối WiFi"); }
Xác định thời gian bắt đầu chương trình hiện tại và lưu nó trong một biến để so sánh với thời gian đã trôi qua.
unsigned long currentMillis = millis ();
Đọc dữ liệu nhiệt độ và độ ẩm và lưu chúng vào các biến.
float h = dht.readHumidity (); float t = dht.readTempe Heat ();
Nếu DHT được kết nối và ESP8266 NodeMCU có thể đọc kết quả thì hãy chuyển sang bước tiếp theo hoặc quay lại từ đây để kiểm tra lại.
if (isnan (h) - isnan (t)) { Serial.println ("Không đọc được từ cảm biến DHT!"); trở về; }
Đọc kết quả đo độ ẩm từ cảm biến và in kết quả đọc.
Phần trăm độ ẩm = (100,00 - ((analogRead (MoistPin) / 1023,00) * 100,00)); Serial.print ("Độ ẩm của đất là ="); Serial.print (Phần trăm độ ẩm); Serial.println ("%");
Nếu chỉ số độ ẩm nằm trong phạm vi độ ẩm yêu cầu của đất thì hãy tắt máy bơm hoặc nếu nó vượt quá độ ẩm cần thiết thì BẬT máy bơm.
if ( MoistPercentage <50) { digitalWrite (motorPin, HIGH); } if ( MoistPercentage > 50 && MoistPercentage <55) { digitalWrite (motorPin, HIGH); } if ( MoistPercentage > 56) { digitalWrite (motorPin, LOW); }
Bây giờ sau mỗi 10 giây, hãy gọi hàm sendThingspeak () để gửi dữ liệu độ ẩm, nhiệt độ và độ ẩm đến máy chủ ThingSpeak.
if ((unsigned long) (currentMillis - trước đóMillis )> = khoảng thời gian) { sendThingspeak (); beforeMillis = millis (); client.stop (); }
Trong hàm sendThingspeak (), chúng tôi kiểm tra xem hệ thống có được kết nối với máy chủ hay không và nếu có thì chúng tôi chuẩn bị một chuỗi ghi độ ẩm, nhiệt độ, độ ẩm và chuỗi này sẽ được gửi đến máy chủ ThingSpeak cùng với khóa API và địa chỉ máy chủ.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (MoistPercentage); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
Cuối cùng, dữ liệu được gửi đến máy chủ ThingSpeak bằng cách sử dụng hàm client.print () chứa khóa API, địa chỉ máy chủ và chuỗi đã được chuẩn bị ở bước trước.
client.print ("POST / update HTTP / 1.1 \ n"); client.print ("Máy chủ: api.thingspeak.com \ n"); client.print ("Kết nối: close \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Loại-Nội dung: application / x-www-form-urlencoded \ n"); client.print ("Nội dung-Độ dài:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
Cuối cùng, đây là cách dữ liệu hiển thị trên ThingSpeak Dashboard
Bước cuối cùng này kết thúc hướng dẫn hoàn chỉnh về Hệ thống tưới thông minh dựa trên IoT. Lưu ý rằng điều quan trọng là phải tắt động cơ khi độ ẩm của đất đã đạt đến mức cần thiết sau khi tưới nước. Bạn có thể tạo ra một hệ thống thông minh hơn có thể chứa các điều khiển khác nhau cho các loại cây trồng khác nhau.
Nếu bạn gặp bất kỳ vấn đề nào trong khi thực hiện dự án này, hãy bình luận bên dưới hoặc truy cập vào các diễn đàn của chúng tôi để biết thêm các câu hỏi liên quan và câu trả lời của họ.
Tìm chương trình hoàn chỉnh và Video trình diễn cho dự án này bên dưới.