विषयसूची:

Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल: 8 कदम (चित्रों के साथ)
Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल: 8 कदम (चित्रों के साथ)

वीडियो: Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल: 8 कदम (चित्रों के साथ)

वीडियो: Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल: 8 कदम (चित्रों के साथ)
वीडियो: Human vs Robot | Artificial Intelligence 2024, जुलाई
Anonim
Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल
Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल
Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल
Arduino के साथ I2C इन्फ्रारेड रिमोट कंट्रोल

प्रस्तावना यह निर्देश योग्य विवरण है कि इंटरफ़ेस के लिए I2C का उपयोग करके एक सार्वभौमिक रिमोट कंट्रोलर कैसे बनाया जाए।

I2C स्लेव डिवाइस का उपयोग करके आप कितना अजीब कहते हैं?

हाँ, एक I2C स्लेव डिवाइस।

ऐसा इसलिए है क्योंकि IR पैकेट का सटीक समय काफी मांग वाला है और एक विशिष्ट Arduino के साथ संघर्ष होगा यदि वह पहले से ही एक ही समय में कई अन्य कार्यों को पूरा कर रहा है। जब भी संभव हो समर्पित प्रोसेसर को समय गहन गतिविधियों को निर्दिष्ट करके कंप्यूटिंग लोड को वितरित करना बेहतर होता है (बेहतर अभी भी इसे हार्डवेयर में करें)। यह देखते हुए कि I2C IC के बीच एक अच्छी तरह से प्रलेखित और मजबूत संचार पद्धति है, मैंने इसे इंटरफ़ेस के रूप में चुना।

परिचय

जैसा कि ऊपर उल्लेख किया गया है, यह निर्देशयोग्य वर्णन करता है कि Arduino पर IRremote लाइब्रेरी का उपयोग करके घरेलू उपकरणों जैसे टीवी, डीवीडी प्लेयर और सैटेलाइट आदि को कैसे नियंत्रित किया जाए।

यह प्रोटोटाइप टेस्ट सर्किट (ऊपर चित्र 2) के साथ Arduino को I2C स्लेव रिमोट कंट्रोल मॉड्यूल (ऊपर चित्र 1) में बदलने वाले एक डिज़ाइन उदाहरण के साथ समाप्त होता है और विस्तार से बताता है कि अपने डिज़ाइन को आवश्यक न्यूनतम घटकों तक कैसे सिकोड़ें ताकि यह हो सके एक और डिजाइन में एम्बेडेड। मेरे मामले में मैं एक ESP8266-12E के आसपास आधारित IoT यूनिवर्सल रिमोट कंट्रोल डिवाइस में इस एम्बेडेड डिवाइस का उपयोग करता हूं।

मुझे किन भागों की आवश्यकता है?

चरण 1 (IR ट्रांसमीटर) में दर्शाए गए सर्किट को बनाने के लिए आपको निम्नलिखित भागों की आवश्यकता होगी;

  • 2 ऑफ 10K रेसिस्टर्स
  • 1 बंद 390R रोकनेवाला
  • 1 बंद 33R रोकनेवाला
  • 1 बंद 3K8 रोकनेवाला
  • 1 बंद लाल एलईडी
  • आईआर एलईडी TSAL6400. से 1 बंद
  • 1 ट्रांजिस्टर BC337
  • 1 बंद 220uF संधारित्र
  • 1 Arduino Uno. पर छूट

चरण 4 (आईआर रिसीवर) में दर्शाए गए सर्किट को बनाने के लिए आपको निम्नलिखित भागों की आवश्यकता होगी;

  • 1 बंद 10K रोकनेवाला
  • 1 बंद TSOP38328
  • 1 बंद 220uF संधारित्र
  • 1 Arduino Uno. पर छूट

चरण 5 (स्लेव टेस्ट सर्किट) में दर्शाए गए सर्किट को बनाने के लिए आपको निम्नलिखित भागों की आवश्यकता होगी;

  • १० के प्रतिरोधों में से ४
  • 2 बंद 390R रोकनेवाला
  • 1 बंद 33R रोकनेवाला
  • 1 बंद 3K8 रोकनेवाला
  • 2 बंद लाल एलईडी
  • IR एलईडी TSAL6400. पर 1 छूट
  • 1 ट्रांजिस्टर BC337
  • 1 बंद 220uF संधारित्र
  • एसपीएसटी बटन से 2
  • 2 Arduino Unos. से दूर

चरण 6 (सिकुड़ा हुआ डिज़ाइन) में दर्शाए गए सर्किट को बनाने के लिए आपको निम्नलिखित भागों की आवश्यकता होगी;

  • ३ ऑफ १०के रेसिस्टर्स
  • 1 बंद 270R रोकनेवाला
  • 1 बंद 15R रोकनेवाला
  • 4 बंद 1K प्रतिरोधक
  • 1 बंद लाल एलईडी
  • IR एलईडी TSAL6400 या TSAL5300 पर 1 छूट
  • 1 ट्रांजिस्टर BC337
  • 1 बंद 220uF संधारित्र इलेक्ट्रोलाइटिक @ 6.3v
  • 1 बंद 1000uF संधारित्र इलेक्ट्रोलाइटिक @ 6.3v
  • 2 ऑफ 0.1uF कैपेसिटर
  • 2 बंद 22pF कैपेसिटर
  • १६ मेगाहर्ट्ज एक्सटाल
  • ATMega328P-PU पर 1 छूट

नोट: ATMega328P. को प्रोग्राम करने के लिए आपको एक FTDI डिवाइस की भी आवश्यकता होगी

मुझे क्या कौशल चाहिए?

  • इलेक्ट्रॉनिक्स की एक न्यूनतम समझ,
  • Arduino और उसके IDE का ज्ञान,
  • थोड़ा धीरज,
  • I2C की कुछ समझ उपयोगी होगी (कुछ सामान्य I2C/वायर लाइब्रेरी विवरण के लिए यहां देखें)।

शामिल विषय

  • सर्किट का संक्षिप्त अवलोकन,
  • सॉफ्टवेयर का संक्षिप्त अवलोकन,
  • I2C पैकेट सामग्री,
  • रिमोट कंट्रोल कोड प्राप्त करना (ui32Data),
  • अपने I2C स्लेव डिवाइस का परीक्षण कैसे करें,
  • अपने डिजाइन को सिकोड़ना,
  • निष्कर्ष,
  • सन्दर्भों का प्रयोग किया।

अस्वीकरण

हमेशा की तरह, आप इन निर्देशों का उपयोग अपने जोखिम पर करते हैं और वे असमर्थित होते हैं।

चरण 1: सर्किट का संक्षिप्त अवलोकन

सर्किट का संक्षिप्त अवलोकन
सर्किट का संक्षिप्त अवलोकन

सर्किट का उद्देश्य आईआर रिमोट कंट्रोल कोड संचारित करना है। इसका डिजाइन काफी सीधा और काफी सरल है।

जब ट्रांजिस्टर Q1 और BC337 NPN को Arduino PWM O/P D3 से रेसिस्टर R5 तक एक लॉजिक के माध्यम से चालू किया जाता है, तो करंट क्रमशः LEDs 1 और 2 से होकर गुजरता है। केवल गिट्टी प्रतिरोधों R3 और R4 द्वारा सीमित है। Q1 का उपयोग IR डायोड (IF Max = 100mA) से गुजरने वाले करंट को बढ़ाने के लिए किया जाता है, जो कि Arduino O/P सक्षम ~ 40mA @ +5v आपूर्ति से अधिक है।

कैपेसिटर C1 एक 220uF इलेक्ट्रोलाइटिक एल ई डी 1 और 2 द्वारा खींची गई शक्ति द्वारा आपूर्ति रेल ड्रॉप को रोकने के लिए कुछ स्थिरीकरण प्रदान करता है।

प्रतिरोधक R1 और R2 I2C पुल अप हैं।

चरण 2: सॉफ्टवेयर का संक्षिप्त अवलोकन

सॉफ्टवेयर का संक्षिप्त अवलोकन
सॉफ्टवेयर का संक्षिप्त अवलोकन
सॉफ्टवेयर का संक्षिप्त अवलोकन
सॉफ्टवेयर का संक्षिप्त अवलोकन
सॉफ्टवेयर का संक्षिप्त अवलोकन
सॉफ्टवेयर का संक्षिप्त अवलोकन

प्रस्तावना

इस स्रोत कोड को सफलतापूर्वक संकलित करने के लिए आपको निम्नलिखित अतिरिक्त पुस्तकालय की आवश्यकता होगी;

IRremote.h

  • द्वारा: z3t0
  • उद्देश्य: Arduino के लिए इन्फ्रारेड रिमोट लाइब्रेरी: कई प्रोटोकॉल के साथ इन्फ्रारेड सिग्नल भेजें और प्राप्त करें
  • से:

कोड अवलोकन

जैसा कि ऊपर चित्र 1 में दिखाया गया है, स्टार्ट अप पर कोड माइक्रो-कंट्रोलर I/O को कॉन्फ़िगर करता है और फिर आंतरिक सॉफ्टवेयर फ्लैग 'bFreshDataFlag' की स्थिति को पोल करता है। जब यह फ़्लैग सेट किया जाता है, तो नियंत्रक इसकी 'व्यस्त' लाइन (डेटा पिन D4 कम भेजना) पर जोर देता है और 'eBUSY' स्थिति में चला जाता है, क्रमिक रूप से uDataArray में आयोजित बटन प्रेस कमांड को पढ़ता है और IR मॉड्यूलेटेड डेटा को IR LED को एक में भेजता है संचरण क्रम।

एक बार uDataArray में रखे गए डेटा को पूरी तरह से भेज दिया गया है, 'eIDLE' स्थिति फिर से शुरू हो गई है और 'व्यस्त' लाइन डी-एस्सर्टेड है (डेटा पिन D4 उच्च भेजना)। ट्रांसमिशन अनुक्रम के अंत को चिह्नित करते हुए डिवाइस अब अधिक बटन प्रेस प्राप्त करने के लिए तैयार है।

आईआर बटन प्रेस डेटा का रिसेप्शन

जब डेटा I2C के माध्यम से इन्फ्रारेड रिमोट कंट्रोलर को भेजा जाता है तो यह एक रुकावट को ट्रिगर करता है और रिसीवइवेंट () फ़ंक्शन कॉल को एसिंक्रोनस रूप से ट्रिगर किया जाता है।

एक बार ट्रिगर होने पर प्राप्त I2C डेटा को क्रमिक रूप से बफर 'uDataArray' में लिखा जाता है।

डेटा रिसेप्शन के दौरान, यदि मास्टर (bFreshData!=0x00) द्वारा अनुक्रम के अंत का संकेत दिया जाता है, तो 'bFreshDataFlag' सेट हो जाता है, इस प्रकार ट्रांसमिशन अनुक्रम की शुरुआत का संकेत मिलता है।

चित्र 2…3 एक विशिष्ट पैकेट अनुक्रम का उदाहरण देते हैं।

नोट: पूर्ण स्रोत कोड यहां उपलब्ध है

चरण 3: I2C पैकेट सामग्री

I2C पैकेट सामग्री
I2C पैकेट सामग्री

I2C पर दास को भेजे गए नियंत्रण पैकेट का प्रारूप ऊपर चित्र 1 में दिया गया है, प्रत्येक क्षेत्र का अर्थ नीचे दिया गया है

नियंत्रण पैकेट फ़ील्ड का अर्थ

बाइट बी एन्कोडिंग;

  • आईआर रिमोट कंट्रोल एन्कोडिंग,

    • RC6 (आकाश) = 0,
    • सोनी = 1,
    • सैमसंग = २,
    • एनईसी = 3,
    • एलजी = 4

uint32_t ui32डेटा;

बाइनरी IR डेटा स्ट्रीम का हेक्स प्रतिनिधित्व 4 डेटा बाइट्स (अहस्ताक्षरित लंबा), LSByte… MSByte

बाइट bNumberOfBitsInTheData;

डेटा में बिट्स की संख्या (अधिकतम 32)। रेंज = 1 … 32

बाइट bPulseTrainRepeats;

इस पल्स ट्रेन के कितने रिपीट हैं। रेंज = 1 … 255। आम तौर पर 2…4 दोहराता है। आप इसे ऑन/ऑफ कमांड के लिए विस्तारित करना चाह सकते हैं क्योंकि रिसीविंग डिवाइस को टर्न ऑन सिग्नल प्राप्त करने के लिए कभी-कभी कुछ अतिरिक्त पल्स ट्रेन रिपीट की आवश्यकता होती है।

बाइट bDelayबीचPulseTrainRepeats;

इस पल्स ट्रेन के दोहराव के बीच देरी। रेंज = 1 … 255mS। आमतौर पर 22mS … 124mS।

बाइट bButtonRepeats;

एक ही बटन को बार-बार दबाने का अनुकरण करता है (लेकिन Apple रिमोट की तरह संशोधित कोड का समर्थन नहीं करता है, यह सिर्फ बटन कोड को दोहराता है)। रेंज = 1 … 256. डिफ़ॉल्ट = 1।

uint16_t ui16DelayBetweenButtonRepeats;

बटन दोहराने के बीच विलंब (अहस्ताक्षरित int)। कुल LSByte में 2 बाइट्स… MSByte। रेंज = 1 … 65535mS। डिफ़ॉल्ट = 0mS

बाइट बीफ्रेशडाटा;

  • ताजा डेटा। एक गैर-शून्य मान। अंतिम लिखा, IR TX अनुक्रम को ट्रिगर करता है। रेंज 0x00… 0xFF

    • आने वाले अधिक नियंत्रण पैकेट = 0
    • यह अंतिम नियंत्रण पैकेट है = गैर-शून्य मान 1, 2,… 255

'_packed_' कंपाइलर निर्देश के उपयोग पर ध्यान दें। यह सुनिश्चित करने के लिए है कि उपयोग किए गए लक्ष्य प्रणाली (यूनो, ड्यू, ईएसपी 8266 आदि) के बावजूद डेटा मेमोरी में बाइट के लिए पैकेट बाइट है। इसका मतलब यह है कि registerAllocationType और dataArrayType के बीच संघ को नियंत्रण पैकेट से बाइट्स में केवल क्रमिक रूप से क्लॉक आउट/क्लॉक की आवश्यकता होती है, जिससे TX/RX सॉफ़्टवेयर सरल हो जाता है।

चरण 4: रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)

रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)
रिमोट कंट्रोल कोड प्राप्त करना (ui32Data)

आप तीन तरीकों से संबंधित रिमोट कंट्रोल कुंजी कोड प्राप्त कर सकते हैं;

  1. एक आस्टसीलस्कप के साथ बिट गिनती के माध्यम से,
  2. इसे एक वेबसाइट पर देखें,
  3. सॉफ्टवेयर में डेटा स्ट्रीम से इसे सीधे डीकोड करें।

एक दायरे के साथ बिट गिनती के माध्यम से

यह एक कुशल तरीका नहीं है क्योंकि इसमें काफी समय लगता है और संभावित रूप से एक से अधिक प्रयासों की आवश्यकता होती है, हालांकि यह अत्यधिक सटीक हो सकता है। यह विधियों 2 और 3 का उपयोग करके प्राप्त किए गए कोड को दृष्टि से मान्य करने में भी उपयोगी है, साथ ही रिमोट की किसी भी विशिष्टता को निर्धारित करने में भी उपयोगी है। उदाहरण के तौर पर जब Apple IR रिमोट पर एक बटन दबाए रखा जाता है। रिमोट शुरू में एक कमांड सीक्वेंस जारी करेगा फिर उसके बाद 0xF के बार-बार कंप्रेस्ड सीक्वेंस के साथ…।

इसे एक वेबसाइट पर देखें

लिनक्स इन्फ्रारेड रिमोट कंट्रोल वेब साइट पर रिमोट कंट्रोल कोड डेटाबेस एक अच्छा स्रोत है।

हालाँकि, नकारात्मक पक्ष यह है कि आपको कुछ कोडों को तब तक आज़माना पड़ सकता है जब तक कि आपको वह नहीं मिल जाता जो आपके लिए काम करता है। आपको कोडों के कुछ निरूपणों को उनके समकक्ष हेक्स रूप में बदलने के लिए उनकी व्याख्या भी करनी पड़ सकती है।

इसे सीधे डेटा स्ट्रीम से डीकोड करें

IRremote लाइब्रेरी उदाहरण 'IRrecvDumpV2.ino' के संयोजन के साथ ऊपर चित्र 1 में सर्किट का उपयोग करना रिमोट से सीधे डेटा स्ट्रीम को डिकोड करना संभव है। चित्र 2 Arduino IDE टर्मिनल विंडो में ऑन/ऑफ बटन प्रेस के लिए एक डिकोडेड सैमसंग टीवी रिमोट दिखाता है।

संयुक्त रिसीवर / ट्रांसमीटर

ऊपर दिए गए चित्र 3 और 4 एक ऐसे समाधान को दर्शाते हैं जो आसान प्रोटोटाइप के लिए IR कमांड के रिसेप्शन और ट्रांसमिशन दोनों की अनुमति देता है।

IR रिमोट कंट्रोल बटन प्रेस को डिकोड करने के लिए आपको Arduino को 'IRrecvDumpV2.ino' उदाहरण के साथ फ्लैश करना होगा जो IRremote लाइब्रेरी के साथ आता है।

अगर IR कमांड करता है तो यह ट्रांसमिशन के लिए भी उतना ही अच्छा काम करता है। एक लाल एलईडी को एक दृश्य संकेत के रूप में शामिल किया गया है जो डिवाइस कार्रवाई में है।

चरण 5: अपने I2C स्लेव डिवाइस का परीक्षण कैसे करें

अपने I2C स्लेव डिवाइस का परीक्षण कैसे करें
अपने I2C स्लेव डिवाइस का परीक्षण कैसे करें
अपने I2C स्लेव डिवाइस का परीक्षण कैसे करें
अपने I2C स्लेव डिवाइस का परीक्षण कैसे करें

यहां स्रोत कोड का उपयोग करते हुए, और चित्र 1 में ऊपर उल्लिखित सर्किट का उपयोग करते हुए 'मास्टर' Arduino को 'IR_Remote_Sim_Test.ino' और 'Slave' Arduino को 'IR_Remote_Sim.ino' के साथ प्रोग्राम करें।

मान लें कि आपके पास सोनी ब्राविया टीवी, स्काई एचडी बॉक्स और सोनी बीटी साउंडबार है, तो बटन 1 दबाएं और आपका टीवी बीबीसी 1 (चैनल 101) पर स्विच हो जाएगा। बटन 2 दबाएं और आपका साउंड बार म्यूट हो जाएगा। फिर से दबाएं और यह अन-म्यूट हो जाएगा।

IR ट्रांसमिशन अनुक्रम के निष्पादन के दौरान LED3 यह दर्शाता है कि दास व्यस्त है और LED1 IR ट्रांसमिशन प्रक्रिया के साथ इनलाइन झिलमिलाहट करेगा।

बेशक यदि आपके पास ऊपर जैसा मनोरंजन सिस्टम नहीं है, तो आप गुलाम को 'IRrecvDumpV2.ino' के साथ फिर से प्रोग्राम कर सकते हैं, अपनी रुचि के रिमोट कमांड को डिकोड कर सकते हैं, फिर उन्हें अपने लिए 'IR_Remote_Sim_Test.ino' में प्रोग्राम कर सकते हैं। दिया गया परिदृश्य।

चित्र 2 मास्टर और स्लेव के बीच सिस्टम स्तर परीक्षण सॉफ़्टवेयर अवलोकन दिखाता है।

चरण 6: अपने डिजाइन को सिकोड़ना

अपने डिजाइन को सिकोड़ना
अपने डिजाइन को सिकोड़ना

ठीक है, इसलिए यह मानते हुए कि आपने अपने घरेलू उपकरणों को नियंत्रित करने के लिए दो Arduinos पर निर्भर इस निर्देश का पालन किया है, यह आपके Arduino स्टॉक का सबसे कुशल उपयोग नहीं है। नतीजतन यदि आप ऊपर चित्र में दिखाए गए सर्किट का निर्माण करते हैं और ATMega328P को 'IR_Remote_Sim.ino' के साथ प्रोग्राम करने के लिए यहां दिए गए निर्देशों का पालन करते हैं, तो आप पूरे सिस्टम को न्यूनतम घटकों तक कम करने में सक्षम होंगे। यह आपको अपने डिज़ाइन को किसी अन्य सिस्टम में एम्बेड करने की अनुमति देगा।

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

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

समाधान स्थिर है और अच्छी तरह से काम करता है, इसे बिना किसी समस्या के काफी हफ्तों से किसी अन्य सिस्टम में एम्बेड किया गया है।

मैंने Arduino Uno R3 को चुना क्योंकि मुझे एक ऐसा उपकरण चाहिए था जिसमें पर्याप्त RAM हो ताकि मेरे पास उचित गहराई का एक बटन बफर हो। मैं 20 पैकेट (MAX_SEQUENCES) के बफर आकार के लिए बस गया।

सोनी और स्काई रिमोट कंट्रोल को डिकोड करते समय मैंने जो हाइब्रिड TX / RX शील्ड बनाया, वह भी बहुत काम आया। हालाँकि मुझे समय-समय पर अपने डिजिटल स्कोप का उपयोग करके यह स्वीकार करना पड़ता है कि सॉफ्टवेयर डिकोडेड IR कमांड वही था जो IR प्राप्त (TSOP38328) से आ रहा था।

केवल एक चीज जो मैंने अलग तरीके से की होगी, वह IR एलईडी के लिए निरंतर चालू ड्राइव सर्किट का उपयोग करना होगा जैसा कि ऊपर चित्र 2 में दिखाया गया है।

ध्यान देने वाली एक और बात यह है कि सभी IR ट्रांसमीटर 38KHz के साथ संशोधित नहीं होते हैं, TSOP38328 को 38KHz के लिए अनुकूलित किया जाता है।

चरण 8: संदर्भ प्रयुक्त

IRRemote.h

  • द्वारा: z3t0
  • उद्देश्य: Arduino के लिए इन्फ्रारेड रिमोट लाइब्रेरी: कई प्रोटोकॉल के साथ इन्फ्रारेड सिग्नल भेजें और प्राप्त करें
  • से:

आईआर रिमोट लाइब्रेरी

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

IR (इन्फ्रारेड) रिसीवर सेंसर - TSOP38238 (समकक्ष)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

डेटा संरचना से बचने के लिए शब्द सीमाओं के लिए पैडिंग

  • https://github.com/esp8266/Arduino/issues/1825
  • https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
  • https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4

आईआर रिमोट विवरण का अच्छा स्रोत

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

आईआर रिमोट डेटाबेस

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

BC337 डेटाशीट

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

1N4148 डेटाशीट

https://www.vishay.com/docs/81857/1n4148.pdf

सिफारिश की: