Sadržaj:
- Pribor
- Korak 1: Izgradnja kruga:
- 2. korak: Kôd:
- Korak 3: Dubinsko kodiranje: slanje IC signala
- Korak 4: Dubinski kod: primanje IC signala
- Korak 5: Zaključak
Video: Univerzalni daljinski upravljač za TV - Ardiuino, infracrveni: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
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 inspiriralo za izgradnju ovog daljinskog upravljača - 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 (također sam i stolar) - ne mogu izgubiti daljinski ako je dio mog okvira kreveta!
Pribor
Stvari koje trebate: -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)
-Komperice različitih boja i duljina
-Trenutni gumbi (5) (možete dodati još gumba, ali ćete morati koristiti digitalne pinove jer se koriste sve osim 1 analogne pinove - morat ćete provjeriti jeste li ispravno koristili otpornike za podizanje ili povucite otpornike prema dolje i otpustite tipke)
-10K ohmski 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)
(Opcionalno) Lemilica, lem, lemni fluks.
Korak 1: Izgradnja kruga:
1). Uvijek volim početi s postavljanjem svojih komponenti jer to uvijek pokreće raspored na ploči.
-Pritisnite gumbe
-LEDs: LED i IR LED su povezane u tandemu, tako da možete vidjeti što IR LED radi.
-Senzor
2). Otpornici
- Pet 10K otpornika koje smo pričvrstili na gumbe nazivamo "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 otpornicima za povlačenje (ili podizanje) 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 spojnicom, a otpornici na dolje to sprječavaju.
3). Žice kruga
4). 5V i uzemljene žice
Za referencu upotrijebite priloženu sliku! ne bojte se to promijeniti za svoje potrebe!
2. korak: 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 gumb 4 = A1; // 2. desno int Button5 = A0; // Najdalje desno od int LED = 3; // IR LED & Red LED int val = 0; // Promjena vrijednosti IRsend irsend; IRrecv unrecv (RECV_PIN); decode_results rezultate;
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đer, pomaže u otklanjanju gumba. // Analogno očitavanje na 900 dopušta malo prostora za pomicanje, š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 ++) // mijenjanjem 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š televizor 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 s 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 smanjenja glasnoće Sony TV -a (100);}}} kašnjenje (100);} if (unrecv.decode (& results)) // donji dio koda omogućuje vam tumačenje infracrvenih signala s različitih daljinskih upravljača. {Serial.println (results.value, HEX); // generirat će postupak "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"); pauza; slučaj NEC: Serial.println ("NEC"); pauza; slučaj PANASONIC: Serial.println ("PANASONIC"); pauza; kućište SONY: Serial.println ("SONY"); pauza; kućište RC5: Serial.println ("RC5"); pauza; kućište JVC: Serial.println ("JVC"); pauza; kućište SANYO: Serial.println ("SANYO"); pauza; kućište MITSUBISHI: Serial.println ("MITSUBISHI"); pauza; kućište SAMSUNG: Serial.println ("SAMSUNG"); pauza; kućište LG: Serial.println ("LG"); pauza; kućište RC6: Serial.println ("RC6"); pauza; kućište DISH: Serial.println ("DISH"); pauza; kućište SHARP: Serial.println ("SHARP"); pauza; slučaj WHYNTER: Serial.println ("WHYNTER"); pauza; slučaj AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); pauza; default: velika slova UNKNOWN: Serial.println ("UNKNOWN"); break;} unrecv.resume ();}}
Korak 3: Dubinsko kodiranje: slanje IC signala
Ja ću se pozivati na retke koda prema njihovom broju retka - da biste nastavili, koristite ovu vezu:
pastebin.com/AQr0fBLg
Prvo, moramo uključiti IR Remote Library do z3t0.
Evo veze 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
1. redak uključuje knjižnicu.
Zatim moramo deklarirati nekoliko varijabli, a 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 s impulsnom modulacijom (PWM) za naš LED pin - svaki pin koji ima "~" pored sebe bit će dovoljan, u mom kodu - koristimo digitalni pin 3.
Zatim moramo napraviti neke postavke - ovaj kôd će se pokrenuti samo jednom kada se Arduino uključi ili resetira.
Uočite 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 kad god 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 "tražite ove specifične kriterije, ako su ti kriteriji ispunjeni, učinite ovo posebno". U ovom slučaju kriterij je analogRead (Button1)> 900, ili drugim riječima - "Arduino, pogledaj gumb1, koji 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 vrijednost je jednaka ili manja od 5 V, pri čemu je 5 V jednako 1023, a 0V jednako 0. Svaki zadani napon između 0 i 5 V može se definirati pomoću broj, a uz malo matematike možemo shvatiti taj broj ili obrnuto, napon. Podijelimo 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 jest, 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, točnije signal FF02FD, i pobrini se da ima 32 bita". Zbog toga će naša IR LED dioda treperiti na način koji drugi uređaji mogu razumjeti. Zamislite to pomalo poput Morseove abecede, ali samo s nevidljivim svjetlom! Postoji mnogo različitih protokola, svaki sa stotinama, ako ne i tisućama pojedinačnih signala, a svaki sa svojim specifičnim brojem bitova - naš će uređaj moći prepoznati veliku količinu tih 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 gumb i pošaljete IC signal, imamo 100 milisekundi da maknemo prst s gumba. ovo ne zvuči kao puno vremena, ali u praksi se čini 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ći gumb na retku 29, gumb5 (prvotno sam imao 4 gumba na ovom daljinskom upravljaču, dodao sam peti, pa smo zato u kvaru). U duhu, to je isto što i gumb 1, ali s nekoliko ključnih razlika. Prva razlika koju ćete vidjeti je naredba for - ovo je u biti druga petlja - petlja s drugom većom petljom, loopception. Konkretno imamo "for (int i = 0; i <3; i ++)", čitajte ovo kao "Arduino, počnimo s 0, ponavljajte sljedeće upute dok ne dođemo do 3 puta". Funkcija for koristi se jer je mnogo 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 opet, 3 puta ili 3x3. Drugim riječima, signal šaljemo 3 puta, čekamo 10 milisekundi, šaljemo ga ponovno 3 puta, čekamo još 10 milisekundi, a zatim ga šaljemo ponovno 3 puta. Ova vrsta komunikacije uobičajena je za uključivanje i isključivanje uređaja i može biti upravo ono što vaš televizor ili uređaj traže - ključ toga 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 s proizvoljnim pravilima signala, zamislite je li vaš daljinski upravljač za televizor poslao signal iste vrste 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 retka 55.
Korak 4: Dubinski kod: primanje IC signala
Na retku 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 koriste vaši daljinski upravljači. Prvi redak koda u retku 55 je if (unrecv.decode (& results) pročitajte ovo kao "Arduino, potražite IR kod, ako ga pronađete, vratite pravu vrijednost, ako ništa nije pronađeno, vratite false. Kad je točno, zabilježite informacije u "rezultate" ".
Prelazimo na redak 56, imamo Serial.println (results.value, HEX) koji kaže "Ardunio, ispišite rezultate na serijskom monitoru u HEX formatu". Hex, što znači heksadecimalno, način je 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 isključivanje i uključ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 upotrijebiti sljedeću vezu:
www.rapidtables.com/convert/number/hex-to-…
Do retka 57, imamo novu funkciju, koja se zove prekidač.
U biti, slučaj prekidača omogućuje nam specificiranje različitih uputa na temelju rezultata zadane varijable (slučaja). prekid napušta naredbu switch i koristi se na kraju svake naredbe.
Ovdje koristimo prekidač za promjenu načina ispisa na serijskom monitoru na temelju protokola koje naša Arduino osjetila 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 najbolje što mogu.
Nadam se da ste naučili nešto što možete upotrijebiti za poboljšanje života!
-RB
Preporučeni:
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ćanske aparate poput AC -a, TV -a, DVD playera, glazbenog sustava, SMART uređaja !!! Napravio je čitavo smeće udaljenog smeća okolo, čineći nas zagonetkama !!! Ovaj će nas projekt 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! Prilično sam 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
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: 6 koraka
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: Ako ste ikada izgubili daljinski upravljač za televizor ili DVD uređaj, znate koliko je frustrirajuće morati hodati do, pronaći i koristiti gumbe na samom uređaju. Ponekad ti gumbi čak ne nude istu funkcionalnost kao daljinski. Primiti
Infracrveni klima uređaj za mobilne telefone Daljinski upravljač DIY Proizvodnja: 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 neugodna stvar. U doba kada ovaj mobilni telefon ne odlazi, možete li ga koristiti kao
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 točno vrijeme IC paketa prilično zahtjevno i