רוב החקלאים משתמשים בחלקים גדולים של אדמות חקלאיות וזה הופך להיות קשה מאוד להגיע ולעקוב אחר כל פינה של אדמות גדולות. מתישהו יש אפשרות להתזות מים לא אחידות. התוצאה היא גידולים באיכות ירודה שמובילה עוד יותר להפסדים כספיים. בתרחיש זה מערכת ההשקיה החכמה המשתמשת בטכנולוגיית ה- IoT העדכנית ביותר מועילה ומובילה לחקלאות קלה.
ההשקיה החכמה מע' יש היקף רחב כדי להפוך את מערכת ההשקיה המוחלטת. כאן אנו בונים מערכת השקיה מבוססת IoT באמצעות מודול ESP8266 NodeMCU וחיישן DHT11. זה לא רק ישקה את המים באופן אוטומטי על בסיס רמת הלחות בקרקע אלא גם ישלח את הנתונים לשרת ThingSpeak כדי לעקוב אחר מצב הקרקע. המערכת תכלול משאבת מים שתשמש לפיזור מים על הקרקע בהתאם למצב הסביבתי בקרקע כגון לחות, טמפרטורה ולחות.
בעבר בנו מערכת השקיה אוטומטית של צמחים אשר שולחת התראות בנייד אך לא בענן IoT. מלבד זאת, אזעקת גשם ומעגל גלאי לחות קרקע יכולים לעזור גם בבניית מערכת השקיה חכמה.
לפני שמתחילים, חשוב לציין כי הגידולים השונים דורשים לחות קרקע שונה, טמפרטורה ולחות. אז במדריך זה אנו משתמשים בגידול כזה אשר ידרוש לחות קרקע של כ- 50-55%. לכן כאשר האדמה מאבדת את לחותה פחות מ- 50% אז משאבת המנוע תופעל אוטומטית כדי לזלף את המים והיא תמשיך לזלף את המים עד שהלחות תעלה עד 55% ולאחר מכן המשאבה תכבה. נתוני החיישנים יישלחו לשרת ThingSpeak בפרק זמן מוגדר כך שניתן יהיה לפקח עליהם מכל מקום בעולם.
רכיבים נדרשים
- NodeMCU ESP8266
- מודול חיישן לחות קרקע
- מודול משאבת מים
- מודול ממסר
- DHT11
- חוטי חיבור
אתה יכול לקנות את כל הרכיבים הנדרשים לפרויקט זה.
תרשים מעגל
תרשים מעגלים למערכת השקיה חכמה זו של IoT מוצג להלן:
תכנות ESP8266 NodeMCU למערכת השקיה אוטומטית
לתכנות מודול ה- ESP8266 NodeMCU, רק ספריית החיישנים DHT11 משמשת כספרייה חיצונית. חיישן הלחות נותן פלט אנלוגי אותו ניתן לקרוא דרך הפין האנלוגי ESP8266 NodeMCU A0. מכיוון שה- NodeMCU אינו יכול לתת מתח יציאה הגדול מ- 3.3V מה- GPIO שלו, אנו משתמשים במודול ממסר להנעת משאבת המנוע 5V. כמו כן חיישן הלחות וחיישן DHT11 מופעלים מאספקת חשמל 5V חיצונית.
קוד מלא עם סרטון עבודה ניתן בסוף הדרכה זו, כאן אנו מסבירים את התוכנית כדי להבין את זרימת העבודה של הפרויקט.
התחל עם הכללת הספריה הדרושה.
#לִכלוֹל
מכיוון שאנו משתמשים בשרת ThingSpeak, מפתח ה- API נחוץ על מנת לתקשר עם השרת. כדי לדעת כיצד נוכל להשיג את מפתח ה- API מ- ThingSpeak, תוכלו לבקר במאמר הקודם בנושא ניטור טמפרטורה ולחות בזמן אמת ב- ThingSpeak.
מחרוזת apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
השלב הבא הוא לכתוב את אישורי ה- Wi-Fi כגון SSID וסיסמה.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
הגדר את פין חיישן ה- DHT שבו ה- DHT מחובר ובחר את סוג ה- DHT.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
פלט חיישן הלחות מחובר לסיכה A0 של ESP8266 NodeMCU. וסיכת המנוע מחוברת ל- D0 של NodeMCU.
const int moistPin = A0; const int motorPin = D0;
נשתמש בפונקציה millis () כדי לשלוח את הנתונים אחרי כל פרק זמן מוגדר כאן זה 10 שניות. עיכוב () הוא נמנע שכן הוא מפסיק את התוכנית עבור עיכוב מוגדר שבו מיקרו-בקר לא יכול לעשות משימות אחרות. למידע נוסף על ההבדל בין עיכוב () למיליס () כאן.
מרווח ארוך לא חתום = 10000; לא חתום קודם מיליס = 0;
הגדר את סיכת המנוע כפלט, וכבה את המנוע בהתחלה. התחל בקריאת חיישן DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // שמור על מנוע כיבוי ראשוני dht.begin ();
נסה לחבר Wi-Fi עם SSID וסיסמה נתון והמתן לחיבור ה- Wi-Fi ואם הוא מחובר, עבור לשלב הבא.
WiFi.begin (ssid, pass); בעוד (WiFi.status ()! = WL_CONNECTED) { עיכוב (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi מחובר"); }
הגדר את השעה הנוכחית להפעלת התוכנית ושמור אותה במשתנה כדי להשוות אותה לזמן שחלף.
זרם ארוך לא חתום Millis = מילי ();
קרא נתוני טמפרטורה ולחות ושמור אותם במשתנים.
לצוף h = dht.readHumidity (); לצוף t = dht.readTemperature ();
אם DHT מחובר ו- ESP8266 NodeMCU מסוגל לקרוא את הקריאות, המשך לשלב הבא או חזור מכאן כדי לבדוק שוב.
אם (isnan (h) - isnan (t)) { Serial.println ("נכשל קריאה מחיישן DHT!"); לַחֲזוֹר; }
קרא את קריאת הלחות מהחיישן והדפס את הקריאה.
moistPercentage = (100.00 - ((AnalogRead (moistPin) / 1023.00) * 100.00); Serial.print ("קרקע לחות היא ="); סידורי.דפוס (לחות אחוז); Serial.println ("%");
אם קריאת הלחות נמצאת בין טווח לחות הקרקע הנדרש, שמור על המשאבה כבויה או אם היא חורגת מהלחות הנדרשת, הפעל את המשאבה.
אם ( moistPercentage <50) { digitalWrite (motorPin, HIGH); } אם ( moistPercentage > 50 && moistPercentage <55) { digitalWrite (motorPin, HIGH); } אם ( moistPercentage > 56) { digitalWrite (motorPin, LOW); }
עכשיו אחרי כל 10 שניות התקשרו לפונקציה sendThingspeak () כדי לשלוח את נתוני הלחות, הטמפרטורה והלחות לשרת ThingSpeak.
אם ((לא חתום ארוך) (currentMillis - previousMillis)> = מרווח) { sendThingspeak (); previousMillis = מילי (); client.stop (); }
בשנות ה sendThingspeak () פונקציה אנחנו בודקים אם המערכת מחוברת לשרת ואם כן אז אנחנו מכינים מחרוזת שבו לחות, טמפרטורה, לחות הקריאה כתוב מחרוזת זו תישלח ThingSpeak לשרת יחד עם מפתח API ואת כתובת שרת.
אם (client.connect (שרת, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = מחרוזת (לחות אחוז); postStr + = "& field2 ="; postStr + = מחרוזת (t); postStr + = "& field3 ="; postStr + = מחרוזת (h); postStr + = "\ r \ n \ r \ n";
לבסוף הנתונים נשלחים לשרת ThingSpeak באמצעות פונקציית client.print () המכילה מפתח API, כתובת שרת והמחרוזת שהוכנה בשלב הקודם.
client.print ("POST / עדכן HTTP / 1.1 \ n"); client.print ("מארח: api.thingspeak.com \ n"); client.print ("חיבור: סגור \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("סוג תוכן: יישום / x-www-form-urlencoded \ n"); client.print ("אורך תוכן:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
לבסוף כך נראים הנתונים בלוח המחוונים של ThingSpeak
שלב אחרון זה מסיים את ההדרכה המלאה על מערכת השקיה חכמה מבוססת IoT. שימו לב שחשוב לכבות את המנוע כאשר לחות האדמה הגיעה לרמה הנדרשת לאחר התזת מים. אתה יכול ליצור מערכת חכמה יותר אשר יכולה להכיל שליטה שונה בגידולים שונים.
אם אתה נתקל בבעיות כלשהן בעת ביצוע פרויקט זה, הגב למטה או פנה לפורומים שלנו לשאלות רלוונטיות יותר ותשובותיהן.
מצא את התוכנית המלאה ואת סרטון ההדגמה לפרויקט זה למטה.