Sadržaj:

Univerzalni daljinski za TV - Ardiuino, infracrveni: 5 koraka
Univerzalni daljinski za TV - Ardiuino, infracrveni: 5 koraka

Video: Univerzalni daljinski za TV - Ardiuino, infracrveni: 5 koraka

Video: Univerzalni daljinski za TV - Ardiuino, infracrveni: 5 koraka
Video: Lesson 21: Using Infrared Remote Control with Arduino | SunFounder Robojax 2024, Novembar
Anonim
Univerzalni daljinski za TV - Ardiuino, infracrveni
Univerzalni daljinski za TV - Ardiuino, infracrveni

Zdravo! U ovom uputstvu pokazat ću vam kako izgraditi i programirati vlastiti univerzalni daljinski upravljač koji će raditi s većinom stvari koje koriste infracrveni daljinski upravljač, a koji će također "slušati" i dekodirati infracrveni signal koji šalju različiti drugi daljinski upravljači.

Malo pozadine onoga što me inspirisalo da napravim ovaj daljinski upravljač - ja, kao i većina vas, stalno gubim daljinske upravljače, a ova je nesreća prilično frustrirajuća, pa mislim da to možemo riješiti! Ugradio sam ovaj daljinski upravljač i diskretno ga ugradio u prilagođeni okvir kreveta (ja sam i radnik u drvu) - ne mogu izgubiti daljinski ako je dio mog okvira kreveta!

Supplies

Stvari koje su vam potrebne: -Arduino UNO ili Nano - kilometraža se može razlikovati ovisno o drugim pločama

-Oglasna ploča bez lemljenja (ili lemljiva ploča za lemljenje ako je želite učiniti trajnijom)

-Kancelarije različitih boja i dužina

-Momentalni tasteri (5) (možete dodati još dugmadi, ali ćete morati da koristite digitalne pinove, jer se koriste svi osim 1 analognih pinova - moraćete da proverite da li pravilno koristite otpornike za podizanje ili povucite otpornike prema dolje i otpustite tipke)

-10K Ohm otpornik (5) (ako želite više tipki, trebat će vam više ovih)

-470 Ohm otpornik (2)

-Infracrvena LED dioda

-Crvena LED

-Infracrveni senzor (koristio sam broj dijela VS1838B, mogli biste koristiti i drugi, samo provjerite pin-out)

(Opciono) Lemilica, lemljenje, fluks lemljenja.

Korak 1: Izgradnja kruga:

Izgradnja kola
Izgradnja kola

1). Uvijek volim početi s postavljanjem svojih komponenti, jer to uvijek pokreće raspored na ploči.

-Pritisnite dugmad

-LEDS: LED i IR LED su povezane u tandemu, tako da možete vidjeti šta IR LED radi.

-Senzor

2). Otpornici

- Pet 10K otpornika koje smo pričvrstili na tipke nazivaju se "pull down" otpornici. Povucite otpornike prema dolje kako biste bili sigurni da kada ne pritisnete gumb, odgovarajući Arduino pin dobije 0 volti (ili barem blizu njega). Za više informacija o pull -down (ili pull -up) otpornicima ovdje je dubinski vodič:

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

Ovi otpornici možda nisu u potpunosti potrebni, ali ako dobivate "duhovite" pritiske, to je više nego vjerojatno uzrokovano kapacitivnom spregom, a otpornici na dolje to sprječavaju.

3). Žice kola

4). 5V i uzemljene žice

Za referencu upotrijebite priloženu sliku! nemojte se bojati promijeniti ga za svoje potrebe!

Korak 2: Kôd:

#include const int RECV_PIN = 7; // pin senzor za očitavanje IC senzora int Button1 = A4; // Najdalje lijevo int Button2 = A3; // 2. s lijeve strane int Button3 = A2; // Srednji int Button4 = A1; // 2. zdesna int Button5 = A0; // Najdalje desno od int LED = 3; // IC LED i crvena LED int val = 0; // Promjena vrijednosti IRsend irsend; IRrecv unrecv (RECV_PIN); decode_results rezultati;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, IZLAZ); Serial.begin (9600); unrecv.enableIRIn (); unrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // korištenje analognog čitanja umjesto digitalnog čitanja kako bi se izbjegli problemi s kapacitetom. takođe, pomaže u uklanjanju tastera. // Analogno očitavanje na 900 dozvoljava određeno kretanje u vrijednostima, što znači da će se infra signal poslati čak i ako se na pin ne primijeni punih 5 V. // ali 900 je dovoljno visoko da se ne čita pogrešno zbog kašnjenja kapacitivne sprege (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // promjenom vrijednosti u "i <3" promijenit će se broj trenutaka ponavljanja signala. pa će "i <2" dvaput ponoviti signal. // možda ćete se morati poigrati s ovim brojem ako vaš TV ne reagira, općenito, 1 ili 3 najviše rade, ako ne, pokušajte s neparnim brojevima. // možda ćete se morati poigrati i s vrijednostima vremena kašnjenja unutar signala, na primjer, za moj TV 10 radi, ali 30 ne. {irsend.sendSony (0xa90, 12); // Kôd za napajanje televizora Sony, za moj televizor, kôd je potrebno poslati 3x3, dakle 3 impulsa, tri odvojena vremenska kašnjenja (10); // "kašnjenje unutar signala" za (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" je broj bita, različiti protokoli pozivaju na različite brojeve bitova. NEC ima 32 godine, Sony ima 12 godina, možete potražiti ostale sa kašnjenjem (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); // Kašnjenje smanjivanja jačine zvuka na TV -u Sony (100);}}} kašnjenje (100);} ako (unrecv.decode (& rezultati)) // donji dio koda omogućuje vam tumačenje infracrvenih signala s različitih daljinskih upravljača. {Serial.println (results.value, HEX); // generirat će proceduru "NEC, Sony, Etc.." i TV kod "c90, a90, FF02FD" morat ćete dodati 0x na prednjoj strani prekidača TV koda (results.decode_type) {slučaj DENON: Serial.println ("DENON"); break; kućište NEC: Serial.println ("NEC"); break; slučaj PANASONIC: Serial.println ("PANASONIC"); break; kućište SONY: Serial.println ("SONY"); break; kućište RC5: Serial.println ("RC5"); break; kućište JVC: Serial.println ("JVC"); break; kućište SANYO: Serial.println ("SANYO"); break; kućište MITSUBISHI: Serial.println ("MITSUBISHI"); break; kućište SAMSUNG: Serial.println ("SAMSUNG"); break; kućište LG: Serial.println ("LG"); break; kućište RC6: Serial.println ("RC6"); break; kućište DISH: Serial.println ("DISH"); break; kućište SHARP: Serial.println ("SHARP"); break; slučaj WHYNTER: Serial.println ("WHYNTER"); break; slučaj AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); break; default: case UNKNOWN: Serial.println ("UNKNOWN"); break;} unrecv.resume ();}}

Korak 3: Dubinsko kodiranje: slanje IC signala

Ja ću pozivati na redove koda prema njihovom broju - da biste nastavili, koristite ovu vezu:

pastebin.com/AQr0fBLg

Prvo, moramo uključiti IR Remote Library od z3t0.

Evo linka do biblioteke:

github.com/z3t0/Arduino-IRremote

Ako vam je potreban vodič kako pravilno preuzeti biblioteku i instalirati je u IDE:

www.arduino.cc/en/guide/libraries

Prvi red uključuje biblioteku.

Zatim moramo deklarirati nekoliko varijabli, redovi 2-12 to čine.

Koristimo "cost int" za definiranje varijabli koje se neće promijeniti, sve osim jedne spadaju u ovu kategoriju.

Koristimo "int" za definiranje varijabli koje će se promijeniti.

Moramo koristiti pin sa impulsnom modulacijom (PWM) za naš LED pin - bilo koji pin koji ima "~" pored sebe će biti dovoljan, u mom kodu - koristimo digitalni pin 3.

Zatim moramo izvršiti određena podešavanja - ovaj kôd će se pokrenuti samo jednom kada se Arduino uključi ili resetira.

Primijetite da definiramo naše ulaze i izlaze (15-20), pokrećemo serijski monitor (21), omogućujemo IC senzor (22) i kažemo Arduinu da trepće ugrađenu LED diodu svaki put kad dobijemo signal u senzoru (23).

Zatim ćemo izgraditi našu petlju - ovaj kôd će se izvoditi više puta, idući od vrha do dna pregršt puta u sekundi.

U retku 25 koristimo if naredbu, koja govori Arduinu "potražite ovaj specifični kriterij, ako su ti kriteriji ispunjeni, učinite ovo posebno". U ovom slučaju, kriterij je analogRead (Button1)> 900, ili drugim riječima - "Arduino, Pogledaj dugme 1, koje smo ranije definirali kao pin A4, ako je primljeni analogni signal veći od 900, nastavite s našim sljedećim uputama, ako ne, nastavite dalje ". Ovdje se ima nešto za raspakirati, pa zaronimo: analogni signal na Arduinu je vrijednost jednaka ili manja od 5V, pri čemu je 5V jednako 1023, a 0V jednako 0. Svaki dati napon između 0 i 5V može se definirati sa broj, a uz malo matematike možemo shvatiti taj broj ili obrnuto, napon. Podijelite 1024 (uključujemo 0 kao jedinicu) sa 5, što nam daje 204.8. Na primjer, koristimo broj 900, da bismo to preveli u napon, jednostavno podijelimo 900 sa 204,8, dajući nam ~ 4,4 V. Kažemo Arduinu da traži napon veći od ~ 4,4 volti, i ako jeste, učinite sljedeće.

Govoreći o sljedećim uputama (redak 25), vidimo irsend.sendNEC (0xFF02FD, 32). Ovdje piše "Arduino, pošalji modulirani impuls koji slijedi NEC protokol, konkretno signal FF02FD, i pobrini se da ima 32 bita". Ovo će učiniti da naša IR LED dioda treperi na način koji drugi uređaji mogu razumjeti. Zamislite to pomalo kao Morzeovu azbuku, ali samo s nevidljivim svjetlom! Postoji mnogo različitih protokola, svaki sa stotinama, ako ne i hiljadama pojedinačnih signala, a svaki sa svojim specifičnim brojem bita - naš uređaj će moći prepoznati veliku količinu ovih signala, ali u to ćemo ući kasnije!

Na liniji 28 imamo prvo kašnjenje - ovo je ovdje radi sprječavanja nenamjernih ponavljajućih signala, nakon što pritisnete dugme i pošaljete IC signal, imamo 100 milisekundi da maknemo prst s dugmeta. ovo ne zvuči kao puno vremena, ali u praksi izgleda da radi dobro. funkcija kašnjenja govori Arduinu "ne radi ništa u milisekundama", a za referencu su 1000 milisekundi u sekundi.

Prelazimo na sljedeće dugme na redu 29, button5 (prvobitno sam imao 4 dugmeta na ovom daljinskom upravljaču, dodao sam peto, pa smo zato u kvaru). U duhu, to je isto što i dugme 1, ali s nekoliko ključnih razlika. Prva razlika koju ćete vidjeti je for naredba - ovo je u suštini druga petlja - petlja sa drugom većom petljom, loopception. Konkretno imamo "for (int i = 0; i <3; i ++)", čitajte ovo kao "Arduino, počnimo od 0, ponavljajte sljedeće upute dok ne dođemo do 3 puta". Funkcija for se koristi jer je puno uređaja programirano da traži ponovljeni signal, au našem slučaju 3 puta. Možete jednostavno promijeniti broj 3 u drugi broj ako vaš uređaj traži drugačiji raspored ponavljanja. Još jedna ključna razlika s gumbom 5 je ta što se ponavlja ponovo, 3 puta ili 3x3. Drugim riječima, šaljemo signal 3 puta, čekamo 10 milisekundi, šaljemo ga ponovo 3 puta, čekamo još 10 milisekundi, a zatim ga šaljemo još 3 puta. Ova vrsta komunikacije je uobičajena za uključivanje i isključivanje uređaja i može biti upravo ono što vaš televizor ili uređaj traže - ključ ovoga je poigravanje sa svim varijablama dok ne dobijete željeni rezultat. Promijenite vrijednost kratkog kašnjenja, promijenite vrijednost za ponavljanje, pošaljite 6 serija umjesto 3 itd. Uređaji su namjerno programirani sa proizvoljnim pravilima signala, zamislite je li vaš daljinski upravljač za televizor poslao isti tip signala kao i vaša zvučna traka; svaki put kad promijenite kanal na televizoru, zvučna traka će se isključiti - zato postoje različita pravila signala.

Sljedeća tri gumba programirana su s istim principima, barem djelomično, gore opisanim - tako da možemo preskočiti sve do reda 55.

Korak 4: Dubinsko kodiranje: primanje IC signala

Dubinski kod: primanje IC signala
Dubinski kod: primanje IC signala

Na liniji 55 počinjemo programirati Arduino za tumačenje IC signala koje šalju drugi daljinski upravljači - to je potrebno kako biste mogli shvatiti protokole i signale koje vaši daljinski upravljači koriste. Prvi red koda u retku 55 je if (unrecv.decode (& results) ovo pročitajte kao "Arduino, potražite IR kod, ako ga pronađete, vratite pravu vrijednost, ako ništa nije pronađeno, vratite false. Kad je tačno, zabilježite informacije u "rezultate" ".

Prelazimo na red 56, imamo Serial.println (results.value, HEX) koji kaže "Ardunio, odštampaj rezultate na serijskom monitoru u HEX formatu". Hex, što znači heksadecimalno, je način na koji možemo skratiti binarni niz (samo 0 i 1) u nešto što je lakše upisati. Na primjer, 101010010000 je "a90", kôd koji se koristi za uključivanje i isključivanje televizora, a 111111110000001011111101 je 0xFF02FD, koji kontrolira moju RGB traku. Možete koristiti gornji grafikon za pretvaranje binarnog u heksadecimalno i obrnuto, ili možete koristiti sljedeću vezu:

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

Sve do retka 57, imamo novu funkciju, koja se zove prekidač.

U suštini, prekidač nam omogućava da odredimo različite instrukcije na osnovu rezultata date varijable (slučaja). prekid napušta naredbu switch i koristi se na kraju svake naredbe.

Ovdje koristimo prekidač za promjenu načina štampanja na serijskom monitoru na osnovu protokola koje naš Arduino osjeća s različitih daljinskih upravljača.

Korak 5: Zaključak

Ako imate pitanje - slobodno mi se obratite ovdje! Drago mi je što ću vam pokušati pomoći koliko mogu.

Nadam se da ste naučili nešto što možete upotrijebiti za poboljšanje života!

-RB

Preporučuje se: