Tartalomjegyzék:
- 1. lépés: Az áramkör rövid áttekintése
- 2. lépés: A szoftver rövid áttekintése
- 3. lépés: I2C csomagtartalom
- 4. lépés: Távirányító kódok beszerzése (ui32Data)
- 5. lépés: Az I2C slave eszköz tesztelése
- 6. lépés: A design zsugorítása
- 7. lépés: Következtetés
- 8. lépés: Felhasznált hivatkozások
Videó: I2C infravörös távirányító az Arduino -val: 8 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Ez az útmutató leírja, hogyan lehet univerzális távirányítót létrehozni az interfész I2C használatával.
Milyen furcsa, hogy I2C slave eszközt használ?
Igen, I2C slave eszköz.
Ennek oka az, hogy az IR -csomagok pontos időzítése meglehetősen igényes, és egy tipikus Arduino küzd vele, ha már sok más feladatot lát el egyszerre. Jobb elosztani a számítási terhelést, ha lehetőség szerint időigényes tevékenységeket rendelünk dedikált processzorokhoz (jobb, ha hardveresen végezzük). Mivel az I2C jól dokumentált és megbízható kommunikációs módszer az IC -k között, ezt választottam interfésznek.
Bevezetés
Amint fentebb említettük, ez az útmutató leírja, hogyan vezérelheti a háztartási készülékeket, például a TV -t, a DVD -lejátszót és a műholdat, stb. Az Arduino IRremote könyvtárával.
Végezetül egy tervezési példával zárul, amely az Arduino -t I2C szolga távirányító modulmá alakítja (fenti 1. kép) prototípus tesztáramkörrel (2. ábra fent), és részletezi, hogyan lehet a terveket a szükséges minimális alkatrészekre szűkíteni. egy másik kialakításba ágyazva. Esetemben ezt a beágyazott eszközt egy ESP8266-12E körüli IoT Universal távirányító eszközben használom.
Milyen alkatrészekre van szükségem?
Az 1. lépésben bemutatott áramkör felépítéséhez (IR -adó) szüksége lesz a következő alkatrészekre;
- 2 db 10K ellenállás
- 1 off 390R ellenállás
- 1 db 33R ellenállás
- 1 off 3K8 ellenállás
- 1 kialszik a piros LED
- 1 kedvezmény IR Led TSAL6400
- 1 kedvezmény a BC337 tranzisztorból
- 1 db 220uF kondenzátor
- 1 kedvezmény Arduino Uno
A 4. lépésben bemutatott áramkör felépítéséhez (IR -vevő) szüksége lesz a következő alkatrészekre;
- 1 off 10K ellenállás
- 1 kedvezmény TSOP38328
- 1 db 220uF kondenzátor
- 1 kedvezmény Arduino Uno
Az 5. lépésben (Szolga tesztkör) bemutatott áramkör felépítéséhez a következő alkatrészekre lesz szüksége;
- 4 db 10K ellenállás
- 2 off 390R ellenállás
- 1 db 33R ellenállás
- 1 off 3K8 ellenállás
- 2 kialszik a piros LED
- 1 kedvezmény IR Led TSAL6400
- 1 kedvezmény a BC337 tranzisztorból
- 1 db 220uF kondenzátor
- 2 ki SPST gomb
- 2 kedvezmény Arduino Unos
A 6. lépésben (Zsugorított kialakítás) bemutatott áramkör felépítéséhez a következő alkatrészekre lesz szüksége;
- 3 db 10K ellenállás
- 1 off 270R ellenállás
- 1 off 15R ellenállás
- 4 db 1K ellenállás
- 1 kialszik a piros LED
- 1 kikapcsolás IR Led TSAL6400 vagy TSAL5300
- 1 kedvezmény a BC337 tranzisztorból
- 1 db 220uF kondenzátor elektrolit @ 6,3V
- 1 db 1000uF kondenzátor elektrolitikus @ 6.3v
- 2 db 0,1uF kondenzátor
- 2 db 22pF kondenzátor
- 1 ki 16MHz Xtal
- 1 kedvezmény ATMega328P-PU
Megjegyzés: Az ATMega328P programozásához FTDI eszközre is szüksége lesz
Milyen készségekre van szükségem?
- Minimális elektronikai ismeretek,
- Az Arduino és az IDE ismerete,
- Egy kis türelem,
- Hasznos lehet az I2C némi ismerete (lásd itt az általános I2C/Wire Library részleteket).
Érintett témák
- Az áramkör rövid áttekintése,
- A szoftver rövid áttekintése,
- I2C csomag tartalma,
- Távirányító kódok beszerzése (ui32Data),
- Az I2C Slave eszköz tesztelése,
- Csökkenti a dizájnt,
- Következtetés,
- Felhasznált hivatkozások.
Jogi nyilatkozat
Mint mindig, ezeket az utasításokat saját felelősségére használja, és azok nem támogatottak.
1. lépés: Az áramkör rövid áttekintése
Az áramkör célja az IR távirányító kódok továbbítása. Kialakítása meglehetősen egyszerű és egyszerű.
Amikor a Q1 a BC337 NPN tranzisztor az Arduino PWM O/P D3 és az R5 ellenállás közötti logikán keresztül be van kapcsolva, akkor az áram áthalad az 1 -es és a 2 -es LED -en. A Q1 az IR diódán áthaladó áramot (IF Max = 100 mA) növeli arra, hogy meghaladja azt, amit az Arduino O/P képes ~ 40mA @ +5v tápellátásra.
A C1 és 220uF Electrolytic kondenzátor némi stabilizációt biztosít, megakadályozva a tápcső leesését az 1. és 2. LED -ek által fogyasztott teljesítmény által.
Az R1 és R2 ellenállások I2C felhúzások.
2. lépés: A szoftver rövid áttekintése
Preambulum
A forráskód sikeres lefordításához a következő extra könyvtárra lesz szüksége;
IRremote.h
- Szerző: z3t0
- Cél: Infravörös távoli könyvtár Arduino számára: infravörös jelek küldése és fogadása több protokollal
- Innen:
Kód áttekintés
Amint az a fenti 1. ábrán látható, indításkor a kód konfigurálja a mikrovezérlő I/O-ját, majd lekérdezi a belső szoftver "bFreshDataFlag" állapotát. Ha ez a zászló be van állítva, akkor a vezérlő azt jelzi, hogy elfoglalt vonal (a D4 adatkijelző alacsony), és az „eBUSY” állapotba lép, és sorban leolvassa a gombokat, és nyomja meg az uDataArray -ben tárolt parancsokat, és elküldi az IR modulált adatokat az IR LED -nek. átviteli sorrend.
Miután az uDataArray -ben tárolt adatokat teljes mértékben elküldte, az „eIDLE” állapot folytatódik, és a „Foglalt” sor érvénytelenítésre kerül (a D4 adattű magas). A készülék most készen áll arra, hogy további gombnyomásokat fogadjon, jelezve az átviteli sorozat végét.
Az infravörös gomb megnyomásával kapcsolatos adatok fogadása
Amikor adatokat küld az InfraRed távirányítónak az I2C -n keresztül, az megszakítást vált ki, és a ReceiveEvent () függvényhívás aszinkron módon aktiválódik.
A bekapcsolás után a kapott I2C adatok sorrendben az uDataArray pufferbe kerülnek.
Az adatfogadás során, ha a mester jelzi a sorozat végét (bFreshData! = 0x00), akkor a 'bFreshDataFlag' van beállítva, jelezve ezzel az átviteli sorozat kezdetét.
A 2… 3. Képek egy tipikus csomagsorozatot mutatnak be.
Megjegyzés: A teljes forráskód itt érhető el
3. lépés: I2C csomagtartalom
Az I2C -n keresztül a slave -nek küldött vezérlőcsomag formátuma az 1. képen látható, az egyes mezők jelentése lent
A vezérlőcsomag mezők jelentése
bájt bKódolás;
-
IR távirányító kódolás,
- RC6 (égbolt) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
A bináris IR adatfolyam hexadecimális ábrázolása 4 Adatbájt (előjel nélküli hosszú), LSByte… MSByte
bájt bNumberOfBitsInTheData;
Az adatok bitjeinek száma (max. 32). Tartomány = 1… 32
bájt bPulseTrainRepeats;
Hányszor ismétlődik ez az impulzusvonat. Tartomány = 1… 255. Általában 2… 4 ismétlés. Érdemes ezt kiterjeszteni az On/Off parancsokra, mivel a fogadó eszköz néha néhány extra impulzus ismétlést igényel a bekapcsolási jel fogadásához
bájt bDelayBetweenPulseTrainRepeats;
Késleltetés ennek az impulzusvonatnak az ismétlései között. Tartomány = 1… 255mS. Általában 22mS… 124mS
bájt bButtonRepeats;
Szimulálja ugyanazon gomb ismételt megnyomását (de nem támogatja a módosított kódot, mint egy Apple távirányító, csak megismétli a gomb kódját). Tartomány = 1… 256. Alapértelmezett = 1
uint16_t ui16DelayBetweenButtonRepeats;
Késleltetés a gombismétlések között (előjel nélküli int). Összesen 2 bájt LSByte… MSByte. Tartomány = 1… 65535mS. Alapértelmezett = 0mS
bájt bFreshData;
-
Friss adatok. Nem nulla érték. Utoljára írva elindítja az IR TX szekvenciát. Tartomány 0x00… 0xFF
- További vezérlőcsomagok jönnek = 0
- Ez a végső vezérlőcsomag = Nem nulla érték 1, 2,… 255
Vegye figyelembe a '_packed_' fordítói irányelv használatát. Ez biztosítja, hogy az adatok csomag bájt byte -onként legyenek a memóriában, függetlenül a használt célrendszertől (Uno, Due, ESP8266 stb.). Ez azt jelenti, hogy a registerAllocationType és a dataArrayType egyesülése csak egy vezérlőcsomagból származó szekvenciális órajel/óra bájtokban szükséges, ami egyszerűvé teszi a TX/RX szoftvert.
4. lépés: Távirányító kódok beszerzése (ui32Data)
Háromféleképpen szerezheti be a megfelelő távirányító kulcskódot;
- Oszcilloszkóppal bitszámlálással,
- Nézz utána egy weboldalon,
- Dekódolja közvetlenül a szoftver adatfolyamából.
Bitszámlálással, hatókörrel
Ez nem hatékony módszer, mivel meglehetősen sok időt vesz igénybe, és egynél több kísérletet igényel, de nagyon pontos lehet. Hasznos továbbá a 2. és 3. módszerrel kapott kódok vizuális érvényesítésében, valamint a távirányító sajátosságainak meghatározásában is. Például, ha lenyomva tartja az Apple IR távirányító gombját. A távirányító kezdetben parancsszekvenciát ad ki, majd ezt követi ismételt 0xF… tömörített sorozattal.
Nézz utána egy weboldalon
A Linux Infrared Remote Control webhelyén található távirányító kód -adatbázis jó forrás.
A hátránya azonban az, hogy előfordulhat, hogy ki kell próbálnia néhány kódot, amíg meg nem találja az Önnek megfelelőt. Előfordulhat, hogy a kódok egyes ábrázolásait is értelmeznie kell ahhoz, hogy megfelelő hexadecimális formává alakítsa át őket.
Dekódolja közvetlenül az adatfolyamból
A fenti 1. ábrán látható áramkör és az IRremc könyvtár „IRrecvDumpV2.ino” példája együttesen lehetővé teszi az adatfolyam dekódolását közvetlenül a távirányítóról. A 2. képen egy dekódolt Samsung TV -távirányító látható a be/ki gomb megnyomására az Arduino IDE terminál ablakában.
Kombinált vevő/adó
A fenti 3. és 4. kép egy olyan megoldást ábrázol, amely lehetővé teszi az IR parancs vételét és továbbítását, lehetővé téve az egyszerű prototípus -készítést.
Az IR távirányító gombnyomásának dekódolásához meg kell villannia az Arduino -t az „IRrecvDumpV2.ino” példával, amely az IRremote könyvtárhoz tartozik.
Ugyanilyen jól működik az átvitelnél is, ha IR parancsok. A készülék piros színű LED -del jelzi a készülék működését.
5. lépés: Az I2C slave eszköz tesztelése
Az itt található forráskód és az 1. ábrán felvázolt áramkör segítségével programozza be a „Master” Arduino programot az „IR_Remote_Sim_Test.ino” programmal, a „Slave” Arduino programot az „IR_Remote_Sim.ino” paranccsal.
Feltételezve, hogy rendelkezik Sony Bravia TV -vel, Sky HD dobozzal és Sony BT SoundBar készülékkel, nyomja meg az 1 gombot, és a tévékészülék BBC1 -re kapcsol (101. csatorna). Nyomja meg a 2 gombot, és a hangsor elnémul. Nyomja meg újra, és a némítás megszűnik.
Az infravörös átviteli sorozat végrehajtása során a LED3 világít, jelezve, hogy a szolga foglalt, és a LED1 villogni fog az infravörös átviteli folyamattal összhangban.
Természetesen, ha nem ugyanazt a szórakoztató rendszert állította be, mint a fentiekben, akkor újra programozhatja a slave-t az „IRrecvDumpV2.ino” segítségével, dekódolhatja az érdeklődő távoli parancsokat, majd beprogramozhatja őket az „IR_Remote_Sim_Test.ino” -ba. adott forgatókönyv.
A 2. kép a rendszer szintű teszt szoftver áttekintését mutatja a Master és a Slave között.
6. lépés: A design zsugorítása
Rendben, tehát ha feltételezzük, hogy követte ezt az utasítást, két Arduino -ra támaszkodva otthoni eszközeit nem az Arduino -készlet leghatékonyabb felhasználása. Következésképpen, ha felépíti a fenti képen látható áramkört, és követi az itt található utasításokat az ATMega328P programozásához az 'IR_Remote_Sim.ino' programmal, akkor képes lesz a teljes rendszert a minimális alkatrészekre redukálni. Ez lehetővé teszi, hogy a tervét beágyazza más rendszerbe.
7. lépés: Következtetés
A megoldás stabil és jól működik, már néhány hete be van ágyazva egy másik rendszerbe, minden probléma nélkül.
Az Arduino Uno R3 -at választottam, mivel olyan készüléket szerettem volna, amely elegendő RAM -mal rendelkezik ahhoz, hogy megfelelő mélységű gombpuffert kapjak. Elfogadtam egy 20 csomag pufferméretet (MAX_SEQUENCES).
Az általam készített Hybrid TX/RX pajzs nagyon hasznos volt a Sony és a Sky távirányítók dekódolásakor is. Bár be kell vallanom, hogy időnként a digitális hatóköröm használatával ellenőriztem, hogy a szoftver dekódolt IR parancs ugyanaz volt -e, mint a kapott IR -től (TSOP38328).
Az egyetlen dolog, amit másképp csináltam volna, ha az állandó áramú meghajtó áramkört használom az infravörös ledhez, amint azt a 2. kép mutatja.
Még egy megjegyzés, hogy nem minden infravörös távadó modulálódik 38KHz -en, a TSOP38328 38KHz -re van optimalizálva.
8. lépés: Felhasznált hivatkozások
IRRemote.h
- Szerző: z3t0
- Cél: Infravörös távoli könyvtár Arduino számára: infravörös jelek küldése és fogadása több protokollal
- Innen:
IR távoli könyvtár
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IR (infravörös) vevő érzékelő - TSOP38238 (egyenértékű)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Annak elkerülése érdekében, hogy az adatstruktúra a szavak határaihoz illeszkedjen
- https://github.com/esp8266/Arduino/issues/1825
- https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
- https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4
Jó forrása az IR távoli részleteknek
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR távoli adatbázis
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Adatlap
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Adatlap
https://www.vishay.com/docs/81857/1n4148.pdf
Ajánlott:
Arduino infravörös érzékelő és távirányító LCD -vel: 4 lépés
Arduino infravörös érzékelő és távirányító LCD -vel: UQD10801 (Robocon1) diákok csoportja vagyunk az Universiti Tun Hussein Onn Malaysia (UTHM) Egyetemről ) Arduino Uno R3 segítségével. Ez az oktatóanyag
Univerzális TV -távirányító - Ardiuino, infravörös: 5 lépés
Univerzális TV -távirányító - Ardiuino, infravörös: Hello! 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 működik, és amely " hallgat " és dekódolja az infravörös jelet, amelyet számos más
Egyszerű beállítás IR infravörös távirányító a LIRC használatával a Raspberry PI (RPi) számára - 2019 július [2. rész]: 3 lépés
Egyszerű beállítás IR infravörös távirányító a LIRC használatával a Raspberry PI (RPi) számára - 2019 július [2. rész]: Az 1. részben bemutattam, hogyan kell összeszerelni az RPi + VS1838b készüléket, és hogyan kell beállítani a Raspbian LIRC modulját IR parancsok fogadására infravörös távirányítóról. Minden hardver- és LIRC -beállítási problémát az 1. részben tárgyalunk. A 2. rész bemutatja, hogyan kell a hardvert illeszteni
Mobiltelefon infravörös légkondicionáló távirányító DIY előállítás: 7 lépés
Mobiltelefon infravörös légkondicionáló távirányító barkácsolás Gyártás: A forró nyáron, amikor hazamegy vagy irodába szeretne kapcsolni a légkondicionálót, de egy ideig nem találja a távirányítót. Nagyon bosszantó dolog. Abban a korszakban, amikor ez a mobiltelefon nem hagyja el, használhatja a mobiltelefont
8 relévezérlés NodeMCU és infravörös vevővel WiFi és infravörös távirányító és Android alkalmazás használatával: 5 lépés (képekkel)
8 relévezérlés NodeMCU -val és IR -vevővel WiFi és IR távirányító és Android -alkalmazás használatával: 8 relés kapcsoló vezérlése nodemcu és ir vevő segítségével wifi -n és távoli és androidos alkalmazáson keresztül. Az ir távirányító a wifi -kapcsolattól függetlenül működik. ITT