Tartalomjegyzék:

Univerzális TV -távirányító - Ardiuino, infravörös: 5 lépés
Univerzális TV -távirányító - Ardiuino, infravörös: 5 lépés

Videó: Univerzális TV -távirányító - Ardiuino, infravörös: 5 lépés

Videó: Univerzális TV -távirányító - Ardiuino, infravörös: 5 lépés
Videó: Ettől a WiFi hálózat pillanatok alatt letérdel. Ez WiFi "jammer", ugye? 2024, November
Anonim
Univerzális TV távirányító - Ardiuino, infravörös
Univerzális TV távirányító - Ardiuino, infravörös

Helló! Ebben az oktatható útmutatóban megmutatom, hogyan kell felépíteni és programozni saját univerzális távirányítóját, amely a legtöbb infravörös távirányítóval működő dologgal együtt működik, és amely "hallgat" és dekódol különböző infravörös jeleket, amelyeket különböző távirányítók küldnek.

Egy kis háttér arról, hogy mi inspirált arra, hogy megépítsem ezt a távirányítót - én is, mint a legtöbben, folyamatosan elveszítem a távirányítómat, és ez a katasztrófa meglehetősen frusztráló, ezért úgy gondolom, hogy megoldjuk! Megépítettem ezt a távirányítót, és diszkréten beágyaztam az egyedi építésű ágykeretembe (én is faipari vagyok) - nem veszíthetem el a távirányítót, ha az ágykeretem része!

Kellékek

Amire szüksége lesz: -Arduino UNO vagy Nano - a futásteljesítmény más tábláktól függően változhat

-Rozsdamentes kenyérlap (vagy forrasztható szalagdeszka, ha tartósabbá szeretné tenni)

-Különböző színű és hosszúságú gumiszálak

- Gyors nyomógombok (5) (további gombokat is hozzáadhat, de digitális csapokat kell használnia, mivel az analóg csapok kivételével mindegyiket használják - meg kell vizsgálnia, hogy megfelelően használja -e a felhúzó ellenállásokat, vagy húzza le az ellenállásokat, és kapcsolja ki a nyomógombokat)

-10K ohmos ellenállás (5) (ha több nyomógombot szeretne, akkor többre lesz szüksége)

-470 Ohm ellenállás (2)

-Infravörös LED

-Piros LED

-Infravörös érzékelő (VS1838B cikkszámot használtam, használhat másikat is, csak ellenőrizze a kioldót)

(Opcionális) Forrasztópáka, Forrasztó, Forrasztó.

1. lépés: Az áramkör építése:

A pálya építése
A pálya építése

1). Mindig szeretek az alkatrészek lefektetésével kezdeni, mivel ez mindig a kenyértábla elrendezését vezérli.

-Nyomógombok

-LED -ek: a piros LED és az IR LED párhuzamosan vannak kötve, így láthatja, hogy mit csinál az IR LED.

-Érzékelő

2). Ellenállások

- Az öt 10K ellenállást, amelyeket a nyomógombokhoz rögzítettünk, "lehúzható" ellenállásoknak nevezzük. Húzza le az ellenállásokat, és győződjön meg arról, hogy amikor a nyomógombot nem nyomja meg, akkor a megfelelő Arduino csap 0 V feszültséget kap (vagy legalábbis annak közelében). A lehúzható (vagy felhúzható) ellenállásokról itt talál részletes útmutatót:

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

Ezek az ellenállások nem feltétlenül szükségesek, de ha "szellem" lökéseket kap, akkor több mint valószínű, hogy a kapacitív csatolás okozza, és a lehúzható ellenállások ezt megakadályozzák.

3). Áramköri vezetékek

4). 5V és földi vezetékek

Referenciaként használja a mellékelt képet! de ne félj megváltoztatni az igényeidnek megfelelően!

2. lépés: Kód:

#include const int RECV_PIN = 7; // Infravörös érzékelő olvasócsap int Button1 = A4; // Legtávolabbi bal int Button2 = A3; // 2. balról int Gomb3 = A2; // Középső int gomb4 = A1; // 2. jobbra int Button5 = A0; // Legtávolabb a jobb oldalt int LED = 3; // IR LED & Piros LED int val = 0; // Változó érték IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results eredmények;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (gomb 5, BEMENET); pinMode (LED, KIMENET); Sorozat.kezdet (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // analóg olvasás használata digitális olvasás helyett, hogy elkerülje a fogságban lévő kapacitással kapcsolatos problémákat. ezenkívül segít a gombok kikapcsolásában. // Az analóg leolvasás 900 -nál lehetővé teszi az értékek mozgatását, vagyis az infravörös jelet akkor is elküldi, ha nem a teljes 5V -ot alkalmazzák a tűre. // de a 900 elég magas ahhoz, hogy ne olvasson hibásan a kapacitív csatolás késleltetése miatt (100);} // RGB csík be- és kikapcsolása {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // az "i <3" érték megváltoztatása megváltoztatja a jel azonnali ismétlésének számát. így az "i <2" kétszer megismétli a jelet. // előfordulhat, hogy játszani kell ezzel a számmal, ha a tévé nem válaszol, általában 1 vagy 3 működik a legjobban, ha nem, próbálkozzon páratlan számokkal. // lehet, hogy játszani kell a belső jelkésleltetés időzítési értékeivel is, például a TV 10 működik, de a 30 nem. {irsend.sendSony (0xa90, 12); // Sony TV tápkódja, a TV -m esetében a kódot 3x3 -ban kell elküldeni, tehát 3 impulzus, három külön időkésleltetés (10); // "intra signal delay" (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" a bitszám, a különböző protokollok különböző bitszámokat igényelnek. A NEC 32, a Sony 12 éves, utánanézhet a többieknek (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); // Sony TV tápellátás hangerőcsökkentési késleltetése (100);}}} késleltetés (100);} ha (irrecv.decode (& results)) // a kód alábbi része lehetővé teszi a különböző távirányítókról érkező infravörös jelek értelmezését. {Serial.println (results.value, HEX); // létrehozza a "NEC, Sony, stb." eljárást, és egy "c90, a90, FF02FD" TV -kódot, 0x -ot kell hozzáadnia a TV -kód kapcsoló elejéhez (results.decode_type) {case DENON: Serial.println ("DENON"); szünet; eset NEC: Serial.println ("NEC"); szünet; eset PANASONIC: Serial.println ("PANASONIC"); szünet; SONY eset: Serial.println ("SONY"); szünet; eset RC5: Serial.println ("RC5"); szünet; eset JVC: Serial.println ("JVC"); szünet; SANYO eset: Serial.println ("SANYO"); szünet; tok MITSUBISHI: Serial.println ("MITSUBISHI"); szünet; tok SAMSUNG: Serial.println ("SAMSUNG"); szünet; LG eset: Serial.println ("LG"); szünet; RC6 eset: Serial.println ("RC6"); szünet; tok DISH: Serial.println ("DISH"); szünet; eset SHARP: Serial.println ("SHARP"); szünet; eset WHYNTER: Serial.println ("WHYNTER"); szünet; eset AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); szünet; alapértelmezett: eset UNKNOWN: Serial.println ("UNKNOWN"); break;} irrecv.resume ();}}

3. lépés: Kód mélységben: IR jelek küldése

A kódsorokra a sorszámuk alapján hivatkozom - a folytatáshoz használja ezt a linket:

pastebin.com/AQr0fBLg

Először is be kell vennünk a z3t0 által készített IR Remote Library -t.

Itt egy link a könyvtárhoz:

github.com/z3t0/Arduino-IRremote

Ha útmutatásra van szüksége a könyvtár megfelelő letöltéséhez és telepítéséhez az IDE -ben:

www.arduino.cc/en/guide/libraries

Az 1. sor tartalmazza a könyvtárat.

Ezután deklarálnunk kell néhány változót, a 2-12. Sorok ezt teszik.

A "cost int" segítségével határozzuk meg a változókat, amelyek nem változnak, egy kivételével mindegyik ebbe a kategóriába tartozik.

Az "int" -t használjuk a változó változók meghatározására.

Modulációs (PWM) impulzusos tüskét kell használnunk a LED -es tűnkhöz - minden olyan tű, amely mellette "~" van, elegendő lesz a kódomban - a 3. digitális tűt használjuk.

Ezután el kell végeznünk néhány beállítást - ez a kód csak egyszer fog futni, amikor az Arduino be van kapcsolva vagy visszaáll.

Figyeljük meg, hogy meghatározzuk a bemeneteket és kimeneteket (15-20), bekapcsoljuk a soros monitort (21), engedélyezzük az infravörös érzékelőt (22), és azt mondjuk az Arduino-nak, hogy bármikor villogjon a fedélzeti LED-en, amikor jelet kapunk (23).

Ezután kiépítjük a hurkot - ez a kód többször fog futni, másodpercenként néhányszor felülről lefelé haladva.

A 25. sorban egy if állítást használunk, ez azt mondja az Arduino -nak, hogy "keresse meg ezeket a konkrét kritériumokat, ha ezek a kritériumok teljesülnek, tegye ezt a konkrét dolgot". Ebben az esetben a feltételek: Ha nem, akkor lépjen tovább. " Van itt egy kis kicsomagolási lehetőség, ezért engedjük meg a merülést: az Arduino analóg jele 5V vagy annál kisebb érték, 5V 1023, 0V pedig 0. Bármely adott feszültség 0 és 5 V között definiálható egy számot, és egy kis matek segítségével kitalálhatjuk ezt a számot, vagy fordítva, egy feszültséget. Osszuk el az 1024 -et (0 -t egységként) 5 -tel, így 204,8 -at kapunk. Például a 900 -as számot használjuk, hogy ezt feszültségre fordítsuk, egyszerűen elosztjuk a 900 -at 204,8 -mal, így ~ 4,4 V -ot kapunk. Azt mondjuk az Arduino -nak, hogy keressen ~ 4,4 voltnál nagyobb feszültséget, és ha igen, hajtsa végre a következő utasítást.

A következő utasításokról (25. sor) az irsend.sendNEC (0xFF02FD, 32). Ez azt mondja: "Arduino, küldjön egy modulált impulzust, amely követi a NEC protokollt, különösen az FF02FD jelet, és győződjön meg róla, hogy 32 bit hosszú". Ezáltal az IR LED -ünk úgy villog, hogy más eszközök is megértsék. Gondolj egy kicsit a Morse -kódra, de csak láthatatlan fényben! Nagyon sok különböző protokoll létezik, mindegyikben több száz, ha nem ezer egyedi jel, és mindegyik saját bitszámmal - eszközünk képes lesz felismerni ezeket a jeleket, de később bele fogunk merülni ebbe!

A 28. sorban van az első késleltetésünk - ez azért van, hogy megakadályozzuk a véletlen ismétlődő jeleket, ha a gombot megnyomjuk és az infravörös jelet elküldjük, 100 ezredmásodperc áll rendelkezésünkre, hogy lehúzzuk az ujjunkat a gombról. ez nem tűnik sok időnek, de a gyakorlatban úgy tűnik, hogy jól működik. a késleltetési funkció azt mondja az Arduino -nak, hogy "semmit ne tegyen X milliszekundum alatt", és referenciaként 1000 milliszekundum másodpercenként.

Továbblépve a következő gombunkhoz a 29. sorban, az 5. gomb (eredetileg 4 gombom volt ezen a távirányítón, hozzáadtam egy ötödiket, ezért nem vagyunk rendben). Ez lélekben ugyanaz, mint az 1. gomb, de néhány lényeges különbséggel. Az első különbség, amelyet látni fog, egy utasítás - ez lényegében egy másik ciklus - egy ciklus egy másik nagyobb ciklusban, a loopcepcióban. Konkrétan "for (int i = 0; i <3; i ++)" van, olvassuk ezt így: "Arduino, kezdjük 0 -tól, ismételjük meg az alábbi utasításokat, amíg el nem érjük a 3 -szor". A for függvényt azért használják, mert sok eszköz úgy van programozva, hogy ismételt jelet keres, és a mi esetünkben itt 3 -szor. Egyszerűen megváltoztathatja a 3 -as számot egy másik számra, ha a készülék más ismétlési ütemezést kér. A másik fő különbség az 5 -ös gombbal az, hogy ismétlődik, 3 -szor vagy 3x3 -szor. Más szóval, háromszor küldjük a jelet, várjunk 10 ezredmásodpercet, küldjük el újra háromszor, várjunk még 10 ezredmásodpercet, majd küldjük el ismét háromszor. Ez a fajta kommunikáció gyakori az eszközök be- és kikapcsolásakor, és lehet, hogy éppen ezt kéri a tévé vagy az eszköz - ennek kulcsa az, hogy játsszon az összes változóval, amíg meg nem kapja a kívánt eredményt. Módosítsa a rövid késleltetés értékét, változtassa meg az ismétlési értéket, küldjön 6 köteget 3 helyett stb. Stb. Az eszközök tetszőleges jelszabályokkal vannak programozva szándékosan, képzelje el, ha a TV távirányítója azonos típusú jelet küldött, mint a hangszóró; minden alkalommal, amikor csatornát váltott a TV -n, a hangszóró kikapcsol - ezért vannak különböző jelszabályok.

A következő három gomb ugyanazokkal az elvekkel van programozva, legalább részben, a fentiekben leírtak szerint - így egészen az 55. sorig ugorhatunk.

4. lépés: Kód mélységben: IR jelek fogadása

Kód mélységben: IR jelek fogadása
Kód mélységben: IR jelek fogadása

Az 55. sorban elkezdjük programozni az Arduino -t, hogy értelmezze a más távirányítók által küldött IR jeleket - ez szükséges ahhoz, hogy kitalálhassa a távvezérlő által használt protokollokat és jeleket. Az 55. sor első kódsora az, ha (irrecv.decode (& results) ezt így olvassa: "Arduino, keressen IR -kódot, ha talál ilyet, akkor adja vissza a valódi értéket, ha nem talált semmit, akkor hamisat. Ha igaz, rögzítse az információkat "eredmények" -be.

Továbblépve az 56. sorra, van Serial.println (results.value, HEX), amely így szól: "Ardunio, nyomtassa ki az eredményeket a soros monitoron HEX formátumban". A hexadecimális, azaz hexadecimális, egy módja annak, hogy egy bináris karakterláncot (csak 0 -t és 1 -et) lerövidítsünk valamivel könnyebben beírhatóvá. Például a 101010010000 "a90", a TV ki- és bekapcsolásához használt kód, a 111111110000001011111101 pedig 0xFF02FD, amely az RGB szalagomat vezérli. A fenti diagram segítségével konvertálhatja a bináris számot hexadecimálisra, és fordítva, vagy használhatja a következő linket:

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

Az 57. sorig van egy új funkciónk, az úgynevezett kapcsolótok.

Lényegében a kapcsoló tok lehetővé teszi, hogy különböző utasításokat adjunk meg egy adott változó (eset) eredményei alapján. a break kilép a switch utasításból, és minden utasítás végén használatos.

Itt használjuk a kapcsolótokot, hogy megváltoztassuk a soros monitoron történő nyomtatás módját, a különböző távirányítók Arduino -érzékelési protokolljai alapján.

5. lépés: Következtetés

Ha kérdésed van - keress bátran itt! Örömmel próbálok a lehető legjobban segíteni.

Remélem tanultál valamit, amellyel egy kicsit jobbá teheted az életed!

-RB

Ajánlott: