Tartalomjegyzék:
- Kellékek
- 1. lépés: Az áramkör építése:
- 2. lépés: Kód:
- 3. lépés: Kód mélységben: IR jelek küldése
- 4. lépés: Kód mélységben: IR jelek fogadása
- 5. lépés: Következtetés
Videó: Univerzális TV -távirányító - Ardiuino, infravörös: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
Helló! Ebben az oktatható útmutatóban megmutatom, hogyan kell felépíteni és programozni saját univerzális távirányítóját, amely a legtöbb infravörös távirányítóval működő dologgal együtt működik, és amely "hallgat" és dekódol különböző infravörös jeleket, amelyeket különböző távirányítók küldnek.
Egy kis háttér arról, hogy mi inspirált arra, hogy megépítsem ezt a távirányítót - én is, mint a legtöbben, folyamatosan elveszítem a távirányítómat, és ez a katasztrófa meglehetősen frusztráló, ezért úgy gondolom, hogy megoldjuk! Megépítettem ezt a távirányítót, és diszkréten beágyaztam az egyedi építésű ágykeretembe (én is faipari vagyok) - nem veszíthetem el a távirányítót, ha az ágykeretem része!
Kellékek
Amire szüksége lesz: -Arduino UNO vagy Nano - a futásteljesítmény más tábláktól függően változhat
-Rozsdamentes kenyérlap (vagy forrasztható szalagdeszka, ha tartósabbá szeretné tenni)
-Különböző színű és hosszúságú gumiszálak
- Gyors nyomógombok (5) (további gombokat is hozzáadhat, de digitális csapokat kell használnia, mivel az analóg csapok kivételével mindegyiket használják - meg kell vizsgálnia, hogy megfelelően használja -e a felhúzó ellenállásokat, vagy húzza le az ellenállásokat, és kapcsolja ki a nyomógombokat)
-10K ohmos ellenállás (5) (ha több nyomógombot szeretne, akkor többre lesz szüksége)
-470 Ohm ellenállás (2)
-Infravörös LED
-Piros LED
-Infravörös érzékelő (VS1838B cikkszámot használtam, használhat másikat is, csak ellenőrizze a kioldót)
(Opcionális) Forrasztópáka, Forrasztó, Forrasztó.
1. lépés: Az áramkör építése:
1). Mindig szeretek az alkatrészek lefektetésével kezdeni, mivel ez mindig a kenyértábla elrendezését vezérli.
-Nyomógombok
-LED -ek: a piros LED és az IR LED párhuzamosan vannak kötve, így láthatja, hogy mit csinál az IR LED.
-Érzékelő
2). Ellenállások
- Az öt 10K ellenállást, amelyeket a nyomógombokhoz rögzítettünk, "lehúzható" ellenállásoknak nevezzük. Húzza le az ellenállásokat, és győződjön meg arról, hogy amikor a nyomógombot nem nyomja meg, akkor a megfelelő Arduino csap 0 V feszültséget kap (vagy legalábbis annak közelében). A lehúzható (vagy felhúzható) ellenállásokról itt talál részletes útmutatót:
www.electronics-tutorials.ws/logic/pull-up…
Ezek az ellenállások nem feltétlenül szükségesek, de ha "szellem" lökéseket kap, akkor több mint valószínű, hogy a kapacitív csatolás okozza, és a lehúzható ellenállások ezt megakadályozzák.
3). Áramköri vezetékek
4). 5V és földi vezetékek
Referenciaként használja a mellékelt képet! de ne félj megváltoztatni az igényeidnek megfelelően!
2. lépés: Kód:
#include const int RECV_PIN = 7; // Infravörös érzékelő olvasócsap int Button1 = A4; // Legtávolabbi bal int Button2 = A3; // 2. balról int Gomb3 = A2; // Középső int gomb4 = A1; // 2. jobbra int Button5 = A0; // Legtávolabb a jobb oldalt int LED = 3; // IR LED & Piros LED int val = 0; // Változó érték IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results eredmények;
void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (gomb 5, BEMENET); pinMode (LED, KIMENET); Sorozat.kezdet (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // analóg olvasás használata digitális olvasás helyett, hogy elkerülje a fogságban lévő kapacitással kapcsolatos problémákat. ezenkívül segít a gombok kikapcsolásában. // Az analóg leolvasás 900 -nál lehetővé teszi az értékek mozgatását, vagyis az infravörös jelet akkor is elküldi, ha nem a teljes 5V -ot alkalmazzák a tűre. // de a 900 elég magas ahhoz, hogy ne olvasson hibásan a kapacitív csatolás késleltetése miatt (100);} // RGB csík be- és kikapcsolása {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // az "i <3" érték megváltoztatása megváltoztatja a jel azonnali ismétlésének számát. így az "i <2" kétszer megismétli a jelet. // előfordulhat, hogy játszani kell ezzel a számmal, ha a tévé nem válaszol, általában 1 vagy 3 működik a legjobban, ha nem, próbálkozzon páratlan számokkal. // lehet, hogy játszani kell a belső jelkésleltetés időzítési értékeivel is, például a TV 10 működik, de a 30 nem. {irsend.sendSony (0xa90, 12); // Sony TV tápkódja, a TV -m esetében a kódot 3x3 -ban kell elküldeni, tehát 3 impulzus, három külön időkésleltetés (10); // "intra signal delay" (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" a bitszám, a különböző protokollok különböző bitszámokat igényelnek. A NEC 32, a Sony 12 éves, utánanézhet a többieknek (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); // Sony TV tápellátás hangerőcsökkentési késleltetése (100);}}} késleltetés (100);} ha (irrecv.decode (& results)) // a kód alábbi része lehetővé teszi a különböző távirányítókról érkező infravörös jelek értelmezését. {Serial.println (results.value, HEX); // létrehozza a "NEC, Sony, stb." eljárást, és egy "c90, a90, FF02FD" TV -kódot, 0x -ot kell hozzáadnia a TV -kód kapcsoló elejéhez (results.decode_type) {case DENON: Serial.println ("DENON"); szünet; eset NEC: Serial.println ("NEC"); szünet; eset PANASONIC: Serial.println ("PANASONIC"); szünet; SONY eset: Serial.println ("SONY"); szünet; eset RC5: Serial.println ("RC5"); szünet; eset JVC: Serial.println ("JVC"); szünet; SANYO eset: Serial.println ("SANYO"); szünet; tok MITSUBISHI: Serial.println ("MITSUBISHI"); szünet; tok SAMSUNG: Serial.println ("SAMSUNG"); szünet; LG eset: Serial.println ("LG"); szünet; RC6 eset: Serial.println ("RC6"); szünet; tok DISH: Serial.println ("DISH"); szünet; eset SHARP: Serial.println ("SHARP"); szünet; eset WHYNTER: Serial.println ("WHYNTER"); szünet; eset AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); szünet; alapértelmezett: eset UNKNOWN: Serial.println ("UNKNOWN"); break;} irrecv.resume ();}}
3. lépés: Kód mélységben: IR jelek küldése
A kódsorokra a sorszámuk alapján hivatkozom - a folytatáshoz használja ezt a linket:
pastebin.com/AQr0fBLg
Először is be kell vennünk a z3t0 által készített IR Remote Library -t.
Itt egy link a könyvtárhoz:
github.com/z3t0/Arduino-IRremote
Ha útmutatásra van szüksége a könyvtár megfelelő letöltéséhez és telepítéséhez az IDE -ben:
www.arduino.cc/en/guide/libraries
Az 1. sor tartalmazza a könyvtárat.
Ezután deklarálnunk kell néhány változót, a 2-12. Sorok ezt teszik.
A "cost int" segítségével határozzuk meg a változókat, amelyek nem változnak, egy kivételével mindegyik ebbe a kategóriába tartozik.
Az "int" -t használjuk a változó változók meghatározására.
Modulációs (PWM) impulzusos tüskét kell használnunk a LED -es tűnkhöz - minden olyan tű, amely mellette "~" van, elegendő lesz a kódomban - a 3. digitális tűt használjuk.
Ezután el kell végeznünk néhány beállítást - ez a kód csak egyszer fog futni, amikor az Arduino be van kapcsolva vagy visszaáll.
Figyeljük meg, hogy meghatározzuk a bemeneteket és kimeneteket (15-20), bekapcsoljuk a soros monitort (21), engedélyezzük az infravörös érzékelőt (22), és azt mondjuk az Arduino-nak, hogy bármikor villogjon a fedélzeti LED-en, amikor jelet kapunk (23).
Ezután kiépítjük a hurkot - ez a kód többször fog futni, másodpercenként néhányszor felülről lefelé haladva.
A 25. sorban egy if állítást használunk, ez azt mondja az Arduino -nak, hogy "keresse meg ezeket a konkrét kritériumokat, ha ezek a kritériumok teljesülnek, tegye ezt a konkrét dolgot". Ebben az esetben a feltételek: Ha nem, akkor lépjen tovább. " Van itt egy kis kicsomagolási lehetőség, ezért engedjük meg a merülést: az Arduino analóg jele 5V vagy annál kisebb érték, 5V 1023, 0V pedig 0. Bármely adott feszültség 0 és 5 V között definiálható egy számot, és egy kis matek segítségével kitalálhatjuk ezt a számot, vagy fordítva, egy feszültséget. Osszuk el az 1024 -et (0 -t egységként) 5 -tel, így 204,8 -at kapunk. Például a 900 -as számot használjuk, hogy ezt feszültségre fordítsuk, egyszerűen elosztjuk a 900 -at 204,8 -mal, így ~ 4,4 V -ot kapunk. Azt mondjuk az Arduino -nak, hogy keressen ~ 4,4 voltnál nagyobb feszültséget, és ha igen, hajtsa végre a következő utasítást.
A következő utasításokról (25. sor) az irsend.sendNEC (0xFF02FD, 32). Ez azt mondja: "Arduino, küldjön egy modulált impulzust, amely követi a NEC protokollt, különösen az FF02FD jelet, és győződjön meg róla, hogy 32 bit hosszú". Ezáltal az IR LED -ünk úgy villog, hogy más eszközök is megértsék. Gondolj egy kicsit a Morse -kódra, de csak láthatatlan fényben! Nagyon sok különböző protokoll létezik, mindegyikben több száz, ha nem ezer egyedi jel, és mindegyik saját bitszámmal - eszközünk képes lesz felismerni ezeket a jeleket, de később bele fogunk merülni ebbe!
A 28. sorban van az első késleltetésünk - ez azért van, hogy megakadályozzuk a véletlen ismétlődő jeleket, ha a gombot megnyomjuk és az infravörös jelet elküldjük, 100 ezredmásodperc áll rendelkezésünkre, hogy lehúzzuk az ujjunkat a gombról. ez nem tűnik sok időnek, de a gyakorlatban úgy tűnik, hogy jól működik. a késleltetési funkció azt mondja az Arduino -nak, hogy "semmit ne tegyen X milliszekundum alatt", és referenciaként 1000 milliszekundum másodpercenként.
Továbblépve a következő gombunkhoz a 29. sorban, az 5. gomb (eredetileg 4 gombom volt ezen a távirányítón, hozzáadtam egy ötödiket, ezért nem vagyunk rendben). Ez lélekben ugyanaz, mint az 1. gomb, de néhány lényeges különbséggel. Az első különbség, amelyet látni fog, egy utasítás - ez lényegében egy másik ciklus - egy ciklus egy másik nagyobb ciklusban, a loopcepcióban. Konkrétan "for (int i = 0; i <3; i ++)" van, olvassuk ezt így: "Arduino, kezdjük 0 -tól, ismételjük meg az alábbi utasításokat, amíg el nem érjük a 3 -szor". A for függvényt azért használják, mert sok eszköz úgy van programozva, hogy ismételt jelet keres, és a mi esetünkben itt 3 -szor. Egyszerűen megváltoztathatja a 3 -as számot egy másik számra, ha a készülék más ismétlési ütemezést kér. A másik fő különbség az 5 -ös gombbal az, hogy ismétlődik, 3 -szor vagy 3x3 -szor. Más szóval, háromszor küldjük a jelet, várjunk 10 ezredmásodpercet, küldjük el újra háromszor, várjunk még 10 ezredmásodpercet, majd küldjük el ismét háromszor. Ez a fajta kommunikáció gyakori az eszközök be- és kikapcsolásakor, és lehet, hogy éppen ezt kéri a tévé vagy az eszköz - ennek kulcsa az, hogy játsszon az összes változóval, amíg meg nem kapja a kívánt eredményt. Módosítsa a rövid késleltetés értékét, változtassa meg az ismétlési értéket, küldjön 6 köteget 3 helyett stb. Stb. Az eszközök tetszőleges jelszabályokkal vannak programozva szándékosan, képzelje el, ha a TV távirányítója azonos típusú jelet küldött, mint a hangszóró; minden alkalommal, amikor csatornát váltott a TV -n, a hangszóró kikapcsol - ezért vannak különböző jelszabályok.
A következő három gomb ugyanazokkal az elvekkel van programozva, legalább részben, a fentiekben leírtak szerint - így egészen az 55. sorig ugorhatunk.
4. lépés: Kód mélységben: IR jelek fogadása
Az 55. sorban elkezdjük programozni az Arduino -t, hogy értelmezze a más távirányítók által küldött IR jeleket - ez szükséges ahhoz, hogy kitalálhassa a távvezérlő által használt protokollokat és jeleket. Az 55. sor első kódsora az, ha (irrecv.decode (& results) ezt így olvassa: "Arduino, keressen IR -kódot, ha talál ilyet, akkor adja vissza a valódi értéket, ha nem talált semmit, akkor hamisat. Ha igaz, rögzítse az információkat "eredmények" -be.
Továbblépve az 56. sorra, van Serial.println (results.value, HEX), amely így szól: "Ardunio, nyomtassa ki az eredményeket a soros monitoron HEX formátumban". A hexadecimális, azaz hexadecimális, egy módja annak, hogy egy bináris karakterláncot (csak 0 -t és 1 -et) lerövidítsünk valamivel könnyebben beírhatóvá. Például a 101010010000 "a90", a TV ki- és bekapcsolásához használt kód, a 111111110000001011111101 pedig 0xFF02FD, amely az RGB szalagomat vezérli. A fenti diagram segítségével konvertálhatja a bináris számot hexadecimálisra, és fordítva, vagy használhatja a következő linket:
www.rapidtables.com/convert/number/hex-to-…
Az 57. sorig van egy új funkciónk, az úgynevezett kapcsolótok.
Lényegében a kapcsoló tok lehetővé teszi, hogy különböző utasításokat adjunk meg egy adott változó (eset) eredményei alapján. a break kilép a switch utasításból, és minden utasítás végén használatos.
Itt használjuk a kapcsolótokot, hogy megváltoztassuk a soros monitoron történő nyomtatás módját, a különböző távirányítók Arduino -érzékelési protokolljai alapján.
5. lépés: Következtetés
Ha kérdésed van - keress bátran itt! Örömmel próbálok a lehető legjobban segíteni.
Remélem tanultál valamit, amellyel egy kicsit jobbá teheted az életed!
-RB
Ajánlott:
Univerzális USB billentyűzet RGB kapcsolókkal: 6 lépés
Univerzális USB -billentyűzet RGB -kapcsolókkal: Ebben az oktatóanyagban megmutatom, hogyan lehet saját egyéni USB -billentyűzetet létrehozni, amely ugyanúgy viselkedik, mint egy hagyományos számítógép -billentyűzet. Bármely billentyűkombinációt vagy billentyűsorozatot hozzárendelhet, amelyet csak egy nyomógomb lenyomása közben kell lenyomni. Használhatja
12v univerzális villogó áramkör: 3 lépés
12v univerzális villogó áramkör: Amikor megvásároltuk használt autónkat, az autó kürtjéhez egy villogó ckt volt rögzítve. annyira bosszantó volt számomra, hogy villogó kürtöt kaptam, ezért eltávolítottam a villogó ckt, és más célra mentettem. Ez az univerzális 12Vdc villogó
DIY univerzális akkumulátortöltő mágneses csatlakozókkal: 5 lépés
DIY univerzális akkumulátortöltő mágneses csatlakozókkal: Üdv mindenkinek, ez a második utasításom, így a visszajelzései valóban hasznosak lesznek a további fejlődéshez. Nézze meg YouTube -csatornámat is, ahol további projekteket talál. Ma megmutatom, hogyan lehet univerzális akkumulátortöltőt készíteni mágnesekkel
Univerzális NYÁK -sorozat a csöves erősítőhöz: 5 lépés
Univerzális NYÁK -sorozatok csöves erősítőhöz: A csőáramkörök döntő lépést jelentettek az elektronika fejlődésében. A legtöbb területen teljesen elavultak az olcsóbb, kisebb és hatékonyabb szilárdtest -technológiákhoz képest. Az audio kivételével - a reprodukció és a
„Univerzális” óra: 10 lépés (képekkel)
„Univerzális” óra: Ez az óra a világ 24 időzónájában mutatja az időt; ezt a teljesítményt az óra alapvető alkotóelemeit bemutató rajzon látható elrendezésnek köszönhetően érik el. Az 1 óramű az 2 tartóba van szerelve, ami megfordulhat