Sisällysluettelo:
- Vaihe 1: Lyhyt yleiskatsaus piiristä
- Vaihe 2: Lyhyt yleiskatsaus ohjelmistosta
- Vaihe 3: I2C -pakettisisältö
- Vaihe 4: Kaukosäätimen koodien hankkiminen (ui32Data)
- Vaihe 5: I2C -orjalaitteen testaaminen
- Vaihe 6: Pienennä muotoilua
- Vaihe 7: Johtopäätös
- Vaihe 8: Käytetyt viitteet
Video: I2C -infrapunakaukosäädin Arduinolla: 8 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
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ä
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
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ö
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)
Voit hankkia vastaavan kauko -ohjaimen avainkoodin kolmella tavalla;
- Bittien laskemisen avulla oskilloskoopilla,
- Katso se verkkosivustolta,
- 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
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
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
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:
20x4 I2C -merkkisen LCD -näytön käyttäminen Arduinolla: 6 vaihetta
20x4 I2C -merkkisen LCD -näytön käyttäminen Arduinon kanssa: Tässä yksinkertaisessa opetusohjelmassa opimme käyttämään 20x4 I2C -merkkistä LCD -näyttöä Arduino Unon kanssa yksinkertaisen tekstin näyttämiseen " Hei maailma. Katso video
Ouija Arduinolla: 6 vaihetta (kuvilla)
Ouija Arduinon kanssa: Onko Halloweenille jotain parempaa kuin ottaa yhteyttä henkimaailmaan Ouija -taulun kautta? Tämä projekti koskee kotitekoisen Ouija -levyn luomista Arduino -ohjelman avulla. Todellisen Ouijan kaltaista työtä varten meidän on asetettava laatikkoon yksi servomoottori, päällä
Taajuuslaskuri Arduinolla: 8 vaihetta (kuvilla)
Taajuuslaskuri Arduinolla: Tämä on yksinkertainen ja halpa arduino -pohjainen taajuuslaskuri, joka maksaa alle 4 dollaria, ja se on ollut erittäin hyödyllistä mitata pieniä piirejä
I2C Oled -näytön ohjaaminen Arduinolla: 9 vaihetta (kuvilla)
Kuinka hallita I2C Oled -näyttöä Arduinolla: Tämä on hyvin yksinkertainen opetusohjelma I2C Oled -näytön hallitsemiseksi Arduinolla Jos pidät tästä ohjeesta, tilaa minun kanavani https://www.youtube.com/ZenoModiff
TCA9548A I2C -multiplekserimoduuli - Arduinolla ja solmulla MCU: 11 vaihetta
TCA9548A I2C -multiplekserimoduuli - Arduinon ja NodeMCU: n kanssa: Oletko koskaan joutunut tilanteeseen, jossa jouduit kytkemään kaksi, kolme tai useampia I2C -antureita Arduinoosi vain ymmärtääksesi, että antureilla on kiinteä tai sama I2C -osoite. Lisäksi sinulla ei voi olla kahta laitetta, joilla on sama osoite samassa SDA