Dom

Spojite daljinski upravljač na arduino. Upravljanje arduinom pomoću IR daljinskog upravljača. Primjer rada u Arduino okruženju

Na internetu postoji mnogo članaka o tome kako napraviti vlastiti daljinski upravljač za televizor pomoću Arduina, ali trebao mi je univerzalni daljinski upravljač za upravljanje televizorom i media playerom. Glavna prednost mog univerzalnog daljinskog upravljača je što su tipke u Android telefonskoj aplikaciji dvonamjenske, ali pogledajte video.



Daljinski upravljač je vrlo prikladan jer se gotovo isti gumbi na ekranu koriste za upravljanje televizorom i uređajem. Jedna je razlika u tome što " AV"u načinu upravljanja televizorom mijenja se u gumb" " (stop) kada prelazite na način upravljanja uređajem. Slike prikazuju dva načina rada, lijevo je način upravljanja televizorom, desno je način upravljanja uređajem.

Pa, sada ću vam reći nešto o stvaranju takvog daljinskog upravljača. Za uređaj sam koristio daljinski upravljač za ERGO TV i daljinski upravljač za DUNE HD TV101W media player.

Za primanje podataka s daljinskih upravljača koje sam koristio infracrveni senzor TSOP1138 (analog TSOP4838) na radnoj frekvenciji od 38 kHz i spojio ga na Arduino ploču prema shemi:

Ova skica neće biti potrebna za određivanje kodiranja prijenosa podataka i čitanje koda gumba daljinskog upravljača.

Na skici u retku int RECV_PIN = 11; označite naš pin broj 4

Nakon učitavanja skice otvorite "port monitor" i pritiskom na tipke daljinskog upravljača pogledajte primljene podatke.

Slika prikazuje primjer skeniranja gumba za uključivanje s daljinskog upravljača TV-a i daljinskog upravljača playera. Sada stvaramo tablicu za kodove gumba.

Dobio sam ga kao na slici iznad. Ispod natpisa televizor kodovi gumba daljinskog upravljača televizora; ispod natpisa Igrač- kodovi s daljinskog upravljača media playera.

Sada odspojimo naš infracrveni prijemnik signala s Arduino ploče i na njega spojimo HC-05 Bluetooth modul i infracrvenu LED diodu prema dijagramu na fotografiji.

Nakon toga prelazimo izravno na skicu.

Skica

#uključi IRsend irsend; int y = 1; void setup() ( Serial.begin(9600); ) void loop() ( if (Serial.available() > 0) ( int x = Serial.read(); if (x == 49) ( y = 1; ) if (x == 50) ( y = 2; ) if (y == 1) ( // kodovi gumba za daljinski upravljač if (x == 97) ( irsend.sendNEC(0x807F08F7, 32); delay(40) ); ) if (x == 98) ( irsend.sendNEC(0x807FA857, 32); delay(40); ) if (x == 99) ( irsend.sendNEC(0x807F708F, 32); delay(40); ) if (x == 100) (irsend.sendNEC(0x807FF00F, 32); delay(40); ) if (x == 101) (irsend.sendNEC(0x807F30CF, 32); delay(40); ) if (x == 102) ( irsend.sendNEC(0x807FB04F, 32); delay(40); ) if (x == 103) ( irsend.sendNEC(0x807F9867, 32); delay(40); ) if (x == 104) ( irsend .sendNEC(0x807F58A7, 32); delay(40); ) if (x == 105) ( irsend.sendNEC(0x807FD827, 32); delay(40); ) if (x == 106) ( irsend.sendNEC(0x807F38C7) , 32); odgoda(40); ) ako (x == 107) ( irsend.sendNEC(0x807F48B7, 32); odgoda(40); ) ako (x == 108) ( irsend.sendNEC(0x807FB847, 32); odgoda(40); ) if (x == 109) ( irsend.sendNEC(0x807F6897, 32); kašnjenje(40); ) ) if (y == 2) ( //kodovi gumba daljinskog upravljača media playera if (x == 97) ( irsend.sendNEC(0xFDC23D, 32); delay(40); ) if (x == 98) ( irsend. sendNEC(0xFDE01F, 32); delay(40); ) if (x == 99) ( irsend.sendNEC(0xFD18E7, 32); delay(40); ) if (x == 100) ( irsend.sendNEC (0xFDE817, 32); odgoda(40); ) ako (x == 101) ( irsend.sendNEC(0xFDA857, 32); odgoda(40); ) ako (x == 102) ( irsend.sendNEC(0xFD6897, 32) ); odgoda (40); ) ako (x == 103) ( irsend.sendNEC(0xFDA857, 32); odgoda(40); ) ako (x == 104) ( irsend.sendNEC(0xFD6897, 32); odgoda( 40); ) if (x == 105) (irsend.sendNEC(0xFDE817, 32); delay(40); ) if (x == 106) (irsend.sendNEC(0xFD18E7, 32); delay(40); ) if (x == 107) (irsend.sendNEC(0xFD9867, 32); delay(40); ) if (x == 108) (irsend.sendNEC(0xFD28D7, 32); delay(40); ) if (x = = 109) (irsend.sendNEC(0xFD20DF, 32); odgoda(40); ) ) ) )


U skici ćete morati urediti kodove gumba, naime u redovima:

If (x == 97) (irsend.sendNEC(0x807F08F7, 32); kašnjenje(40);
Promijenite vrijednost 807F08F7 u:

If (y == 1) ( //kodovi gumba za daljinski upravljač TV-a if (x == 97) ( irsend.sendNEC(0x12345678, 32); delay(40); )
Gdje je 12345678 kod za vaš gumb.

Nakon uređivanja skice koristeći svoje kodove gumba, prenesite skicu na Arduino ploču i nastavite s instaliranjem aplikacije na svom telefonu.

Uključujemo Bluetooth u telefonu, tražimo svoj uređaj, stvaramo par, zatim pokrećemo aplikaciju Pult na telefonu.

Nakon pokretanja imat ćemo ekran s crvenom bluetooth ikonom u donjem desnom kutu, što signalizira da nismo spojeni na svoj uređaj.

Nakon toga kliknite na ovu ikonu. Trebali bismo vidjeti prozor s popisom svih dostupnih bluetooth uređaji, gdje odabiremo svoj uređaj za povezivanje.

Sada se vraćamo na glavni ekran i već možemo kontrolirati TV:

Za prebacivanje u način upravljanja trebamo pritisnuti gumb s oznakom "Igrač". Kao što sam ranije rekao, naš gumb s oznakom "AV" promijenit će se u gumb " ":

Za prekid veze s našim uređajem jednostavno držite pritisnutu tipku "Power" nekoliko sekundi.

Pa, nekoliko fotografija mog gotovog uređaja.

Ispalo je sasvim dobro, čini se. Čekam komentare na članak.

Modul IR prijemnika u kombinaciji s IR daljinskim upravljačem omogućit će vam jednostavnu implementaciju daljinskog upravljanja Arduino ploča.

To nije ništa više od VS1838B IR prijemnika s kabelskim snopom koji preporučuje proizvođač instaliranim na ploči.

Za rad s ovim modulom izvan kutije potreban vam je daljinski upravljač s frekvencijom od 38 kHz.

Prednost ove ploče je push-in konektor, koji vam omogućuje da zamijenite IR prijemnik s drugim koji radi na frekvenciji potrebnoj za vaš projekt bez lemljenja.

Glavne tehničke karakteristike:

Napon napajanja: 2,7 - 5,5V

Frekvencija modulacije: 38kHz

Raspon temperature: - 20 ... + 80°C

Sučelje: Digitalno

Spajanje na Arduino

Modul je opremljen tropinskim 2,54 mm konektorom

: spaja se na GND pin

: spaja se na +5V izlaz

: spaja se na digitalni pin (D2 u primjeru)

Primjer rada u Arduino okruženju

Za rad s ovim modulom morate instalirati biblioteku IRRemote

Preuzmite, raspakirajte i stavite u mapu knjižnica u mapi Arduino. Ako je Arduino IDE bio otvoren u trenutku dodavanja biblioteke, ponovno pokrenite okruženje.

Očitavanje tipki daljinskog upravljača

Za čitanje očitanja daljinskog upravljača ispunite skicu u nastavku. Izbacit će kodiranje pritisnutih tipki na priključak.

Kao primjer ćemo koristiti daljinski upravljač, kao na slici, jer Ovaj tip daljinskog upravljača je uključen u set

O razlikama u logici rada raznih daljinskih upravljača možete pročitati u originalnom članku člana naše zajednice pod nadimkom

Primjer programski kod:

#uključi int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); //Kreirajte objekt za primanje signala s određenog porta decode_results rezultati; //Varijabla koja pohranjuje rezultat poništiti postaviti () { Serijski // Početak primanja) ništavan petlja() ( if (irrecv.decode(&results)) //Prilikom primanja signala... { Serijski.println(rezultati.vrijednost); //...ispišite njegovu vrijednost serijski priključak irrecv.resume(); ) )

Na monitoru porta trebali biste vidjeti sljedeće:

Držanjem svake tipke gotovo sekundu dobivamo 10-ak kodova. Prvi je kod gumba. A nakon toga počinje se pojavljivati ​​standardni kod koji javlja da je gumb zaglavljen.

Upravljanje Arduino pločom daljinskim upravljačem

Neka LED na Arduino ploči (D13) zasvijetli kada je prvi gumb kodiran i ugasi se kada je drugi gumb kodiran.

Primjer koda:

// Testirano na Arduino IDE 1.0.3#uključi int RECV_PIN = 2; int LED = 13; IRrecv irrecv(RECV_PIN); decode_results rezultati; poništiti postaviti () { Serijski.početak(9600); irrecv.enableIRIn(); // Pokretanje prijemnika pinMode(LED, IZLAZ); ) ništavan petlja() ( if (irrecv.decode(&results)) ( Serijski.println(rezultati.vrijednost); ako (rezultati.vrijednost == 16769565) // Prilikom primanja kodiranja 1( digitalWrite(LED, HIGH); // Uključite LED) ako (rezultati.vrijednost == 16761405) // Prilikom primanja kodiranja 2( digitalWrite(LED, LOW); // Isključite LED) irrecv.resume(); // Dobivanje sljedeće vrijednosti } }

Današnji članak će se baviti spajanjem TSOP34836 IR prijemnika na Aduino UNO ploču. U te svrhe možete koristiti bilo koji prijemnik koji imate i koji je frekvencijski kompatibilan s vašim daljinskim upravljačem. Raspored pinova prikazan je na slici.

1. Vout – izlaz prijemnika.
2. GND – “zemlja”, zajednička žica.
3. Vcc – napajanje.
Prijenos podataka od IR daljinskog upravljača do prijemnika odvija se pomoću RC5 protokola, koji je niz impulsa. Spajanje se izvodi prema sljedećoj shemi.

I nakon prikupljanja dobivamo nešto poput ovoga:

Za obradu podataka koje prenosi daljinski upravljač koristimo biblioteku IRremote, ta je biblioteka priložena članku. Zalijepite sljedeći kod:

#include "IRremote.h" IRrecv irrecv(11); // Navedite pin na koji je prijamnik spojen decode_results results; void setup() ( Serial.begin(9600); // Postavite brzinu COM porta irrecv.enableIRIn(); // Počnite primati ) void loop() ( if (irrecv.decode(&results)) // Ako podaci stigao ( Serial .println(results.value, HEX); // Pošalji primljene podatke na konzolu irrecv.resume(); // Prihvati sljedeću naredbu ) )

Sada u konzoli COM porta možete vidjeti kod pritisnute tipke u HEX formatu.


To je sve, sada možete koristiti ovaj sklop u svojim uređajima. Ispod je primjer jednog praktične aplikacije IR prijemnik.

Kao demonstracija, bit će prikazano kako upravljati servom pomoću IR daljinskog upravljača.

Dijagram uređaja:

Ovako bi to trebalo izgledati:

Za upravljanje uređajem koristimo sljedeći kod:

#include "Servo.h" #include "IRremote.h" IRrecv irrecv(11); decode_results rezultati; Servo servoMain; int servPoz = 90; //Početni položaj servo int lastPoz = 0; void setup() ( irrecv.enableIRIn(); servoMain.attach(10); // Servo je priključen na pin 10 servoMain.write(servPoz); ) void loop() ( if (irrecv.decode(&results)) ( int res = results.value; Serial.println(res, HEX); if(res==0xFFFF906F) // Ako se pritisne gumb "+" ( lastPoz=res; servPoz++; servoMain.write(servPoz); ) else if( res== 0xFFFFA857) // Ako se pritisne gumb "-" ( servPoz--; lastPoz=res; servoMain.write(servPoz); ) else if(res==0xFFFFFFFF) // Ako se gumb drži ( if( lastPoz==0xFFFF906F) servPoz++; // Drži "+" if(lastPoz==0xFFFFA857) servPoz--;// Drži "-" servoMain.write(servPoz); ) irrecv.resume(); delay(100); ) )

Daljinski upravljač koji se koristi je neka vrsta kineskog, kada pritisnete "+" servo se okreće u jednom smjeru, kada pritisnete "-" okreće se u drugom smjeru.



Što još čitati