विषयसूची:

यूनिवर्सल टीवी रिमोट - अर्डियुइनो, इन्फ्रारेड: 5 कदम
यूनिवर्सल टीवी रिमोट - अर्डियुइनो, इन्फ्रारेड: 5 कदम

वीडियो: यूनिवर्सल टीवी रिमोट - अर्डियुइनो, इन्फ्रारेड: 5 कदम

वीडियो: यूनिवर्सल टीवी रिमोट - अर्डियुइनो, इन्फ्रारेड: 5 कदम
वीडियो: Beyond the Basics: Automatic Gatekeeper With IR Sensor And ChatGPT Generated Arduino Code 2024, जुलाई
Anonim
यूनिवर्सल टीवी रिमोट - अर्डियूनो, इन्फ्रारेड
यूनिवर्सल टीवी रिमोट - अर्डियूनो, इन्फ्रारेड

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

इस रिमोट को बनाने के लिए मुझे प्रेरित करने वाली पृष्ठभूमि की थोड़ी सी पृष्ठभूमि - मैं, आप में से अधिकांश की तरह, लगातार अपने रिमोट खो देता हूं, और यह आपदा काफी निराशाजनक है, इसलिए मुझे लगता है कि इसे हल करने दें! मैंने इस रिमोट का निर्माण किया है और सावधानी से इसे अपने कस्टम निर्मित बेड फ्रेम में एम्बेड किया है (मैं एक लकड़ी का काम करने वाला भी हूं) - अगर यह मेरे बेड फ्रेम का एक हिस्सा है तो मैं रिमोट नहीं खो सकता!

आपूर्ति

आपको जिन चीज़ों की ज़रूरत पड़ेगी: -Arduino UNO या Nano - माइलेज अन्य बोर्डों के साथ भिन्न हो सकती है

-सोल्डरलेस ब्रेडबोर्ड (या सोल्डरेबल स्ट्रिपबोर्ड यदि आप इसे और अधिक स्थायी बनाना चाहते हैं)

-विभिन्न रंगों और लंबाई के जम्परवायर

-मोमेंटरी पुश बटन (5) (आप अधिक बटन जोड़ सकते हैं, लेकिन आपको डिजिटल पिन का उपयोग करने की आवश्यकता होगी, क्योंकि सभी 1 एनालॉग पिन का उपयोग किया जाता है - आपको यह सुनिश्चित करने की आवश्यकता होगी कि आप पुल अप रेसिस्टर्स का ठीक से उपयोग कर रहे हैं), या प्रतिरोधों को नीचे खींचें, और पुश बटनों को हटा दें)

-10K ओम रोकनेवाला (5) (यदि आप अधिक पुश बटन चाहते हैं, तो आपको इनमें से अधिक की आवश्यकता होगी)

-470 ओम रोकनेवाला (2)

-इन्फ्रारेड एलईडी

-लाल एलईडी

-इन्फ्रारेड सेंसर (मैंने पार्ट नंबर VS1838B का इस्तेमाल किया, आप दूसरे का इस्तेमाल कर सकते हैं, बस पिन-आउट की जांच करें)

(वैकल्पिक) सोल्डरिंग आयरन, सोल्डर, सोल्डर फ्लक्स।

चरण 1: सर्किट का निर्माण:

सर्किट का निर्माण
सर्किट का निर्माण

१) । मैं हमेशा अपने घटकों को बिछाने के साथ शुरुआत करना पसंद करता हूं, क्योंकि यह हमेशा ब्रेडबोर्ड पर लेआउट को चलाता है।

-दबाकर लगाया जाने वाला बटन

-एलईडीएस: लाल एलईडी और आईआर एलईडी को एक साथ तार दिया जाता है, ताकि आप देख सकें कि आईआर एलईडी क्या कर रहा है।

-सेंसर

2))। प्रतिरोधों

- पांच 10K प्रतिरोधों को हमने पुश बटन से जोड़ा है जिन्हें "पुल डाउन" प्रतिरोधक कहा जाता है। पुल डाउन रेसिस्टर्स सुनिश्चित करें कि जब एक पुश बटन दबाया नहीं जाता है, तो संबंधित Arduino पिन को 0 वोल्ट (या कम से कम इसके करीब) मिलता है। पुल डाउन (या पुल अप) प्रतिरोधों के बारे में अधिक जानकारी के लिए यहां एक गहराई से गाइड है:

www.electronics-tutorials.ws/logic/pull-up…

ये प्रतिरोधक पूरी तरह से आवश्यक नहीं हो सकते हैं, लेकिन यदि आपको "भूत" धक्का मिल रहा है, तो यह कैपेसिटिव कपलिंग के कारण होने की संभावना से अधिक है और प्रतिरोधों को खींचने से रोकता है।

3))। सर्किट तार

4))। 5वी और ग्राउंड वायर

संदर्भ के लिए दिए गए चित्र का प्रयोग करें! हालांकि अपनी आवश्यकताओं के लिए इसे बदलने से डरो मत!

चरण 2: कोड:

#include const int RECV_PIN = 7; // IR सेंसर रीड पिन int Button1 = A4; // सबसे दूर लेफ्ट इंट बटन 2 = A3; // बाएँ से दूसरा int Button3 = A2; // मध्य int Button4 = A1; // दूसरे से दाएं इंट बटन ५ = ए ०; // सबसे दूर दाईं ओर एलईडी = 3; // आईआर एलईडी और लाल एलईडी इंट वैल = 0; // मूल्य बदलना IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results परिणाम;

शून्य सेटअप () {पिनमोड (बटन 1, इनपुट); पिनमोड (बटन 2, इनपुट); पिनमोड (बटन 3, इनपुट); पिनमोड (बटन 4, इनपुट); पिनमोड (बटन 5, इनपुट); पिनमोड (एलईडी, आउटपुट); सीरियल.बेगिन (९६००); ircv.enableIRIn (); ircv.blink13(true);} void loop() {{{if (analogRead(Button1)>900)irsend.sendNEC(0xFF02FD, 32); // कैप्टिव कैपेसिटेंस मुद्दों से बचने के लिए डिजिटल रीड के बजाय एनालॉग रीड का उपयोग करना। साथ ही, बटन को डिबॉउंस करने में मदद करता है। // 900 पर एनालॉग पढ़ने से मूल्यों में कुछ विग्गल रूम की अनुमति मिलती है, जिसका अर्थ है कि इंफ्रा सिग्नल भेजा जाएगा, भले ही पिन पर पूर्ण 5V लागू न हो। // लेकिन 900 कैपेसिटिव कपलिंग देरी (100) के कारण गलती से नहीं पढ़ने के लिए पर्याप्त है;}//RGB स्ट्रिप ऑन एंड ऑफ {if (analogRead(Button5)>900) {for (int i = 0; i <3; i++) // "i <3" में मान बदलने से सिग्नल के तुरंत दोहराए जाने की संख्या बदल जाएगी। इसलिए "i <2" सिग्नल को दो बार दोहराएगा। // यदि आपका टीवी प्रतिक्रिया नहीं दे रहा है, तो आपको इस नंबर के साथ खेलने की आवश्यकता हो सकती है, आम तौर पर, 1 या 3 सबसे अधिक काम करते हैं, यदि वे नहीं करते हैं, तो विषम संख्याओं का प्रयास करें। // उदाहरण के लिए, मेरे टीवी 10 कार्यों के लिए, आपको इंट्रा सिग्नल विलंब समय मानों के साथ खेलने की आवश्यकता हो सकती है, लेकिन 30 नहीं। {irsend.sendSony (0xa90, 12); // सोनी टीवी पावर कोड, मेरे टीवी के लिए, कोड को 3x3 भेजने की जरूरत है, इसलिए 3 दालें, तीन अलग-अलग समय देरी (10); // "इंट्रा सिग्नल देरी" के लिए (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" बिट नंबर है, अलग-अलग प्रोटोकॉल अलग-अलग बिट नंबरों के लिए कॉल करते हैं। एनईसी 32 है, सोनी 12 है, आप दूसरों की देरी (10) देख सकते हैं; for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i++) {irsend.sendSony (0xc90, 12); // सोनी टीवी पावर वॉल्यूम डाउन डिले (100);}}} देरी (100);} अगर (irrecv.decode(&results)) // कोड का नीचे का हिस्सा आपको विभिन्न रिमोट से इंफ्रा रेड सिग्नल की व्याख्या करने में सक्षम बनाता है। { Serial.println (results.value, HEX); // यह "NEC, Sony, Etc.." और एक टीवी कोड "c90, a90, FF02FD" प्रक्रिया उत्पन्न करेगा, आपको टीवी कोड स्विच (results.decode_type) {केस DENON के सामने 0x जोड़ना होगा: सीरियल.प्रिंट्लन ("डेनॉन"); टूटना; मामला एनईसी: सीरियल.प्रिंट्लन ("एनईसी"); टूटना; केस पैनासोनिक: सीरियल.प्रिंट्लन ("पैनासोनिक"); टूटना; केस सोनी: सीरियल.प्रिंट्लन ("सोनी"); टूटना; केस RC5: Serial.println ("RC5"); टूटना; मामला JVC: Serial.println ("JVC"); टूटना; मामला SANYO: Serial.println ("सान्यो"); टूटना; मामला मित्सुबिशी: Serial.println ("मित्सुबिशी"); टूटना; मामला सैमसंग: Serial.println ("सैमसंग"); टूटना; केस एलजी: सीरियल.प्रिंट्लन ("एलजी"); टूटना; केस RC6: Serial.println ("RC6"); टूटना; केस डिश: सीरियल.प्रिंट्लन ("डिश"); टूटना; केस शार्प: सीरियल.प्रिंट्लन ("शार्प"); टूटना; मामला WHYNTER: Serial.println ("WHYNTER"); टूटना; मामला AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); टूटना; डिफ़ॉल्ट: मामला अज्ञात: Serial.println ("अज्ञात"); ब्रेक;} ircv.resume ();}}

चरण 3: गहराई में कोड: IR सिग्नल भेजना

मैं उनके लाइन नंबर द्वारा कोड की पंक्तियों की बात कर रहा हूँ - साथ चलने के लिए, इस लिंक का उपयोग करें:

pastebin.com/AQr0fBLg

सबसे पहले, हमें IR रिमोट लाइब्रेरी को z3t0 द्वारा शामिल करना होगा।

यहाँ पुस्तकालय के लिए एक लिंक है:

github.com/z3t0/Arduino-IRremote

यदि आपको किसी पुस्तकालय को ठीक से डाउनलोड करने और इसे IDE में स्थापित करने के बारे में एक गाइड की आवश्यकता है:

www.arduino.cc/en/guide/libraries

लाइन 1 में पुस्तकालय शामिल है।

अगला, हमें कुछ चर घोषित करने की आवश्यकता है, पंक्तियाँ 2-12 ऐसा करती हैं।

हम उन चरों को परिभाषित करने के लिए " cost int " का उपयोग करते हैं जो इस श्रेणी में आते हैं, लेकिन सभी नहीं बदलेंगे।

हम वेरिएबल को परिभाषित करने के लिए "int" का उपयोग करते हैं जो बदल जाएगा।

हमें अपने एलईडी पिन के लिए मॉड्यूलेशन (पीडब्लूएम) के साथ पल्स के साथ एक पिन का उपयोग करना चाहिए - कोई भी पिन जिसके आगे "~" है, मेरे कोड में - हम डिजिटल पिन 3 का उपयोग करते हैं।

अगला, हमें कुछ सेटअप करने की आवश्यकता है - यह कोड केवल एक बार चलेगा जब Arduino संचालित या रीसेट हो जाएगा।

ध्यान दें कि हम अपने इनपुट और आउटपुट (15-20) को परिभाषित कर रहे हैं, सीरियल मॉनिटर (21) को फायर कर रहे हैं, आईआर सेंसर (22) को सक्षम कर रहे हैं, और Arduino को ऑनबोर्ड एलईडी को ब्लिंक करने के लिए कह रहे हैं जब भी हमें सेंसर में सिग्नल मिलता है (23)।

अगला, हम अपने लूप का निर्माण करेंगे - यह कोड बार-बार चलेगा, ऊपर से नीचे तक एक सेकंड में कुछ ही बार।

लाइन 25 पर, हम एक if स्टेटमेंट का उपयोग करते हैं, यह Arduino को बताता है "इस विशिष्ट मानदंड की तलाश करें, यदि वह मानदंड पूरा होता है, तो यह विशिष्ट कार्य करें"। इस मामले में, मानदंड है analogRead(Button1)>900, या दूसरे शब्दों में - "Arduino, बटन 1 को देखें, जिसे हमने पहले पिन A4 के रूप में परिभाषित किया था, यदि प्राप्त एनालॉग सिग्नल 900 से अधिक है, तो कृपया हमारे अगले निर्देशों पर आगे बढ़ें, यदि नहीं, तो कृपया आगे बढ़ें"। यहां अनपैक करने के लिए थोड़ा सा है, इसलिए इसमें गोता लगाएँ: Arduino पर एक एनालॉग सिग्नल 5V के बराबर या उससे कम का मान है, जिसमें 5V 1023 के बराबर है, और 0V बराबर 0 है। 0 और 5V के बीच किसी भी वोल्टेज को परिभाषित किया जा सकता है एक संख्या, और थोड़े से गणित के साथ, हम उस संख्या, या इसके विपरीत, एक वोल्टेज का पता लगा सकते हैं। 1024 (हम 0 को एक इकाई के रूप में शामिल करते हैं) को 5 से भाग दें, जो हमें 204.8 देता है। उदाहरण के लिए, हम संख्या 900 का उपयोग करते हैं, इसे वोल्टेज में अनुवाद करने के लिए, हम केवल 900 को 204.8 से विभाजित करते हैं, जिससे हमें ~ 4.4V मिलता है। हम Arduino को ~ 4.4 वोल्ट से अधिक वोल्टेज देखने के लिए कह रहे हैं, और यदि ऐसा है, तो हमारा अगला निर्देश करें।

अगले निर्देशों की बात करें (पंक्ति 25), हम irsend.sendNEC(0xFF02FD, 32) देखते हैं। यह कहता है "Arduino, एक संशोधित पल्स भेजें जो NEC प्रोटोकॉल का पालन करता है, विशेष रूप से FF02FD सिग्नल, और सुनिश्चित करें कि यह 32 बिट लंबा है"। यह हमारे आईआर एलईडी को इस तरह से झिलमिलाहट कर देगा कि अन्य डिवाइस समझ सकें। इसे थोड़ा मोर्स कोड की तरह समझें, लेकिन अदृश्य प्रकाश के साथ! वहाँ बहुत सारे अलग-अलग प्रोटोकॉल हैं, प्रत्येक सैकड़ों के साथ यदि हजारों व्यक्तिगत सिग्नल नहीं हैं, और प्रत्येक अपनी विशिष्ट बिट संख्या के साथ - हमारा डिवाइस इन संकेतों की एक बड़ी मात्रा को पहचानने में सक्षम होगा, लेकिन हम बाद में उसमें गोता लगाएंगे!

लाइन 28 पर, हमारे पास हमारी पहली देरी है - यह अनजाने में दोहराने वाले संकेतों को रोकने के लिए है, एक बार बटन को धक्का देने और आईआर सिग्नल भेजे जाने के बाद, हमारे पास बटन से अपनी उंगली निकालने के लिए 100 मिलीसेकंड हैं। यह बहुत समय की तरह नहीं लगता है, लेकिन व्यवहार में, ऐसा लगता है कि यह ठीक काम करता है। देरी फ़ंक्शन Arduino को बताता है "X मिलीसेकंड के लिए कुछ भी न करें" और संदर्भ के लिए, वे एक सेकंड में 1000 मिलीसेकंड हैं।

लाइन २९ पर हमारे अगले बटन पर आगे बढ़ते हुए, बटन ५ (मेरे पास मूल रूप से इस रिमोट पर ४ बटन थे, एक पाँचवाँ जोड़ा, इसलिए हम क्रम से बाहर हैं)। यह, आत्मा में, बटन 1 जैसा ही है, लेकिन कुछ प्रमुख अंतरों के साथ। पहला अंतर जो आप देखेंगे वह एक कथन के लिए है - यह अनिवार्य रूप से एक और लूप है - एक लूप जिसमें एक और बड़ा लूप, लूपसेप्शन है। विशेष रूप से हमारे पास "for (int i = 0; i <3; i++)" है, इसे "Arduino, 0 से शुरू होने दें, निम्नलिखित निर्देशों को तब तक दोहराएं जब तक कि हम 3 बार तक न पहुंच जाएं"। के लिए फ़ंक्शन का उपयोग किया जाता है क्योंकि दोहराए गए सिग्नल को देखने के लिए बहुत सारे उपकरणों को प्रोग्राम किया जाता है, और हमारे मामले में यहां 3 बार। यदि आपका डिवाइस एक अलग दोहराव शेड्यूल के लिए कॉल करता है, तो आप बस नंबर 3 को एक अलग नंबर में बदल सकते हैं। बटन 5 के साथ एक और महत्वपूर्ण अंतर यह है कि इसे फिर से दोहराया जाता है, 3 बार, या 3x3। दूसरे शब्दों में, हम सिग्नल को ३ बार भेजते हैं, १० मिलीसेकंड प्रतीक्षा करते हैं, इसे ३ बार फिर से भेजते हैं, और १० मिलीसेकंड प्रतीक्षा करते हैं, और फिर इसे ३ बार फिर से भेजते हैं। इस प्रकार का संचार उपकरणों को चालू और बंद करने के लिए आम है और हो सकता है कि आपका टीवी या डिवाइस इसके लिए कॉल करे - इसकी कुंजी सभी चर के साथ खेलना है जब तक कि आपको वांछित परिणाम न मिल जाए। शॉर्ट डिले वैल्यू बदलें, रिपीट वैल्यू के लिए बदलें, 3 के बजाय 6 बैच भेजें, आदि। डिवाइस जानबूझकर सिग्नल नियमों के साथ प्रोग्राम किए गए हैं, कल्पना करें कि क्या आपके टीवी रिमोट ने आपके साउंड बार के समान प्रकार का सिग्नल भेजा है; हर बार जब आप अपने टीवी पर चैनल बदलते हैं, तो आपका साउंड बार बंद हो जाता है - इसीलिए सिग्नल के अलग-अलग नियम होते हैं।

अगले तीन बटन एक ही प्रिंसिपल के साथ प्रोग्राम किए गए हैं, कम से कम भाग में, ऊपर वर्णित - इसलिए हम लाइन 55 तक सभी तरह से नीचे जा सकते हैं।

चरण 4: गहराई में कोड: आईआर सिग्नल प्राप्त करना

गहराई में कोड: आईआर सिग्नल प्राप्त करना
गहराई में कोड: आईआर सिग्नल प्राप्त करना

लाइन ५५ पर, हम अन्य रिमोट द्वारा भेजे गए IR संकेतों की व्याख्या करने के लिए Arduino की प्रोग्रामिंग शुरू करते हैं - यह आवश्यक है ताकि आप उन प्रोटोकॉल और संकेतों का पता लगा सकें जिनका आपके रिमोट उपयोग करते हैं। लाइन ५५ पर कोड की पहली पंक्ति है यदि (irrecv.decode(&results) इसे "Arduino के रूप में पढ़ें, एक IR कोड की तलाश करें, यदि आपको कोई मिलता है, तो एक वास्तविक मान लौटाएं, यदि कुछ नहीं मिला, तो गलत लौटाएं। जब सही हो, रिकॉर्ड करें "परिणाम" में जानकारी।

लाइन ५६ पर चलते हुए, हमारे पास Serial.println(results.value, HEX) है, यह कहता है "Ardunio, HEX प्रारूप में सीरियल मॉनिटर में परिणाम प्रिंट करें"। हेक्स, जिसका अर्थ है हेक्साडेसिमल, एक तरीका है जिससे हम एक बाइनरी स्ट्रिंग (सिर्फ 0 और 1 के) को टाइप करने के लिए थोड़ा आसान कर सकते हैं। उदाहरण के लिए १०१०१०१०००००० "a90" है, जो कोड मेरे टीवी को चालू और बंद करने के लिए उपयोग किया जाता है, और 111111110000001011111101 0xFF02FD है, जो मेरी RGB स्ट्रिप को नियंत्रित करता है। आप बाइनरी को हेक्स में बदलने के लिए उपरोक्त चार्ट का उपयोग कर सकते हैं, और इसके विपरीत, या आप निम्न लिंक का उपयोग कर सकते हैं:

www.rapidtables.com/convert/number/hex-to-…

डाउन टू लाइन 57, हमारे पास एक नया फ़ंक्शन है, जिसे स्विच केस कहा जाता है।

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

हम विभिन्न रिमोट से हमारे Arduino इंद्रियों के प्रोटोकॉल के आधार पर सीरियल मॉनिटर में प्रिंट करने के तरीके को बदलने के लिए यहां स्विच केस का उपयोग करते हैं।

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

यदि आपका कोई प्रश्न है - कृपया यहाँ पर मुझसे बेझिझक संपर्क करें! मुझे आपकी हर संभव मदद करने की कोशिश करने में खुशी हो रही है।

मुझे आशा है कि आपने कुछ सीखा है जिसका उपयोग आप अपने जीवन को थोड़ा बेहतर बनाने के लिए कर सकते हैं!

-आरबी

सिफारिश की: