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/hi/2-farm/lessons/3-automated-plant-watering/README.md

303 lines
52 KiB

# स्वचालित पौधों की सिंचाई
![इस पाठ का एक स्केच नोट अवलोकन](../../../../../translated_images/hi/lesson-7.30b5f577d3cb8e03.webp)
> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें।
यह पाठ [IoT for Beginners Project 2 - Digital Agriculture series](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) के हिस्से के रूप में [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) से सिखाया गया था।
[![IoT संचालित स्वचालित पौधों की सिंचाई](https://img.youtube.com/vi/g9FfZwv9R58/0.jpg)](https://youtu.be/g9FfZwv9R58)
## व्याख्यान से पहले का क्विज़
[व्याख्यान से पहले का क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13)
## परिचय
पिछले पाठ में, आपने मिट्टी की नमी की निगरानी करना सीखा। इस पाठ में आप एक स्वचालित सिंचाई प्रणाली के मुख्य घटकों को बनाना सीखेंगे, जो मिट्टी की नमी के अनुसार प्रतिक्रिया करती है। आप समय के बारे में भी जानेंगे - कैसे सेंसर को परिवर्तनों का जवाब देने में समय लग सकता है, और कैसे एक्ट्यूएटर्स को सेंसर द्वारा मापे जा रहे गुणों को बदलने में समय लग सकता है।
इस पाठ में हम कवर करेंगे:
* [कम पावर वाले IoT डिवाइस से उच्च पावर वाले उपकरणों को नियंत्रित करना](../../../../../2-farm/lessons/3-automated-plant-watering)
* [रिले को नियंत्रित करना](../../../../../2-farm/lessons/3-automated-plant-watering)
* [MQTT के माध्यम से अपने पौधे को नियंत्रित करना](../../../../../2-farm/lessons/3-automated-plant-watering)
* [सेंसर और एक्ट्यूएटर का समय](../../../../../2-farm/lessons/3-automated-plant-watering)
* [अपने पौधे नियंत्रण सर्वर में समय जोड़ें](../../../../../2-farm/lessons/3-automated-plant-watering)
## कम पावर वाले IoT डिवाइस से उच्च पावर वाले उपकरणों को नियंत्रित करना
IoT डिवाइस कम वोल्टेज का उपयोग करते हैं। यह सेंसर और कम पावर वाले एक्ट्यूएटर्स जैसे कि LEDs के लिए पर्याप्त है, लेकिन सिंचाई के लिए उपयोग किए जाने वाले पानी के पंप जैसे बड़े हार्डवेयर को नियंत्रित करने के लिए यह बहुत कम है। यहां तक कि छोटे पंप, जिन्हें आप हाउसप्लांट्स के लिए उपयोग कर सकते हैं, IoT डिवाइस के लिए बहुत अधिक करंट खींचते हैं और बोर्ड को खराब कर सकते हैं।
> 🎓 करंट, जिसे एम्प्स (A) में मापा जाता है, एक सर्किट के माध्यम से प्रवाहित होने वाली बिजली की मात्रा है। वोल्टेज धक्का प्रदान करता है, और करंट यह दर्शाता है कि कितना धक्का दिया जा रहा है। करंट के बारे में अधिक पढ़ने के लिए [विकिपीडिया पर इलेक्ट्रिक करंट पेज](https://wikipedia.org/wiki/Electric_current) देखें।
इसका समाधान यह है कि पंप को एक बाहरी पावर सप्लाई से जोड़ा जाए, और एक एक्ट्यूएटर का उपयोग करके पंप को चालू किया जाए, जैसे कि आप एक लाइट को चालू करने के लिए स्विच का उपयोग करते हैं। आपके उंगली से स्विच को फ्लिप करने के लिए बहुत कम ऊर्जा (आपके शरीर में ऊर्जा के रूप में) की आवश्यकता होती है, और यह लाइट को 110v/240v पर चलने वाली मुख्य बिजली से जोड़ता है।
![एक लाइट स्विच लाइट को पावर चालू करता है](../../../../../translated_images/hi/light-switch.760317ad6ab8bd6d.webp)
> 🎓 [मेन बिजली](https://wikipedia.org/wiki/Mains_electricity) का मतलब है वह बिजली जो दुनिया के कई हिस्सों में राष्ट्रीय बुनियादी ढांचे के माध्यम से घरों और व्यवसायों को दी जाती है।
✅ IoT डिवाइस आमतौर पर 3.3V या 5V प्रदान कर सकते हैं, जो 1 एम्प (1A) से कम करंट पर होता है। इसकी तुलना मुख्य बिजली से करें, जो अक्सर 230V (उत्तर अमेरिका में 120V और जापान में 100V) पर होती है, और 30A तक करंट खींचने वाले उपकरणों को पावर प्रदान कर सकती है।
ऐसे कई एक्ट्यूएटर्स हैं जो यह कर सकते हैं, जिनमें यांत्रिक उपकरण शामिल हैं जिन्हें आप मौजूदा स्विचों से जोड़ सकते हैं और उन्हें चालू करने के लिए उंगली की नकल कर सकते हैं। सबसे लोकप्रिय एक रिले है।
### रिले
रिले एक इलेक्ट्रोमैकेनिकल स्विच है जो एक विद्युत संकेत को यांत्रिक गति में बदलता है, जो एक स्विच को चालू करता है। रिले का मुख्य भाग एक इलेक्ट्रोमैग्नेट है।
> 🎓 [इलेक्ट्रोमैग्नेट्स](https://wikipedia.org/wiki/Electromagnet) वे मैग्नेट हैं जो एक तार के कॉइल के माध्यम से बिजली प्रवाहित करके बनाए जाते हैं। जब बिजली चालू होती है, तो कॉइल चुंबकीय हो जाता है। जब बिजली बंद होती है, तो कॉइल अपनी चुंबकीयता खो देता है।
![जब चालू होता है, तो इलेक्ट्रोमैग्नेट एक चुंबकीय क्षेत्र बनाता है, आउटपुट सर्किट के लिए स्विच को चालू करता है](../../../../../translated_images/hi/relay-on.4db16a0fd6b66926.webp)
एक रिले में, एक नियंत्रण सर्किट इलेक्ट्रोमैग्नेट को पावर देता है। जब इलेक्ट्रोमैग्नेट चालू होता है, तो यह एक लीवर को खींचता है जो एक स्विच को हिलाता है, संपर्कों की एक जोड़ी को बंद करता है और एक आउटपुट सर्किट को पूरा करता है।
![जब बंद होता है, तो इलेक्ट्रोमैग्नेट चुंबकीय क्षेत्र नहीं बनाता, आउटपुट सर्किट के लिए स्विच को बंद करता है](../../../../../translated_images/hi/relay-off.c34a178a2960fecd.webp)
जब नियंत्रण सर्किट बंद होता है, तो इलेक्ट्रोमैग्नेट बंद हो जाता है, लीवर को छोड़ देता है और संपर्कों को खोल देता है, आउटपुट सर्किट को बंद कर देता है। रिले डिजिटल एक्ट्यूएटर्स हैं - रिले को चालू करने के लिए एक उच्च सिग्नल और इसे बंद करने के लिए एक निम्न सिग्नल की आवश्यकता होती है।
आउटपुट सर्किट का उपयोग अतिरिक्त हार्डवेयर को पावर देने के लिए किया जा सकता है, जैसे कि सिंचाई प्रणाली। IoT डिवाइस रिले को चालू कर सकता है, आउटपुट सर्किट को पूरा कर सकता है जो सिंचाई प्रणाली को पावर देता है, और पौधों को पानी मिलता है। फिर IoT डिवाइस रिले को बंद कर सकता है, सिंचाई प्रणाली को पावर काट सकता है, और पानी बंद कर सकता है।
![एक रिले चालू हो रहा है, एक पंप चालू कर रहा है जो पौधे को पानी भेज रहा है](../../../../../images/strawberry-pump.gif)
ऊपर दिए गए वीडियो में, एक रिले चालू हो रहा है। रिले पर एक LED जलती है जो यह संकेत देती है कि यह चालू है (कुछ रिले बोर्डों में यह संकेत देने के लिए LED होती है कि रिले चालू है या बंद), और पंप को पावर भेजी जाती है, जो इसे चालू करती है और पौधे में पानी पंप करती है।
> 💁 रिले का उपयोग दो आउटपुट सर्किटों के बीच स्विच करने के लिए भी किया जा सकता है, बजाय इसके कि एक को चालू और बंद किया जाए। जैसे ही लीवर हिलता है, यह एक आउटपुट सर्किट को पूरा करने से दूसरे आउटपुट सर्किट को पूरा करने के लिए स्विच करता है, आमतौर पर एक सामान्य पावर कनेक्शन या सामान्य ग्राउंड कनेक्शन साझा करता है।
✅ कुछ शोध करें: रिले के कई प्रकार होते हैं, जिनमें अंतर यह होता है कि क्या नियंत्रण सर्किट पावर लागू होने पर रिले को चालू या बंद करता है, या कई आउटपुट सर्किट होते हैं। इन विभिन्न प्रकारों के बारे में जानें।
जब लीवर हिलता है, तो आप आमतौर पर इसे इलेक्ट्रोमैग्नेट के संपर्क में आने पर एक स्पष्ट क्लिक की आवाज सुन सकते हैं।
> 💁 एक रिले को इस तरह से वायर किया जा सकता है कि कनेक्शन बनाना वास्तव में रिले को पावर काट देता है, जिससे रिले बंद हो जाता है, जो फिर रिले को पावर भेजता है और इसे फिर से चालू करता है, और इसी तरह। इसका मतलब है कि रिले बहुत तेज़ी से क्लिक करेगा और एक बजने वाली आवाज़ बनाएगा। यह कुछ पहले के बजर्स के काम करने का तरीका था, जो इलेक्ट्रिक डोरबेल्स में उपयोग किए जाते थे।
### रिले पावर
इलेक्ट्रोमैग्नेट को सक्रिय करने और लीवर को खींचने के लिए बहुत अधिक पावर की आवश्यकता नहीं होती है, इसे 3.3V या 5V आउटपुट का उपयोग करके IoT डिवाइस से नियंत्रित किया जा सकता है। आउटपुट सर्किट बहुत अधिक पावर ले जा सकता है, रिले के आधार पर, जिसमें मुख्य वोल्टेज या यहां तक कि औद्योगिक उपयोग के लिए उच्च पावर स्तर शामिल हैं। इस तरह एक IoT डिवाइस एक सिंचाई प्रणाली को नियंत्रित कर सकता है, एक छोटे पौधे के लिए एक छोटे पंप से लेकर एक पूरे वाणिज्यिक खेत के लिए एक विशाल औद्योगिक प्रणाली तक।
![एक ग्रोव रिले जिसमें नियंत्रण सर्किट, आउटपुट सर्किट और रिले लेबल किए गए हैं](../../../../../translated_images/hi/grove-relay-labelled.293e068f5c3c2a19.webp)
ऊपर दी गई छवि एक ग्रोव रिले दिखाती है। नियंत्रण सर्किट IoT डिवाइस से जुड़ता है और 3.3V या 5V का उपयोग करके रिले को चालू या बंद करता है। आउटपुट सर्किट में दो टर्मिनल होते हैं, जिनमें से कोई भी पावर या ग्राउंड हो सकता है। आउटपुट सर्किट 250V तक 10A संभाल सकता है, जो कई मुख्य पावर वाले उपकरणों के लिए पर्याप्त है। आप ऐसे रिले प्राप्त कर सकते हैं जो और भी उच्च पावर स्तर संभाल सकते हैं।
![एक पंप को रिले के माध्यम से वायर किया गया](../../../../../translated_images/hi/pump-wired-to-relay.66c5cfc0d8918990.webp)
ऊपर दी गई छवि में, एक पंप को रिले के माध्यम से पावर दी जाती है। एक लाल तार USB पावर सप्लाई के +5V टर्मिनल को रिले के आउटपुट सर्किट के एक टर्मिनल से जोड़ता है, और दूसरा लाल तार आउटपुट सर्किट के दूसरे टर्मिनल को पंप से जोड़ता है। एक काला तार पंप को USB पावर सप्लाई के ग्राउंड से जोड़ता है। जब रिले चालू होता है, तो यह सर्किट को पूरा करता है, पंप को 5V भेजता है, और पंप चालू हो जाता है।
## रिले को नियंत्रित करना
आप अपने IoT डिवाइस से एक रिले को नियंत्रित कर सकते हैं।
### कार्य - रिले को नियंत्रित करें
अपने IoT डिवाइस का उपयोग करके रिले को नियंत्रित करने के लिए संबंधित गाइड का पालन करें:
* [Arduino - Wio Terminal](wio-terminal-relay.md)
* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi](pi-relay.md)
* [सिंगल-बोर्ड कंप्यूटर - वर्चुअल डिवाइस](virtual-device-relay.md)
## MQTT के माध्यम से अपने पौधे को नियंत्रित करें
अब तक आपका रिले सीधे IoT डिवाइस द्वारा एकल मिट्टी नमी रीडिंग के आधार पर नियंत्रित किया जा रहा था। एक वाणिज्यिक सिंचाई प्रणाली में, नियंत्रण लॉजिक केंद्रीकृत होगा, जिससे यह कई सेंसरों से डेटा का उपयोग करके पानी देने के निर्णय ले सके, और किसी भी कॉन्फ़िगरेशन को एक ही स्थान पर बदला जा सके। इसे अनुकरण करने के लिए, आप MQTT के माध्यम से रिले को नियंत्रित कर सकते हैं।
### कार्य - MQTT के माध्यम से रिले को नियंत्रित करें
1. अपने `soil-moisture-sensor` प्रोजेक्ट में MQTT से कनेक्ट करने के लिए संबंधित MQTT लाइब्रेरी/पाइप पैकेज और कोड जोड़ें। क्लाइंट ID को `soilmoisturesensor_client` के रूप में नाम दें, जिसे आपके ID से प्रीफिक्स किया गया हो।
> ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 4 में MQTT से कनेक्ट करने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt) देखें।
1. मिट्टी की नमी सेटिंग्स के साथ टेलीमेट्री भेजने के लिए संबंधित डिवाइस कोड जोड़ें। टेलीमेट्री संदेश के लिए, प्रॉपर्टी का नाम `soil_moisture` रखें।
> ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 4 में MQTT को टेलीमेट्री भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device) देखें।
1. `soil-moisture-sensor-server` नामक एक फोल्डर में टेलीमेट्री की सदस्यता लेने और रिले को नियंत्रित करने के लिए एक कमांड भेजने के लिए कुछ स्थानीय सर्वर कोड बनाएं। कमांड संदेश में प्रॉपर्टी का नाम `relay_on` रखें, और क्लाइंट ID को `soilmoisturesensor_server` के रूप में नाम दें, जिसे आपके ID से प्रीफिक्स किया गया हो। इस कोड को उसी संरचना में रखें जैसा आपने प्रोजेक्ट 1, पाठ 4 के लिए लिखा था, क्योंकि आप इस पाठ में इस कोड में और जोड़ेंगे।
> ⚠️ यदि आवश्यक हो, तो [MQTT को टेलीमेट्री भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#write-the-server-code) और [MQTT के माध्यम से कमांड भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#send-commands-to-the-mqtt-broker) प्रोजेक्ट 1, पाठ 4 में देखें।
1. प्राप्त कमांड से रिले को नियंत्रित करने के लिए संबंधित डिवाइस कोड जोड़ें, संदेश से `relay_on` प्रॉपर्टी का उपयोग करें। यदि `soil_moisture` 450 से अधिक है तो `relay_on` के लिए true भेजें, अन्यथा false भेजें, जैसा कि आपने पहले IoT डिवाइस के लिए लॉजिक जोड़ा था।
> ⚠️ यदि आवश्यक हो, तो [MQTT से कमांड का जवाब देने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#handle-commands-on-the-iot-device) प्रोजेक्ट 1, पाठ 4 में देखें।
> 💁 आप इस कोड को [code-mqtt](../../../../../2-farm/lessons/3-automated-plant-watering/code-mqtt) फोल्डर में पा सकते हैं।
सुनिश्चित करें कि कोड आपके डिवाइस और स्थानीय सर्वर पर चल रहा है, और इसे मिट्टी की नमी के स्तर को बदलकर आज़माएं, चाहे वर्चुअल सेंसर द्वारा भेजे गए मानों को बदलकर, या मिट्टी में पानी जोड़कर या सेंसर को मिट्टी से हटाकर।
## सेंसर और एक्ट्यूएटर का समय
पाठ 3 में आपने एक नाइटलाइट बनाया था - एक LED जो जैसे ही एक लाइट सेंसर द्वारा कम रोशनी का स्तर पता चलता है, चालू हो जाती है। लाइट सेंसर तुरंत रोशनी के स्तर में बदलाव का पता लगाता है, और डिवाइस जल्दी प्रतिक्रिया कर सकता है, केवल `loop` फ़ंक्शन या `while True:` लूप में देरी की लंबाई तक सीमित। एक IoT डेवलपर के रूप में, आप हमेशा इतनी तेज़ प्रतिक्रिया लूप पर भरोसा नहीं कर सकते।
### मिट्टी की नमी के लिए समय
यदि आपने पिछले पाठ में भौतिक सेंसर का उपयोग करके मिट्टी की नमी पर काम किया, तो आपने देखा होगा कि पौधे को पानी देने के बाद मिट्टी की नमी रीडिंग को गिरने में कुछ सेकंड लगते हैं। ऐसा इसलिए नहीं है क्योंकि सेंसर धीमा है, बल्कि इसलिए कि पानी को मिट्टी में सोखने में समय लगता है।
💁 अगर आपने सेंसर के बहुत पास पानी डाला होगा, तो आपने देखा होगा कि रीडिंग तेजी से गिरी और फिर वापस बढ़ गई - ऐसा इसलिए होता है क्योंकि सेंसर के पास का पानी मिट्टी के बाकी हिस्सों में फैल जाता है, जिससे सेंसर के पास की मिट्टी की नमी कम हो जाती है।
![पानी देने के दौरान मिट्टी की नमी का माप 658 पर स्थिर रहता है, यह केवल पानी देने के बाद 320 तक गिरता है जब पानी मिट्टी में पूरी तरह से समा जाता है](../../../../../translated_images/hi/soil-moisture-travel.a0e31af222cf1438.webp)
ऊपर दिए गए चित्र में, मिट्टी की नमी का माप 658 दिखाता है। पौधे को पानी दिया जाता है, लेकिन यह माप तुरंत नहीं बदलता क्योंकि पानी अभी तक सेंसर तक नहीं पहुंचा है। पानी देने की प्रक्रिया सेंसर तक पानी पहुंचने से पहले ही समाप्त हो सकती है, और तब माप नई नमी के स्तर को दर्शाने के लिए गिरता है।
यदि आप मिट्टी की नमी के स्तर के आधार पर रिले के माध्यम से सिंचाई प्रणाली को नियंत्रित करने के लिए कोड लिख रहे हैं, तो आपको इस देरी को ध्यान में रखना होगा और अपने IoT डिवाइस में अधिक स्मार्ट टाइमिंग बनानी होगी।
✅ एक पल रुककर सोचें कि आप इसे कैसे कर सकते हैं।
### सेंसर और एक्टुएटर की टाइमिंग को नियंत्रित करें
कल्पना करें कि आपको एक खेत के लिए सिंचाई प्रणाली बनाने का काम सौंपा गया है। मिट्टी के प्रकार के आधार पर, उगाए गए पौधों के लिए आदर्श मिट्टी की नमी का स्तर 400-450 के एनालॉग वोल्टेज माप से मेल खाता है।
आप डिवाइस को उसी तरह प्रोग्राम कर सकते हैं जैसे नाइटलाइट - जब तक सेंसर 450 से ऊपर पढ़ता है, रिले को चालू करें ताकि पंप चालू हो जाए। समस्या यह है कि पंप से पानी मिट्टी के माध्यम से सेंसर तक पहुंचने में समय लेता है। सेंसर पानी को तब रोक देगा जब वह 450 का स्तर मापेगा, लेकिन पानी का स्तर तब भी गिरता रहेगा क्योंकि पंप किया गया पानी मिट्टी में समा रहा है। इसका परिणाम पानी की बर्बादी और जड़ों को नुकसान का खतरा हो सकता है।
✅ याद रखें - बहुत अधिक पानी पौधों के लिए उतना ही खराब हो सकता है जितना कि बहुत कम पानी, और यह एक कीमती संसाधन की बर्बादी है।
बेहतर समाधान यह समझना है कि एक्टुएटर के चालू होने और सेंसर द्वारा पढ़े गए गुण में बदलाव के बीच एक देरी होती है। इसका मतलब है कि सेंसर को न केवल कुछ समय इंतजार करना चाहिए बल्कि एक्टुएटर को अगली सेंसर माप लेने से पहले कुछ समय के लिए बंद रहना चाहिए।
हर बार रिले कितनी देर तक चालू रहना चाहिए? यह बेहतर है कि सावधानी बरती जाए और रिले को केवल थोड़े समय के लिए चालू किया जाए, फिर पानी को मिट्टी में समाने के लिए इंतजार किया जाए, फिर नमी के स्तर को फिर से जांचा जाए। आखिरकार, आप हमेशा अधिक पानी जोड़ने के लिए पंप को फिर से चालू कर सकते हैं, लेकिन मिट्टी से पानी निकाल नहीं सकते।
> 💁 इस प्रकार की टाइमिंग नियंत्रण आपके IoT डिवाइस, मापे जा रहे गुण, और उपयोग किए गए सेंसर और एक्टुएटर पर बहुत निर्भर करता है।
![एक स्ट्रॉबेरी पौधा जो पंप के माध्यम से पानी से जुड़ा है, पंप एक रिले से जुड़ा है। रिले और मिट्टी की नमी सेंसर दोनों एक रास्पबेरी पाई से जुड़े हैं](../../../../../translated_images/hi/strawberry-with-pump.b410fc72ac6aabad.webp)
उदाहरण के लिए, मेरे पास एक स्ट्रॉबेरी पौधा है जिसमें मिट्टी की नमी सेंसर और एक पंप है जो रिले द्वारा नियंत्रित होता है। मैंने देखा है कि जब मैं पानी जोड़ता हूं तो मिट्टी की नमी का माप स्थिर होने में लगभग 20 सेकंड लगते हैं। इसका मतलब है कि मुझे रिले को बंद करना होगा और नमी के स्तर की जांच करने से पहले 20 सेकंड इंतजार करना होगा। मैं कम पानी रखना पसंद करूंगा क्योंकि मैं हमेशा पंप को फिर से चालू कर सकता हूं, लेकिन मैं पौधे से पानी नहीं निकाल सकता।
![चरण 1, माप लें। चरण 2, पानी जोड़ें। चरण 3, पानी को मिट्टी में समाने के लिए इंतजार करें। चरण 4, माप को फिर से लें](../../../../../translated_images/hi/soil-moisture-delay.865f3fae206db01d.webp)
इसका मतलब है कि सबसे अच्छा प्रक्रिया कुछ इस प्रकार होगी:
* पंप को 5 सेकंड के लिए चालू करें
* 20 सेकंड इंतजार करें
* मिट्टी की नमी की जांच करें
* यदि स्तर अभी भी आवश्यक स्तर से ऊपर है, तो ऊपर दिए गए चरणों को दोहराएं
5 सेकंड पंप के लिए बहुत लंबा हो सकता है, खासकर यदि नमी का स्तर केवल आवश्यक स्तर से थोड़ा ऊपर हो। सबसे अच्छा तरीका यह है कि इसे आजमाएं, फिर सेंसर डेटा के साथ समायोजित करें, एक निरंतर फीडबैक लूप के साथ। यह अधिक सूक्ष्म टाइमिंग की ओर भी ले जा सकता है, जैसे कि आवश्यक मिट्टी की नमी से हर 100 ऊपर के लिए पंप को 1 सेकंड के लिए चालू करना, बजाय एक निश्चित 5 सेकंड के।
✅ कुछ शोध करें: क्या अन्य टाइमिंग विचार हैं? क्या पौधे को किसी भी समय पानी दिया जा सकता है जब मिट्टी की नमी बहुत कम हो, या पौधों को पानी देने के लिए दिन के कुछ विशेष समय अच्छे या खराब होते हैं?
> 💁 मौसम की भविष्यवाणी को भी बाहरी खेती के लिए स्वचालित सिंचाई प्रणालियों को नियंत्रित करते समय ध्यान में रखा जा सकता है। यदि बारिश की संभावना है, तो पानी देने को बारिश खत्म होने तक रोक दिया जा सकता है। उस समय मिट्टी इतनी नम हो सकती है कि उसे पानी देने की आवश्यकता न हो, जो पानी की बर्बादी से बचने के लिए अधिक कुशल है।
## अपने पौधे नियंत्रण सर्वर में टाइमिंग जोड़ें
सर्वर कोड को पानी देने के चक्र के आसपास नियंत्रण जोड़ने और मिट्टी की नमी के स्तर को बदलने के लिए इंतजार करने के लिए संशोधित किया जा सकता है। रिले टाइमिंग को नियंत्रित करने के लिए सर्वर लॉजिक है:
1. टेलीमेट्री संदेश प्राप्त हुआ
1. मिट्टी की नमी का स्तर जांचें
1. यदि यह ठीक है, तो कुछ न करें। यदि माप बहुत अधिक है (जिसका अर्थ है कि मिट्टी की नमी बहुत कम है) तो:
1. रिले को चालू करने के लिए एक कमांड भेजें
1. 5 सेकंड इंतजार करें
1. रिले को बंद करने के लिए एक कमांड भेजें
1. मिट्टी की नमी के स्तर को स्थिर होने के लिए 20 सेकंड इंतजार करें
पानी देने का चक्र, टेलीमेट्री संदेश प्राप्त करने से लेकर मिट्टी की नमी के स्तर को फिर से जांचने के लिए तैयार होने तक, लगभग 25 सेकंड लेता है। हम हर 10 सेकंड में मिट्टी की नमी के स्तर भेज रहे हैं, इसलिए एक ओवरलैप है जहां एक संदेश प्राप्त होता है जबकि सर्वर मिट्टी की नमी के स्तर को स्थिर होने के लिए इंतजार कर रहा है, जो एक और पानी देने का चक्र शुरू कर सकता है।
इससे निपटने के लिए दो विकल्प हैं:
* IoT डिवाइस कोड को बदलें ताकि टेलीमेट्री केवल हर मिनट भेजी जाए, इस तरह पानी देने का चक्र अगले संदेश भेजे जाने से पहले पूरा हो जाएगा
* पानी देने के चक्र के दौरान टेलीमेट्री से अनसब्सक्राइब करें
पहला विकल्प बड़े खेतों के लिए हमेशा अच्छा समाधान नहीं होता। किसान मिट्टी की नमी के स्तर को पानी देने के दौरान कैप्चर करना चाह सकता है ताकि बाद में विश्लेषण के लिए इसका उपयोग किया जा सके, उदाहरण के लिए खेत के विभिन्न क्षेत्रों में पानी के प्रवाह के बारे में जागरूक होने के लिए अधिक लक्षित पानी देने का मार्गदर्शन करने के लिए। दूसरा विकल्प बेहतर है - कोड केवल टेलीमेट्री को तब अनदेखा कर रहा है जब इसका उपयोग नहीं किया जा सकता, लेकिन टेलीमेट्री अभी भी अन्य सेवाओं के लिए उपलब्ध है जो इसे सब्सक्राइब कर सकती हैं।
> 💁 IoT डेटा केवल एक डिवाइस से एक सेवा तक नहीं भेजा जाता, बल्कि कई डिवाइस डेटा को एक ब्रॉकर पर भेज सकते हैं, और कई सेवाएं ब्रॉकर से डेटा सुन सकती हैं। उदाहरण के लिए, एक सेवा मिट्टी की नमी डेटा को सुन सकती है और इसे बाद में विश्लेषण के लिए एक डेटाबेस में स्टोर कर सकती है। एक अन्य सेवा भी उसी टेलीमेट्री को सुन सकती है ताकि सिंचाई प्रणाली को नियंत्रित किया जा सके।
### कार्य - अपने पौधे नियंत्रण सर्वर में टाइमिंग जोड़ें
अपने सर्वर कोड को 5 सेकंड के लिए रिले चलाने, फिर 20 सेकंड इंतजार करने के लिए अपडेट करें।
1. यदि `soil-moisture-sensor-server` फ़ोल्डर VS Code में पहले से खुला नहीं है, तो इसे खोलें। सुनिश्चित करें कि वर्चुअल एनवायरनमेंट सक्रिय है।
1. `app.py` फ़ाइल खोलें
1. मौजूदा इम्पोर्ट्स के नीचे `app.py` फ़ाइल में निम्नलिखित कोड जोड़ें:
```python
import threading
```
यह कथन Python लाइब्रेरी से `threading` को इम्पोर्ट करता है, जो Python को इंतजार करते समय अन्य कोड निष्पादित करने की अनुमति देता है।
1. उस कोड के नीचे, जो टेलीमेट्री संदेशों को संभालता है, निम्नलिखित कोड जोड़ें:
```python
water_time = 5
wait_time = 20
```
यह परिभाषित करता है कि रिले को कितनी देर तक चलाना है (`water_time`), और उसके बाद मिट्टी की नमी की जांच करने के लिए कितनी देर तक इंतजार करना है (`wait_time`)।
1. इस कोड के नीचे, निम्नलिखित जोड़ें:
```python
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` में पास की गई वैल्यू निर्धारित करती है कि रिले चालू या बंद होना चाहिए।
1. `send_relay_code` फ़ंक्शन के बाद, निम्नलिखित कोड जोड़ें:
```python
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` सेकंड तक इंतजार करता है। फिर यह टेलीमेट्री को फिर से सब्सक्राइब करता है।
1. `handle_telemetry` फ़ंक्शन को निम्नलिखित में बदलें:
```python
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` फ़ंक्शन को कॉल करता है। यह फ़ंक्शन एक अलग थ्रेड पर चलता है, जो बैकग्राउंड में चलता है।
1. सुनिश्चित करें कि आपका IoT डिवाइस चल रहा है, फिर इस कोड को चलाएं। मिट्टी की नमी के स्तर को बदलें और देखें कि रिले के साथ क्या होता है - इसे 5 सेकंड के लिए चालू होना चाहिए और कम से कम 20 सेकंड तक बंद रहना चाहिए, केवल तभी चालू होना चाहिए जब मिट्टी की नमी का स्तर पर्याप्त न हो।
```output
(.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](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing) फ़ोल्डर में पा सकते हैं।
> 💁 यदि आप एक वास्तविक सिंचाई प्रणाली बनाने के लिए पंप का उपयोग करना चाहते हैं, तो आप [6V पानी पंप](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) का उपयोग कर सकते हैं और इसे [USB टर्मिनल पावर सप्लाई](https://www.adafruit.com/product/3628) के साथ जोड़ सकते हैं। सुनिश्चित करें कि पंप को या पंप से बिजली रिले के माध्यम से जुड़ी हो।
---
## 🚀 चुनौती
क्या आप किसी अन्य IoT या अन्य इलेक्ट्रिकल डिवाइस के बारे में सोच सकते हैं जिसमें ऐसा ही समस्या हो, जहां एक्टुएटर के परिणाम सेंसर तक पहुंचने में समय लगता है। आपके घर या स्कूल में शायद कुछ ऐसे डिवाइस हों।
* वे कौन से गुण मापते हैं?
* एक्टुएटर के उपयोग के बाद गुण बदलने में कितना समय लगता है?
* क्या यह ठीक है कि गुण आवश्यक मान से आगे बढ़ जाए?
* यदि आवश्यक हो तो इसे वापस आवश्यक मान पर कैसे लाया जा सकता है?
## पोस्ट-लेक्चर क्विज़
[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14)
## समीक्षा और स्व-अध्ययन
* रिले के बारे में अधिक पढ़ें, जिसमें टेलीफोन एक्सचेंज में उनका ऐतिहासिक उपयोग शामिल है, [रिले विकिपीडिया पेज](https://wikipedia.org/wiki/Relay) पर।
## असाइनमेंट
[एक अधिक कुशल पानी देने का चक्र बनाएं](assignment.md)
**अस्वीकरण**:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।