Sisukord:

I2C infrapuna kaugjuhtimispult Arduinoga: 8 sammu (piltidega)
I2C infrapuna kaugjuhtimispult Arduinoga: 8 sammu (piltidega)

Video: I2C infrapuna kaugjuhtimispult Arduinoga: 8 sammu (piltidega)

Video: I2C infrapuna kaugjuhtimispult Arduinoga: 8 sammu (piltidega)
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Detsember
Anonim
I2C infrapuna kaugjuhtimispult koos Arduinoga
I2C infrapuna kaugjuhtimispult koos Arduinoga
I2C infrapuna kaugjuhtimispult koos Arduinoga
I2C infrapuna kaugjuhtimispult koos Arduinoga

Selles juhendis kirjeldatakse üksikasjalikult universaalse kaugjuhtimispuldi loomist liidese I2C abil.

Kui veider sa ütled, kasutades I2C alamseadet?

Jah, I2C alamseade.

Seda seetõttu, et IR -pakettide täpne ajastus on üsna nõudlik ja tüüpilise Arduinoga tuleb võidelda, kui ta juba täidab paljusid muid ülesandeid samal ajal. Arvutamiskoormust on parem jaotada, määrates igal võimalusel pühendatud protsessoritele ajamahukad tegevused (parem seda siiski teha riistvaras). Arvestades, et I2C on hästi dokumenteeritud ja tugev kommunikatsioonimeetod IC -de vahel, valisin selle liideseks.

Sissejuhatus

Nagu eespool mainitud, kirjeldab see juhend, kuidas juhtida kodumasinaid, nagu teler, DVD -mängija ja satelliit jne, kasutades Arduino IRremote'i raamatukogu.

See lõpeb disaininäitega, mis muudab Arduino I2C alamkaugjuhtimismooduliks (pilt 1 ülal) koos prototüübi testiahelaga (pilt 2 ülal) ja kirjeldab üksikasjalikult, kuidas vähendada oma disaini minimaalseteks vajalikeks komponentideks, et seda saaks integreeritud teise kujundusse. Minu puhul kasutan seda sisseehitatud seadet IoT Universal kaugjuhtimisseadmes, mis põhineb ESP8266-12E.

Milliseid osi ma vajan?

1. etapis (IR -saatja) kujutatud vooluahela ehitamiseks vajate järgmisi osi;

  • 2 10K takistit
  • 1 väljalülitatud 390R takisti
  • 1 välja 33R takisti
  • 1 välja 3K8 takisti
  • 1 väljas punane LED
  • 1 väljalülitatud IR Led TSAL6400
  • 1 off Transistor BC337
  • 1 välja 220uF kondensaator
  • 1 off Arduino Uno

4. etapis (IR -vastuvõtja) kujutatud vooluahela ehitamiseks vajate järgmisi osi;

  • 1 off 10K takisti
  • 1 soodustus TSOP38328
  • 1 välja 220uF kondensaator
  • 1 off Arduino Uno

5. etapis (alamkatse ahel) kujutatud vooluahela ehitamiseks vajate järgmisi osi;

  • 4 10K takistit
  • 2 off 390R takisti
  • 1 välja 33R takisti
  • 1 välja 3K8 takisti
  • 2 välja lülitatud punane LED
  • 1 väljalülitatud IR Led TSAL6400
  • 1 off Transistor BC337
  • 1 välja 220uF kondensaator
  • 2 SPST -nuppu
  • 2 off Arduino Unos

Etapis 6 (kahanenud disain) kujutatud vooluahela ehitamiseks vajate järgmisi osi;

  • 3 10K takistit
  • 1 väljalülitatud 270R takisti
  • 1 väljalülitatud 15R takisti
  • 4 1K takistit
  • 1 väljas punane LED
  • 1 väljalülitatud IR Led TSAL6400 või TSAL5300
  • 1 off Transistor BC337
  • 1 välja 220uF kondensaator elektrolüütiline @ 6,3v
  • 1 välja 1000uF kondensaator elektrolüütiline @ 6,3v
  • 2 välja 0,1uF kondensaatorit
  • 2 välja lülitatud 22pF kondensaatorit
  • 1 väljalülitatud 16MHz Xtal
  • 1 soodustus ATMega328P-PU

Märkus. ATMega328P programmeerimiseks vajate ka FTDI -seadet

Milliseid oskusi mul vaja on?

  • Elektroonika minimaalne tundmine,
  • Teadmised Arduino ja selle IDE kohta,
  • Natuke kannatust,
  • Kasuks tuleks mõningane arusaam I2C -st (vt mõningaid üldisi I2C/Wire Library üksikasju siit).

Käsitletud teemad

  • Lühike ülevaade vooluringist,
  • Tarkvara lühiülevaade,
  • I2C paketi sisu,
  • Kaugjuhtimispuldi koodide hankimine (ui32Data),
  • Kuidas testida oma I2C alamseadet,
  • Kahandades oma disaini,
  • Järeldus,
  • Kasutatud viited.

Vastutusest loobumine

Nagu alati, kasutate neid juhiseid omal vastutusel ja neid ei toetata.

Samm: lühike ülevaade vooluringist

Ringraja lühiülevaade
Ringraja lühiülevaade

Vooluahela eesmärk on edastada IR kaugjuhtimispuldi koode. Selle disain on üsna lihtne ja lihtne.

Kui transistor Q1 a BC337 NPN on sisse lülitatud loogika kaudu Arduino PWM O/P D3 -lt takistile R5, läbib vool LEDid 1 ja 2. Seda piiravad ainult liiteseadised R3 ja R4. Q1 kasutatakse IR -dioodi läbiva voolu suurendamiseks (IF Max = 100 mA) üle Arduino O/P võimsuse, mis on võimeline ~ 40 mA @ 5 V toiteallikaks.

Kondensaator C1 ja 220uF Electrolytic tagab mõningase stabiliseerimise, takistades toitekaabli langust LED -ide 1 ja 2 poolt tarbitud võimsuse tõttu.

Takistid R1 ja R2 on I2C tõmbejõud.

2. samm: tarkvara lühiülevaade

Tarkvara lühiülevaade
Tarkvara lühiülevaade
Tarkvara lühiülevaade
Tarkvara lühiülevaade
Tarkvara lühiülevaade
Tarkvara lühiülevaade

Preambul

Selle lähtekoodi edukaks kompileerimiseks vajate järgmist lisateeki;

IRremote.h

  • Autor: z3t0
  • Eesmärk: Arduino infrapuna kaugteek: mitme protokolliga infrapunasignaalide saatmine ja vastuvõtmine
  • Siit:

Koodi ülevaade

Nagu on näidatud ülaltoodud pildil 1, konfigureerib kood käivitamisel mikrokontrolleri I/O ja küsitleb seejärel sisemise tarkvara lipu "bFreshDataFlag" olekut. Kui see lipp on seatud, kinnitab kontroller, et see on hõivatud (andmepinge D4 on madal) ja liigub olekusse „eBUSY”, mis loeb järjestikku nuppude uDataArray all hoitavaid käsklusi ja saadab IR -moduleeritud andmed IR -LED -i edastusjärjestus.

Kui uDataArray salvestatud andmed on täielikult saadetud, jätkatakse olekut „eIDLE” ja rida „Hõivatud” tühistatakse (andmeside D4 kõrge). Seade on nüüd valmis vastu võtma rohkem nupuvajutusi, mis tähistavad edastusjada lõppu.

IR -nupu vajutamise andmete vastuvõtmine

Kui andmed saadetakse infrapunakaugjuhtimispuldile I2C kaudu, käivitab see katkestuse ja funktsioonikõne ReceiveEvent () käivitatakse asünkroonselt.

Pärast käivitamist kirjutatakse vastuvõetud I2C andmed järjestikku puhvrisse „uDataArray ”.

Andmete vastuvõtmise ajal, kui kapten annab märku jada lõppemisest (bFreshData! = 0x00), määratakse 'bFreshDataFlag', andes seega märku edastusjada algusest.

Pildid 2… 3 annavad näite tüüpilisest pakettide järjestusest.

Märkus: täielik lähtekood on saadaval siin

3. samm: I2C pakettide sisu

I2C pakettide sisu
I2C pakettide sisu

I2C kaudu orjale saadetud juhtpaketi vorming on toodud ülal pildil 1, iga välja tähendus on toodud allpool

Kontrollpaketi väljade tähendus

bait bKodeerimine;

  • IR kaugjuhtimispuldi kodeering,

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

uint32_t ui32Data;

Binaarse IR -andmevoo kuueteistkümnes esitus 4 andmebaiti (allkirjata pikk), LSByte… MSByte

bait bNumberOfBitsInTheData;

Bittide arv andmetes (maksimaalselt 32). Vahemik = 1… 32

bait bPulseTrainRepeats;

Mitu kordust seda impulssrongi. Vahemik = 1… 255. Tavaliselt 2… 4 kordust. Võimalik, et soovite seda pikendada ka sisse-/väljalülituskäskude puhul, kuna vastuvõttev seade nõuab sisselülitussignaali vastuvõtmiseks mõnikord paar täiendavat impulssirongi kordust

bait bDelayBetweenPulseTrainRepeats;

Hilinemine selle impulssrongi korduste vahel. Vahemik = 1… 255mS. Tavaliselt 22 mS… 124 mS

bait bButtonRepeats;

Simuleerib sama nupu korduvat vajutamist (kuid ei toeta muudetud koodi nagu Apple'i pult, vaid kordab nupukoodi). Vahemik = 1… 256. Vaikimisi = 1

uint16_t ui16DelayBetweenButtonRepeats;

Viivitus nupukorduste vahel (allkirjastamata int). 2 baiti kokku LSByte… MSByte. Vahemik = 1… 65535mS. Vaikimisi = 0mS

bait bFreshData;

  • Värsked andmed. Nullist erinev väärtus. Viimasena kirjutatud, käivitab IR TX jada. Vahemik 0x00… 0xFF

    • Tuleb veel juhtpakette = 0
    • See on viimane kontrollpakett = nullivaba väärtus 1, 2,… 255

Pange tähele kompileerimisdirektiivi „_packed_” kasutamist. Selle eesmärk on tagada, et andmed on mälus baitide kaupa, olenemata kasutatavast sihtsüsteemist (Uno, Due, ESP8266 jne). See tähendab, et registerAllocationType ja dataArrayType liit peavad juhtpaketist ainult järjestikku välja ajama/kella baitides muutma TX/RX tarkvara lihtsaks.

Samm: kaugjuhtimispuldi koodide hankimine (ui32Data)

Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)
Kaugjuhtimispuldi koodide hankimine (ui32Data)

Vastava kaugjuhtimispuldi võtmekoodi hankimiseks on kolm võimalust;

  1. Bittide loendamise abil ostsilloskoobiga
  2. Vaadake seda veebisaidilt,
  3. Dekodeerige see otse tarkvara andmevoost.

Bittide loendamise abil ulatusega

See ei ole tõhus meetod, kuna see võtab üsna kaua aega ja nõuab rohkem kui ühte katset, kuid see võib olla väga täpne. See on kasulik ka meetodite 2 ja 3 abil saadud koodide visuaalsel valideerimisel, samuti kaugjuhtimispuldi eripärade määramisel. Näiteks Apple IR -puldi nuppu all hoides. Kaugjuhtimispult väljastab esialgu käsujärje, seejärel järgneb sellele korduva tihendatud järjestusega 0xF….

Otsige seda veebisaidilt

Linuxi infrapunakaugjuhtimise veebisaidi kaugjuhtimispuldi koodide andmebaas on hea allikas.

Negatiivne külg on aga see, et peate võib -olla proovima mõnda koodi, kuni leiate endale sobiva. Samuti peate võib -olla tõlgendama mõningaid koodide esitusi, et teisendada need samaväärseks kuuskantvormiks.

Dekodeerige see otse andmevoost

Kasutades ülaltoodud pildil 1 olevat vooluahelat koos IRremote raamatukogu näitega 'IRrecvDumpV2.ino', on võimalik andmevoogu dekodeerida otse kaugjuhtimispuldist. Pildil 2 on näidatud dekodeeritud Samsungi teleri kaugjuhtimispult sisse- ja väljalülitamiseks Arduino IDE terminaliaknas.

Kombineeritud vastuvõtja/saatja

Ülaltoodud piltidel 3 ja 4 on kujutatud lahendus, mis võimaldab nii IR -käsu vastuvõtmist kui ka edastamist, võimaldades hõlpsat prototüüpimist.

IR -kaugjuhtimispuldi nupuvajutuste dekodeerimiseks peate Arduino välgutama IRremc raamatukoguga kaasas oleva näitega 'IRrecvDumpV2.ino'.

See töötab võrdselt hästi ka edastamiseks, kui IR -käsud. Seadme toimimise visuaalseks indikaatoriks on punane LED.

Samm: kuidas testida oma I2C alamseadet

Kuidas testida oma I2C alamseadet
Kuidas testida oma I2C alamseadet
Kuidas testida oma I2C alamseadet
Kuidas testida oma I2C alamseadet

Kasutades siin olevat lähtekoodi ja joonisel 1 ülaltoodud vooluringi, programmeerige „Master” Arduino parameetriga „IR_Remote_Sim_Test.ino” ja „Slave” Arduino parameetriga „IR_Remote_Sim.ino”.

Eeldades, et teil on Sony Bravia teler, Sky HD kast ja Sony BT SoundBar, vajutage nuppu 1 ja teie teler lülitub BBC1 -le (kanal 101). Vajutage nuppu 2 ja heliriba vaigistatakse. Vajutage uuesti ja vaigistus tühistatakse.

Infrapunakiirguse jada täitmise ajal süttib LED3, mis näitab, et alam on hõivatud, ja LED1 vilgub IR -edastusprotsessiga kooskõlas.

Muidugi, kui teil pole ülaltoodud meelelahutussüsteemi seadistatud, saate alamprogrammi "IRrecvDumpV2.ino" abil uuesti programmeerida, dekodeerida huvipakkuvad kaugkäsklused ja seejärel programmeerida need "IR_Remote_Sim_Test.ino" antud stsenaarium.

Joonis 2 näitab süsteemi taseme testitarkvara ülevaadet Masteri ja Slave'i vahel.

6. samm: oma disaini vähendamine

Teie disaini vähendamine
Teie disaini vähendamine

Olgu, nii et eeldades, et järgisite seda juhendit, tuginedes kahele Arduinole oma koduseadmete juhtimiseks, ei ole teie Arduino varu kõige tõhusam kasutamine. Järelikult, kui konstrueerite ülaltoodud pildil näidatud vooluahela ja järgite siin toodud juhiseid ATMega328P programmeerimiseks parameetriga „IR_Remote_Sim.ino”, saate kogu süsteemi vähendada minimaalseteks komponentideks. See võimaldab teil oma disaini mõnda muusse süsteemi lisada.

Samm 7: Järeldus

Järeldus
Järeldus
Järeldus
Järeldus

Lahendus on stabiilne ja töötab hästi, see on juba mitu nädalat ilma probleemideta manustatud teise süsteemi.

Valisin Arduino Uno R3, kuna soovisin seadet, millel oleks piisavalt RAM -i, et mul oleks mõistliku sügavusega nupupuhvrit. Leppisin puhvri suurusega 20 paketti (MAX_SEQUENCES).

Minu valmistatud Hybrid TX/RX kilp tuli ka Sony ja Sky kaugjuhtimispultide dekodeerimisel väga kasuks. Kuigi pean tunnistama, et kasutasin aeg -ajalt oma digitaalset ulatust, et kontrollida, kas tarkvara dekodeeritud IR -käsk oli sama, mis vastu võetud IR -lt (TSOP38328).

Ainuke asi, mida ma oleksin teisiti teinud, oleks olnud IR -juhtme pideva vooluahela kasutamine, nagu ülal näidatud pildil 2.

Veel üks punkt, mida tuleb märkida, on see, et mitte kõik IR -saatjad pole moduleeritud 38KHz -ga, TSOP38328 on optimeeritud 38KHz jaoks.

8. samm: kasutatud viited

IRRemote.h

  • Autor: z3t0
  • Eesmärk: Arduino infrapuna kaugteek: mitme protokolliga infrapunasignaalide saatmine ja vastuvõtmine
  • Siit:

IR Remoteek

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

IR (infrapuna) vastuvõtja andur - TSOP38238 (samaväärne)

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

Et vältida andmestruktuuri kokkusattumist sõna piiridele

  • 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

Hea IR -kaugandmete allikas

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

I2C

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

IR Remotes andmebaas

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

BC337 andmeleht

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

1N4148 Andmeleht

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

Soovitan: