Sisällysluettelo:

I2C -infrapunakaukosäädin Arduinolla: 8 vaihetta (kuvilla)
I2C -infrapunakaukosäädin Arduinolla: 8 vaihetta (kuvilla)

Video: I2C -infrapunakaukosäädin Arduinolla: 8 vaihetta (kuvilla)

Video: I2C -infrapunakaukosäädin Arduinolla: 8 vaihetta (kuvilla)
Video: Comment utiliser l'écran OLED SSD1306 128x32 I2C avec le code Arduino 2024, Marraskuu
Anonim
I2C -infrapunakaukosäädin Arduinon kanssa
I2C -infrapunakaukosäädin Arduinon kanssa
I2C -infrapunakaukosäädin Arduinon kanssa
I2C -infrapunakaukosäädin Arduinon kanssa

Johdanto Tässä oppaassa kerrotaan, kuinka luoda universaali kauko -ohjain käyttämällä I2C -liitäntää.

Kuinka outoa sanot, kun käytät I2C -orjalaitetta?

Kyllä, I2C -orjalaite.

Tämä johtuu siitä, että IR -pakettien tarkka ajoitus on varsin vaativa ja tyypillisen Arduinon on vaikea kamppailla, jos se suorittaa jo monia muita tehtäviä samanaikaisesti. On parempi jakaa laskentataakka määrittämällä ajoitusintensiivisiä toimintoja omistetuille prosessoreille aina kun mahdollista (parempi silti tehdä se laitteistossa). Koska I2C on hyvin dokumentoitu ja vankka viestintämenetelmä IC: iden välillä, valitsin tämän rajapinnaksi.

Johdanto

Kuten edellä mainittiin, tässä ohjeessa kuvataan, miten voit hallita kodinkoneita, kuten televisiota, DVD -soitinta ja satelliittia jne. Arduinon IRremote -kirjaston avulla.

Se päättyy suunnitteluesimerkillä Arduinon muuttamisesta I2C -orjakauko -ohjainmoduuliksi (kuva 1 yllä), jossa on prototyyppitestipiiri (kuva 2 yllä), ja jatkuu yksityiskohtaisesti, kuinka pienentää suunnittelua tarvittaviin vähimmäiskomponentteihin, jotta se voidaan upotettu toiseen muotoiluun. Minun tapauksessani käytän tätä sulautettua laitetta IoT Universal -kaukosäätimessä, joka perustuu ESP8266-12E: hen.

Mitä osia tarvitsen?

Vaiheen 1 (IR -lähetin) piirin rakentamiseksi tarvitset seuraavat osat;

  • 2 off 10K vastukset
  • 1 pois 390R vastus
  • 1 pois 33R -vastus
  • 1 off 3K8 vastus
  • 1 pois päältä punainen LED
  • 1 pois IR Led TSAL6400
  • 1 pois päältä transistori BC337
  • 1 pois 220uF kondensaattori
  • 1 pois päältä Arduino Uno

Vaiheen 4 (IR -vastaanotin) piirin rakentamiseksi tarvitset seuraavat osat;

  • 1 off 10K vastus
  • 1 pois TSOP38328
  • 1 pois 220uF kondensaattori
  • 1 pois päältä Arduino Uno

Vaiheessa 5 (orjatestipiiri) kuvatun piirin rakentamiseen tarvitset seuraavat osat;

  • 4 off 10K vastukset
  • 2 pois 390R vastus
  • 1 pois 33R -vastus
  • 1 off 3K8 vastus
  • 2 pois päältä punainen LED
  • 1 pois IR Led TSAL6400
  • 1 pois päältä transistori BC337
  • 1 pois 220uF kondensaattori
  • 2 SPST -painiketta
  • 2 pois Arduino Unosista

Vaiheessa 6 (kutistussuunnittelu) kuvatun piirin rakentamiseen tarvitset seuraavat osat;

  • 3 off 10K vastukset
  • 1 pois päältä 270R vastus
  • 1 off 15R vastus
  • 4 off 1K vastukset
  • 1 pois päältä punainen LED
  • 1 pois IR Led TSAL6400 tai TSAL5300
  • 1 pois päältä transistori BC337
  • 1 pois 220uF kondensaattori elektrolyyttinen @ 6.3v
  • 1 pois 1000uF kondensaattori elektrolyyttinen @ 6.3v
  • 2 pois 0,1uF kondensaattorit
  • 2 pois 22pF kondensaattoria
  • 1 pois päältä 16MHz Xtal
  • 1 pois päältä ATMega328P-PU

Huomautus: ATMega328P: n ohjelmointi vaatii myös FTDI -laitteen

Mitä taitoja tarvitsen?

  • Minimaalinen käsitys elektroniikasta,
  • Tieto Arduinosta ja sen IDE: stä
  • Vähän kärsivällisyyttä,
  • I2C: n ymmärtäminen olisi hyödyllistä (katso täältä joitain yleisiä I2C/Wire Library -tietoja).

Käsitellyt aiheet

  • Lyhyt katsaus piiriin,
  • Lyhyt yleiskatsaus ohjelmistosta,
  • I2C -paketin sisältö,
  • Kaukosäätimen koodien hankkiminen (ui32Data),
  • I2C Slave -laitteen testaaminen,
  • Pienentää suunnittelua,
  • Johtopäätös,
  • Käytetyt viitteet.

Vastuuvapauslauseke

Kuten aina, käytät näitä ohjeita omalla vastuullasi, eikä niitä tueta.

Vaihe 1: Lyhyt yleiskatsaus piiristä

Lyhyt katsaus piiriin
Lyhyt katsaus piiriin

Piirin tarkoitus on lähettää infrapunakaukosäätimen koodeja. Sen suunnittelu on melko suoraviivaista ja melko yksinkertaista.

Kun transistori Q1 a BC337 NPN kytketään päälle logiikan kautta Arduino PWM O/P D3: sta vastukseen R5, virta kulkee ledien 1 ja 2 kautta. Rajoitettu vain painolastivastuksilla R3 ja R4. Q1: tä käytetään tehostamaan IR -diodin läpi kulkevaa virtaa (IF Max = 100mA) yli sen arvon, joka ylittää Arduino O/P: n kyvyn ~ 40mA @ +5v syöttöön.

Kondensaattori C1 a 220uF Electrolytic tarjoaa jonkin verran vakautusta, joka estää syöttökiskon putoamisen ledien 1 ja 2 ottaman tehon ansiosta.

Vastukset R1 ja R2 ovat I2C -vetoja.

Vaihe 2: Lyhyt yleiskatsaus ohjelmistosta

Lyhyt katsaus ohjelmistoon
Lyhyt katsaus ohjelmistoon
Lyhyt katsaus ohjelmistoon
Lyhyt katsaus ohjelmistoon
Lyhyt katsaus ohjelmistoon
Lyhyt katsaus ohjelmistoon

Johdanto

Tämän lähdekoodin kääntämiseksi tarvitset seuraavan ylimääräisen kirjaston;

IRremote.h

  • Lähettäjä: z3t0
  • Tarkoitus: Infrapuna -etäkirjasto Arduinolle: lähetä ja vastaanota infrapunasignaaleja useilla protokollilla
  • Lähde:

Koodin yleiskatsaus

Kuten yllä olevassa kuvassa 1 esitetään, käynnistettäessä koodi konfiguroi mikro-ohjaimen I/O: n ja kyselee sitten sisäisen ohjelmistolipun 'bFreshDataFlag' tilan. Kun tämä lippu on asetettu, ohjain väittää olevansa varattu -rivillä (datatapin D4 matala lähettäminen) ja siirtyy eBUSY -tilaan, kun painikekomennot luetaan peräkkäin uDataArray : ssa ja lähetetään IR -moduloitu data IR -LEDiin lähetysjärjestys.

Kun uDataArray : ssa olevat tiedot on lähetetty kokonaan, eIDLE-tila palautuu ja "Varattu" -rivin vahvistus poistetaan (datanappi D4 korkea). Laite on nyt valmis vastaanottamaan lisää painalluksia, jotka merkitsevät lähetysjakson loppua.

IR -painikkeen painallustietojen vastaanotto

Kun data lähetetään infrapunakaukosäätimeen I2C: n kautta, se laukaisee keskeytyksen ja vastaanottotoiminto () -toiminnon kutsu käynnistyy asynkronisesti.

Käynnistyksen jälkeen vastaanotettu I2C -data kirjoitetaan peräkkäin puskuriin 'uDataArray '.

Jos isäntä ilmoittaa jakson päättymisen datan vastaanoton aikana (bFreshData! = 0x00), asetetaan 'bFreshDataFlag', mikä merkitsee lähetysjakson alkua.

Kuvissa 2… 3 on esimerkki tyypillisestä pakettisarjasta.

Huomautus: Koko lähdekoodi saatavilla täältä

Vaihe 3: I2C -pakettisisältö

I2C -pakettisisältö
I2C -pakettisisältö

Orjalle I2C: n kautta lähetetyn ohjauspaketin muoto on esitetty yllä kuvassa 1, kunkin kentän merkitys on annettu alla

Ohjauspakettikenttien merkitys

tavu bKoodaus;

  • IR -kauko -ohjaimen koodaus,

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

uint32_t ui32Data;

Binaarisen IR -datavirran heksadesimaali 4 datatavua (allekirjoittamaton pitkä), LSByte… MSByte

tavu bNumberOfBitsInTheData;

Bittien määrä tiedoissa (enintään 32). Alue = 1… 32

tavu bPulseTrainRepeats;

Kuinka monta toistoa tästä pulssijunasta. Alue = 1… 255. Yleensä 2… 4 toistoa. Voit halutessasi laajentaa tätä päälle/pois -komennoille, koska vastaanottava laite vaatii joskus muutaman ylimääräisen pulssijonon toistoa vastaanottaakseen käynnistyssignaalin

tavu bDelayBetweenPulseTrainRepeats;

Viive tämän pulssijonon toistojen välillä. Alue = 1… 255mS. Tyypillisesti 22 mS… 124 mS

tavu bButtonRepeats;

Simuloi saman painikkeen toistuvaa painamista (mutta ei tue muokattua koodia kuten Applen kaukosäädin, se vain toistaa painikekoodin). Alue = 1… 256. Oletus = 1

uint16_t ui16DelayBetweenButtonRepeats;

Viive painikkeiden toistojen välillä (allekirjoittamaton int). 2 tavua yhteensä LSByte… MSByte. Alue = 1… 65535mS. Oletus = 0mS

tavu bFreshData;

  • Tuoretta dataa. Ei-nolla-arvo. Kirjoitettu viimeisenä, laukaisee IR TX -sarjan. Alue 0x00… 0xFF

    • Lisää ohjauspaketteja tulossa = 0
    • Tämä on viimeinen ohjauspaketti = Ei-nolla-arvo 1, 2,… 255

Huomaa kääntäjädirektiivin _packed_ käyttö. Tällä varmistetaan, että tiedot ovat pakettitavu tavua kohti muistissa käytetystä kohdejärjestelmästä riippumatta (Uno, Due, ESP8266 jne.). Tämä tarkoittaa, että registerAllocationType ja dataArrayType tarvitsevat liitoksen vain peräkkäin kellon ulos/kello tavuina ohjauspaketista, mikä tekee TX/RX -ohjelmistosta yksinkertaisen.

Vaihe 4: Kaukosäätimen koodien hankkiminen (ui32Data)

Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)
Kaukosäätimen koodien hankkiminen (ui32Data)

Voit hankkia vastaavan kauko -ohjaimen avainkoodin kolmella tavalla;

  1. Bittien laskemisen avulla oskilloskoopilla,
  2. Katso se verkkosivustolta,
  3. Dekoodaa se suoraan ohjelmiston tietovirrasta.

Bittien laskennan avulla

Tämä ei ole tehokas menetelmä, koska se kestää jonkin aikaa ja vaatii mahdollisesti useamman kuin yhden yrityksen, mutta se voi olla erittäin tarkka. Se on myös hyödyllinen menetelmien 2 ja 3 avulla saatujen koodien visuaalisessa vahvistamisessa, myös kaukosäätimen ominaisuuksien määrittämisessä. Esimerkkinä, kun pidät Apple IR -kaukosäätimen painiketta painettuna. Kaukosäädin antaa aluksi komentosarjan ja seuraa sitä toistetulla pakatulla sekvenssillä 0xF….

Katso se verkkosivustolta

Linuxin infrapunakaukosäätimen verkkosivuston kaukosäätimen kooditietokanta on hyvä lähde.

Haittapuoli on kuitenkin se, että sinun on ehkä kokeiltava muutamia koodeja, kunnes löydät itsellesi sopivan koodin. Saatat joutua myös tulkitsemaan joitain koodien esityksiä, jotta ne voidaan muuntaa vastaavaksi heksamuotoon.

Purkaa se suoraan tietovirrasta

Käyttämällä yllä olevan kuvan 1 piiriä yhdessä IRremote -kirjaston esimerkin 'IRrecvDumpV2.ino' kanssa on mahdollista purkaa tietovirta suoraan kaukosäätimestä. Kuvassa 2 on dekoodattu Samsungin TV -kaukosäädin Arduino IDE -pääteikkunan päälle/pois -painikkeen painamista varten.

Yhdistetty vastaanotin/lähetin

Yllä olevat kuvat 3 ja 4 esittävät ratkaisua, joka mahdollistaa sekä IR -komennon vastaanottamisen että lähettämisen, jotta prototyyppien muodostaminen on helppoa.

Jos haluat purkaa IR -kaukosäätimen painikkeiden purkamisen, sinun on salattava Arduino IRremc -kirjaston mukana toimitetulla esimerkillä 'IRrecvDumpV2.ino'.

Se toimii yhtä hyvin myös lähetykseen, jos IR -komentoja. Laitteessa on punainen LED, joka ilmaisee laitteen toiminnan.

Vaihe 5: I2C -orjalaitteen testaaminen

Kuinka testata I2C -orjalaitteesi
Kuinka testata I2C -orjalaitteesi
Kuinka testata I2C -orjalaitteesi
Kuinka testata I2C -orjalaitteesi

Ohjelmoi 'Master' Arduino ohjelmalla 'IR_Remote_Sim_Test.ino' ja 'Slave' Arduino ja 'IR_Remote_Sim.ino' käyttämällä tässä lähdekoodia ja yllä kuvattua piiriä.

Olettaen, että sinulla on Sony Bravia TV, Sky HD -laatikko ja Sony BT SoundBar, paina painiketta 1 ja televisio vaihtaa BBC1: ksi (kanava 101). Paina näppäintä 2 ja äänipalkki mykistyy. Paina uudelleen ja mykistys poistuu.

IR -lähetysjakson suorittamisen aikana LED3 syttyy osoittaen, että orja on varattu ja LED1 välkkyy IR -lähetyksen yhteydessä.

Tietenkin, jos sinulla ei ole samaa viihdejärjestelmää kuin yllä, voit ohjelmoida orjan uudelleen 'IRrecvDumpV2.ino' -ohjelmalla, purkaa kiinnostavat etäkomennot ja ohjelmoida ne 'IR_Remote_Sim_Test.ino' annettu skenaario.

Kuva 2 näyttää järjestelmän tason testausohjelmiston yleiskatsauksen Masterin ja Slaven välillä.

Vaihe 6: Pienennä muotoilua

Muotoilun kutistaminen
Muotoilun kutistaminen

Okei, joten olettaen, että olet noudattanut tätä ohjetta, kun luotat kahteen Arduinoon hallitaksesi kodin laitteitasi, ei ole tehokkain Arduino -varastosi käyttö. Näin ollen, jos rakennat yllä olevassa kuvassa esitetyn piirin ja ohjelmoit ATMega328P: n 'IR_Remote_Sim.ino' -ohjelman avulla, voit pienentää koko järjestelmän minimikomponenteiksi. Tämän avulla voit upottaa suunnittelusi johonkin toiseen järjestelmään.

Vaihe 7: Johtopäätös

Johtopäätös
Johtopäätös
Johtopäätös
Johtopäätös

Ratkaisu on vakaa ja toimii hyvin, se on upotettu toiseen järjestelmään jo muutaman viikon ajan ilman ongelmia.

Valitsin Arduino Uno R3: n, koska halusin laitteen, jossa oli riittävästi RAM -muistia, jotta minulla olisi kohtuullisen syvä painikepuskuri. Olen tyytynyt puskurikokoon, joka on 20 pakettia (MAX_SEQUENCES).

Valmistamani Hybrid TX/RX -kilpi tuli myös erittäin käteväksi Sonyn ja Sky -kaukosäätimien dekoodauksessa. Vaikka minun on tunnustettava, että käytin digitaalista laajuuttani aika ajoin tarkistaakseni, että ohjelmiston dekoodattu IR -komento oli sama kuin vastaanotetulta IR: ltä (TSOP38328).

Ainoa asia, jonka olisin tehnyt toisin, olisi ollut käyttää vakiovirtapiiriä IR -ledille, kuten yllä kuvassa 2.

Vielä yksi huomioitava asia on, että kaikkia infrapunalähettimiä ei ole moduloitu 38 kHz: llä, vaan TSOP38328 on optimoitu 38 kHz: lle.

Vaihe 8: Käytetyt viitteet

IRRemote.h

  • Lähettäjä: z3t0
  • Tarkoitus: Infrapuna -etäkirjasto Arduinolle: lähetä ja vastaanota infrapunasignaaleja useilla protokollilla
  • Lähde:

IR -etäkirjasto

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

IR (infrapuna) -vastaanotinanturi - TSOP38238 (vastaava)

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

Välttää tietorakenteen täyttyminen sanojen rajoille

  • 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

Hyvä IR -etätietojen lähde

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

I2C

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

IR Remotes -tietokanta

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

BC337 tuotetiedot

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

1N4148 tuotetiedot

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

Suositeltava: