Sadržaj:
- Supplies
- Korak 1: Izgradnja kruga:
- Korak 2: Kôd:
- Korak 3: Dubinsko kodiranje: slanje IC signala
- Korak 4: Dubinsko kodiranje: primanje IC signala
- Korak 5: Zaključak
Video: Univerzalni daljinski za TV - Ardiuino, infracrveni: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:05
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:
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
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:
Univerzalni daljinski upravljač pomoću ESP8266 (Wifi kontroliran): 6 koraka (sa slikama)
Univerzalni daljinski upravljač pomoću ESP8266 (Wifi kontroliran): Ovaj projekt namjerava zamijeniti konvencionalni daljinski upravljač za sve kućne aparate poput AC -a, TV -a, DVD playera, muzičkog sistema, SMART uređaja !!! Praveći čitavo smeće udaljenog smeća okolo, čineći nas zagonetkom !!! Ovaj projekat će nas spasiti od
Univerzalni daljinski upravljač kontroliran pokretima s Node-MCU: 12 koraka
Univerzalni daljinski upravljač kontroliran pokretima s Node-MCU: Pozdrav svima i dobrodošli u ovaj projekt! Ja sam prilično lijena osoba, a noćna mora lijene osobe je gledati televiziju kad shvatite da je daljinski upravljač predaleko! Shvatio sam da moj daljinski nikada neće biti predaleko ako ga imam pri ruci
Infracrveni klima uređaj za mobilne telefone Daljinski upravljač Uradi sam: 7 koraka
Infracrveni klima uređaj za mobilne telefone Daljinski upravljač DIY Proizvodnja: U vrućem ljetu, kad idete kući ili u ured, želite uključiti klima uređaj, ali neko vrijeme ne možete pronaći daljinski upravljač. To je vrlo dosadna stvar. U doba kada ovaj mobilni telefon ne odlazi, možete li ga koristiti kao
Infracrveni daljinski i IC prijemnik (TSOP1738) sa Arduinom: 10 koraka
Infracrveni daljinski i IC prijemnik (TSOP1738) s Arduinom: Ovo uputstvo je za Arduino početnike. Ovo je jedan od mojih ranijih projekata s Arduinom. Mnogo sam uživao kad sam to napravio i nadam se da će se i vama svideti. Najatraktivnija karakteristika ovog projekta je “ Bežična kontrola ”. A to je
I2C Infracrveni daljinski upravljač s Arduinom: 8 koraka (sa slikama)
I2C InfraRed daljinski upravljač s Arduinom: PreambleOva uputstva detaljno opisuju kako stvoriti univerzalni daljinski upravljač koristeći I2C za sučelje. Koliko čudno kažete da koristite I2C slave uređaj? Da, I2C slave uređaj. To je zato što je precizno vrijeme IC paketa prilično zahtjevno i