Kazalo:

Infrardeči daljinski upravljalnik I2C z Arduinom: 8 korakov (s slikami)
Infrardeči daljinski upravljalnik I2C z Arduinom: 8 korakov (s slikami)

Video: Infrardeči daljinski upravljalnik I2C z Arduinom: 8 korakov (s slikami)

Video: Infrardeči daljinski upravljalnik I2C z Arduinom: 8 korakov (s slikami)
Video: Arduino project | IR remote decoder 2024, Julij
Anonim
Infrardeči daljinski upravljalnik I2C z Arduinom
Infrardeči daljinski upravljalnik I2C z Arduinom
Infrardeči daljinski upravljalnik I2C z Arduinom
Infrardeči daljinski upravljalnik I2C z Arduinom

Ta uvodnik podrobno opisuje, kako ustvariti univerzalni daljinski upravljalnik z uporabo I2C za vmesnik.

Kako nenavadno pravite, da uporabljate podrejeno napravo I2C?

Da, podrejena naprava I2C.

To je zato, ker je natančen časovni razpored IR paketov precej zahteven in s katerim se bo tipičen Arduino soočal, če že opravlja številne druge naloge hkrati. Računalniško obremenitev je bolje razdeliti tako, da dodelite časovno intenzivne dejavnosti namenskim procesorjem, kadar koli je to mogoče (bolje je, da to storite strojno). Ker je I2C dobro dokumentirana in robustna komunikacijska metoda med IC -ji, sem to izbral kot vmesnik.

Uvod

Kot je omenjeno zgoraj, ta navodila opisujejo, kako z uporabo knjižnice IRremote na Arduinu upravljati gospodinjske aparate, kot so TV, DVD predvajalnik in satelit itd.

Zaključi se s primerom zasnove, ki Arduino pretvori v podrejeni modul za daljinsko upravljanje I2C (slika 1 zgoraj) s prototipnim preskusnim vezjem (slika 2 zgoraj) in nadaljuje s podrobnostmi, kako skrčiti svojo zasnovo na najmanjše potrebne komponente, da je to mogoče vgrajen v drugo zasnovo. V mojem primeru uporabljam to vgrajeno napravo v univerzalni daljinski upravljalnik IoT, ki temelji na ESP8266-12E.

Katere dele potrebujem?

Za izdelavo vezja, prikazanega v 1. koraku (IR oddajnik), boste potrebovali naslednje dele;

  • 2 od 10K uporov
  • 1 off 390R upor
  • 1 off 33R upor
  • 1 off 3K8 upor
  • 1 izklop Rdeča LED
  • 1 off IR Led TSAL6400
  • 1 off tranzistor BC337
  • 1 kondenzator 220uF
  • 1 off Arduino Uno

Za izdelavo vezja, prikazanega v 4. koraku (IR sprejemnik), boste potrebovali naslednje dele;

  • 1 off 10K upor
  • 1 off TSOP38328
  • 1 kondenzator 220uF
  • 1 off Arduino Uno

Za izdelavo vezja, prikazanega v 5. koraku (podrejeno preskusno vezje), boste potrebovali naslednje dele;

  • 4 iz 10K uporov
  • 2 upor 390R
  • 1 off 33R upor
  • 1 off 3K8 upor
  • 2 izklop Rdeča LED
  • 1 off IR Led TSAL6400
  • 1 off tranzistor BC337
  • 1 kondenzator 220uF
  • 2 gumba SPST
  • 2 off Arduino Unos

Za izdelavo vezja, prikazanega v 6. koraku (skrčena zasnova), boste potrebovali naslednje dele;

  • 3 iz 10K uporov
  • 1 upor 270R
  • 1 off 15R upor
  • 4 off 1K upori
  • 1 izklop Rdeča LED
  • 1 off IR Led TSAL6400 ali TSAL5300
  • 1 off tranzistor BC337
  • 1 off elektrolitski kondenzator 220uF pri 6,3v
  • 1 off 1000uF kondenzator elektrolitski pri 6.3v
  • 2 off 0,1uF kondenzatorji
  • 2 kondenzatorja 22pF
  • 1 izklop 16MHz Xtal
  • 1 off ATMega328P-PU

Opomba: Za programiranje ATMega328P boste potrebovali tudi napravo FTDI

Kakšne veščine potrebujem?

  • Minimalno razumevanje elektronike,
  • Poznavanje Arduina in njegove IDE,
  • Malo potrpljenja,
  • Nekaj razumevanja I2C bi bilo koristno (tukaj si oglejte nekaj splošnih podrobnosti o knjižnici I2C/Wire).

Zajete teme

  • Kratek pregled vezja,
  • Kratek pregled programske opreme,
  • Vsebina paketov I2C,
  • Pridobivanje kod za daljinski upravljalnik (ui32Data),
  • Kako preizkusiti svojo podrejeno napravo I2C,
  • Krčenje vašega dizajna,
  • Zaključek,
  • Uporabljene reference.

Zavrnitev odgovornosti

Kot vedno uporabljate ta navodila na lastno odgovornost in niso podprta.

1. korak: Kratek pregled vezja

Kratek pregled vezja
Kratek pregled vezja

Namen vezja je prenašanje kod za daljinsko upravljanje IR. Njegova zasnova je precej preprosta in preprosta.

Ko je tranzistor Q1 BC337 NPN vklopljen prek logičnega od Arduino PWM O/P D3 do upora R5, tok prehaja skozi Led 1 in 2. Omejen le z balastnimi upori R3 in R4. Q1 se uporablja za povečanje toka, ki prehaja skozi IR diodo (IF Max = 100mA) do tistega, kar presega tisto, kar Arduino O/P zmore ~ 40mA @ +5v.

Kondenzator C1 a 220uF Electrolytic zagotavlja določeno stabilizacijo, ki preprečuje padec napajalne tirnice zaradi moči, ki jo porabita LED 1 in 2.

Upori R1 in R2 so vlečni elementi I2C.

2. korak: Kratek pregled programske opreme

Kratek pregled programske opreme
Kratek pregled programske opreme
Kratek pregled programske opreme
Kratek pregled programske opreme
Kratek pregled programske opreme
Kratek pregled programske opreme

Preambula

Za uspešno sestavljanje te izvorne kode potrebujete naslednjo dodatno knjižnico;

IRremote.h

  • Avtor: z3t0
  • Namen: Infrardeča oddaljena knjižnica za Arduino: pošiljanje in sprejemanje infrardečih signalov z več protokoli
  • Iz:

Pregled kode

Kot je prikazano na sliki 1 zgoraj, koda ob zagonu konfigurira V/I mikrokrmilnika in nato anketira stanje notranje zastavice programske opreme 'bFreshDataFlag'. Ko je ta zastavica nastavljena, krmilnik potrdi, da je vrstica "zasedeno" (pošiljanje podatkovnega zatiča D4 nizko) in se premakne v stanje "eBUSY", pri čemer zaporedoma odčita pritisne gumbe, ki so v uDataArray , in pošlje IR modulirane podatke na IR LED v prenosno zaporedje.

Ko so podatki, shranjeni v uDataArray , v celoti poslani, se stanje „eIDLE“nadaljuje in vrstica „Zaseden“se razveljavi (pošiljanje podatkovnega zatiča D4 visoko). Naprava je zdaj pripravljena na več pritiskov na gumbe, ki označujejo konec zaporedja prenosa.

Sprejem podatkov o pritisku na gumb IR

Ko se podatki pošljejo daljinskemu upravljalniku InfraRed prek I2C, sproži prekinitev in klic funkcije acceptEvent () se sproži asinhrono.

Ko se sprožijo, se prejeti podatki I2C zaporedno zapišejo v medpomnilnik 'uDataArray '.

Med sprejemom podatkov, če glavni signal signalizira konec zaporedja (bFreshData! = 0x00), se nastavi 'bFreshDataFlag', ki signalizira začetek prenosnega zaporedja.

Slike 2… 3 prikazujejo primer tipičnega zaporedja paketov.

Opomba: Celotna izvorna koda je na voljo tukaj

Korak: Vsebina paketov I2C

Vsebina paketov I2C
Vsebina paketov I2C

Oblika nadzornega paketa, poslanega pomožnemu sistemu prek I2C, je prikazana zgoraj na sliki 1, pomen vsakega polja je podan spodaj

Pomen polj kontrolnih paketov

b -kodiranje bajtov;

  • Kodiranje IR daljinskega upravljalnika,

    • RC6 (nebo) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

Šestnajstiška predstavitev binarnega IR podatkovnega toka 4 podatkovni bajti (brez podpisanih dolgih), LSByte … MSByte

bajt bNumberOfBitsInTheData;

Število bitov v podatkih (največ 32). Razpon = 1… 32

bajt bPulseTrainRepeats;

Koliko ponovitev tega impulznega vlaka. Razpon = 1… 255. Običajno 2… 4 ponovitve. To boste morda želeli razširiti za ukaze za vklop/izklop, saj sprejemna naprava včasih potrebuje nekaj dodatnih impulznih vlakovnih ponovitev, da sprejme signal za vklop

bajt bDelayBetweenPulseTrainRepeats;

Zakasnitev med ponovitvami tega impulznega niza. Domet = 1… 255mS. Običajno 22mS… 124mS

bajt bButtonRepeats;

Simulira večkratni pritisk istega gumba (vendar ne podpira spremenjene kode kot daljinski upravljalnik Apple, samo ponovi kodo gumba). Razpon = 1… 256. Privzeto = 1

uint16_t ui16DelayBetweenButtonRepeats;

Zakasnitev med ponovitvami gumbov (brez podpisane int). 2 bajta skupaj LSByte … MSByte. Domet = 1… 65535mS. Privzeto = 0 ms

bajt bFreshData;

  • Sveži podatki. Vrednost, ki ni nič. Zadnje napisano sproži zaporedje IR TX. Razpon 0x00… 0xFF

    • Prihaja več kontrolnih paketov = 0
    • To je zadnji kontrolni paket = vrednost ničelna 1, 2,… 255

Upoštevajte uporabo direktive prevajalnika '_packed_'. To je za zagotovitev, da so podatki paketni bajt za bajt v pomnilniku, ne glede na uporabljeni ciljni sistem (Uno, Due, ESP8266 itd.). To pomeni, da mora zveza med registerAllocationType in dataArrayType le zaporedno urejati/urejati ure v bajtih iz nadzornega paketa, zaradi česar je programska oprema TX/RX preprosta.

4. korak: Pridobitev kod za daljinsko upravljanje (ui32Data)

Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)
Pridobitev kod za daljinsko upravljanje (ui32Data)

Kodo ključa za daljinski upravljalnik lahko pridobite na tri načine;

  1. S štetjem bitov z osciloskopom,
  2. Poiščite na spletnem mestu,
  3. Dešifrirajte ga neposredno iz podatkovnega toka v programski opremi.

Preko štetja bitov z obsegom

To ni učinkovita metoda, saj traja kar nekaj časa in potencialno zahteva več kot en poskus, vendar je lahko zelo natančna. Uporaben je tudi pri vizualnem preverjanju kod, pridobljenih z metodama 2 in 3, tudi pri določanju kakršnih koli posebnosti daljinskega upravljalnika. Na primer, ko držite gumb na daljinskem upravljalniku Apple IR. Daljinski upravljalnik bo najprej izdal zaporedje ukazov, nato pa sledil ponavljajočemu stisnjenemu zaporedju 0xF….

Poiščite ga na spletnem mestu

Baza podatkov o kodah za daljinsko upravljanje na spletnem mestu Linux Infrared Remote Control je dober vir.

Slaba stran pa je, da boste morda morali poskusiti nekaj kod, dokler ne najdete tiste, ki vam ustreza. Morda boste morali razlagati tudi nekatere predstavitve kod, da jih pretvorite v njihovo enakovredno šestnajstiško obliko.

Dešifrirajte ga neposredno iz podatkovnega toka

Z uporabo vezja na sliki 1 zgoraj v povezavi s primerom knjižnice IRremote 'IRrecvDumpV2.ino' je mogoče dekodirati tok podatkov neposredno z daljinskega upravljalnika. Slika 2 prikazuje dekodiran daljinski upravljalnik televizorja Samsung za pritisk gumba za vklop/izklop v oknu terminala Arduino IDE.

Kombinirani sprejemnik/oddajnik

Na slikah 3 in 4 zgoraj je prikazana rešitev, ki omogoča sprejem in prenos IR ukaza za enostavno izdelavo prototipov.

Za dekodiranje pritiskov gumbov na daljinskem upravljalniku IR boste morali Arduino utripati s primerom 'IRrecvDumpV2.ino', ki je priložen knjižnici IRremote.

Enako dobro deluje tudi pri prenosu, če ukaže IR. Rdeča LED dioda je vključena kot vizualni znak, da naprava deluje.

5. korak: Kako preizkusiti svojo podrejeno napravo I2C

Kako preizkusiti podrejeno napravo I2C
Kako preizkusiti podrejeno napravo I2C
Kako preizkusiti podrejeno napravo I2C
Kako preizkusiti podrejeno napravo I2C

Z uporabo izvorne kode in vezja, opisanega zgoraj na sliki 1, programirajte "Master" Arduino z "IR_Remote_Sim_Test.ino" in "Slave" Arduino z "IR_Remote_Sim.ino".

Ob predpostavki, da imate televizor Sony Bravia, Sky HD box in Sony BT SoundBar, pritisnite gumb 1 in televizor bo preklopil na BBC1 (kanal 101). Pritisnite gumb 2 in zvočna vrstica se bo utišala. Ponovno pritisnite in zvok se bo izklopil.

Med izvajanjem zaporedja IR prenosa LED3 zasveti, kar kaže, da je podrejen zaseden, LED1 pa utripa v skladu s postopkom IR prenosa.

Seveda, če nimate nastavljenega istega razvedrilnega sistema kot zgoraj, lahko podrejenega znova programirate z 'IRrecvDumpV2.ino', dekodirate oddaljene ukaze, ki vas zanimajo, in jih nato programirate v 'IR_Remote_Sim_Test.ino' za vaš danem scenariju.

Slika 2 prikazuje pregled programske opreme za testiranje sistemske ravni med glavnim in podrejenim.

Korak 6: Zmanjšajte svojo zasnovo

Krčenje vašega dizajna
Krčenje vašega dizajna

V redu, tako da predpostavka, da ste upoštevali ta navodila, zanašanje na dva Arduinosa za nadzor domačih naprav, ni najučinkovitejša uporaba vaše zaloge Arduino. Če torej sestavite vezje, prikazano na zgornji sliki, in sledite navodilom tukaj za programiranje ATMega328P z 'IR_Remote_Sim.ino', boste lahko celoten sistem zmanjšali na minimalne komponente. To vam bo omogočilo, da svoj dizajn vdelate v kakšen drug sistem.

7. korak: Zaključek

Zaključek
Zaključek
Zaključek
Zaključek

Rešitev je stabilna in dobro deluje, že nekaj tednov je vgrajena v drug sistem brez težav.

Odločil sem se za Arduino Uno R3, saj sem želel napravo, ki ima dovolj RAM -a, da imam lahko vmesnik za gumbe razumne globine. Zadovoljil sem se z velikostjo vmesnega pomnilnika 20 paketov (MAX_SEQUENCES).

Hibridni ščit TX/RX, ki sem ga naredil, mi je prav prišel tudi pri dekodiranju daljincev Sony in Sky. Čeprav moram občasno priznati, da uporabljam svoj digitalni obseg za preverjanje programsko dekodiranega ukaza IR, ki je enak tistemu, ki prihaja iz prejetega IR (TSOP38328).

Edino, kar bi naredil drugače, bi bilo, da bi uporabil vezje s konstantnim tokom za IR vodnik, kot je prikazano zgoraj na sliki 2.

Nadalje je treba opozoriti, da niso vsi IR oddajniki modulirani s 38KHz, TSOP38328 je optimiziran za 38KHz.

8. korak: Uporabljene reference

IRRemote.h

  • Avtor: z3t0
  • Namen: Infrardeča oddaljena knjižnica za Arduino: pošiljanje in sprejemanje infrardečih signalov z več protokoli
  • Iz:

IR oddaljena knjižnica

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

IR (infrardeči) senzor sprejemnika - TSOP38238 (enakovredno)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

Da bi se izognili dodajanju strukture podatkov do meja besed

  • 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

Dober vir podrobnosti o daljinskem upravljanju IR

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

IR Remote Database

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

Tehnični list BC337

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

Tehnični list 1N4148

https://www.vishay.com/docs/81857/1n4148.pdf

Tehnični list ATMega328P-PU

Priporočena: