2024. április 16., kedd

Gyorskeresés

PC médialejátszó vezérlése távirányítóval

Írta: |

[ ÚJ BEJEGYZÉS ]

Aki számítógépen nézi kedvenc filmjeit bizonyára találkozott már azzal a bosszantó esettel, hogy elindítja kedvenc filmjét a számítógépen, kényelmesen elhelyezkedik az ágyban, popcorn és kóla a kézben, majd az első párbeszédnél véget is ér ez az idilli pillanat mikor kiderül, a film nem a kívánt nyelven indult el és fel kell kelni a probléma orvoslására.
Vannak, akiknek vezeték nélküli egere van, vagy valamilyen alternatív WiFi-s okostelefonos egér alkalmazást használnak ennek kiküszöbölésére, azonban tapasztalataim szerint ezek nagy része párosítást igényel, lassú, akadozik, folyton leszakad vagy csak egyszerűen túl kicsi már az egérmutató ahhoz, hogy látható legyen, vagyis kényelmetlen megoldás. Erre a feladatra vitathatatlanul egy távirányító a legalkalmasabb eszköz, mely minden esetben működik és megszokás után a gombok könnyű kezelhetőséget biztosítanak még vaksötétben is. Írásom azt mutatja meg, hogy én személy szerint hogyan is valósítottam meg ezt egy otthon talált régi távirányító és egy Arduino segítségével kb. 1200Ft-ból.

Nagyjából két éve berendeltem magamnak első Arduino panelem, amivel hobbi szinten azóta is szívesen töltöm a szabadidőm és fejlesztem tudásom, valamint néhány otthoni projekt (napkollektor szivattyú vezérlés és hőmérséklet logolás majd neten elérés, digitális óra, quadcopter) is megvalósult már vele. Legutóbb pedig ez a vevő egység, melyet nagy megelégedéssel használok azóta is és amit szerintem több vállalkozó kedvű is fog még rajtam kívül. A dolgokat netről ollóztam össze több forrásból, így nem teljesen saját az ötlet. A leírást igyekeztem úgy megírni, hogy aki egyik eszközzel sem rendelkezik, illetve az Arduino programozásának menetét sem ismeri de kedvet kapott, az is boldoguljon vele.

Szükséges alkatrészek

- Arduino Micro/ Leonardo: Ezek a típusok HID képesek. Ebay-en beszerezhetők kb. 1100Ft-ért.
- Infra vevő: A távirányító jeleinek felfogására. Ebay-ről szintén beszerezhető, ára nagyjából 200Ft.
- infra távirányító: különösebb magyarázatot azt hiszem nem igényel, manapság lassan minden háztartásból kikopnak a képcsöves TV-k, ám a távirányító csak ritkán, szóval valószínűleg a legtöbb háztartásban azért találni egyet a fiók mélyén.
- LED: Opcionális, visszajelzésre használható, de az Arduino maga is alkalmas lehet.
- micro USB kábel: Szerencsésebb esetben az Arduino mellé adnak, de bármely régebbi telefon kommunikációra alkalmas micro USB kábele alkalmas.
- Szerelési segédanyagok: forrasztó, forrasztóón, vezeték, zsugorcső

Szerelés

A fenti ábrát követve mindössze néhány apró forrasztásra lesz szükségünk hogy összeálljon a vevőegység. Az infra vevőt szemből nézve a bal oldali láb a jel, ez tetszőleges, csak számmal ellátott bemenetre köthető. A középső a GND, ami a GND feliratú pin valamelyikére csatlakozik. A jobb oldali a tápfeszültség lába, ezt a panel Vcc pinjére kell csatlakoztatni, hogy a szükséges 5V-os tápfeszt biztosítsuk.
A visszajelző LED esetében a lapított oldal felöli láb a negatív pólus, ezt a GND-re kell kötni, a másik láb pedig egy ellenálláson keresztül valamelyik D jelzésű pinhez csatlakozzon. Mivel számomra elég egy szolid kis visszajelzés a távirányító jelének vételéről, egy 22KΩ-os ellenállást választottam. Ha valaki nagyobb fényerőt szeretne, használhat kisebbet, ezt mindenkinek a saját igényei szerint kell kikísérletezni.
A biztonság kedvéért zsugorcsöveztem is a lábakat ott, ahol rövidzár lehetséges, ez sima szigetelő szalaggal is megoldható ha nincs kéznél.

Programmódosítás és feltöltés

Első lépésként be kell szerezni az Arduino IDE-t a hivatalos weboldalról. Válasszunk az oprendszerünknek megfelelő verziót. Telepítésnél fontos hogy a driverek telepítése legyen bepipálva. Amint kész, indíthatjuk is. Szükségünk lesz a programban felhasznált IRremote library-re. A letöltött ZIP-et a Vázlat/ Könyvtár tartalmazása/ .ZIP könyvtár hozzáadása... menü alatt tallózhatjuk be ami ezután "települ".
Definiálni kell a saját boardunkat a programban. A Fájl menü Beállítások pontjánál másoljuk be a További alaplapkezelő URL-ek után ezt a linket.
Ekkor az Eszközök/ Alaplap/ Alaplap kezelő menüt megnyitva, majd a kereső mezőbe a Sparkfun szót beírva meg kell jelenjen a találati listában egy SparkFun AVR Boards elnevezésű alaplapcsomag. Kattintsunk rá és telepítsük. Csatlakoztatás után az eszközkezelőben megnézhetjük melyik soros porton található az Arduino.

Válasszuk ki az alaplapunkat az Eszközök/ Alaplap menüpont alatt, esetemben ez a SparkFun Pro Micro, portnak pedig adjuk meg a fenti képen látható portot. A processzor órajelét az alaplapon található kvarckristályról tudjuk leolvasni. Másoljuk be az alábbi kódot, ez lesz az, amit majd mindenkinek a saját távirányítójához kell igazítani. Ne felejtsük a megfelelő pin számát beírni a program elején, amelyre a LED és a vevő csatlakoztatva lett.

#include <IRremote.h>
#include <Keyboard.h>
int RECV_PIN = 13 ; // infra LED pin
int LED_PIN = 2 ; // visszajelző LED pin
IRrecv irrecv(RECV_PIN);
decode_results results;

//=========== TÁVIRÁNYÍTÓ GOMBJAI =============//

#define EXIT 16767525 //POWER
#define MUTE 16736415 //MUTE

#define ENTER 16747125 //PLAY
#define RIGHT 16759365 //SMALL FORWARD
#define LEFT 16757325 //SMALL BACKWARD
#define RIGHTARROW 16722645 //RIGHT ARROW
#define LEFTARROW 16720605 //LEFT ARROW
#define UP 16755285 //VOLUME UP
#define DOWN 16749165 //VOLUME DOWN

#define SUBT 16712445 //HIDE SUBTITLE
#define SEARCH 16734375 //SUBTITLE LANGUAGE
#define AUDIO 16773135 //AUDIO LANGUAGE

#define PLAY 16724685 //PLAY
#define PAUSE 16716525 //PAUSE
#define ZOOM 16743045 //FSCREEN
#define NEXT 16758855 //NEXT
#define PREV 16754775 //PREVIOUS

//=========== GOMBKOMBINÁCIÓK DEFINIÁLÁSA =============//

#define PLAY_FUN Keyboard.press(32); Keyboard.releaseAll();
#define MUTE_FUN Keyboard.write('m'); Keyboard.releaseAll();
#define VOLUME_UP_FUN Keyboard.press(KEY_UP_ARROW); delay(100); Keyboard.releaseAll();
#define VOLUME_DN_FUN Keyboard.press(KEY_DOWN_ARROW); delay(100); Keyboard.releaseAll();
#define JBWD_FUN Keyboard.press(KEY_LEFT_CTRL ); Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_LEFT_ARROW); delay(100); Keyboard.releaseAll();
#define JFWD_FUN Keyboard.press(KEY_LEFT_CTRL ); Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_RIGHT_ARROW); delay(100); Keyboard.releaseAll();
#define FWD_FUN Keyboard.press(KEY_RIGHT_ARROW); delay(100); Keyboard.releaseAll();
#define BWD_FUN Keyboard.press(KEY_LEFT_ARROW); delay(100); Keyboard.releaseAll();
#define SUBT_HIDE_FUN Keyboard.press(KEY_LEFT_ALT); Keyboard.write('h'); delay(100); Keyboard.releaseAll();
#define SUBT_CHANGE_FUN Keyboard.press(KEY_LEFT_ALT); Keyboard.write('l'); delay(100); Keyboard.releaseAll();
#define LANG_CHANGE_FUN Keyboard.press(KEY_LEFT_ALT); Keyboard.write('a'); delay(100); Keyboard.releaseAll();
#define FSCREEN_FUN Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll();
#define EXIT_FUN Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_F4); delay(100); Keyboard.releaseAll();
#define ENTER_FUN Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll();
#define NEXT_FUN Keyboard.press(KEY_PAGE_UP); delay(100); Keyboard.releaseAll();
#define PREV_FUN Keyboard.press(KEY_PAGE_DOWN); delay(100); Keyboard.releaseAll();

//=============== SETUP =================//
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(LED_PIN, OUTPUT);
Keyboard.begin();
}

void loop() {
if (irrecv.decode(&results))
{
digitalWrite(LED_PIN,1);

//=================== FUNKCIÓ RENDELÉSE A GOMBOKHOZ ====================//

if (results.value==EXIT) {EXIT_FUN; }
else if (results.value==MUTE) {MUTE_FUN; }
else if (results.value==ENTER) {PLAY_FUN; }
else if (results.value==RIGHT) {FWD_FUN; }
else if (results.value==LEFT) {BWD_FUN; }
else if (results.value==RIGHTARROW) {JFWD_FUN; }
else if (results.value==LEFTARROW) {JBWD_FUN; }
else if (results.value==UP) {VOLUME_UP_FUN; }
else if (results.value==DOWN) {VOLUME_DN_FUN; }
else if (results.value==SUBT) {SUBT_HIDE_FUN; }
else if (results.value==SEARCH) {SUBT_CHANGE_FUN; }
else if (results.value==AUDIO) {LANG_CHANGE_FUN; }
else if (results.value==PLAY) {PLAY_FUN; }
else if (results.value==PAUSE) {PLAY_FUN; }
else if (results.value==ZOOM) {ENTER_FUN; }
else if (results.value==NEXT) {NEXT_FUN; }
else if (results.value==PREV) {PREV_FUN; }


Serial.println(results.value, DEC); // gomb kód kiküldése a soros portra
delay(50);
digitalWrite(LED_PIN,0);
irrecv.resume();
}
}

Nyomjunk a bal felső sarokban lévő pipára, ezzel a program lefordítódik ha minden rendben van.Töltsük fel a programot az Arduino-ra a CTRL + U billentyűkombinációval, ez pár másodperc alatt megtörténik.
Feltöltés után tapasztalataim szerint szükséges a panel újracsatlakoztatása a korrekt működéshez.

Nyissuk meg a soros monitort a jobb felső sarokban lévő nagyítóval, lent pedig állítsuk be a sebességet 9600 baud-ra. Nyomjunk meg egy tetszőleges gombot a távirányítón és meg kell hogy jelenjen a gombhoz tartozó szám a soros monitoron. Amelyik gombokat használni szeretnénk, azt a programban a TÁVIRÁNYÍTÓ GOMBJAI résznél tudjuk definiálni.
A GOMBKOMBINÁCIÓK DEFINIÁLÁSA rész felelős a médialejátszó programunk billentyűkombinációinak megadására, ezeket mindenki megtalálja az általa használt médialejátszó program beállításaiban. Én PotPLayert használok egy ideje, ahol a space felelős a lejátszás indításáért és megállításáért, így esetemben a PLAY_FUN sor definiálja a billentyű lenyomását. (32 a space ASCII kódja) További gombokról itt található infó.
Végül annyi a dolgunk, hogy megmondjuk melyik gomb lenyomására milyen billentyűkombinációt küldjön el az Arduino a számítógépre. Ezt a FUNKCIÓ RENDELÉSE A GOMBOKHOZ résznél egy egy újabb sor beiktatásával és módosításával tehetjük meg.

Végül következzen egy rövid kis videó a működésről kedvcsináló gyanánt. Sikeres építést kívánok!

Hozzászólások

(#1) Dark Archon


Dark Archon
addikt

Ez egy igen hasznos írás... annak, aki rálát a gépére a tévé előtt :) Ugyanezt rádiós kommunikációval tervezed megoldani? Bár 10 fontért komplett billentyűzetet hozzávágnak az emberhez ebay-en, egér irányítással, stb.

Dark Archon | i5-12600KF - RTX 3070 | Cube Nature EXC | Canyon Endurace 7 | BF4: DarkArchonHUN

(#2) bzoley


bzoley
veterán

Ez egy kicsit túl van bonyolítva. Egy soros porti(ha elérhető) vevő szinte ingyen van. Aki meg kevésbé fogékon a barkácsolásra, már egy ilyesmivel is elindulhat.

(#3) nemlehet


nemlehet
őstag

Szerintem kicsit túlbonyolítottad a megoldást lévén azért a wifis telefonos megoldások is elég jók. Pl Goldworm remote az nekem nagyon bevállt, bár nem túl szép, de funkcionálisan kiváló.

Plusz mostmár azért elég sok telefonban van infra, azokra pedig le lehet szedni az Anymote-ot, az szabadon programozható, sőt akár tanítható is a távirányítóról (ha a telefon támogatja) plusz az összes gyakran használt gombot ki tudod pakolni widgetbe. Kb 3 hónapja elraktam valahova a távirányítót takarításkor, azóta csak a telefont használom :D

De egyébként szép munka :)

[ Szerkesztve ]

Nokia 3310->3410->3100->6500 Slide(RiP Nokia)->Acer Liquid Metal ->Xiaomi Hongmi-> Xiaomi Redmi Note 3

(#4) Speeedfire


Speeedfire
nagyúr

Én is bonyolultnak érzem, mindenesetre tök jó dolog.
Én kodit használok egy ideje, irányításra meg telefon/tablet.

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#5) kalifa777


kalifa777
tag

Szerintem a wifis vezérlők jelentik a megoldást a legtöbb problémára. Mára már kiforott a technika, és kinőtték a gyerekbetegségeiket.

(#6) Dark Archon válasza nemlehet (#3) üzenetére


Dark Archon
addikt

Egy embernek megoldás lehet a telefon, de családilag nincs kényelmesebb egy távirányítónál.

Dark Archon | i5-12600KF - RTX 3070 | Cube Nature EXC | Canyon Endurace 7 | BF4: DarkArchonHUN

(#7) DiamondBack


DiamondBack
senior tag

Fel sem tűnt de az utóbbi időben a laptopot is kihagytam a képletből, telefonra letölt pár perc, majd mirrorshare a tvre... Ha a lustaság fájna :DDD

(#8) skul0 válasza Dark Archon (#6) üzenetére


skul0
aktív tag

+1
Köszönöm, erre gondoltam. Én is telefont használtam előtte, de ezzel a megoldással szvsz ezerszer kényelmesebb. A telefont fel kell oldani, meg kell nyitni az alkalmazást, párosítani a hosttal, stb. mire ezeket végigpötyögöm, addigra már rég eltelt a filmben az a rész amit esetleg vissza akartam hallgatni magyarul, mert nem értettem. Így csak 2 gombnyomás a távirányítón. :)
Azóta tervbe vettem azt is, hogy a kis asztali lámpát is ezzel kapcsoljam le egy relével, akkor már ahhoz sem kell felkelni az ágyból. Hiába, lustaság...

(#9) icemad


icemad
nagyúr
LOGOUT blog

Köszi a cikket, nagyon hasznos. Én biztos megcsinálom, bár még nem teljesen világos a vezérlés. De majd menet közben rájövök. Azt meg lehet oldani, hogy be is kapcsolja a gépet? Wake on Lan funkcióval pl.?

[ Szerkesztve ]

(#10) skul0 válasza icemad (#9) üzenetére


skul0
aktív tag

Szia!

Alvó módból, akárcsak egy billentyű lenyomásakor minden további nélkül felébreszthető a számítógép, amennyiben az erre vonatkozó beállítások helyesek a BIOS-ban.
A WakeOnLan funkció már érdekesebb gondolat, mert maga az Arduino Micro nem egy ethernetes eszköz, és lehet nem is éri meg egy ethernet board beszerzése a Micro-hoz, mert azt nem olcsón mérik.

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.