Obsah:

Univerzálny diaľkový ovládač k televízoru - Ardiuino, infračervený: 5 krokov
Univerzálny diaľkový ovládač k televízoru - Ardiuino, infračervený: 5 krokov

Video: Univerzálny diaľkový ovládač k televízoru - Ardiuino, infračervený: 5 krokov

Video: Univerzálny diaľkový ovládač k televízoru - Ardiuino, infračervený: 5 krokov
Video: Урок 101. Использование ИК-пульта дистанционного управления для управления телевизором, лампочкой переменного тока с реле, двигателем постоянного тока и серводвигателем. 2024, November
Anonim
Univerzálny diaľkový ovládač k televízoru - Ardiuino, infračervený
Univerzálny diaľkový ovládač k televízoru - Ardiuino, infračervený

Ahoj! V tomto návode vám ukážem, ako vytvoriť a naprogramovať vlastný univerzálny diaľkový ovládač, ktorý bude fungovať s väčšinou vecí, ktoré používajú infračervené diaľkové ovládanie, a ktorý bude tiež „počúvať“a dekódovať infračervený signál odoslaný rôznymi inými diaľkovými ovládačmi.

Trochu pozadia toho, čo ma inšpirovalo k vytvoreniu tohto diaľkového ovládača - ja, rovnako ako väčšina z vás, neustále strácam diaľkové ovládače a táto kalamita je dosť frustrujúca, takže som sa rozhodol to vyriešiť! Postavil som tento diaľkový ovládač a diskrétne ho zabudoval do svojho vlastného postaveného rámu postele (som tiež drevoobrábač) - nemôžem stratiť diaľkové ovládanie, ak je súčasťou môjho rámu postele!

Zásoby

Veci, ktoré budete potrebovať: -Arduino UNO alebo Nano - počet najazdených kilometrov sa môže líšiť od iných dosiek

-Bezpájkovacia doska (alebo spájkovateľná doska, ak chcete, aby bola trvalejšia)

-Prepojovacie drôty rôznych farieb a dĺžok

-Momentálne tlačidlá (5) (môžete pridať ďalšie tlačidlá, ale budete musieť použiť digitálne piny, pretože sa používajú všetky analógové piny okrem jedného - budete sa musieť pozrieť na to, či správne používate vyťahovacie odpory. alebo stiahnite odpory a odblokujte tlačidlá)

-10K Ohm rezistor (5) (ak by ste chceli viac tlačidiel, budete ich potrebovať viac)

-470 Ohm odpor (2)

-Infračervená LED dióda

-červená LED

-Infračervený snímač (použil som číslo dielu VS1838B, môžete použiť aj iné, stačí skontrolovať pin-out)

(Voliteľné) Spájkovačka, spájkovačka, spájkovacia tavenina.

Krok 1: Budovanie obvodu:

Budovanie okruhu
Budovanie okruhu

1). Vždy rád začínam rozmiestňovaním svojich komponentov, pretože to vždy poháňa rozloženie na doske.

-Tlačidlá

-LEDS: červená LED a IR LED sú zapojené v tandeme, aby ste videli, čo IR LED robí.

-Senzor

2). Rezistory

- Päť rezistorov 10K, ktoré sme pripevnili k tlačidlám, sa nazýva odpory „stiahnutím“. Stiahnite nadol odpory a uistite sa, že keď nie je stlačené tlačidlo, príslušný kolík Arduino dostane 0 voltov (alebo aspoň blízko neho). Ak chcete získať ďalšie informácie o odpínačoch typu down down (alebo pull up), tu je hĺbkový sprievodca:

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

Tieto odpory nemusia byť úplne potrebné, ale ak vás tlačia „duchovia“, je to viac ako pravdepodobné spôsobené kapacitnou väzbou a sťahovacie odpory tomu zabraňujú.

3). Obvodové vodiče

4). 5V a uzemňovacie vodiče

Ako referenciu použite poskytnutý obrázok! Nebojte sa to však zmeniť podľa svojich potrieb!

Krok 2: Kód:

#include const int RECV_PIN = 7; // IR snímač na čítanie pin int Button1 = A4; // Farthest Left int Button2 = A3; // 2. zľava int Button3 = A2; // Stredné int Button4 = A1; // 2. vpravo doprava Button5 = A0; // Najďalej vpravo int LED = 3; // IR LED & červená LED int val = 0; // Zmena hodnoty IRsend irsend; IRrecv unbcv (RECV_PIN); decode_results výsledky;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, VÝSTUP); Serial.begin (9600); unbcv.enableIRIn (); unbcv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // používaním analógového čítania namiesto digitálneho čítania, aby sa predišlo problémom s kapacitnou kapacitou. tiež pomáha odbúrať tlačidlá. // S analógovým čítaním pri 900 je možné dosiahnuť určitú krútiacu miestnosť v hodnotách, čo znamená, že infračervený signál bude odoslaný, aj keď na pin nie je aplikovaných celých 5 V. // ale 900 je dosť vysoká na to, aby sa nečítala nesprávne kvôli oneskoreniu kapacitnej väzby (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // zmenou hodnoty v "i <3" sa zmení počet opakovaní signálu ihneď. „i <2“teda signál zopakuje dvakrát. // Možno sa budete musieť pohrať s týmto číslom, ak váš televízor nereaguje, spravidla funguje 1 alebo 3, ak nie, vyskúšajte nepárne čísla. // možno budete musieť hrať aj s hodnotami časovania oneskorenia intra signálu, napríklad pre môj televízor 10 funguje, ale 30 nie. {irsend.sendSony (0xa90, 12); // Napájací kód televízora Sony, pre môj televízor je potrebné kód odoslať 3x3, takže 3 impulzy, tri samostatné časové oneskorenia (10); // "oneskorenie intra signálu" pre (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" je bitové číslo, rôzne protokoly vyžadujú rôzne bitové čísla. NEC je 32, Sony má 12, ostatné si môžete vyhľadať s oneskorením (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); // Oneskorenie zníženia hlasitosti televízora Sony (100);}}} Oneskorenie (100);}, ak (unbcv.decode (& results)) // nižšie uvedená časť kódu vám umožňuje interpretovať infračervené signály z rôznych diaľkových ovládačov. {Serial.println (results.value, HEX); // vygeneruje postup „NEC, Sony, Atď..“a TV kód „c90, a90, FF02FD“budete musieť pridať 0x na prednú stranu prepínača TV kódu (results.decode_type) {case DENON: Serial.println ("DENON"); prestávka; prípad NEC: Serial.println ("NEC"); prestávka; prípad PANASONIC: Serial.println ("PANASONIC"); prestávka; prípad SONY: Serial.println („SONY“); prestávka; prípad RC5: Serial.println ("RC5"); prestávka; prípad JVC: Serial.println ("JVC"); prestávka; prípad SANYO: Serial.println ("SANYO"); prestávka; prípad MITSUBISHI: Serial.println ("MITSUBISHI"); prestávka; prípad SAMSUNG: Serial.println ("SAMSUNG"); prestávka; prípad LG: Serial.println ("LG"); prestávka; prípad RC6: Serial.println ("RC6"); prestávka; prípad DISH: Serial.println ("DISH"); prestávka; prípad SHARP: Serial.println ("SHARP"); prestávka; prípad WHYNTER: Serial.println ("WHYNTER"); prestávka; prípad AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); prestávka; default: case UNKNOWN: Serial.println ("UNKNOWN"); prestávka;} unbcv.resume ();}}

Krok 3: Hĺbkový kód: odosielanie IR signálov

Budem odkazovať na riadky kódu podľa ich čísla - v nasledujúcom texte použite tento odkaz:

pastebin.com/AQr0fBLg

Najprv musíme zahrnúť vzdialenú knižnicu IR od z3t0.

Tu je odkaz na knižnicu:

github.com/z3t0/Arduino-IRremote

Ak potrebujete návod, ako správne stiahnuť knižnicu a nainštalovať ju do IDE:

www.arduino.cc/en/guide/libraries

Riadok 1 obsahuje knižnicu.

Ďalej musíme deklarovať niekoľko premenných, riadky 2-12 to urobia.

„Cost int“používame na definovanie premenných, ktoré sa nezmenia. Do tejto kategórie spadajú všetky položky okrem jedného.

Na definovanie premenných, ktoré sa zmenia, používame „int“.

Na svoj LED pin musíme použiť pin s pulzom s moduláciou (PWM) - v mojom kóde bude stačiť akýkoľvek pin, ktorý má vedľa seba „~“- použijeme digitálny pin 3.

Ďalej musíme urobiť nejaké nastavenie - tento kód sa spustí iba raz, keď je Arduino zapnutý alebo resetovaný.

Všimnite si, že definujeme naše vstupy a výstupy (15-20), spustíme sériový monitor (21), povolíme IR senzor (22) a povieme Arduinu, aby blikalo integrovanou diódou LED vždy, keď dostaneme signál v senzore (23).

Ďalej budeme budovať svoju slučku - tento kód bude bežať opakovane, pričom prejde zhora nadol niekoľko krát za sekundu.

Na riadku 25 používame príkaz if, ktorý hovorí Arduinu „vyhľadajte tieto konkrétne kritériá, ak sú tieto kritériá splnené, urobte túto konkrétnu vec“. V tomto prípade sú kritériá analogové Čítať (Button1)> 900, alebo inými slovami - „Arduino, pozrite sa na tlačidlo 1, ktoré sme definovali ako pin A4 skôr, ak je prijatý analógový signál väčší ako 900, pokračujte podľa našich ďalších pokynov. „Ak nie, pokračujte prosím“. Tu je trochu čo vybaliť, takže sa ponoríme: analógový signál na Arduine má hodnotu 5 V alebo nižšiu, pričom 5 V sa rovná 1023 a 0 V sa rovná 0. Akékoľvek dané napätie medzi 0 a 5 V je možné definovať číslo a s trochou matematiky dokážeme zistiť toto číslo alebo naopak napätie. Rozdelte 1024 (zahrnujeme 0 ako jednotku) 5, čo nám dáva 204,8. Napríklad používame číslo 900, aby sme to preložili na napätie, jednoducho delíme 900 číslom 204,8, čo nám dáva ~ 4,4V. Hovoríme Arduinu, aby hľadal napätie vyššie ako ~ 4,4 voltov, a ak áno, urobte nasledujúci pokyn.

Keď už hovoríme o ďalších pokynoch (riadok 25), vidíme irsend.sendNEC (0xFF02FD, 32). Toto hovorí „Arduino, pošlite modulovaný impulz, ktorý nasleduje po protokole NEC, konkrétne signálu FF02FD, a uistite sa, že je dlhý 32 bitov“. Vďaka tomu bude naše IR LED blikať spôsobom, ktorému rozumejú ostatné zariadenia. Predstavte si to trochu ako Morseovu abecedu, ale iba s neviditeľným svetlom! Existuje mnoho rôznych protokolov, každý so stovkami, ak nie tisíckami jednotlivých signálov, a každý s ich konkrétnym bitovým číslom - naše zariadenie bude schopné rozpoznať veľké množstvo týchto signálov, ale tomu sa budeme venovať neskôr!

Na riadku 28 máme prvé oneskorenie - je to tu, aby sa zabránilo neúmyselnému opakovaniu signálov. Po stlačení tlačidla a odoslaní infračerveného signálu máme 100 milisekúnd na to, aby sme dostali prst z tlačidla. to neznie ako veľa času, ale v praxi to vyzerá, že to funguje dobre. funkcia oneskorenia hovorí Arduinu „nič nerobte X milisekundy“a pre referenciu je to 1 000 milisekúnd za sekundu.

Prejdeme na naše ďalšie tlačidlo na riadku 29, tlačidlo 5 (pôvodne som mal na tomto diaľkovom ovládači 4 tlačidlá, pridalo sa piate, takže preto sme mimo prevádzky). V duchu je to to isté ako tlačidlo 1, ale s niekoľkými kľúčovými rozdielmi. Prvý rozdiel, ktorý uvidíte, je príkaz for - toto je v podstate ďalšia slučka - slučka s inou väčšou slučkou, loopception. Konkrétne máme „for (int i = 0; i <3; i ++)“, čítajte to ako „Arduino, začnime od 0, opakujte nasledujúce pokyny, kým sa nedostaneme na trikrát“. Funkcia for sa používa, pretože veľa zariadení je naprogramovaných tak, aby vyhľadávali opakovaný signál, a v našom prípade tu trikrát. Ak vaše zariadenie vyžaduje iný plán opakovania, môžete číslo 3 jednoducho zmeniť na iné číslo. Ďalším kľúčovým rozdielom oproti tlačidlu 5 je, že sa opakuje znova, 3 krát alebo 3x3. Inými slovami, pošleme signál 3 krát, počkáme 10 milisekúnd, pošleme ho znova 3 krát, počkáme ďalších 10 milisekúnd a potom ho znova pošleme 3 krát. Tento typ komunikácie je bežný pri zapínaní a vypínaní zariadení a môže to byť práve to, čo vyžaduje váš televízor alebo zariadenie - kľúčom k tomu je hrať sa so všetkými premennými, kým nedosiahnete požadovaný výsledok. Zmeňte hodnotu krátkeho oneskorenia, zmeňte hodnotu opakovania, pošlite 6 dávok namiesto troch atď. Zariadenia sú naprogramované podľa ľubovoľných pravidiel signálu úmyselne, predstavte si, že by váš diaľkový ovládač k televízoru vysielal signál rovnakého typu ako váš zvukový panel; Zakaždým, keď zmeníte kanál na televízore, zvukový panel sa vypne - preto existujú rôzne pravidlá signálu.

Nasledujúce tri tlačidlá sú naprogramované na rovnakých princípoch, aspoň čiastočne, popísaných vyššie - takže môžeme preskočiť až na riadok 55.

Krok 4: Hĺbkový kód: príjem IR signálov

Hĺbkový kód: príjem IR signálov
Hĺbkový kód: príjem IR signálov

Na riadku 55 začneme programovať Arduino na interpretáciu IR signálov odosielaných inými diaľkovými ovládačmi - je to nevyhnutné, aby ste mohli zistiť protokoly a signály, ktoré vaše diaľkové ovládače používajú. Prvý riadok kódu na riadku 55 je, ak (Ircv.decode (& results) to číta ako „Arduino, hľadajte IR kód, ak ho nájdete, vráťte skutočnú hodnotu, ak sa nič nenašlo, vráťte nepravdivý. Keď je pravdivý, zaznamenajte informácie do „výsledkov““.

Ak prejdeme na riadok 56, máme Serial.println (results.value, HEX), ktorý hovorí „Ardunio, vytlač výsledky na sériovom monitore vo formáte HEX“. Hex, čo znamená hexadecimálne číslo, je spôsob, akým môžeme skrátiť binárny reťazec (iba 0 a 1) na niečo, čo je jednoduchšie napísať. Napríklad 101010010000 je „a90“, kód používaný na vypnutie a zapnutie môjho televízora, a 11111111000000001011111101 je 0xFF02FD, ktorý ovláda môj pásik RGB. Vyššie uvedený graf môžete použiť na konverziu binárnych súborov na hexadecimálne a naopak alebo môžete použiť nasledujúci odkaz:

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

Až na riadok 57 máme novú funkciu, ktorá sa nazýva spínacia skrinka.

Prípad prepínača nám v zásade umožňuje špecifikovať rôzne pokyny na základe výsledkov danej premennej (prípadu). break ukončí príkaz switch a použije sa na konci každého príkazu.

Tu používame spínaciu skrinku na zmenu spôsobu tlače v sériovom monitore na základe protokolov, ktoré naše Arduino zmysly získavajú z rôznych diaľkových ovládačov.

Krok 5: Záver

Ak máte otázku - neváhajte ma tu kontaktovať! Som rád, že sa vám snažím pomôcť, ako najlepšie viem.

Dúfam, že ste sa dozvedeli niečo, čo môžete použiť na to, aby bol váš život o niečo lepší!

-RB

Odporúča: