Tartalomjegyzék:

I2C infravörös távirányító az Arduino -val: 8 lépés (képekkel)
I2C infravörös távirányító az Arduino -val: 8 lépés (képekkel)

Videó: I2C infravörös távirányító az Arduino -val: 8 lépés (képekkel)

Videó: I2C infravörös távirányító az Arduino -val: 8 lépés (képekkel)
Videó: Arduino — растровые изображения из I2C EEPROM на OLED-дисплей 128x64 2024, November
Anonim
I2C infravörös távirányító az Arduino -val
I2C infravörös távirányító az Arduino -val
I2C infravörös távirányító az Arduino -val
I2C infravörös távirányító az Arduino -val

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 rövid áttekintése
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

A szoftver rövid áttekintése
A szoftver rövid áttekintése
A szoftver rövid áttekintése
A szoftver rövid áttekintése
A szoftver rövid áttekintése
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

I2C csomagtartalom
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)

Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)
Távirányító kódok beszerzése (ui32Data)

Háromféleképpen szerezheti be a megfelelő távirányító kulcskódot;

  1. Oszcilloszkóppal bitszámlálással,
  2. Nézz utána egy weboldalon,
  3. 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 I2C slave eszköz tesztelése
Az I2C slave eszköz tesztelése
Az I2C slave eszköz tesztelése
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

A dizájn zsugorítása
A dizájn 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

Következtetés
Következtetés
Következteté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: