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

51 KiB

स्वयंचलित वनस्पती पाणी देणे

या धड्याचा स्केच नोट आढावा

स्केच नोट नित्य नरसिंहन यांनी तयार केले. मोठ्या आवृत्तीसाठी प्रतिमेवर क्लिक करा.

हा धडा IoT for Beginners Project 2 - Digital Agriculture series चा भाग म्हणून Microsoft Reactor कडून शिकवला गेला.

IoT आधारित स्वयंचलित वनस्पती पाणी देणे

पूर्व-व्याख्यान प्रश्नमंजुषा

पूर्व-व्याख्यान प्रश्नमंजुषा

परिचय

मागील धड्यात तुम्ही मातीतील आर्द्रता कशी मोजायची ते शिकले. या धड्यात तुम्ही मातीतील आर्द्रतेवर प्रतिक्रिया देणारी स्वयंचलित पाणी देण्याची प्रणाली तयार करण्याचे मुख्य घटक शिकाल. तुम्ही वेळेचे महत्त्व देखील शिकाल - सेन्सरला बदलांवर प्रतिक्रिया देण्यासाठी वेळ लागतो, आणि अ‍ॅक्च्युएटर्सला सेन्सरद्वारे मोजल्या जाणाऱ्या गुणधर्मांमध्ये बदल करण्यासाठी वेळ लागतो.

या धड्यात आपण शिकणार आहोत:

कमी वीज वापरणाऱ्या IoT डिव्हाइसद्वारे उच्च वीज उपकरणे नियंत्रित करा

IoT डिव्हाइस कमी व्होल्टेज वापरतात. सेन्सर आणि LED सारख्या कमी वीज वापरणाऱ्या अ‍ॅक्च्युएटर्ससाठी हे पुरेसे आहे, परंतु सिंचनासाठी वापरल्या जाणाऱ्या वॉटर पंपासारख्या मोठ्या हार्डवेअरला नियंत्रित करण्यासाठी हे अपुरे आहे. घरगुती वनस्पतींसाठी वापरता येणारे छोटे पंप देखील IoT डेव्ह किटसाठी खूप जास्त करंट वापरतात आणि बोर्ड खराब होईल.

🎓 करंट, ज्याचे मोजमाप अँप्स (A) मध्ये केले जाते, हे सर्किटमधून जाणारे विद्युत प्रवाहाचे प्रमाण आहे. व्होल्टेज हे ढकलण्याचे काम करते, तर करंट हे किती ढकलले जाते ते दर्शवते. करंटबद्दल अधिक वाचण्यासाठी विकिपीडियावर इलेक्ट्रिक करंट पृष्ठ पहा.

यावर उपाय म्हणजे पंप बाह्य वीज पुरवठ्याशी जोडणे आणि पंप चालू करण्यासाठी अ‍ॅक्च्युएटर वापरणे, जसे तुम्ही दिवा चालू करण्यासाठी स्विच चालू करता. तुमच्या बोटाला स्विच चालू करण्यासाठी लागणारी ऊर्जा खूप कमी असते, आणि यामुळे दिवा 110v/240v मुख्य वीजपुरवठ्याशी जोडला जातो.

दिवा चालू करण्यासाठी स्विच वीजपुरवठा चालू करते

🎓 मुख्य वीजपुरवठा म्हणजे जगातील अनेक भागांमध्ये राष्ट्रीय पायाभूत सुविधांद्वारे घरांमध्ये आणि व्यवसायांमध्ये वितरित होणारी वीज.

IoT डिव्हाइस सामान्यतः 3.3V किंवा 5V, 1 अँप (1A) पेक्षा कमी करंट प्रदान करू शकतात. याची तुलना मुख्य वीजपुरवठ्याशी करा, जो बहुतेक वेळा 230V (उत्तर अमेरिकेत 120V आणि जपानमध्ये 100V) असतो आणि 30A करंट वापरणाऱ्या उपकरणांसाठी वीज पुरवतो.

असे करण्यासाठी अनेक अ‍ॅक्च्युएटर्स उपलब्ध आहेत, ज्यामध्ये विद्यमान स्विचेसवर जोडता येणाऱ्या यांत्रिक उपकरणांचा समावेश आहे, जे स्विच चालू करण्यासाठी बोटाची नक्कल करतात. यामध्ये सर्वात लोकप्रिय म्हणजे रिले.

रिले

रिले हे एक इलेक्ट्रोमेकॅनिकल स्विच आहे जे विद्युत सिग्नलला यांत्रिक हालचालीत रूपांतरित करते आणि स्विच चालू करते. रिलेचा मुख्य भाग म्हणजे इलेक्ट्रोमॅग्नेट.

🎓 इलेक्ट्रोमॅग्नेट्स हे चुंबक आहेत जे वायरच्या कॉइलमधून वीज प्रवाहित करून तयार केले जातात. वीज चालू केल्यावर कॉइल चुंबकीय बनते. वीज बंद केल्यावर कॉइल आपले चुंबकत्व गमावते.

चालू असताना, इलेक्ट्रोमॅग्नेट चुंबकीय क्षेत्र तयार करते, आउटपुट सर्किटसाठी स्विच चालू करते

रिलेमध्ये, नियंत्रण सर्किट इलेक्ट्रोमॅग्नेटला वीज पुरवते. इलेक्ट्रोमॅग्नेट चालू असताना, तो एक लीव्हर खेचतो जो स्विच हलवतो, संपर्क जोडतो आणि आउटपुट सर्किट पूर्ण करतो.

बंद असताना, इलेक्ट्रोमॅग्नेट चुंबकीय क्षेत्र तयार करत नाही, आउटपुट सर्किटसाठी स्विच बंद करते

नियंत्रण सर्किट बंद असताना, इलेक्ट्रोमॅग्नेट बंद होतो, लीव्हर सोडतो आणि संपर्क उघडतो, आउटपुट सर्किट बंद करतो. रिले हे डिजिटल अ‍ॅक्च्युएटर्स आहेत - रिले चालू करण्यासाठी उच्च सिग्नल आणि बंद करण्यासाठी कमी सिग्नल आवश्यक असतो.

आउटपुट सर्किट अतिरिक्त हार्डवेअर चालवण्यासाठी वापरले जाऊ शकते, जसे की सिंचन प्रणाली. IoT डिव्हाइस रिले चालू करू शकते, आउटपुट सर्किट पूर्ण करून सिंचन प्रणालीला वीज पुरवते, आणि वनस्पतींना पाणी मिळते. IoT डिव्हाइस नंतर रिले बंद करू शकते, सिंचन प्रणालीला वीजपुरवठा बंद करते आणि पाणी बंद करते.

रिले चालू होत आहे, पंप चालू करत आहे आणि वनस्पतीला पाणी देत आहे

वरील व्हिडिओमध्ये, रिले चालू होते. रिलेवरील LED चालू असल्याचे सूचित करण्यासाठी प्रकाशमान होते (काही रिले बोर्डांवर रिले चालू किंवा बंद असल्याचे सूचित करणारे LED असतात), आणि पंपला वीज पुरवली जाते, पंप चालू होतो आणि वनस्पतीला पाणी पुरवतो.

💁 रिले दोन आउटपुट सर्किट्समध्ये स्विच करण्यासाठी देखील वापरले जाऊ शकते, एक चालू आणि दुसरा बंद करण्याऐवजी. लीव्हर हलताना, तो एक आउटपुट सर्किट पूर्ण करण्यापासून दुसरे आउटपुट सर्किट पूर्ण करण्याकडे स्विच हलवतो, सामान्यतः सामान्य वीज कनेक्शन किंवा सामान्य ग्राउंड कनेक्शन सामायिक करतो.

संशोधन करा: रिलेचे अनेक प्रकार आहेत, जसे की नियंत्रण सर्किट वीज पुरवली गेल्यावर रिले चालू किंवा बंद करते, किंवा अनेक आउटपुट सर्किट्स असतात. या वेगवेगळ्या प्रकारांबद्दल जाणून घ्या.

लीव्हर हलताना, तुम्ही सामान्यतः इलेक्ट्रोमॅग्नेटशी संपर्क साधताना स्पष्ट क्लिक आवाज ऐकू शकता.

💁 रिले अशा प्रकारे वायर केले जाऊ शकते की कनेक्शन केल्याने प्रत्यक्षात रिलेला वीजपुरवठा खंडित होतो, रिले बंद होते, जे नंतर रिलेला वीजपुरवठा करते आणि पुन्हा चालू करते, आणि असेच चालू राहते. यामुळे रिले खूप वेगाने क्लिक करते आणि गोंगाट करते. हे काही पहिल्या इलेक्ट्रिक डोअरबेल्समध्ये वापरल्या जाणाऱ्या गोंगाट करणाऱ्या उपकरणांप्रमाणे कार्य करते.

रिले वीजपुरवठा

लीव्हर खेचण्यासाठी आणि सक्रिय करण्यासाठी इलेक्ट्रोमॅग्नेटला जास्त वीज आवश्यक नसते, तो IoT डेव्ह किटच्या 3.3V किंवा 5V आउटपुटद्वारे नियंत्रित केला जाऊ शकतो. आउटपुट सर्किट खूप जास्त वीज वाहून नेऊ शकते, रिलेवर अवलंबून, ज्यामध्ये मुख्य वीजपुरवठा किंवा औद्योगिक वापरासाठी उच्च वीज पातळी देखील समाविष्ट आहे. यामुळे IoT डेव्ह किट एक सिंचन प्रणाली नियंत्रित करू शकते, एका वनस्पतीसाठी छोट्या पंपापासून ते संपूर्ण व्यावसायिक शेतासाठी मोठ्या औद्योगिक प्रणालीपर्यंत.

ग्रोव्ह रिले ज्यामध्ये नियंत्रण सर्किट, आउटपुट सर्किट आणि रिले लेबल केलेले आहेत

वरील प्रतिमेमध्ये ग्रोव्ह रिले दर्शवले आहे. नियंत्रण सर्किट IoT डिव्हाइसशी जोडले जाते आणि 3.3V किंवा 5V वापरून रिले चालू किंवा बंद करते. आउटपुट सर्किटमध्ये दोन टर्मिनल्स असतात, त्यापैकी एक वीज किंवा ग्राउंड असू शकतो. आउटपुट सर्किट 250V पर्यंत 10A हाताळू शकते, जे मुख्य वीजपुरवठ्यावरील उपकरणांसाठी पुरेसे आहे. तुम्हाला आणखी उच्च वीज पातळी हाताळणारे रिले मिळू शकतात.

रिलेद्वारे वायर केलेला पंप

वरील प्रतिमेमध्ये, पंपला रिलेद्वारे वीज पुरवली जाते. USB वीजपुरवठ्याच्या +5V टर्मिनलला रिलेच्या आउटपुट सर्किटच्या एका टर्मिनलशी जोडणारी लाल वायर आहे, आणि दुसऱ्या टर्मिनलला पंपशी जोडणारी दुसरी लाल वायर आहे. एक काळी वायर पंपला USB वीजपुरवठ्याच्या ग्राउंडशी जोडते. रिले चालू झाल्यावर, सर्किट पूर्ण होते, पंपला 5V पुरवते आणि पंप चालू होतो.

रिले नियंत्रित करा

तुमच्या IoT डेव्ह किटद्वारे तुम्ही रिले नियंत्रित करू शकता.

कार्य - रिले नियंत्रित करा

तुमच्या IoT डिव्हाइसद्वारे रिले नियंत्रित करण्यासाठी संबंधित मार्गदर्शकाचा अभ्यास करा:

MQTT च्या माध्यमातून तुमच्या वनस्पतीचे नियंत्रण करा

आतापर्यंत तुमचा रिले IoT डिव्हाइसद्वारे थेट नियंत्रित केला जात आहे, जो एका मातीतील आर्द्रता वाचनावर आधारित आहे. व्यावसायिक सिंचन प्रणालीमध्ये, नियंत्रण लॉजिक केंद्रीकृत असेल, ज्यामुळे अनेक सेन्सरमधील डेटा वापरून पाणी देण्याचे निर्णय घेता येतील, आणि कोणतीही कॉन्फिगरेशन एका ठिकाणी बदलता येईल. याची नक्कल करण्यासाठी, तुम्ही MQTT च्या माध्यमातून रिले नियंत्रित करू शकता.

कार्य - MQTT च्या माध्यमातून रिले नियंत्रित करा

  1. तुमच्या soil-moisture-sensor प्रकल्पात MQTT कनेक्ट करण्यासाठी संबंधित MQTT लायब्ररी/पिप पॅकेजेस आणि कोड जोडा. क्लायंट आयडीला soilmoisturesensor_client असे नाव द्या, तुमच्या आयडीने प्रिफिक्स करा.

    ⚠️ प्रकल्प 1, धडा 4 मधील MQTT कनेक्ट करण्याच्या सूचना आवश्यक असल्यास पहा.

  2. मातीतील आर्द्रता सेटिंग्जसह टेलिमेट्री पाठवण्यासाठी संबंधित डिव्हाइस कोड जोडा. टेलिमेट्री संदेशासाठी, प्रॉपर्टीला soil_moisture असे नाव द्या.

    ⚠️ प्रकल्प 1, धडा 4 मधील MQTT वर टेलिमेट्री पाठवण्याच्या सूचना आवश्यक असल्यास पहा.

  3. टेलिमेट्री सबस्क्राइब करण्यासाठी आणि soil-moisture-sensor-server नावाच्या फोल्डरमध्ये रिले नियंत्रित करण्यासाठी कमांड पाठवण्यासाठी स्थानिक सर्व्हर कोड तयार करा. कमांड संदेशामधील प्रॉपर्टीला relay_on असे नाव द्या, आणि क्लायंट आयडीला soilmoisturesensor_server असे नाव द्या, तुमच्या आयडीने प्रिफिक्स करा. तुम्ही या धड्याच्या पुढील भागात या कोडमध्ये भर घालणार असल्याने प्रकल्प 1, धडा 4 मध्ये लिहिलेल्या सर्व्हर कोडसारखीच रचना ठेवा.

    ⚠️ MQTT वर टेलिमेट्री पाठवण्याच्या सूचना आणि MQTT वर कमांड पाठवण्याच्या सूचना प्रकल्प 1, धडा 4 मध्ये आवश्यक असल्यास पहा.

  4. प्राप्त कमांड्समधून रिले नियंत्रित करण्यासाठी संबंधित डिव्हाइस कोड जोडा, संदेशामधील relay_on प्रॉपर्टी वापरा. जर soil_moisture 450 पेक्षा जास्त असेल तर relay_on साठी true पाठवा, अन्यथा false पाठवा, जसे तुम्ही IoT डिव्हाइससाठी आधी जोडले होते.

    ⚠️ MQTT वर कमांड्सला प्रतिसाद देण्याच्या सूचना प्रकल्प 1, धडा 4 मध्ये आवश्यक असल्यास पहा.

💁 तुम्हाला हा कोड code-mqtt फोल्डरमध्ये सापडेल.

तुमच्या डिव्हाइस आणि स्थानिक सर्व्हरवर कोड चालू असल्याची खात्री करा, आणि मातीतील आर्द्रता पातळी बदलून, वर्च्युअल सेन्सरद्वारे पाठवलेली मूल्ये बदलून किंवा मातीतील सेन्सर काढून किंवा पाणी घालून, याची चाचणी करा.

सेन्सर आणि अ‍ॅक्च्युएटर वेळ

धडा 3 मध्ये तुम्ही नाईटलाइट तयार केले - एक LED जो प्रकाश सेन्सरद्वारे कमी प्रकाश पातळी शोधताच चालू होतो. प्रकाश सेन्सरने प्रकाश पातळीतील बदल त्वरित शोधले, आणि डिव्हाइस वेगाने प्रतिसाद देऊ शकले, फक्त loop फंक्शन किंवा while True: लूपमधील विलंबाच्या लांबीने मर्यादित. IoT विकसक म्हणून, तुम्ही नेहमीच अशा जलद फीडबॅक लूपवर अवलंबून राहू शकत नाही.

मातीतील आर्द्रतेसाठी वेळ

जर तुम्ही भौतिक सेन्सर वापरून मातीतील आर्द्रतेवर मागील धडा केला असेल, तर तुम्हाला लक्षात आले असेल की वनस्पतीला पाणी दिल्यानंतर मातीतील आर्द्रता वाचन कमी होण्यासाठी काही सेकंद लागले. हे सेन्सर मंद असल्यामुळे नाही, तर पाण्याला मातीमध्ये झिरपण्यासाठी वेळ लागतो. 💁 जर तुम्ही सेन्सरच्या खूप जवळ पाणी घातले असेल, तर तुम्ही वाचन वेगाने खाली जाताना आणि नंतर परत वर येताना पाहिले असेल - हे सेन्सरजवळील पाणी मातीच्या इतर भागांमध्ये पसरल्यामुळे होते, ज्यामुळे सेन्सरजवळील मातीतील ओलसरपणा कमी होतो. पाणी दिल्यानंतर मातीतील ओलावा मोजमाप 658 वरून लगेच बदलत नाही, पाणी मातीमध्ये मुरल्यानंतरच ते 320 वर खाली येते

वरील आकृतीत, मातीतील ओलाव्याचे मोजमाप 658 दाखवते. झाडाला पाणी दिले जाते, परंतु हे मोजमाप लगेच बदलत नाही कारण पाणी सेन्सरपर्यंत पोहोचलेले नसते. पाणी देण्याची प्रक्रिया पूर्ण होऊ शकते, पण पाणी सेन्सरपर्यंत पोहोचल्यावरच मोजमाप कमी होऊन नवीन ओलाव्याची पातळी दाखवते.

जर तुम्ही मातीतील ओलाव्याच्या पातळीवर आधारित रिलेद्वारे सिंचन प्रणाली नियंत्रित करणारे कोड लिहित असाल, तर तुम्हाला या विलंबाचा विचार करावा लागेल आणि तुमच्या IoT डिव्हाइससाठी अधिक स्मार्ट टाइमिंग तयार करावे लागेल.

याबद्दल विचार करा की तुम्ही हे कसे करू शकता.

सेन्सर आणि अॅक्च्युएटरचे टाइमिंग नियंत्रित करा

कल्पना करा की तुम्हाला एका शेतासाठी सिंचन प्रणाली तयार करण्याचे काम दिले आहे. मातीच्या प्रकारावर आधारित, झाडांसाठी आदर्श मातीतील ओलाव्याची पातळी 400-450 च्या अनालॉग व्होल्टेज वाचनाशी जुळते.

तुम्ही डिव्हाइसला नाईटलाइटप्रमाणे प्रोग्राम करू शकता - सेन्सर 450 च्या वर वाचत असताना, पंप चालू करण्यासाठी रिले चालू करा. समस्या अशी आहे की पंपातून पाणी मातीमार्गे सेन्सरपर्यंत पोहोचायला वेळ लागतो. सेन्सर 450 ची पातळी ओळखतो तेव्हा पाणी थांबवेल, परंतु पंप केलेले पाणी मातीमध्ये मुरत राहिल्यामुळे पातळी कमी होत राहील. परिणामी पाणी वाया जाते आणि मुळांना हानी होण्याचा धोका असतो.

लक्षात ठेवा - खूप जास्त पाणी झाडांसाठी खूप कमी पाण्याइतकेच वाईट असू शकते आणि ते एक मौल्यवान संसाधन वाया घालवते.

चांगले समाधान म्हणजे हे समजून घेणे की अॅक्च्युएटर चालू होण्यामध्ये आणि सेन्सरने वाचलेल्या गुणधर्मामध्ये बदल होण्यामध्ये विलंब आहे. याचा अर्थ असा की सेन्सरने पुन्हा मूल्य मोजण्यापूर्वी थोडा वेळ थांबले पाहिजे आणि पुढील सेन्सर मोजमाप घेण्यापूर्वी अॅक्च्युएटरने थोडा वेळ बंद राहिले पाहिजे.

प्रत्येक वेळी रिले किती वेळ चालू असावे? सावधगिरी बाळगणे चांगले आहे आणि रिले फक्त थोड्या वेळासाठी चालू करा, मग पाणी मुरण्यासाठी थांबा आणि मग ओलाव्याची पातळी पुन्हा तपासा. शेवटी, तुम्ही नेहमीच अधिक पाणी घालण्यासाठी पंप पुन्हा चालू करू शकता, पण तुम्ही मातीमधून पाणी काढू शकत नाही.

💁 असे टाइमिंग नियंत्रण तयार करणे तुमच्या IoT डिव्हाइस, मोजल्या जाणाऱ्या गुणधर्म आणि वापरल्या जाणाऱ्या सेन्सर व अॅक्च्युएटरवर अवलंबून असते.

स्ट्रॉबेरीच्या झाडाला पंपाद्वारे पाणी जोडलेले आहे, पंप रिलेद्वारे नियंत्रित आहे. रिले आणि मातीतील ओलावा सेन्सर दोन्ही रास्पबेरी पायला जोडलेले आहेत

उदाहरणार्थ, माझ्याकडे मातीतील ओलावा सेन्सर आणि रिलेद्वारे नियंत्रित पंप असलेले स्ट्रॉबेरीचे झाड आहे. मी पाहिले आहे की पाणी घातल्यावर मातीतील ओलाव्याचे वाचन स्थिर होण्यासाठी सुमारे 20 सेकंद लागतात. याचा अर्थ मला रिले बंद करावे लागेल आणि ओलाव्याची पातळी तपासण्यापूर्वी 20 सेकंद थांबावे लागेल. मला खूप कमी पाणी असणे जास्त पसंत आहे - मी नेहमीच पंप पुन्हा चालू करू शकतो, पण मी झाडातून पाणी काढू शकत नाही.

पायऱ्या: 1. मोजमाप घ्या. 2. पाणी घाला. 3. पाणी मातीमध्ये मुरण्यासाठी थांबा. 4. मोजमाप पुन्हा घ्या

याचा अर्थ सर्वोत्तम प्रक्रिया अशी असेल:

  • पंप 5 सेकंदांसाठी चालू करा
  • 20 सेकंद थांबा
  • मातीतील ओलावा तपासा
  • जर पातळी अजूनही आवश्यकतेपेक्षा जास्त असेल, तर वरील पायऱ्या पुन्हा करा

5 सेकंद पंपासाठी खूप जास्त असू शकतात, विशेषतः जर ओलाव्याची पातळी फक्त थोडीशीच आवश्यक पातळीपेक्षा जास्त असेल. कोणते टाइमिंग वापरायचे हे जाणून घेण्याचा सर्वोत्तम मार्ग म्हणजे प्रयत्न करणे आणि नंतर सेन्सर डेटाच्या आधारे समायोजित करणे, सतत फीडबॅक लूपसह. यामुळे अधिक सूक्ष्म टाइमिंग देखील होऊ शकते, जसे की आवश्यक मातीतील ओलाव्यापेक्षा प्रत्येक 100 वर पंप 1 सेकंद चालू करणे, निश्चित 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
    

    हे विधान Python लायब्ररीमधून threading आयात करते, जे थ्रेडिंगमुळे 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 वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.