You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/th/2-farm/lessons/3-automated-plant-watering/README.md

50 KiB

การรดน้ำต้นไม้อัตโนมัติ

ภาพสเก็ตโน้ตของบทเรียนนี้

สเก็ตโน้ตโดย Nitya Narasimhan คลิกที่ภาพเพื่อดูเวอร์ชันขนาดใหญ่ขึ้น

บทเรียนนี้เป็นส่วนหนึ่งของ โครงการ IoT สำหรับผู้เริ่มต้น โปรเจกต์ 2 - ชุดบทเรียนเกษตรดิจิทัล จาก Microsoft Reactor

การรดน้ำต้นไม้อัตโนมัติด้วย IoT

แบบทดสอบก่อนเรียน

แบบทดสอบก่อนเรียน

บทนำ

ในบทเรียนที่ผ่านมา คุณได้เรียนรู้วิธีการตรวจสอบความชื้นในดิน ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีสร้างส่วนประกอบหลักของระบบรดน้ำอัตโนมัติที่ตอบสนองต่อความชื้นในดิน นอกจากนี้ คุณยังจะได้เรียนรู้เกี่ยวกับการจัดการเวลา - เช่น การที่เซ็นเซอร์อาจใช้เวลาสักครู่ในการตอบสนองต่อการเปลี่ยนแปลง และแอคชูเอเตอร์อาจใช้เวลาในการเปลี่ยนแปลงคุณสมบัติที่เซ็นเซอร์วัดได้

ในบทเรียนนี้เราจะครอบคลุม:

การควบคุมอุปกรณ์ที่ใช้พลังงานสูงจากอุปกรณ์ IoT ที่ใช้พลังงานต่ำ

อุปกรณ์ IoT ใช้แรงดันไฟฟ้าต่ำ ซึ่งเพียงพอสำหรับเซ็นเซอร์และแอคชูเอเตอร์ที่ใช้พลังงานต่ำ เช่น LED แต่ไม่เพียงพอสำหรับการควบคุมฮาร์ดแวร์ขนาดใหญ่ เช่น ปั๊มน้ำที่ใช้ในการชลประทาน แม้แต่ปั๊มขนาดเล็กที่ใช้กับต้นไม้ในบ้านก็ยังใช้กระแสไฟฟ้ามากเกินไปสำหรับชุดพัฒนา IoT และอาจทำให้บอร์ดเสียหายได้

🎓 กระแสไฟฟ้า วัดเป็นแอมป์ (A) คือปริมาณไฟฟ้าที่ไหลผ่านวงจร แรงดันไฟฟ้าคือแรงผลักดัน ส่วนกระแสคือปริมาณที่ถูกผลัก คุณสามารถอ่านเพิ่มเติมเกี่ยวกับกระแสไฟฟ้าได้ที่ หน้ากระแสไฟฟ้าบน Wikipedia

วิธีแก้ปัญหาคือการเชื่อมต่อปั๊มกับแหล่งจ่ายไฟภายนอก และใช้แอคชูเอเตอร์เพื่อเปิดปั๊ม คล้ายกับการเปิดไฟด้วยสวิตช์ ใช้พลังงานเพียงเล็กน้อย (ในรูปของพลังงานในร่างกายของคุณ) เพื่อให้นิ้วของคุณกดสวิตช์ และสิ่งนี้จะเชื่อมต่อไฟกับไฟฟ้ากระแสหลักที่ทำงานที่ 110v/240v

สวิตช์ไฟเปิดไฟ

🎓 ไฟฟ้ากระแสหลัก หมายถึงไฟฟ้าที่ส่งไปยังบ้านและธุรกิจผ่านโครงสร้างพื้นฐานระดับประเทศในหลายส่วนของโลก

อุปกรณ์ IoT มักจะให้แรงดันไฟฟ้า 3.3V หรือ 5V ที่กระแสน้อยกว่า 1 แอมป์ (1A) เมื่อเปรียบเทียบกับไฟฟ้ากระแสหลักที่มักจะอยู่ที่ 230V (120V ในอเมริกาเหนือ และ 100V ในญี่ปุ่น) และสามารถจ่ายพลังงานให้กับอุปกรณ์ที่ใช้กระแสไฟฟ้า 30A

มีแอคชูเอเตอร์หลายประเภทที่สามารถทำสิ่งนี้ได้ รวมถึงอุปกรณ์กลไกที่คุณสามารถติดตั้งกับสวิตช์ที่มีอยู่เพื่อเลียนแบบการเปิดสวิตช์ด้วยนิ้วมือ แต่ที่นิยมที่สุดคือรีเลย์

รีเลย์

รีเลย์เป็นสวิตช์ไฟฟ้าเชิงกลที่แปลงสัญญาณไฟฟ้าให้เป็นการเคลื่อนไหวเชิงกลเพื่อเปิดสวิตช์ แกนหลักของรีเลย์คือแม่เหล็กไฟฟ้า

🎓 แม่เหล็กไฟฟ้า คือแม่เหล็กที่สร้างขึ้นโดยการส่งกระแสไฟฟ้าผ่านขดลวด เมื่อกระแสไฟฟ้าเปิด ขดลวดจะกลายเป็นแม่เหล็ก เมื่อกระแสไฟฟ้าปิด ขดลวดจะสูญเสียคุณสมบัติแม่เหล็ก

เมื่อเปิด แม่เหล็กไฟฟ้าสร้างสนามแม่เหล็ก เปิดสวิตช์สำหรับวงจรเอาต์พุต

ในรีเลย์ วงจรควบคุมจะจ่ายพลังงานให้กับแม่เหล็กไฟฟ้า เมื่อแม่เหล็กไฟฟ้าทำงาน มันจะดึงคันโยกที่เคลื่อนสวิตช์ ปิดคู่หน้าสัมผัสและทำให้วงจรเอาต์พุตสมบูรณ์

เมื่อปิด แม่เหล็กไฟฟ้าไม่สร้างสนามแม่เหล็ก ปิดสวิตช์สำหรับวงจรเอาต์พุต

เมื่อวงจรควบคุมปิด แม่เหล็กไฟฟ้าจะหยุดทำงาน ปล่อยคันโยกและเปิดหน้าสัมผัส ปิดวงจรเอาต์พุต รีเลย์เป็นแอคชูเอเตอร์แบบดิจิทัล - สัญญาณสูงไปยังรีเลย์จะเปิดรีเลย์ สัญญาณต่ำจะปิดรีเลย์

วงจรเอาต์พุตสามารถใช้จ่ายพลังงานให้กับฮาร์ดแวร์เพิ่มเติม เช่น ระบบชลประทาน อุปกรณ์ IoT สามารถเปิดรีเลย์เพื่อทำให้วงจรเอาต์พุตสมบูรณ์ที่จ่ายพลังงานให้กับระบบชลประทาน และต้นไม้จะได้รับน้ำ จากนั้นอุปกรณ์ IoT สามารถปิดรีเลย์เพื่อตัดพลังงานไปยังระบบชลประทานและปิดน้ำ

รีเลย์เปิดปั๊มเพื่อส่งน้ำไปยังต้นไม้

ในวิดีโอด้านบน รีเลย์ถูกเปิด ไฟ LED บนรีเลย์สว่างขึ้นเพื่อแสดงว่ารีเลย์เปิดอยู่ (รีเลย์บางตัวมีไฟ LED เพื่อแสดงสถานะเปิดหรือปิด) และพลังงานถูกส่งไปยังปั๊ม ทำให้ปั๊มทำงานและสูบน้ำไปยังต้นไม้

💁 รีเลย์ยังสามารถใช้สลับระหว่างสองวงจรเอาต์พุตแทนที่จะเปิดหรือปิดวงจรเดียวได้ เมื่อคันโยกเคลื่อนที่ มันจะย้ายสวิตช์จากการทำให้วงจรเอาต์พุตหนึ่งสมบูรณ์ไปยังการทำให้วงจรเอาต์พุตอื่นสมบูรณ์ โดยปกติจะใช้การเชื่อมต่อพลังงานร่วมกันหรือการเชื่อมต่อกราวด์ร่วมกัน

ทำการค้นคว้า: มีรีเลย์หลายประเภทที่มีความแตกต่าง เช่น วงจรควบคุมเปิดหรือปิดรีเลย์เมื่อจ่ายพลังงาน หรือมีวงจรเอาต์พุตหลายวงจร ค้นหาข้อมูลเกี่ยวกับรีเลย์ประเภทต่างๆ เหล่านี้

เมื่อคันโยกเคลื่อนที่ คุณมักจะได้ยินเสียงคลิกที่ชัดเจนเมื่อมันสัมผัสกับแม่เหล็กไฟฟ้า

💁 รีเลย์สามารถต่อสายเพื่อให้การเชื่อมต่อทำให้พลังงานไปยังรีเลย์ถูกตัด ซึ่งจะปิดรีเลย์ จากนั้นส่งพลังงานไปยังรีเลย์อีกครั้งเพื่อเปิดใหม่ และทำซ้ำเช่นนี้ต่อไป สิ่งนี้ทำให้รีเลย์คลิกอย่างรวดเร็วมากจนเกิดเสียงหึ่งๆ นี่คือวิธีการทำงานของกริ่งไฟฟ้าบางประเภทในอดีต

พลังงานของรีเลย์

แม่เหล็กไฟฟ้าไม่ต้องการพลังงานมากในการทำงานและดึงคันโยก มันสามารถควบคุมได้โดยใช้แรงดันไฟฟ้า 3.3V หรือ 5V จากชุดพัฒนา IoT วงจรเอาต์พุตสามารถรองรับพลังงานได้มากขึ้น ขึ้นอยู่กับรีเลย์ รวมถึงแรงดันไฟฟ้ากระแสหลักหรือระดับพลังงานที่สูงขึ้นสำหรับการใช้งานในอุตสาหกรรม ด้วยวิธีนี้ ชุดพัฒนา IoT สามารถควบคุมระบบชลประทานได้ ตั้งแต่ปั๊มขนาดเล็กสำหรับต้นไม้ต้นเดียว ไปจนถึงระบบอุตสาหกรรมขนาดใหญ่สำหรับฟาร์มเชิงพาณิชย์ทั้งหมด

รีเลย์ Grove พร้อมวงจรควบคุม วงจรเอาต์พุต และรีเลย์ที่มีป้ายกำกับ

ภาพด้านบนแสดงรีเลย์ Grove วงจรควบคุมเชื่อมต่อกับอุปกรณ์ IoT และเปิดหรือปิดรีเลย์โดยใช้แรงดันไฟฟ้า 3.3V หรือ 5V วงจรเอาต์พุตมีสองขั้ว ซึ่งขั้วใดขั้วหนึ่งสามารถเป็นพลังงานหรือกราวด์ วงจรเอาต์พุตสามารถรองรับได้ถึง 250V ที่ 10A เพียงพอสำหรับอุปกรณ์ที่ใช้พลังงานจากไฟฟ้ากระแสหลักหลากหลายประเภท คุณยังสามารถหารีเลย์ที่รองรับระดับพลังงานที่สูงกว่านี้ได้

ปั๊มที่ต่อสายผ่านรีเลย์

ในภาพด้านบน พลังงานถูกจ่ายให้กับปั๊มผ่านรีเลย์ มีสายสีแดงเชื่อมต่อขั้ว +5V ของแหล่งจ่ายไฟ USB กับขั้วหนึ่งของวงจรเอาต์พุตของรีเลย์ และสายสีแดงอีกเส้นเชื่อมต่อขั้วอีกขั้วของวงจรเอาต์พุตกับปั๊ม สายสีดำเชื่อมต่อปั๊มกับกราวด์ของแหล่งจ่ายไฟ USB เมื่อรีเลย์เปิด มันจะทำให้วงจรสมบูรณ์ ส่ง 5V ไปยังปั๊ม ทำให้ปั๊มทำงาน

การควบคุมรีเลย์

คุณสามารถควบคุมรีเลย์จากชุดพัฒนา IoT ของคุณ

งาน - ควบคุมรีเลย์

ทำตามคำแนะนำที่เกี่ยวข้องเพื่อควบคุมรีเลย์โดยใช้อุปกรณ์ IoT ของคุณ:

การควบคุมต้นไม้ของคุณผ่าน MQTT

จนถึงตอนนี้ รีเลย์ของคุณถูกควบคุมโดยอุปกรณ์ IoT โดยตรงจากการอ่านค่าความชื้นในดินเพียงครั้งเดียว ในระบบชลประทานเชิงพาณิชย์ ตรรกะการควบคุมจะถูกกระจายศูนย์กลาง เพื่อให้สามารถตัดสินใจเรื่องการรดน้ำโดยใช้ข้อมูลจากเซ็นเซอร์หลายตัว และสามารถเปลี่ยนการตั้งค่าทั้งหมดได้ในที่เดียว เพื่อจำลองสิ่งนี้ คุณสามารถควบคุมรีเลย์ผ่าน MQTT

งาน - ควบคุมรีเลย์ผ่าน MQTT

  1. เพิ่มไลบรารี MQTT/pip packages และโค้ดที่เกี่ยวข้องในโปรเจกต์ soil-moisture-sensor ของคุณเพื่อเชื่อมต่อกับ MQTT ตั้งชื่อ Client ID ว่า soilmoisturesensor_client โดยเพิ่มคำนำหน้าด้วย ID ของคุณ

    ⚠️ คุณสามารถอ้างอิง คำแนะนำสำหรับการเชื่อมต่อกับ MQTT ในโปรเจกต์ 1 บทเรียน 4 หากจำเป็น

  2. เพิ่มโค้ดอุปกรณ์ที่เกี่ยวข้องเพื่อส่งข้อมูลเทเลเมทรีพร้อมการตั้งค่าความชื้นในดิน สำหรับข้อความเทเลเมทรี ให้ตั้งชื่อพร็อพเพอร์ตี้ว่า soil_moisture

    ⚠️ คุณสามารถอ้างอิง คำแนะนำสำหรับการส่งข้อมูลเทเลเมทรีไปยัง MQTT ในโปรเจกต์ 1 บทเรียน 4 หากจำเป็น

  3. สร้างโค้ดเซิร์ฟเวอร์ในเครื่องเพื่อสมัครรับข้อมูลเทเลเมทรีและส่งคำสั่งเพื่อควบคุมรีเลย์ในโฟลเดอร์ที่ชื่อว่า soil-moisture-sensor-server ตั้งชื่อพร็อพเพอร์ตี้ในข้อความคำสั่งว่า relay_on และตั้ง Client ID ว่า soilmoisturesensor_server โดยเพิ่มคำนำหน้าด้วย ID ของคุณ รักษาโครงสร้างเดียวกับโค้ดเซิร์ฟเวอร์ที่คุณเขียนในโปรเจกต์ 1 บทเรียน 4 เนื่องจากคุณจะเพิ่มโค้ดนี้ในภายหลังในบทเรียนนี้

    ⚠️ คุณสามารถอ้างอิง คำแนะนำสำหรับการส่งข้อมูลเทเลเมทรีไปยัง MQTT และ การส่งคำสั่งผ่าน MQTT ในโปรเจกต์ 1 บทเรียน 4 หากจำเป็น

  4. เพิ่มโค้ดอุปกรณ์ที่เกี่ยวข้องเพื่อควบคุมรีเลย์จากคำสั่งที่ได้รับ โดยใช้พร็อพเพอร์ตี้ relay_on จากข้อความ ส่งค่า true สำหรับ relay_on หาก soil_moisture มีค่ามากกว่า 450 มิฉะนั้นส่งค่า false เช่นเดียวกับตรรกะที่คุณเพิ่มสำหรับอุปกรณ์ IoT ก่อนหน้านี้

    ⚠️ คุณสามารถอ้างอิง คำแนะนำสำหรับการตอบสนองต่อคำสั่งจาก MQTT ในโปรเจกต์ 1 บทเรียน 4 หากจำเป็น

💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ code-mqtt

ตรวจสอบให้แน่ใจว่าโค้ดกำลังทำงานบนอุปกรณ์และเซิร์ฟเวอร์ในเครื่องของคุณ และทดสอบโดยการเปลี่ยนระดับความชื้นในดิน ไม่ว่าจะโดยการเปลี่ยนค่าที่ส่งโดยเซ็นเซอร์เสมือน หรือโดยการเปลี่ยนระดับความชื้นในดินโดยการเติมน้ำหรือถอดเซ็นเซอร์ออกจากดิน

การจัดการเวลาในเซ็นเซอร์และแอคชูเอเตอร์

ในบทเรียนที่ 3 คุณได้สร้างไฟกลางคืน - ไฟ LED ที่เปิดทันทีเมื่อเซ็นเซอร์วัดระดับแสงต่ำได้ เซ็นเซอร์แสงตรวจจับการเปลี่ยนแปลงของระดับแสงได้ทันที และอุปกรณ์สามารถตอบสนองได้อย่างรวดเร็ว โดยจำกัดเพียงความยาวของดีเลย์ในฟังก์ชัน loop หรือ while True: ในฐานะนักพัฒนา IoT คุณไม่สามารถพึ่งพาวงจรตอบสนองที่รวดเร็วเช่นนี้ได้เสมอไป

การจัดการเวลาสำหรับความชื้นในดิน

หากคุณทำบทเรียนที่แล้วเกี่ยวกับความชื้นในดินโดยใช้เซ็นเซอร์จริง คุณอาจสังเกตเห็นว่าค่าความชื้นในดินใช้เวลาสองสามวินาทีในการลดลงหลังจากที่คุณรดน้ำต้นไม้ นี่ไม่ใช่เพราะเซ็นเซอร์ช้า แต่เพราะน้ำใช้เวลาในการซึมผ่านดิน 💁 หากคุณรดน้ำใกล้กับเซ็นเซอร์มากเกินไป คุณอาจสังเกตเห็นค่าการอ่านลดลงอย่างรวดเร็วแล้วกลับขึ้นมาอีกครั้ง - สิ่งนี้เกิดจากน้ำที่อยู่ใกล้เซ็นเซอร์กระจายไปทั่วดินส่วนที่เหลือ ทำให้ความชื้นในดินบริเวณเซ็นเซอร์ลดลง การวัดความชื้นในดินที่แสดงค่า 658 ไม่เปลี่ยนแปลงระหว่างการรดน้ำ และลดลงเหลือ 320 หลังจากน้ำซึมผ่านดิน

ในภาพด้านบน การวัดความชื้นในดินแสดงค่า 658 เมื่อรดน้ำ ค่าอ่านนี้จะไม่เปลี่ยนแปลงทันที เนื่องจากน้ำยังไม่ถึงเซ็นเซอร์ การรดน้ำอาจเสร็จสิ้นก่อนที่น้ำจะถึงเซ็นเซอร์ และค่าจะลดลงเพื่อสะท้อนระดับความชื้นใหม่

หากคุณกำลังเขียนโค้ดเพื่อควบคุมระบบชลประทานผ่านรีเลย์โดยอิงจากระดับความชื้นในดิน คุณจำเป็นต้องคำนึงถึงความล่าช้านี้และสร้างการตั้งเวลาที่ชาญฉลาดยิ่งขึ้นในอุปกรณ์ IoT ของคุณ

ลองคิดดูว่าคุณจะทำสิ่งนี้ได้อย่างไร

ควบคุมการตั้งเวลาของเซ็นเซอร์และตัวกระตุ้น

ลองจินตนาการว่าคุณได้รับมอบหมายให้สร้างระบบชลประทานสำหรับฟาร์ม โดยพิจารณาจากประเภทของดิน ระดับความชื้นในดินที่เหมาะสมที่สุดสำหรับพืชที่ปลูกนั้นพบว่าตรงกับการอ่านแรงดันไฟฟ้าแบบแอนะล็อกที่ 400-450

คุณสามารถเขียนโปรแกรมอุปกรณ์ในลักษณะเดียวกับไฟกลางคืนได้ - ตลอดเวลาที่เซ็นเซอร์อ่านค่าได้มากกว่า 450 ให้เปิดรีเลย์เพื่อเปิดปั๊ม ปัญหาคือ น้ำใช้เวลาสักครู่กว่าจะไหลจากปั๊ม ผ่านดินไปยังเซ็นเซอร์ เซ็นเซอร์จะหยุดน้ำเมื่อมันตรวจพบระดับ 450 แต่ระดับน้ำจะยังคงลดลงเนื่องจากน้ำที่ปั๊มยังคงซึมผ่านดิน ผลลัพธ์ที่ได้คือการสิ้นเปลืองน้ำและความเสี่ยงต่อความเสียหายของราก

จำไว้ว่า - น้ำมากเกินไปอาจแย่พอๆ กับน้ำน้อยเกินไป และยังเป็นการสิ้นเปลืองทรัพยากรที่มีค่า

วิธีแก้ปัญหาที่ดีกว่าคือการเข้าใจว่ามีความล่าช้าระหว่างการเปิดตัวกระตุ้นและคุณสมบัติที่เซ็นเซอร์อ่านเปลี่ยนแปลง ซึ่งหมายความว่าไม่เพียงแต่เซ็นเซอร์ควรรอชั่วครู่ก่อนที่จะวัดค่าอีกครั้ง แต่ตัวกระตุ้นจำเป็นต้องปิดชั่วครู่ก่อนที่จะทำการวัดเซ็นเซอร์ครั้งถัดไป

ควรเปิดรีเลย์นานแค่ไหนในแต่ละครั้ง? ควรระมัดระวังและเปิดรีเลย์เพียงช่วงเวลาสั้นๆ จากนั้นรอให้น้ำซึมผ่าน แล้วตรวจสอบระดับความชื้นอีกครั้ง ท้ายที่สุด คุณสามารถเปิดปั๊มอีกครั้งเพื่อเติมน้ำเพิ่มได้เสมอ แต่คุณไม่สามารถเอาน้ำออกจากดินได้

💁 การควบคุมเวลาประเภทนี้ขึ้นอยู่กับอุปกรณ์ IoT ที่คุณกำลังสร้าง คุณสมบัติที่คุณกำลังวัด และเซ็นเซอร์และตัวกระตุ้นที่ใช้

ต้นสตรอเบอร์รี่ที่เชื่อมต่อกับน้ำผ่านปั๊ม โดยปั๊มเชื่อมต่อกับรีเลย์ รีเลย์และเซ็นเซอร์ความชื้นในดินในต้นไม้เชื่อมต่อกับ Raspberry Pi

ตัวอย่างเช่น ฉันมีต้นสตรอเบอร์รี่ที่มีเซ็นเซอร์ความชื้นในดินและปั๊มที่ควบคุมโดยรีเลย์ ฉันสังเกตว่าเมื่อฉันเติมน้ำ ใช้เวลาประมาณ 20 วินาทีสำหรับการอ่านค่าความชื้นในดินจะคงที่ ซึ่งหมายความว่าฉันต้องปิดรีเลย์และรอ 20 วินาทีก่อนที่จะตรวจสอบระดับความชื้น ฉันชอบที่จะมีน้ำน้อยเกินไปมากกว่ามากเกินไป - ฉันสามารถเปิดปั๊มอีกครั้งได้เสมอ แต่ฉันไม่สามารถเอาน้ำออกจากต้นไม้ได้

ขั้นตอนที่ 1 วัดค่า ขั้นตอนที่ 2 เติมน้ำ ขั้นตอนที่ 3 รอให้น้ำซึมผ่านดิน ขั้นตอนที่ 4 วัดค่าอีกครั้ง

ดังนั้นกระบวนการที่ดีที่สุดสำหรับรอบการรดน้ำควรเป็นดังนี้:

  • เปิดปั๊มเป็นเวลา 5 วินาที
  • รอ 20 วินาที
  • ตรวจสอบความชื้นในดิน
  • หากระดับยังคงสูงกว่าที่ต้องการ ให้ทำซ้ำขั้นตอนข้างต้น

5 วินาทีอาจนานเกินไปสำหรับปั๊ม โดยเฉพาะอย่างยิ่งหากระดับความชื้นสูงกว่าระดับที่ต้องการเพียงเล็กน้อย วิธีที่ดีที่สุดในการทราบเวลาที่ควรใช้คือการลองใช้ จากนั้นปรับเมื่อคุณมีข้อมูลเซ็นเซอร์ พร้อมกับการวนรอบข้อเสนอแนะอย่างต่อเนื่อง สิ่งนี้อาจนำไปสู่การตั้งเวลาที่ละเอียดขึ้น เช่น การเปิดปั๊มเป็นเวลา 1 วินาทีสำหรับทุกๆ 100 ที่สูงกว่าระดับความชื้นในดินที่ต้องการ แทนที่จะเป็น 5 วินาทีคงที่

ลองค้นคว้าดู: มีข้อพิจารณาเรื่องเวลาอื่นๆ หรือไม่? พืชสามารถรดน้ำได้ทุกเวลาที่ความชื้นในดินต่ำเกินไป หรือมีช่วงเวลาที่เหมาะสมและไม่เหมาะสมในการรดน้ำพืชหรือไม่?

💁 การพยากรณ์อากาศสามารถนำมาพิจารณาเมื่อควบคุมระบบรดน้ำอัตโนมัติสำหรับการปลูกกลางแจ้ง หากคาดว่าฝนจะตก การรดน้ำสามารถหยุดไว้จนกว่าฝนจะหยุดตก ณ จุดนั้นดินอาจชื้นพอจนไม่จำเป็นต้องรดน้ำ ซึ่งมีประสิทธิภาพมากกว่าการสิ้นเปลืองน้ำโดยการรดน้ำก่อนฝนตก

เพิ่มการตั้งเวลาให้กับเซิร์ฟเวอร์ควบคุมพืชของคุณ

โค้ดเซิร์ฟเวอร์สามารถแก้ไขเพื่อเพิ่มการควบคุมรอบการตั้งเวลาการรดน้ำ และรอให้ระดับความชื้นในดินเปลี่ยนแปลงได้ ลอจิกของเซิร์ฟเวอร์สำหรับควบคุมการตั้งเวลารีเลย์คือ:

  1. รับข้อความเทเลเมทรี
  2. ตรวจสอบระดับความชื้นในดิน
  3. หากระดับความชื้นโอเค ไม่ต้องทำอะไร หากการอ่านสูงเกินไป (หมายถึงความชื้นในดินต่ำเกินไป) ให้:
    1. ส่งคำสั่งเพื่อเปิดรีเลย์
    2. รอ 5 วินาที
    3. ส่งคำสั่งเพื่อปิดรีเลย์
    4. รอ 20 วินาทีเพื่อให้ระดับความชื้นในดินคงที่

รอบการรดน้ำ กระบวนการตั้งแต่รับข้อความเทเลเมทรีจนถึงพร้อมประมวลผลระดับความชื้นในดินอีกครั้ง ใช้เวลาประมาณ 25 วินาที เรากำลังส่งระดับความชื้นในดินทุกๆ 10 วินาที ดังนั้นจึงมีการทับซ้อนกันที่ข้อความถูกส่งในขณะที่เซิร์ฟเวอร์กำลังรอให้ระดับความชื้นในดินคงที่ ซึ่งอาจเริ่มรอบการรดน้ำใหม่

มีสองตัวเลือกในการแก้ไขปัญหานี้:

  • เปลี่ยนโค้ดอุปกรณ์ IoT ให้ส่งเทเลเมทรีทุกๆ นาที วิธีนี้รอบการรดน้ำจะเสร็จก่อนที่ข้อความถัดไปจะถูกส่ง
  • ยกเลิกการสมัครรับเทเลเมทรีระหว่างรอบการรดน้ำ

ตัวเลือกแรกไม่ใช่ทางออกที่ดีเสมอไปสำหรับฟาร์มขนาดใหญ่ เกษตรกรอาจต้องการจับข้อมูลระดับความชื้นในดินในขณะที่ดินกำลังถูกรดน้ำเพื่อการวิเคราะห์ในภายหลัง เช่น เพื่อรับรู้การไหลของน้ำในพื้นที่ต่างๆ ของฟาร์มเพื่อเป็นแนวทางในการรดน้ำที่ตรงเป้าหมายมากขึ้น ตัวเลือกที่สองดีกว่า - โค้ดเพียงแค่เพิกเฉยต่อเทเลเมทรีเมื่อไม่สามารถใช้งานได้ แต่เทเลเมทรียังคงมีอยู่สำหรับบริการอื่นๆ ที่อาจสมัครรับข้อมูล

💁 ข้อมูล IoT ไม่ได้ถูกส่งจากอุปกรณ์เพียงเครื่องเดียวไปยังบริการเพียงบริการเดียว แต่หลายอุปกรณ์สามารถส่งข้อมูลไปยังตัวกลาง และหลายบริการสามารถฟังข้อมูลจากตัวกลางได้ ตัวอย่างเช่น บริการหนึ่งสามารถฟังข้อมูลความชื้นในดินและจัดเก็บในฐานข้อมูลเพื่อการวิเคราะห์ในภายหลัง อีกบริการหนึ่งสามารถฟังเทเลเมทรีเดียวกันเพื่อควบคุมระบบชลประทาน

งาน - เพิ่มการตั้งเวลาให้กับเซิร์ฟเวอร์ควบคุมพืชของคุณ

อัปเดตโค้ดเซิร์ฟเวอร์ของคุณเพื่อให้รีเลย์ทำงานเป็นเวลา 5 วินาที จากนั้นรอ 20 วินาที

  1. เปิดโฟลเดอร์ soil-moisture-sensor-server ใน VS Code หากยังไม่ได้เปิด ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเสมือนถูกเปิดใช้งาน

  2. เปิดไฟล์ app.py

  3. เพิ่มโค้ดต่อไปนี้ในไฟล์ app.py ด้านล่างการนำเข้าเดิม:

    import threading
    

    คำสั่งนี้นำเข้า threading จากไลบรารีของ Python ซึ่งช่วยให้ Python สามารถรันโค้ดอื่นในขณะที่รอได้

  4. เพิ่มโค้ดต่อไปนี้ก่อนฟังก์ชัน handle_telemetry ที่จัดการข้อความเทเลเมทรีที่ได้รับจากโค้ดเซิร์ฟเวอร์:

    water_time = 5
    wait_time = 20
    

    สิ่งนี้กำหนดระยะเวลาที่จะเปิดรีเลย์ (water_time) และระยะเวลาที่จะรอหลังจากนั้นเพื่อตรวจสอบความชื้นในดิน (wait_time)

  5. ด้านล่างโค้ดนี้ เพิ่มโค้ดต่อไปนี้:

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

    โค้ดนี้กำหนดฟังก์ชันชื่อ send_relay_command ที่ส่งคำสั่งผ่าน MQTT เพื่อควบคุมรีเลย์ เทเลเมทรีถูกสร้างเป็นพจนานุกรม จากนั้นแปลงเป็นสตริง JSON ค่าที่ส่งผ่านไปยัง state กำหนดว่ารีเลย์ควรเปิดหรือปิด

  6. หลังฟังก์ชัน send_relay_code เพิ่มโค้ดต่อไปนี้:

    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)
    

    โค้ดนี้กำหนดฟังก์ชันเพื่อควบคุมรีเลย์ตามเวลาที่กำหนด เริ่มต้นด้วยการยกเลิกการสมัครรับเทเลเมทรีเพื่อไม่ให้ข้อความความชื้นในดินถูกประมวลผลในขณะที่กำลังรดน้ำ จากนั้นส่งคำสั่งเพื่อเปิดรีเลย์ รอ water_time ก่อนส่งคำสั่งเพื่อปิดรีเลย์ สุดท้ายรอให้ระดับความชื้นในดินคงที่เป็นเวลา wait_time วินาที จากนั้นสมัครรับเทเลเมทรีอีกครั้ง

  7. เปลี่ยนฟังก์ชัน handle_telemetry เป็นดังนี้:

    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()
    

    โค้ดนี้ตรวจสอบระดับความชื้นในดิน หากมากกว่า 450 ดินต้องการน้ำ ดังนั้นจึงเรียกฟังก์ชัน control_relay ฟังก์ชันนี้จะรันในเธรดแยก ทำงานในพื้นหลัง

  8. ตรวจสอบให้อุปกรณ์ IoT ของคุณกำลังทำงาน จากนั้นรันโค้ดนี้ เปลี่ยนระดับความชื้นในดินและสังเกตสิ่งที่เกิดขึ้นกับรีเลย์ - รีเลย์ควรเปิดเป็นเวลา 5 วินาที จากนั้นปิดอย่างน้อย 20 วินาที โดยจะเปิดอีกครั้งก็ต่อเมื่อระดับความชื้นในดินไม่เพียงพอ

    (.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}
    

    วิธีที่ดีในการทดสอบระบบชลประทานจำลองคือการใช้ดินแห้ง จากนั้นเทน้ำด้วยตนเองในขณะที่รีเลย์เปิด หยุดเทเมื่อรีเลย์ปิด

💁 คุณสามารถค้นหาโค้ดนี้ได้ในโฟลเดอร์ code-timing

💁 หากคุณต้องการใช้ปั๊มเพื่อสร้างระบบชลประทานจริง คุณสามารถใช้ ปั๊มน้ำ 6V พร้อม แหล่งจ่ายไฟ USB ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟไปยังหรือจากปั๊มเชื่อมต่อผ่านรีเลย์


🚀 ความท้าทาย

คุณสามารถนึกถึงอุปกรณ์ IoT หรืออุปกรณ์ไฟฟ้าอื่นๆ ที่มีปัญหาคล้ายกัน ซึ่งใช้เวลาสักครู่สำหรับผลลัพธ์ของตัวกระตุ้นที่จะไปถึงเซ็นเซอร์ได้หรือไม่? คุณอาจมีอุปกรณ์เหล่านี้ในบ้านหรือโรงเรียนของคุณ

  • พวกมันวัดคุณสมบัติอะไร?
  • ใช้เวลานานแค่ไหนสำหรับคุณสมบัติที่จะเปลี่ยนแปลงหลังจากใช้ตัวกระตุ้น?
  • เป็นเรื่องโอเคหรือไม่ที่คุณสมบัติจะเปลี่ยนแปลงเกินค่าที่ต้องการ?
  • จะสามารถคืนค่ากลับไปยังค่าที่ต้องการได้อย่างไรหากจำเป็น?

แบบทดสอบหลังการบรรยาย

แบบทดสอบหลังการบรรยาย

การทบทวนและการศึกษาด้วยตนเอง

การบ้าน

สร้างรอบการรดน้ำที่มีประสิทธิภาพมากขึ้น


ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้