Turinys:

„I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“: 8 žingsniai (su nuotraukomis)
„I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“: 8 žingsniai (su nuotraukomis)

Video: „I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“: 8 žingsniai (su nuotraukomis)

Video: „I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“: 8 žingsniai (su nuotraukomis)
Video: Arduino IR Remote LED Control | Wireless Control 2024, Liepa
Anonim
„I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“
„I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“
„I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“
„I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“

Šioje instrukcijoje išsamiai aprašoma, kaip sukurti universalų nuotolinio valdymo pultą naudojant sąsajos I2C.

Kaip keistai sakote, naudodami I2C verginį įrenginį?

Taip, I2C vergas.

Taip yra todėl, kad tikslus IR paketų laikas yra gana sudėtingas ir tipiškas „Arduino“kovos su tuo, jei tuo pačiu metu jau atlieka daugybę kitų užduočių. Geriau paskirstyti skaičiavimo apkrovą, kai tik įmanoma, priskiriant daug laiko reikalaujančią veiklą specialiems procesoriams (geriau tai padaryti aparatinėje įrangoje). Kadangi „I2C“yra gerai dokumentuotas ir patikimas komunikacijos metodas tarp IC, aš pasirinkau tai kaip sąsają.

Įvadas

Kaip minėta aukščiau, šioje instrukcijoje aprašoma, kaip valdyti buitinius prietaisus, tokius kaip televizorius, DVD grotuvas ir palydovas ir pan., Naudojant „IRrdote“biblioteką „Arduino“.

Pabaigoje pateikiamas dizaino pavyzdys, kaip „Arduino“paversti I2C vergo nuotolinio valdymo moduliu (1 pav. Aukščiau) su prototipo bandymo grandine (2 pav. Aukščiau), ir toliau išsamiai aprašoma, kaip sumažinti savo dizainą iki minimalių būtinų komponentų, kad būtų galima įtrauktas į kitą dizainą. Mano atveju aš naudoju šį įterptąjį įrenginį „IoT Universal“nuotolinio valdymo įrenginyje, pagrįstame ESP8266-12E.

Kokių dalių man reikia?

Norėdami sukurti 1 žingsnyje (IR siųstuvas) pavaizduotą grandinę, jums reikės šių dalių;

  • 2 išjungti 10K rezistorius
  • 1 išjungtas 390R rezistorius
  • 1 išjungtas 33R rezistorius
  • 1 išjungtas 3K8 rezistorius
  • 1 išjungtas raudonas šviesos diodas
  • 1 nuolaida IR LED TSAL6400
  • 1 nuolaida tranzistoriui BC337
  • 1 išjungtas 220uF kondensatorius
  • 1 nuolaida „Arduino Uno“

Norėdami sukurti grandinę, pavaizduotą 4 žingsnyje (IR imtuvas), jums reikės šių dalių;

  • 1 išjungtas 10K rezistorius
  • 1 nuolaida TSOP38328
  • 1 išjungtas 220uF kondensatorius
  • 1 nuolaida „Arduino Uno“

Norėdami sukurti grandinę, pavaizduotą 5 veiksme (Vergo bandymo grandinė), jums reikės šių dalių;

  • 4 išjungti 10K rezistorius
  • 2 išjungtas 390R rezistorius
  • 1 išjungtas 33R rezistorius
  • 1 išjungtas 3K8 rezistorius
  • 2 išjungtas raudonas šviesos diodas
  • 1 nuolaida IR LED TSAL6400
  • 1 nuolaida tranzistoriui BC337
  • 1 išjungtas 220uF kondensatorius
  • 2 SPST mygtukai
  • 2 nuolaida „Arduino Unos“

Norėdami sukurti grandinę, pavaizduotą 6 žingsnyje (susitraukimo dizainas), jums reikės šių dalių;

  • 3 išjungti 10K rezistorius
  • 1 išjungtas 270R rezistorius
  • 1 išjungtas 15R rezistorius
  • 4 išjungti 1K rezistoriai
  • 1 raudonas šviesos diodas
  • 1 išjungta IR Led TSAL6400 arba TSAL5300
  • 1 nuolaida tranzistoriui BC337
  • 1 išjungtas 220uF kondensatorius elektrolitinis @ 6.3v
  • 1 išjungtas 1000uF kondensatorius elektrolitinis @ 6.3v
  • 2 išjungti 0,1uF kondensatorius
  • 2 išjungti 22pF kondensatoriai
  • 1 išjungta 16 MHz „Xtal“
  • 1 nuolaida ATMega328P-PU

Pastaba: ATMega328P programavimui taip pat reikės FTDI įrenginio

Kokių įgūdžių man reikia?

  • Minimalus elektronikos išmanymas,
  • Žinios apie Arduino ir jo IDE,
  • Šiek tiek kantrybės,
  • Būtų naudinga šiek tiek suprasti I2C (čia rasite bendros informacijos apie I2C/vielos biblioteką).

Aptartos temos

  • Trumpa grandinės apžvalga,
  • Trumpa programinės įrangos apžvalga,
  • „I2C“paketo turinys,
  • Nuotolinio valdymo kodų gavimas (ui32Data),
  • Kaip išbandyti savo „I2C Slave“įrenginį,
  • Sumažinkite savo dizainą,
  • Išvada,
  • Naudotos nuorodos.

Atsisakymas

Kaip visada, šias instrukcijas naudojate savo rizika ir jos nepalaikomos.

1 žingsnis: trumpa grandinės apžvalga

Trumpa grandinės apžvalga
Trumpa grandinės apžvalga

Grandinės tikslas yra perduoti IR nuotolinio valdymo kodus. Jo dizainas yra gana tiesus ir gana paprastas.

Kai tranzistorius Q1 a BC337 NPN įjungiamas naudojant loginę logotipą nuo Arduino PWM O/P D3 iki rezistoriaus R5, srovė praeina per 1 ir 2 šviesos diodus. Q1 naudojamas padidinti srovę, praeinančią per IR diodą (IF maks. = 100 mA), viršijančią tą, kurią „Arduino O/P“sugeba tiekti ~ 40 mA @ 5 V.

Kondensatorius C1 ir 220uF Electrolytic suteikia tam tikrą stabilizaciją, neleidžiančią maitinimo bėgiui nukristi dėl 1 ir 2 šviesos diodų galios.

Rezistoriai R1 ir R2 yra I2C pakėlimai.

2 žingsnis: trumpa programinės įrangos apžvalga

Trumpa programinės įrangos apžvalga
Trumpa programinės įrangos apžvalga
Trumpa programinės įrangos apžvalga
Trumpa programinės įrangos apžvalga
Trumpa programinės įrangos apžvalga
Trumpa programinės įrangos apžvalga

Preambulė

Norėdami sėkmingai surinkti šį šaltinio kodą, jums reikės šios papildomos bibliotekos;

IRremote.h

  • Autorius: z3t0
  • Tikslas: „Arduino“nuotolinė infraraudonųjų spindulių biblioteka: siųsti ir gauti infraraudonųjų spindulių signalus naudojant kelis protokolus
  • Iš:

Kodo apžvalga

Kaip parodyta 1 paveikslėlyje aukščiau, paleidžiant kodą sukonfigūruojamas mikrovaldiklio I/O, tada apklausiama vidinės programinės įrangos vėliavos „bFreshDataFlag“būsena. Kai ši vėliava yra nustatyta, valdiklis teigia, kad eilutė „Užimta“(siunčia duomenų duomenų kaištį D4 žemas) ir pereina į „eBUSY“būseną, nuosekliai skaitant mygtuko paspaudimo komandas, esančias „uDataArray“, ir siunčiantis IR moduliuotus duomenis į IR šviesos diodą perdavimo seka.

Kai uDataArray saugomi duomenys bus visiškai išsiųsti, būsena „eIDLE“bus atnaujinta, o eilutė „Užimta“bus panaikinta (siunčiamas duomenų kaištis D4 aukštas). Įrenginys dabar paruoštas priimti daugiau mygtukų paspaudimų, žyminčių perdavimo sekos pabaigą.

IR mygtuko paspaudimo duomenų priėmimas

Kai duomenys siunčiami į „InfraRed“nuotolinio valdymo pultą per „I2C“, jis sukelia pertraukimą, o „ReceiveEvent“() funkcijos skambutis suaktyvinamas asinchroniškai.

Įjungus gautus I2C duomenis nuosekliai įrašomi į buferį „uDataArray “.

Priimant duomenis, jei kapitonas signalizuoja sekos pabaigą (bFreshData! = 0x00), nustatomas „bFreshDataFlag“, taip signalizuojant apie perdavimo sekos pradžią.

2… 3 paveikslėliuose pateikiamas tipinės paketų sekos pavyzdys.

Pastaba: visą šaltinio kodą rasite čia

3 žingsnis: „I2C“paketinis turinys

I2C paketų turinys
I2C paketų turinys

Valdiklio paketo, išsiųsto vergui per I2C, formatas pateiktas aukščiau 1 paveiksle, kiekvieno lauko reikšmė pateikta žemiau

Kontrolinio paketo laukų reikšmė

baitas bKodavimas;

  • IR nuotolinio valdymo pulto kodavimas,

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

uint32_t ui32Data;

Dvigubo IR duomenų srauto šešiabriaunis vaizdas 4 duomenų baitai (be parašo), LSByte… MSByte

baitas bNumberOfBitsInTheData;

Duomenų bitų skaičius (maks. 32). Diapazonas = 1… 32

baitas bPulseTrainRepeats;

Kiek kartojasi šis impulsinis traukinys. Diapazonas = 1… 255. Paprastai 2… 4 kartojimai. Galbūt norėsite tai pratęsti įjungimo/išjungimo komandoms, nes priimančiam įrenginiui kartais reikia kelių papildomų impulsų kartojimų, kad gautų įjungimo signalą

baitas bDelayBetweenPulseTrainRepeats;

Vėlavimas tarp šio impulsinio traukinio pakartojimų. Diapazonas = 1… 255mS. Paprastai 22 mS… 124 mS

baitas bButtonRepeats;

Imituoja pakartotinį to paties mygtuko paspaudimą (tačiau nepalaiko modifikuoto kodo, kaip „Apple“nuotolinio valdymo pultas, tik pakartoja mygtuko kodą). Diapazonas = 1… 256. Numatytasis = 1

uint16_t ui16DelayBetweenButtonRepeats;

Vėlavimas tarp mygtukų kartojimų (nepasirašytas int). Iš viso 2 baitai LSByte… MSByte. Diapazonas = 1… 65535mS. Numatytasis = 0mS

baitas bFreshData;

  • Švieži duomenys. Ne nulinė vertė. Įrašyta paskutinė, suaktyvina IR TX seką. Diapazonas 0x00… 0xFF

    • Bus daugiau valdymo paketų = 0
    • Tai yra galutinis valdymo paketas = Nulinė vertė 1, 2,… 255

Atkreipkite dėmesį į kompiliatoriaus direktyvos „_packed_“naudojimą. Taip siekiama užtikrinti, kad duomenys atmintyje būtų paketiniai baitai už baitą, neatsižvelgiant į naudojamą tikslinę sistemą (Uno, Due, ESP8266 ir kt.). Tai reiškia sąsają tarp registerAllocationType ir dataArrayType reikia tik nuosekliai sekti laikrodį/laikrodį baitais iš valdymo paketo, todėl TX/RX programinė įranga yra paprasta.

4 veiksmas: nuotolinio valdymo kodų („ui32Data“) įsigijimas

Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)
Nuotolinio valdymo kodų gavimas (ui32Data)

Yra trys būdai, kaip gauti atitinkamą nuotolinio valdymo rakto kodą;

  1. Naudojant bitų skaičiavimą naudojant osciloskopą,
  2. Pažiūrėkite į svetainę,
  3. Iššifruokite jį tiesiogiai iš duomenų srauto programinėje įrangoje.

Per bitų skaičiavimą su apimtimi

Tai nėra efektyvus metodas, nes tai užima daug laiko ir gali pareikalauti daugiau nei vieno bandymo, tačiau jis gali būti labai tikslus. Tai taip pat naudinga vizualiai patvirtinant kodus, gautus naudojant 2 ir 3 metodus, taip pat nustatant bet kokius nuotolinio valdymo pulto ypatumus. Pavyzdžiui, laikydami nuspaudę „Apple IR“nuotolinio valdymo pulto mygtuką. Nuotolinio valdymo pultas iš pradžių išduos komandų seką, o po to - pakartotinai suspausta 0xF seka….

Ieškokite jo svetainėje

Nuotolinio valdymo kodų duomenų bazė „Linux“infraraudonųjų spindulių nuotolinio valdymo svetainėje yra geras šaltinis.

Tačiau trūkumas yra tas, kad gali tekti išbandyti kelis kodus, kol rasite tą, kuris jums tinka. Taip pat gali tekti interpretuoti kai kuriuos kodų vaizdus, kad juos paverstų lygiaverte šešiakampiu pavidalu.

Iššifruokite jį tiesiai iš duomenų srauto

Naudojant 1 paveiksle pateiktą grandinę kartu su IRremote bibliotekos pavyzdžiu „IRrecvDumpV2.ino“galima iššifruoti duomenų srautą tiesiai iš nuotolinio valdymo pulto. 2 paveiksle pavaizduotas iššifruotas „Samsung“televizoriaus nuotolinio valdymo pultas, skirtas įjungti/išjungti mygtuko paspaudimui „Arduino IDE“terminalo lange.

Kombinuotas imtuvas/siųstuvas

3 ir 4 paveikslėliuose pavaizduotas sprendimas, leidžiantis priimti ir perduoti IR komandas, kad būtų galima lengvai sukurti prototipus.

Norėdami iššifruoti IR nuotolinio valdymo pulto paspaudimus, turėsite mirksėti „Arduino“naudodami „IRrecvDumpV2.ino“pavyzdį, pateiktą kartu su „IRremote“biblioteka.

Jis taip pat puikiai tinka perdavimui, jei yra IR komandos. Pridedamas raudonas indikatorius, rodantis prietaiso veikimą.

5 veiksmas: kaip išbandyti savo verginį I2C įrenginį

Kaip išbandyti savo verginį I2C įrenginį
Kaip išbandyti savo verginį I2C įrenginį
Kaip išbandyti savo verginį I2C įrenginį
Kaip išbandyti savo verginį I2C įrenginį

Naudodami čia esantį šaltinio kodą ir 1 paveiksle aprašytą grandinę, užprogramuokite „Master“Arduino su „IR_Remote_Sim_Test.ino“ir „Slave“Arduino su „IR_Remote_Sim.ino“.

Darant prielaidą, kad turite „Sony Bravia“televizorių, „Sky HD“dėžutę ir „Sony BT SoundBar“, paspauskite mygtuką 1 ir jūsų televizorius persijungs į BBC1 (101 kanalas). Paspauskite 2 mygtuką ir jūsų garso juosta nutildys. Paspauskite dar kartą ir nutildysite garsą.

Vykdant infraraudonųjų spindulių perdavimo seką, šviesos diodas 3 užsidegs, nurodydamas, kad vergas yra užimtas, o šviesos diodas 1 mirksi kartu su IR perdavimo procesu.

Žinoma, jei neturite tos pačios pramogų sistemos, kuri buvo nustatyta aukščiau, galite iš naujo užprogramuoti vergą naudodami „IRrecvDumpV2.ino“, iššifruoti dominančias nuotolines komandas, tada programuoti jas į „IR_Remote_Sim_Test.ino“. pateiktas scenarijus.

2 paveiksle parodyta sistemos lygio testavimo programinės įrangos apžvalga tarp „Master“ir „Slave“.

6 žingsnis: sumažinkite savo dizainą

Sumažinkite savo dizainą
Sumažinkite savo dizainą

Gerai, todėl darant prielaidą, kad laikydamiesi šios instrukcijos, pasikliaudami dviem „Arduinos“valdydami savo namų įrenginius, nėra pats efektyviausias jūsų „Arduino“atsargų panaudojimas. Taigi, jei sukursite aukščiau esančiame paveikslėlyje parodytą grandinę ir vykdysite čia pateiktas instrukcijas, kad užprogramuotumėte ATMega328P su „IR_Remote_Sim.ino“, galėsite sumažinti visą sistemą iki minimalių komponentų. Tai leis jums įterpti savo dizainą į kitą sistemą.

7 žingsnis: Išvada

Išvada
Išvada
Išvada
Išvada

Sprendimas yra stabilus ir veikia gerai, jis jau keletą savaičių buvo įterptas į kitą sistemą be jokių problemų.

Aš pasirinkau „Arduino Uno R3“, nes norėjau įrenginio, kuriame būtų pakankamai RAM, kad galėčiau turėti tinkamo gylio mygtukų buferį. Aš sutikau su 20 paketų buferio dydžiu (MAX_SEQUENCES).

Mano pagamintas „Hybrid TX/RX“skydas taip pat labai pravertė iššifruojant „Sony“ir „Sky“nuotolinio valdymo pultus. Nors turiu prisipažinti, kad kartkartėmis naudodavau savo skaitmeninę apimtį, norėdama patikrinti, ar programinės įrangos dekoduojama IR komanda buvo tokia pati, kokia buvo gauta iš IR (TSOP38328).

Vienintelis dalykas, kurį būčiau daręs kitaip, būtų buvęs naudoti nuolatinės srovės pavaros grandinę IR lemputei, kaip parodyta aukščiau 2 paveiksle.

Dar vienas dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad ne visi IR siųstuvai yra moduliuojami naudojant 38KHz, o TSOP38328 yra optimizuotas 38KHz dažniui.

8 žingsnis: naudojamos nuorodos

IRRemote.h

  • Autorius: z3t0
  • Tikslas: „Arduino“nuotolinė infraraudonųjų spindulių biblioteka: siųsti ir gauti infraraudonųjų spindulių signalus naudojant kelis protokolus
  • Iš:

IR nuotolinė biblioteka

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

IR (infraraudonųjų spindulių) imtuvo jutiklis - TSOP38238 (lygiavertis)

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

Siekiant išvengti duomenų struktūros susiaurėjimo iki žodžio ribų

  • 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

Geras IR nuotolinės informacijos šaltinis

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

I2C

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

IR nuotolinio valdymo duomenų bazė

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

BC337 duomenų lapas

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

1N4148 duomenų lapas

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

Rekomenduojamas: