เกษตรกรส่วนใหญ่ใช้พื้นที่เกษตรกรรมเป็นส่วนใหญ่และยากมากที่จะเข้าถึงและติดตามแต่ละมุมของที่ดินขนาดใหญ่ บางครั้งอาจมีการฉีดน้ำไม่สม่ำเสมอ ส่งผลให้พืชมีคุณภาพไม่ดีซึ่งนำไปสู่ความสูญเสียทางการเงิน ในสถานการณ์นี้ระบบชลประทานอัจฉริยะที่ใช้เทคโนโลยี IoT ล่าสุดมีประโยชน์และนำไปสู่ความสะดวกในการทำฟาร์ม
สมาร์ทระบบชลประทานมีขอบเขตกว้างโดยอัตโนมัติระบบชลประทานที่สมบูรณ์ ที่นี่เรากำลังสร้างระบบชลประทานที่ใช้ IoT โดยใช้ ESP8266 NodeMCU Module และ DHT11 Sensor มันจะไม่เพียง แต่ชำระล้างน้ำโดยอัตโนมัติตามระดับความชื้นในดิน แต่ยังส่งข้อมูลไปยัง ThingSpeak Server เพื่อติดตามสภาพที่ดิน ระบบจะประกอบด้วยปั๊มน้ำซึ่งจะใช้ในการฉีดน้ำลงบนบกโดยขึ้นอยู่กับสภาพแวดล้อมของที่ดินเช่นความชื้นอุณหภูมิและความชื้น
ก่อนหน้านี้เราได้สร้างระบบชลประทานอัตโนมัติที่คล้ายกันซึ่งส่งการแจ้งเตือนบนมือถือ แต่ไม่ใช่บนคลาวด์ IoT นอกจากนี้วงจรเตือนฝนและเครื่องตรวจจับความชื้นในดินยังมีประโยชน์ในการสร้างระบบชลประทานอัจฉริยะ
ก่อนที่จะเริ่มต้นสิ่งสำคัญคือต้องทราบว่าพืชที่แตกต่างกันนั้นต้องการความชื้นในดินอุณหภูมิและสภาพความชื้นที่แตกต่างกัน ดังนั้นในบทช่วยสอนนี้เราใช้พืชชนิดนี้ซึ่งจะต้องมีความชื้นในดินประมาณ 50-55% ดังนั้นเมื่อดินสูญเสียความชื้นเหลือน้อยกว่า 50% มอเตอร์ปั๊มจะเปิดโดยอัตโนมัติเพื่อฉีดน้ำและจะพรมน้ำต่อไปจนกว่าความชื้นจะสูงถึง 55% และหลังจากนั้นปั๊มจะถูกปิด ข้อมูลเซ็นเซอร์จะถูกส่งไปยัง ThingSpeak Server ตามช่วงเวลาที่กำหนดเพื่อให้สามารถตรวจสอบได้จากทุกที่ในโลก
ส่วนประกอบที่จำเป็น
- NodeMCU ESP8266
- โมดูลเซ็นเซอร์ความชื้นในดิน
- โมดูลปั๊มน้ำ
- โมดูลรีเลย์
- DHT11
- การเชื่อมต่อสายไฟ
คุณสามารถซื้อส่วนประกอบทั้งหมดที่จำเป็นสำหรับโครงการนี้
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับระบบชลประทานอัจฉริยะ IoT แสดงไว้ด้านล่าง:
การเขียนโปรแกรม ESP8266 NodeMCU สำหรับระบบชลประทานอัตโนมัติ
สำหรับการเขียนโปรแกรมโมดูล ESP8266 NodeMCU จะใช้เฉพาะไลบรารีเซ็นเซอร์ DHT11 เป็นไลบรารีภายนอก เซ็นเซอร์ความชื้นให้เอาต์พุตแบบอะนาล็อกซึ่งสามารถอ่านได้ผ่านพินอะนาล็อก ESP8266 NodeMCU A0 เนื่องจาก NodeMCU ไม่สามารถให้แรงดันไฟฟ้าขาออกมากกว่า 3.3V จาก GPIO ได้ดังนั้นเราจึงใช้โมดูลรีเลย์เพื่อขับเคลื่อนปั๊มมอเตอร์ 5V นอกจากนี้เซ็นเซอร์ความชื้นและเซ็นเซอร์ DHT11 ยังใช้พลังงานจากแหล่งจ่ายไฟ 5V ภายนอก
โค้ดที่สมบูรณ์พร้อมวิดีโอที่ใช้งานได้จะได้รับในตอนท้ายของบทช่วยสอนนี้เรากำลังอธิบายโปรแกรมเพื่อทำความเข้าใจขั้นตอนการทำงานของโครงการ
เริ่มต้นด้วยการรวมไลบรารีที่จำเป็น
# รวม
เนื่องจากเราใช้ ThingSpeak Server จึงจำเป็นต้องใช้คีย์ API เพื่อสื่อสารกับเซิร์ฟเวอร์ หากต้องการทราบว่าเราจะรับคีย์ API จาก ThingSpeak ได้อย่างไรคุณสามารถอ่านบทความก่อนหน้านี้เกี่ยวกับ Live Temperature and Humidity Monitoring บน ThingSpeak
สตริง apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
ขั้นตอนต่อไปคือการเขียนข้อมูลรับรอง Wi-Fi เช่น SSID และรหัสผ่าน
const ถ่าน * ssid = "CircuitDigest"; const ถ่าน * pass = "xxxxxxxxxxx";
กำหนด DHT Sensor Pin ที่เชื่อมต่อ DHT และเลือกประเภท DHT
# กำหนด DHTPIN D3 DHT dht (DHTPIN, DHT11);
เอาต์พุตเซ็นเซอร์ความชื้นเชื่อมต่อกับ Pin A0 ของ ESP8266 NodeMCU และขามอเตอร์เชื่อมต่อกับ D0 ของ NodeMCU
const int moisturePin = A0; const int motorPin = D0;
เราจะใช้ฟังก์ชัน millis () เพื่อส่งข้อมูลหลังจากทุกช่วงเวลาที่กำหนดไว้ที่นี่คือ 10 วินาที หลีกเลี่ยงการ หน่วงเวลา () เนื่องจากจะหยุดโปรแกรมสำหรับการหน่วงเวลาที่กำหนดไว้โดยที่ไมโครคอนโทรลเลอร์ไม่สามารถทำงานอื่นได้ เรียนรู้เพิ่มเติมเกี่ยวกับความแตกต่างระหว่างความล่าช้า () และมิลลิวินาที () ที่นี่
ช่วงยาวที่ไม่ได้ลงนาม = 10,000; ไม่ได้ลงนามยาวก่อนหน้ามิลลิส = 0;
ตั้งขามอเตอร์เป็นเอาท์พุทและปิดมอเตอร์ในตอนแรก เริ่มการอ่านเซ็นเซอร์ DHT11
PinMode (motorPin, เอาท์พุท); digitalWrite (motorPin, LOW); // ปิดมอเตอร์เริ่ม ต้น dht.begin ();
ลองเชื่อมต่อ Wi-Fi ด้วย SSID และรหัสผ่านที่กำหนดและรอให้เชื่อมต่อ Wi-Fi และหากเชื่อมต่อแล้วให้ไปที่ขั้นตอนถัดไป
WiFi.begin (ssid, ผ่าน); ในขณะที่ (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!"); กลับ; }
อ่านค่าความชื้นจากเซ็นเซอร์และพิมพ์ค่าที่อ่านได้
MoisturePercentage = (100.00 - ((analogRead (moisturePin) / 1023.00) * 100.00)); Serial.print ("ความชื้นในดินคือ ="); Serial.print (moisturePercentage); Serial.println ("%");
หากการอ่านค่าความชื้นอยู่ระหว่างช่วงความชื้นในดินที่ต้องการให้ปิดปั๊มหรือถ้าเกินความชื้นที่ต้องการให้เปิดปั๊ม
ถ้า (moisturePercentage <50) { digitalWrite (motorPin, HIGH); } if (moisturePercentage> 50 && moisturePercentage <55) { digitalWrite (motorPin, HIGH); } if (moisturePercentage> 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 + = สตริง (moisturePercentage); 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 ("ประเภทเนื้อหา: application / x-www-form-urlencoded \ n"); client.print ("ความยาวเนื้อหา:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
สุดท้ายนี้คือลักษณะของข้อมูลใน ThingSpeak Dashboard
ขั้นตอนสุดท้ายนี้เสร็จสิ้นสมบูรณ์ในการกวดวิชาIOT ตามสมาร์ทระบบชลประทาน โปรดทราบว่าสิ่งสำคัญคือต้องปิดมอเตอร์เมื่อความชื้นในดินถึงระดับที่กำหนดหลังจากรดน้ำ คุณสามารถสร้างระบบที่ชาญฉลาดมากขึ้นซึ่งสามารถควบคุมการปลูกพืชที่แตกต่างกันได้
หากคุณประสบปัญหาใด ๆ ในขณะที่ทำโครงการนี้ให้แสดงความคิดเห็นด้านล่างหรือไปที่ฟอรัมของเราสำหรับคำถามที่เกี่ยวข้องเพิ่มเติมและคำตอบของพวกเขา
ค้นหาโปรแกรมที่สมบูรณ์และวิดีโอสาธิตสำหรับโครงการด้านล่างนี้