विषयसूची:

सुपर सरल रास्पबेरी पाई 433 मेगाहर्ट्ज होम ऑटोमेशन: 7 कदम
सुपर सरल रास्पबेरी पाई 433 मेगाहर्ट्ज होम ऑटोमेशन: 7 कदम

वीडियो: सुपर सरल रास्पबेरी पाई 433 मेगाहर्ट्ज होम ऑटोमेशन: 7 कदम

वीडियो: सुपर सरल रास्पबेरी पाई 433 मेगाहर्ट्ज होम ऑटोमेशन: 7 कदम
वीडियो: Beepberry! Tiny Pi-based Blackberry cyberdeck #shorts 2024, नवंबर
Anonim
सुपर सरल रास्पबेरी पाई 433 मेगाहर्ट्ज होम ऑटोमेशन
सुपर सरल रास्पबेरी पाई 433 मेगाहर्ट्ज होम ऑटोमेशन

जब घर के आसपास वायरलेस उपकरणों को नियंत्रित करने के लिए रास्पबेरी पाई का उपयोग करने की बात आती है तो यह ट्यूटोरियल कई में से एक है। कई अन्य लोगों की तरह, यह आपको दिखाएगा कि आमतौर पर उपयोग किए जाने वाले 433 मेगाहर्ट्ज रेडियो फ्रीक्वेंसी बैंड पर चलने वाले उपकरणों के साथ बातचीत करने के लिए आपके पीआई से जुड़े सस्ते ट्रांसमीटर/रिसीवर जोड़ी का उपयोग कैसे करें। यह आपको विशेष रूप से दिखाएगा कि 433 मेगाहर्ट्ज रिमोट-नियंत्रित पावर सॉकेट के सेट पर कमांड ट्रांसमिट करके अपने पीआई का उपयोग करके किसी भी विद्युत उपकरण को चालू या बंद कैसे करें।

यदि इतने सारे पहले से मौजूद हैं तो मैंने यह ट्यूटोरियल क्यों बनाया? मुख्य रूप से क्योंकि अन्य सभी ट्यूटोरियल जो मुझे मिले थे, वे विशेष रूप से सॉफ्टवेयर पक्ष पर चीजों को अधिक जटिल करने के लिए लग रहे थे। मैंने देखा कि वे सभी काम करने के लिए तीसरे पक्ष के पुस्तकालयों, स्क्रिप्ट या कोड स्निपेट पर बहुत अधिक निर्भर थे। कई लोग यह भी नहीं बताएंगे कि अंतर्निहित कोड क्या कर रहा था - वे आपसे केवल अपने पाई पर सॉफ़्टवेयर के दो या तीन टुकड़े करने और आदेशों का एक समूह निष्पादित करने के लिए कहेंगे, कोई प्रश्न नहीं पूछा गया। मैं वास्तव में 433 मेगाहर्ट्ज रिमोट-नियंत्रित सॉकेट के एक सेट का उपयोग करके अपने घर के आसपास बिजली के उपकरणों को चालू और बंद करने के लिए अपने पीआई का उपयोग करना चाहता था, लेकिन मैं सिस्टम का अपना संस्करण बनाना चाहता था जिसे मैं समझ सकता था, उम्मीद है कि आवश्यकता को समाप्त कर देगा। किसी और के पुस्तकालयों या लिपियों का उपयोग करें।

यही इस ट्यूटोरियल के बारे में है। इस प्रणाली के सॉफ्टवेयर पक्ष में दो बहुत ही सरल पायथन स्क्रिप्ट शामिल हैं - एक सिग्नल प्राप्त करने और रिकॉर्ड करने के लिए, और दूसरा इन संकेतों को वायरलेस पावर सॉकेट में वापस भेजने के लिए। सिग्नल का वास्तविक रिसेप्शन/ट्रांसमिशन केवल उपयोग में आसान RPi. GPIO लाइब्रेरी पर निर्भर करता है, जो कम से कम मेरे लिए, रास्पियन के साथ पहले से इंस्टॉल आया था। इस पुस्तकालय को सीधे पायथन में भी आयात किया जा सकता है।

इस परियोजना के लिए आपको आवश्यकता होगी:

एक रास्पबेरी पाई। किसी भी मॉडल को काम करना चाहिए, मैंने एक ऑल-इन-वन स्टार्टर किट का इस्तेमाल किया, लेकिन शायद आपको केवल केंद्रीय इकाई की जरूरत है।

एक 433 मेगाहर्ट्ज ट्रांसमीटर/रिसीवर जोड़ी। इस प्रकार की परियोजना में सबसे अधिक उपयोग किए जाने वाले ये प्रतीत होते हैं। लिंक्ड की तरह पांच का पैक खरीदना यह सुनिश्चित करता है कि आपके पास कुछ स्पेयर हैं।

433 मेगाहर्ट्ज रिमोट-नियंत्रित पावर सॉकेट का एक सेट। मैंने इनका उपयोग किया है जिनकी मैं अत्यधिक अनुशंसा करता हूं, लेकिन अनगिनत मॉडल उपलब्ध हैं। बस सुनिश्चित करें कि वे इस आवृत्ति पर काम करते हैं

कुछ सर्किट-निर्माण सहायक उपकरण। मैं सर्किट निर्माण प्रक्रिया को यथासंभव आसान बनाने के लिए ब्रेडबोर्ड और कुछ जम्पर केबल का उपयोग करने की सलाह दूंगा।

[यदि आप इनमें से किसी भी उत्पाद को खरीदने का निर्णय लेते हैं, तो मैं इसकी बहुत सराहना करूंगा यदि आप उपरोक्त लिंक का उपयोग करके लिस्टिंग तक पहुंचते हैं - इस तरह, मुझे आपके लिए बिना किसी अतिरिक्त लागत के मुनाफे का एक छोटा हिस्सा मिलता है!]

चरण 1: रिसीवर इकाई की स्थापना

रिसीवर यूनिट की स्थापना
रिसीवर यूनिट की स्थापना

इससे पहले कि आप रिमोट-नियंत्रित सॉकेट्स को कमांड भेजने के लिए अपने पाई का उपयोग कर सकें, आपको यह जानना होगा कि वे किन विशिष्ट संकेतों का जवाब देते हैं। अधिकांश रिमोट-नियंत्रित सॉकेट एक हैंडसेट के साथ जहाज करते हैं जिसका उपयोग विशिष्ट इकाइयों को चालू या बंद करने के लिए किया जा सकता है। मेरे द्वारा खरीदे गए हैंडसेट के मामले में, हैंडसेट में चालू/बंद बटनों की चार पंक्तियाँ हैं, जिनमें से प्रत्येक एक विशेष सॉकेट इकाई को एक चालू या बंद संकेत भेजता है।

यह एक प्रश्न लाता है - हम कैसे जानते हैं कि कौन से बटन किस सॉकेट से मेल खाते हैं? यह वास्तव में आपके पास मौजूद मॉडल पर निर्भर करता है। मुख्य कारणों में से एक मैंने सॉकेट की अपनी विशेष शैली को चुना (परिचय में जुड़ा हुआ) यह है कि हैंडसेट पर चालू/बंद बटन के एक विशेष सेट पर एक विशेष सॉकेट प्रतिक्रिया करने के लिए इकाइयों को भौतिक स्विच के साथ कॉन्फ़िगर किया जा सकता है। इसका मतलब यह भी है कि आप घर के चारों ओर सॉकेट को अनप्लग और स्थानांतरित कर सकते हैं, यह जानते हुए कि प्रत्येक इकाई हमेशा एक ही ON/OFF सिग्नल का जवाब देगी।

एक बार जब आपको पता चल जाए कि आपके सॉकेट हैंडसेट के साथ कैसे इंटरैक्ट करते हैं, तो आपको हैंडसेट द्वारा भेजे जा रहे कोड को 'सूँघने' के लिए अपनी 433 मेगाहर्ट्ज रिसीवर यूनिट (ऊपर चित्रित) का उपयोग करने की आवश्यकता होगी। एक बार जब आप इन कोडों की तरंगों को रिकॉर्ड कर लेते हैं, तो आप उन्हें पायथन का उपयोग करके दोहरा सकते हैं और ट्रांसमीटर इकाई का उपयोग करके उन्हें बाहर भेज सकते हैं।

यहां करने वाली पहली बात यह है कि आपके रिसीवर पर पिन को पीआई पर सही जीपीआईओ पिन पर तार दें। रिसीवर यूनिट में चार पिन होते हैं, लेकिन उनमें से केवल तीन की जरूरत होती है। मुझे लगता है कि दोनों केंद्रीय पिन एक ही आउटपुट देते हैं, इसलिए आपको केवल उनमें से एक से कनेक्ट करने की आवश्यकता है (जब तक कि आप प्राप्त सिग्नल को दो अलग-अलग जीपीआईओ पिन पर स्ट्रीम नहीं करना चाहते)।

ऊपर की छवि बहुत अधिक तारों को सारांशित करती है। रिसीवर के प्रत्येक पिन को सीधे पाई पर संबंधित पिन से जोड़ा जा सकता है। मैं प्रक्रिया को थोड़ा और सुंदर बनाने के लिए ब्रेडबोर्ड और जम्पर केबल का उपयोग करता हूं। ध्यान दें कि आप किसी भी केंद्रीय रिसीवर पिन से कनेक्ट करने के लिए कोई भी GPIO डेटा पिन चुन सकते हैं। मैंने अपने पाई हेडर पर '23' के रूप में चिह्नित पिन का इस्तेमाल किया।

महत्वपूर्ण: यदि आप उपरोक्त छवि में '3v3' चिह्नित पिन को पाई (जैसे 5v) पर एक उच्च वोल्टेज पिन से जोड़ते हैं, तो आप संभवतः पाई को नुकसान पहुंचाएंगे क्योंकि GPIO पिन 3v3 से ऊपर के वोल्टेज को सहन नहीं कर सकते। वैकल्पिक रूप से, आप इसे 5v के साथ पावर कर सकते हैं और डेटा पिन को एक सुरक्षित वोल्टेज भेजने के लिए वोल्टेज डिवाइडर सेट कर सकते हैं।

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

चरण 2: हैंडसेट कोड को सूँघना

हैंडसेट कोड को सूँघना
हैंडसेट कोड को सूँघना

अब जब आपका रिसीवर पाई तक पहुंच गया है, तो आप इस परियोजना का पहला रोमांचक चरण शुरू कर सकते हैं - सूंघ। इसमें प्रत्येक बटन दबाने पर हैंडसेट द्वारा प्रेषित सिग्नल को रिकॉर्ड करने के लिए संलग्न पायथन स्क्रिप्ट का उपयोग करना शामिल है। स्क्रिप्ट बहुत सरल है, और मैं अत्यधिक अनुशंसा करता हूं कि आप इसे चलाने से पहले इसे देख लें - आखिरकार, इस परियोजना का मुद्दा यह है कि आप किसी और के कोड को आँख बंद करके नहीं चलाएंगे!

इस प्रक्रिया को शुरू करने से पहले, आपको यह सुनिश्चित करना होगा कि आपके पास स्निफर स्क्रिप्ट को चलाने के लिए आवश्यक पायथन लाइब्रेरी है। वे स्क्रिप्ट के शीर्ष पर सूचीबद्ध हैं:

डेटाटाइम आयात डेटाटाइम से

आयात matplotlib.pyplot को pyplot के रूप में RPi. GPIO को GPIO के रूप में आयात करें

RPi. GPIO और डेटाटाइम पुस्तकालयों को मेरे रास्पियन वितरण के साथ शामिल किया गया था, लेकिन मुझे निम्नानुसार matplotlib पुस्तकालय स्थापित करना था:

sudo apt-get install python-matplotlib

यह पुस्तकालय आमतौर पर इस्तेमाल किया जाने वाला ग्राफ प्लॉटिंग पुस्तकालय है जो इस परियोजना के बाहर भी बहुत उपयोगी है, इसलिए इसे स्थापित करना निश्चित रूप से चोट नहीं पहुंचा सकता है! एक बार आपकी लाइब्रेरी अप टू डेट हो जाने के बाद, आप डेटा रिकॉर्ड करना शुरू करने के लिए तैयार हैं। यहां बताया गया है कि स्क्रिप्ट कैसे काम करती है:

जब इसे चलाया जाता है ('पायथन रिसीवरआरएफ.पीई' कमांड का उपयोग करके), यह परिभाषित जीपीआईओ पिन को डेटा इनपुट के रूप में कॉन्फ़िगर करेगा (डिफ़ॉल्ट रूप से पिन 23)। इसके बाद यह लगातार पिन का नमूना लेगा और लॉग करेगा कि क्या यह एक डिजिटल 1 या 0 प्राप्त कर रहा है। यह एक निर्धारित अवधि (डिफ़ॉल्ट रूप से 5 सेकंड) के लिए जारी रहता है। जब यह समय सीमा समाप्त हो जाती है, तो स्क्रिप्ट डेटा रिकॉर्ड करना बंद कर देगी और GPIO इनपुट को बंद कर देगी। यह तब थोड़ा पोस्ट-प्रोसेसिंग करता है और प्राप्त इनपुट मान को समय के विरुद्ध प्लॉट करता है। फिर, यदि आपके पास इस बारे में प्रश्न हैं कि स्क्रिप्ट क्या कर रही है, तो आप शायद यह देखने के बाद कि यह कैसे काम करता है, आप स्वयं उनका उत्तर दे सकते हैं। मैंने कोड को यथासंभव पठनीय और सरल बनाने की कोशिश की है।

आपको यह देखने की ज़रूरत है कि स्क्रिप्ट कब इंगित करती है कि उसने **रिकॉर्डिंग शुरू कर दी है**। एक बार यह संदेश दिखाई देने पर, आपको हैंडसेट के किसी एक बटन को लगभग एक सेकंड के लिए दबाकर रखना चाहिए। इसे रिसीवर के पास रखना सुनिश्चित करें। एक बार स्क्रिप्ट की रिकॉर्डिंग समाप्त हो जाने के बाद, यह रिकॉर्डिंग अंतराल के दौरान प्राप्त सिग्नल के ग्राफिकल तरंग को प्लॉट करने के लिए matplotlib का उपयोग करेगा। कृपया ध्यान दें, यदि आप पुटी जैसे एसएसएच क्लाइंट का उपयोग करके अपने पीआई से जुड़े हुए हैं, तो आपको तरंग को प्रदर्शित करने की अनुमति देने के लिए एक्स 11 एप्लिकेशन भी खोलना होगा। मैं इसके लिए xMing का उपयोग करता हूं (और अन्य चीजों के लिए जैसे रिमोट-डेस्कटॉपिंग मेरे पीआई में)। प्लॉट को प्रदर्शित करने की अनुमति देने के लिए, स्क्रिप्ट चलाने से पहले बस xMing शुरू करें और परिणाम आने की प्रतीक्षा करें।

एक बार आपकी matplotlib विंडो दिखाई देने के बाद, प्लॉट के भीतर रुचि का क्षेत्र बहुत स्पष्ट होना चाहिए। आप ज़ूम इन करने के लिए विंडो के निचले भाग में स्थित नियंत्रणों का उपयोग तब तक कर सकते हैं जब तक कि आप बटन को दबाए रखने के दौरान हैंडसेट द्वारा प्रेषित सिग्नल के उच्च और निम्न को चुनने में सक्षम न हों। एक पूर्ण कोड के उदाहरण के लिए उपरोक्त छवि देखें। संकेत में संभवत: समान अवधियों द्वारा अलग किए गए बहुत कम दालों से युक्त होगा जहां कोई संकेत प्राप्त नहीं होता है। छोटी दालों के इस ब्लॉक के बाद शायद एक लंबी अवधि होगी जहां कुछ भी प्राप्त नहीं होता है, जिसके बाद पैटर्न दोहराएगा। एक बार जब आप कोड के एकल उदाहरण से संबंधित पैटर्न की पहचान कर लेते हैं, तो इस पृष्ठ के शीर्ष पर एक स्क्रीनशॉट लें, और इसकी व्याख्या करने के लिए अगले चरण पर जाएं।

चरण 3: परिणामी सिग्नल को ट्रांसक्रिप्ट करना

परिणामी सिग्नल को ट्रांसक्रिप्ट करना
परिणामी सिग्नल को ट्रांसक्रिप्ट करना

अब जब आपने किसी विशेष बटन के सिग्नल के अनुरूप आवधिक उच्च और निम्न के ब्लॉक की पहचान कर ली है, तो आपको इसे संग्रहीत करने और व्याख्या करने के तरीके की आवश्यकता होगी। उपरोक्त सिग्नल उदाहरण में, आप देखेंगे कि केवल दो अद्वितीय पैटर्न हैं जो पूरे सिग्नल ब्लॉक को बनाते हैं। कभी-कभी आप एक छोटी ऊँची के बाद एक लंबी नीची देखते हैं, और कभी-कभी यह विपरीत होती है - एक लंबी ऊँची और उसके बाद एक छोटी नीची। जब मैं अपने संकेतों को ट्रांसक्रिप्ट कर रहा था, मैंने निम्नलिखित नामकरण परंपरा का उपयोग करने का निर्णय लिया:

1 = शॉर्ट_ऑन + लॉन्ग_ऑफ़0 = लॉन्ग_ऑन + शॉर्ट_ऑफ

लेबल किए गए तरंग को फिर से देखें, और आप देखेंगे कि मेरा क्या मतलब है। एक बार जब आप अपने सिग्नल में समान पैटर्न की पहचान कर लेते हैं, तो आपको अनुक्रम बनाने के लिए केवल 1 और 0 की गिनती करनी होती है। लिखित होने पर, उपरोक्त संकेत निम्नानुसार लिखा जा सकता है:

1111111111111010101011101

अब आपको अपने हैंडसेट के अन्य बटनों के अनुरूप संकेतों को रिकॉर्ड और ट्रांसक्रिप्ट करने के लिए इस प्रक्रिया को दोहराने की जरूरत है, और आपने प्रक्रिया का पहला भाग पूरा कर लिया है!

इससे पहले कि आप ट्रांसमीटर का उपयोग करके संकेतों को फिर से भेज सकें, थोड़ा और काम करना है। 1 या 0 के अनुरूप उच्च और निम्न के बीच का समय बहुत महत्वपूर्ण है, और आपको यह सुनिश्चित करने की आवश्यकता है कि आप जानते हैं कि 'शॉर्ट_ऑन' या 'लॉन्ग_ऑफ' वास्तव में कितने समय तक रहता है। मेरे कोड के लिए, संकेतों को दोहराने के लिए मुझे निकालने के लिए आवश्यक समय की जानकारी के तीन टुकड़े थे:

  • एक 'लघु' अंतराल की अवधि, यानी 1 की शुरुआत या 0 का अंत।
  • एक 'लंबे' अंतराल की अवधि, यानी 1 का अंत या 0 की शुरुआत।
  • एक 'विस्तारित' अंतराल की अवधि। मैंने देखा कि जब मैंने हैंडसेट पर एक बटन दबाया था, तो सिग्नल ब्लॉक के प्रत्येक बार-बार होने वाले इंस्टेंस के बीच एक 'विस्तारित_ऑफ़' अवधि थी। इस विलंब का उपयोग सिंक्रनाइज़ेशन के लिए किया जाता है और इसकी एक निश्चित अवधि होती है।

इन समय मानों को निर्धारित करने के लिए, आप सभी तरह से ज़ूम करने के लिए matplotlib विंडो पर ज़ूम फ़ंक्शन का उपयोग कर सकते हैं और कर्सर को सिग्नल के संबंधित भागों पर रख सकते हैं। विंडो के नीचे स्थित कर्सर स्थान रीडआउट आपको यह निर्धारित करने की अनुमति देता है कि सिग्नल का प्रत्येक भाग कितना चौड़ा है जो लंबे, छोटे या विस्तारित अंतराल से मेल खाता है। ध्यान दें कि प्लॉट का x-अक्ष समय का प्रतिनिधित्व करता है, और कर्सर रीडआउट का x घटक सेकंड की इकाइयों में है। मेरे लिए, चौड़ाई इस प्रकार थी (सेकंड में):

  • शॉर्ट_डेले = 0.00045
  • long_delay = 0.00090 ('छोटा' से दोगुना लंबा)
  • विस्तारित_देरी = 0.0096

चरण 4: ट्रांसमीटर यूनिट की स्थापना

ट्रांसमीटर यूनिट की स्थापना
ट्रांसमीटर यूनिट की स्थापना

एक बार जब आप अपने कोड और समय डेटा एकत्र कर लेते हैं, तो आप अपनी रिसीवर इकाई को डिस्कनेक्ट कर सकते हैं क्योंकि अब आपको इसकी आवश्यकता नहीं होगी। फिर आप ट्रांसमीटर को सीधे संबंधित पाई GPIO पिन से तार कर सकते हैं जैसा कि ऊपर की छवि में दिखाया गया है। मैंने पाया है कि ट्रांसमीटर इकाइयों पर पिन लेबल किए गए हैं, जिससे प्रक्रिया आसान हो जाती है।

इस मामले में, पाई से 5v आपूर्ति का उपयोग करके इकाई को बिजली देना ठीक है क्योंकि DATA पिन Pi को सिग्नल नहीं भेजेगा, केवल उन्हें प्राप्त करेगा। साथ ही, 5v बिजली की आपूर्ति 3v3 आपूर्ति का उपयोग करने की तुलना में अधिक संचरण रेंज प्रदान करेगी। फिर से, आप डेटा पिन को पाई पर किसी भी उपयुक्त पिन से जोड़ सकते हैं। मैंने पिन 23 (रिसीवर के समान) का उपयोग किया।

एक और चीज जो मैं करने की सलाह दूंगा वह है ट्रांसमीटर के ऊपर दाईं ओर छोटे छेद में एक एंटीना जोड़ना। मैंने सीधे तार के 17 सेमी लंबे टुकड़े का इस्तेमाल किया। कुछ स्रोत समान लंबाई के कुंडलित तार की सलाह देते हैं। मुझे यकीन नहीं है कि कौन सा बेहतर है, लेकिन सीधे तार मेरे लिए मेरे छोटे से फ्लैट में किसी भी स्थान से सॉकेट चालू/बंद करने के लिए पर्याप्त सीमा प्रदान करता है। एंटीना को मिलाप करना सबसे अच्छा है, लेकिन मैंने तार से कुछ प्लास्टिक को हटा दिया और तांबे को छेद के माध्यम से लपेट दिया।

एक बार ट्रांसमीटर के तार-तार हो जाने के बाद, यह सारा हार्डवेयर सेटअप हो गया है! अब केवल एक ही काम करना बाकी है, अपने सॉकेट को घर के चारों ओर सेट करें और ट्रांसमीटर प्रोग्राम पर एक नज़र डालें।

चरण 5: Pi. का उपयोग करके सिग्नल प्रेषित करना

यह वह जगह है जहां दूसरी पायथन लिपि आती है। इसे पहले की तरह ही सरल बनाया गया है, यदि ऐसा नहीं है। दोबारा, कृपया इसे डाउनलोड करें और कोड देखें। चरण 3 में आपके द्वारा रिकॉर्ड किए गए डेटा के अनुसार सही संकेतों को प्रसारित करने के लिए आपको स्क्रिप्ट को संपादित करने की आवश्यकता होगी, इसलिए अब इस पर एक त्वरित नज़र डालने का अच्छा समय है।

इस स्क्रिप्ट को चलाने के लिए आवश्यक सभी पुस्तकालय मेरे पाई पर पहले से स्थापित थे, इसलिए आगे की स्थापना की आवश्यकता नहीं थी। वे स्क्रिप्ट के शीर्ष पर सूचीबद्ध हैं:

आयात समय

आयात sys आयात RPi. GPIO GPIO के रूप में

पुस्तकालय आयात के नीचे वह जानकारी है जिसे आपको संपादित करना होगा। यहां बताया गया है कि यह डिफ़ॉल्ट रूप से कैसा दिखता है (यह मेरे सॉकेट से संबंधित जानकारी है जैसा कि चरण 3 का उपयोग करके निर्धारित किया गया है):

a_on = '1111111111111010101011101'

a_off = '१११११११११११११०१०१०१०१०१०१०१११' b_on = '१११११११११११०११०१०१०१०१०११०११' b_off = '१११११११११११०११०१०१०१०१०१०११' c_on = '१११११११११११०१०१११०१०१०१०११' c_off = '१११११११११११०१०१११०१०१०१०१११' d = १०११०९० विस्तारित = '११११११११११०११०१०११००११_दे १००१०११० = '११११११११११०१०१०१०११०१_१११११_दे १०१०११० विस्तारित = '११११११११११०१०१०११०१०१_दे १११११११११११११११११०१०१०१०१११०'

यहां हमारे पास आठ कोड स्ट्रिंग हैं (मेरे हैंडसेट पर ऑन/ऑफ बटन की प्रत्येक जोड़ी के लिए दो - आपके पास अधिक या कम कोड हो सकते हैं) इसके बाद चरण 3 में निर्धारित समय की जानकारी के तीन टुकड़े हैं। यह सुनिश्चित करने के लिए समय निकालें कि आपके पास है इस जानकारी को सही ढंग से दर्ज किया।

एक बार जब आप स्क्रिप्ट में दर्ज किए गए कोड/विलंब से खुश हो जाते हैं (यदि आप चाहें तो कोड स्ट्रिंग वेरिएबल्स का नाम बदल सकते हैं), आप सिस्टम को आज़माने के लिए बहुत तैयार हैं! ऐसा करने से पहले, स्क्रिप्ट में ट्रांसमिट_कोड () फ़ंक्शन पर एक नज़र डालें। यह वह जगह है जहां ट्रांसमीटर के साथ वास्तविक संपर्क होता है। यह फ़ंक्शन कोड स्ट्रिंग्स में से एक को तर्क के रूप में भेजे जाने की अपेक्षा करता है। यह तब परिभाषित पिन को GPIO आउटपुट के रूप में खोलता है और कोड स्ट्रिंग में प्रत्येक वर्ण के माध्यम से लूप करता है। यह तब ट्रांसमीटर को चालू या बंद कर देता है, जो आपके द्वारा दर्ज की गई समय की जानकारी के अनुसार कोड स्ट्रिंग से मेल खाने वाली तरंग बनाने के लिए होती है। यह छूटने की संभावना को कम करने के लिए प्रत्येक कोड को कई बार (10 डिफ़ॉल्ट रूप से) भेजता है, और हैंडसेट की तरह ही प्रत्येक कोड ब्लॉक के बीच एक विस्तारित_देरी छोड़ देता है।

स्क्रिप्ट चलाने के लिए, आप निम्न कमांड सिंटैक्स का उपयोग कर सकते हैं:

अजगर TransmitRF.py code_1 code_2…

आप स्क्रिप्ट के एकल रन के साथ कई कोड स्ट्रिंग्स ट्रांसमिट कर सकते हैं। उदाहरण के लिए, सॉकेट (ए) और (बी) चालू और सॉकेट (सी) बंद करने के लिए, निम्न आदेश के साथ स्क्रिप्ट चलाएँ:

अजगर TransmitRF.py a_on b_on c_off

चरण 6: समय सटीकता पर एक नोट

जैसा कि उल्लेख किया गया है, प्रेषित चालू/बंद दालों के बीच का समय काफी महत्वपूर्ण है। TransmitRF.py स्क्रिप्ट सही पल्स अंतराल के साथ तरंगों के निर्माण के लिए अजगर के समय.स्लीप () फ़ंक्शन का उपयोग करती है, लेकिन यह ध्यान दिया जाना चाहिए कि यह फ़ंक्शन पूरी तरह से सटीक नहीं है। अगले ऑपरेशन को निष्पादित करने से पहले स्क्रिप्ट की प्रतीक्षा करने की लंबाई उस समय प्रोसेसर लोड पर निर्भर कर सकती है। यही कारण है कि TransmitRF.py प्रत्येक कोड को कई बार भेजता है - बस अगर time.sleep() फ़ंक्शन कोड के दिए गए उदाहरण को ठीक से बनाने में सक्षम नहीं है।

जब कोड भेजने की बात आती है तो मुझे व्यक्तिगत रूप से time.sleep() के साथ कोई समस्या नहीं होती है। हालाँकि मुझे पता है कि मेरे time.sleep() में लगभग 0.1ms की त्रुटि है। मैंने इसे संलग्न SleepTest.py स्क्रिप्ट का उपयोग करके निर्धारित किया है जिसका उपयोग यह अनुमान लगाने के लिए किया जा सकता है कि आपके Pi का time.sleep() फ़ंक्शन कितना सही है। मेरे विशेष रिमोट-नियंत्रित सॉकेट के लिए, मुझे लागू करने के लिए आवश्यक सबसे कम देरी 0.45ms थी। जैसा कि मैंने कहा, मेरे पास गैर-उत्तरदायी सॉकेट के साथ कोई समस्या नहीं है, इसलिए ऐसा लगता है कि 0.45 ± 0.1ms काफी अच्छा है।

यह सुनिश्चित करने के लिए अन्य तरीके हैं कि देरी अधिक सटीक है; उदाहरण के लिए, आप कोड उत्पन्न करने के लिए एक समर्पित PIC चिप का उपयोग कर सकते हैं, लेकिन इस तरह की चीजें इस ट्यूटोरियल के दायरे से बाहर हैं।

चरण 7: निष्कर्ष

निष्कर्ष
निष्कर्ष

इस परियोजना ने रास्पबेरी पाई और 433 मेगाहर्ट्ज रिमोट-नियंत्रित सॉकेट के सेट का उपयोग करके किसी भी विद्युत उपकरण को नियंत्रित करने के लिए एक विधि प्रस्तुत की है, जिसमें सादगी और पारदर्शिता पर ध्यान दिया गया है। यह सबसे रोमांचक और लचीली परियोजना है जिसके लिए मैंने अपने पाई का उपयोग किया है, और इसके लिए असीमित अनुप्रयोग हैं। यहाँ कुछ चीजें हैं जो अब मैं अपने पाई के लिए धन्यवाद कर सकता हूं:

  • मेरा अलार्म बजने से आधे घंटे पहले मेरे बिस्तर के बगल में एक इलेक्ट्रिक हीटर चालू करें।
  • मेरे सोने के एक घंटे बाद हीटर बंद कर दें।
  • जब मेरा अलार्म बंद हो जाए तो मेरी बेडसाइड लाइट चालू कर दें ताकि मैं वापस सोने के लिए न जाऊं।
  • और बहुत सारे…

इनमें से अधिकांश कार्यों के लिए, मैं लिनक्स के भीतर क्रोंटैब फ़ंक्शन का उपयोग करता हूं। यह आपको विशिष्ट समय पर TransmitRF.py स्क्रिप्ट चलाने के लिए स्वचालित शेड्यूल किए गए कार्यों को सेट करने की अनुमति देता है। आप एकबारगी कार्यों को चलाने के लिए कमांड पर लिनक्स का भी उपयोग कर सकते हैं (जो, मेरे लिए, 'sudo apt-get install at' का उपयोग करके अलग से स्थापित करने की आवश्यकता है)। उदाहरण के लिए, अगली सुबह अलार्म बजने से आधे घंटे पहले अपने हीटर को चालू करने के लिए, मुझे बस टाइप करना होगा:

05:30. पर

अजगर TransmitRF.py c_on

आप इंटरनेट पर उपकरणों को नियंत्रित करने के लिए मेरे ड्रॉपबॉक्स होम मॉनिटरिंग सिस्टम के संयोजन में भी इस परियोजना का उपयोग कर सकते हैं! पढ़ने के लिए धन्यवाद, और अगर आप कुछ स्पष्ट करना चाहते हैं या अपनी राय साझा करना चाहते हैं, तो कृपया एक टिप्पणी पोस्ट करें!

सिफारिश की: