Obsah:

Univerzální dálkový ovladač TV - Ardiuino, infračervený: 5 kroků
Univerzální dálkový ovladač TV - Ardiuino, infračervený: 5 kroků

Video: Univerzální dálkový ovladač TV - Ardiuino, infračervený: 5 kroků

Video: Univerzální dálkový ovladač TV - Ardiuino, infračervený: 5 kroků
Video: Arduino: Základy 05 | Jak hacknout TV ovladač? IR, switch, EEPROM 2024, Červenec
Anonim
Univerzální dálkový ovladač TV - Ardiuino, infračervený
Univerzální dálkový ovladač TV - Ardiuino, infračervený

Ahoj! V tomto návodu vám ukážu, jak vytvořit a naprogramovat vlastní univerzální dálkové ovládání, které bude fungovat s většinou věcí využívajících infračervené dálkové ovládání a které bude také „poslouchat“a dekódovat infračervený signál vysílaný různými jinými dálkovými ovladači.

Trochu pozadí toho, co mě inspirovalo k vybudování tohoto dálkového ovladače - já, stejně jako většina z vás, neustále ztrácím dálkové ovladače a tato kalamita je docela frustrující, takže jsem se rozhodl to vyřešit! Postavil jsem tento dálkový ovladač a diskrétně jej vložil do svého vlastního postaveného rámu postele (jsem také dřevoobráběč) - nemohu ztratit dálkové ovládání, pokud je součástí mého rámu postele!

Zásoby

Věci, které budete potřebovat: -Arduino UNO nebo Nano - kilometrový výkon se může u jiných desek lišit

-Bezpájková deska (nebo pájecí lišta, pokud chcete, aby byla trvalejší)

-Propojovací dráty různých barev a délek

-Momentální tlačítka (5) (můžete přidat další tlačítka, ale budete muset použít digitální piny, protože jsou použity všechny kromě 1 analogových kolíků - budete se muset podívat na to, zda správně používáte vytahovací odpory nebo stáhněte rezistory a uvolněte tlačítka)

-10K Ohm rezistor (5) (pokud chcete více tlačítek, budete jich potřebovat více)

-470 Ohm rezistor (2)

-Infračervená LED

-Červená LED

-Infračervený snímač (použil jsem číslo dílu VS1838B, můžete použít jiný, stačí zkontrolovat pin-out)

(Volitelné) Páječka, Pájka, Pájecí tok.

Krok 1: Budování obvodu:

Budování okruhu
Budování okruhu

1). Vždycky chci začít s rozložením svých komponent, protože to vždy řídí rozložení na prkénku.

-Tlačítka

-LEDS: červená LED a IR LED jsou zapojeny v tandemu, takže můžete vidět, co IR LED dělá.

-Senzor

2). Rezistory

- Pět rezistorů 10K, které jsme připojili k tlačítkům, se nazývá odpory „stáhni“. Stahujte odpory a ujistěte se, že když není stisknuto tlačítko, odpovídající pin Arduino dostane 0 voltů (nebo alespoň blízko něj). Další informace o odporech typu down down (nebo pull up) najdete v podrobném průvodci:

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

Tyto odpory nemusí být zcela nutné, ale pokud se na vás tlačí „duchové“, je to více než pravděpodobné způsobeno kapacitní vazbou a stahovací odpory tomu zabraňují.

3). Obvodové dráty

4). 5V a zemní dráty

Jako referenci použijte dodaný obrázek! Nebojte se to však změnit podle svých potřeb!

Krok 2: Kód:

#include const int RECV_PIN = 7; // Čidlo IR čtecí pin int Tlačítko1 = A4; // Nejvzdálenější levé int Tlačítko2 = A3; // 2. zleva int Button3 = A2; // Middle int Button4 = A1; // 2. vpravo int Tlačítko5 = A0; // Nejdále doprava int LED = 3; // IR LED & červená LED int val = 0; // Změna 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žití analogového čtení místo digitálního čtení, aby se předešlo problémům s vlastní kapacitou. také pomáhá rozebrat tlačítka. // Analogové čtení na 900 umožňuje určitou hodnotu v krocích, což znamená, že infračervený signál bude odeslán, i když na pin není aplikováno plné 5V. // ale 900 je dost vysoká na to, aby nečetla chybně kvůli zpoždění kapacitní vazby (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // změnou hodnoty v "i <3" se změní počet opakování signálu okamžitě. „i <2“tedy signál zopakuje dvakrát. // možná budete muset pohrát s tímto číslem, pokud vaše televize nereaguje, obecně platí, že 1 nebo 3 fungují nejlépe, pokud ne, zkuste lichá čísla. // možná také budete muset hrát s hodnotami časování zpoždění intra signálu, například pro můj TV 10 funguje, ale 30 ne. {irsend.sendSony (0xa90, 12); // Napájecí kód Sony TV, pro můj televizor je třeba kód odeslat 3x3, takže 3 impulsy, tři oddělené časové zpoždění (10); // "zpoždění intra signálu" pro (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" je bitové číslo, různé protokoly vyžadují různá bitová čísla. NEC je 32, Sony je 12, ostatní můžete vyhledat se zpoždění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); // Prodleva snížení hlasitosti televizoru Sony (100);}}} zpoždění (100);} if (unbcv.decode (& results)) // níže uvedená část kódu vám umožňuje interpretovat infračervené signály z různých dálkových ovladačů. {Serial.println (results.value, HEX); // vygeneruje postup „NEC, Sony, atd.“a televizní kód „c90, a90, FF02FD“budete muset přidat 0x na přední část přepínače TV kódu (results.decode_type) {case DENON: Serial.println ("DENON"); přestávka; případ NEC: Serial.println ("NEC"); přestávka; případ PANASONIC: Serial.println ("PANASONIC"); přestávka; pouzdro SONY: Serial.println („SONY“); přestávka; případ RC5: Serial.println ("RC5"); přestávka; případ JVC: Serial.println ("JVC"); přestávka; případ SANYO: Serial.println ("SANYO"); přestávka; případ MITSUBISHI: Serial.println ("MITSUBISHI"); přestávka; pouzdro SAMSUNG: Serial.println („SAMSUNG“); přestávka; pouzdro LG: Serial.println ("LG"); přestávka; případ RC6: Serial.println ("RC6"); přestávka; případ DISH: Serial.println ("DISH"); přestávka; případ SHARP: Serial.println ("SHARP"); přestávka; případ WHYNTER: Serial.println ("WHYNTER"); přestávka; případ AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); přestávka; výchozí: case UNKNOWN: Serial.println ("UNKNOWN"); break;} unbcv.resume ();}}

Krok 3: Kód do hloubky: Odesílání IR signálů

Budu odkazovat na řádky kódu podle jejich čísla - pro pokračování použijte tento odkaz:

pastebin.com/AQr0fBLg

Nejprve musíme zahrnout vzdálenou knihovnu IR od z3t0.

Zde je odkaz na knihovnu:

github.com/z3t0/Arduino-IRremote

Pokud potřebujete návod, jak správně stáhnout knihovnu a nainstalovat ji do IDE:

www.arduino.cc/en/guide/libraries

Řádek 1 obsahuje knihovnu.

Dále musíme deklarovat několik proměnných, řádky 2-12 to udělají.

„Cost int“používáme k definování proměnných, které se nezmění, kromě jedné spadají do této kategorie.

Pomocí „int“definujeme proměnné, které se budou měnit.

Pro náš LED pin musíme použít pin s pulsem s modulací (PWM) - v mém kódu postačí jakýkoli pin, který má vedle sebe „~“- používáme digitální pin 3.

Dále musíme provést nějaké nastavení - tento kód se spustí pouze jednou, když je Arduino zapnuto nebo resetováno.

Všimněte si, že definujeme naše vstupy a výstupy (15-20), aktivujeme sériový monitor (21), povolíme IR senzor (22) a řekneme Arduinu, aby bliklo LED na palubě, kdykoli dostaneme signál ze senzoru (23).

Dále vytvoříme naši smyčku - tento kód se bude spouštět opakovaně, několikrát za sekundu půjde shora dolů.

Na řádku 25 používáme příkaz if, který říká Arduinu „hledejte tato konkrétní kritéria, pokud jsou tato kritéria splněna, proveďte tuto konkrétní věc“. V tomto případě je kritériem analogRead (Button1)> 900, nebo jinými slovy - „Arduino, podívejte se na tlačítko1, které jsme dříve definovali jako pin A4, pokud je přijatý analogový signál větší než 900, pokračujte podle našich dalších pokynů „Pokud ne, pokračujte prosím“. Zde je trochu co vybalit, takže se ponoříme: analogový signál na Arduinu je hodnota 5V nebo menší, přičemž 5V se rovná 1023 a 0V se rovná 0. Libovolné napětí mezi 0 a 5V lze definovat číslo a s trochou matematiky můžeme zjistit toto číslo, nebo naopak napětí. Vydělíme 1024 (zahrneme 0 jako jednotku) číslem 5, což nám poskytne 204,8. Například použijeme číslo 900, abychom to převedli na napětí, jednoduše rozdělíme 900 na 204,8, což nám dává ~ 4,4V. Říkáme Arduinu, aby hledal napětí větší než ~ 4,4 voltů, a pokud ano, proveďte naši další instrukci.

Když už mluvíme o dalších instrukcích (řádek 25), vidíme irsend.sendNEC (0xFF02FD, 32). To říká „Arduino, pošlete modulovaný puls, který následuje po protokolu NEC, konkrétně signálu FF02FD, a ujistěte se, že je dlouhý 32 bitů“. Díky tomu bude naše IR LED blikat tak, aby tomu rozuměla i jiná zařízení. Představte si to trochu jako Morseova abeceda, ale jen s neviditelným světlem! Existuje spousta různých protokolů, každý se stovkami, ne -li tisíci jednotlivých signálů, a každý s jejich konkrétním bitovým číslem - naše zařízení bude schopno rozpoznat velké množství těchto signálů, ale tomu se budeme věnovat později!

Na řádku 28 máme první zpoždění - to je zde, aby se zabránilo neúmyslnému opakování signálů, jakmile stisknete tlačítko a odešlete infračervený signál, máme 100 milisekund, abychom dostali prst z tlačítka. to nezní jako mnoho času, ale v praxi to vypadá, že to funguje dobře. funkce zpoždění říká Arduinu „nedělejte nic pro X milisekund“a pro informaci je to 1 000 milisekund za sekundu.

Přechod na naše další tlačítko na řádku 29, tlačítko 5 (původně jsem měl na tomto dálkovém ovladači 4 tlačítka, přidal jsem pětinu, takže proto jsme mimo provoz). To je v duchu totéž jako tlačítko 1, ale s několika klíčovými rozdíly. První rozdíl, který uvidíte, je příkaz for - to je v podstatě další smyčka - smyčka s v jiné větší smyčce, smyčka. Konkrétně máme „for (int i = 0; i <3; i ++)“, čtěte jako „Arduino, začněme od 0, opakujte následující pokyny, dokud se nedostaneme na 3 krát“. Funkce for se používá proto, že je mnoho zařízení naprogramováno tak, aby hledalo opakovaný signál, a v našem případě zde 3krát. Pokud vaše zařízení vyžaduje jiný plán opakování, můžete číslo 3 jednoduše změnit na jiné číslo. Dalším klíčovým rozdílem u tlačítka 5 je, že se opakuje znovu, 3krát nebo 3x3. Jinými slovy, pošleme signál 3krát, počkáme 10 milisekund, pošleme jej znovu 3krát, počkáme dalších 10 milisekund a pak jej pošleme znovu 3krát. Tento typ komunikace je běžný pro zapínání a vypínání zařízení a může to být právě to, co vyžaduje vaše televize nebo zařízení - klíčem k tomu je hrát si se všemi proměnnými, dokud nedosáhnete požadovaného výsledku. Změňte hodnotu krátkého zpoždění, změňte hodnotu pro opakování, odešlete 6 dávek místo 3 atd. Zařízení jsou naprogramována záměrně s libovolnými pravidly signálu, představte si, že by váš dálkový ovladač televizoru vysílal stejný typ signálu jako váš zvukový panel; pokaždé, když změníte kanál na televizoru, vypne se zvuková lišta - proto existují různá pravidla signálu.

Další tři tlačítka jsou naprogramována se stejnými principy, alespoň částečně, popsanými výše - takže můžeme přeskočit až na řádek 55.

Krok 4: Kód do hloubky: Příjem IR signálů

Hloubkový kód: Příjem IR signálů
Hloubkový kód: Příjem IR signálů

Na řádku 55 začínáme programovat Arduino tak, aby interpretovalo IR signály vysílané jinými dálkovými ovladači - je to nutné, abyste mohli zjistit protokoly a signály, které vaše dálkové ovladače využívají. První řádek kódu na řádku 55 je, pokud (unbcv.decode (& results) to čte jako „Arduino, hledejte IR kód, pokud ho najdete, vraťte skutečnou hodnotu, pokud nic nenalezeno, vraťte false. Pokud je pravda, zaznamenejte informace do „výsledků““.

Když přejdeme na řádek 56, máme Serial.println (results.value, HEX), kde je uvedeno „Ardunio, vytiskněte výsledky na sériovém monitoru ve formátu HEX“. Hex, což znamená hexadecimální, je způsob, jak můžeme zkrátit binární řetězec (jen 0 a 1) na něco trochu jednoduššího na psaní. Například 101010010000 je „a90“, kód používaný k vypnutí a zapnutí mého televizoru, a 11111111000000001011111101 je 0xFF02FD, který ovládá můj RGB pás. Výše uvedený graf můžete použít k převodu binárních souborů na hex, a naopak, nebo můžete použít následující odkaz:

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

Až na řádek 57 máme novou funkci, nazývanou skříň rozvaděče.

V zásadě nám případ přepínače umožňuje specifikovat různé pokyny na základě výsledků dané proměnné (případu). break ukončí příkaz switch a použije se na konci každého příkazu.

Pouzdro přepínače zde používáme ke změně způsobu tisku v sériovém monitoru na základě protokolů, které naše Arduino smysly z různých dálkových ovladačů.

Krok 5: Závěr

Pokud máte dotaz - neváhejte mě kontaktovat zde! Jsem rád, že se vám snažím pomoci, jak nejlépe umím.

Doufám, že jste se naučili něco, co můžete použít, aby byl váš život o něco lepší!

-RB

Doporučuje: