Turinys:
- 1 žingsnis: trumpa grandinės apžvalga
- 2 žingsnis: trumpa programinės įrangos apžvalga
- 3 žingsnis: „I2C“paketinis turinys
- 4 veiksmas: nuotolinio valdymo kodų („ui32Data“) įsigijimas
- 5 veiksmas: kaip išbandyti savo verginį I2C įrenginį
- 6 žingsnis: sumažinkite savo dizainą
- 7 žingsnis: Išvada
- 8 žingsnis: naudojamos nuorodos
Video: „I2C“infraraudonųjų spindulių nuotolinio valdymo pultas su „Arduino“: 8 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Š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
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
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
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
Yra trys būdai, kaip gauti atitinkamą nuotolinio valdymo rakto kodą;
- Naudojant bitų skaičiavimą naudojant osciloskopą,
- Pažiūrėkite į svetainę,
- 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į
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ą
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
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:
Televizoriaus nuotolinio valdymo pultas tampa RF nuotolinio valdymo pultu -- NRF24L01+ pamoka: 5 žingsniai (su paveikslėliais)
Televizoriaus nuotolinio valdymo pultas tampa RF nuotolinio valdymo pultu || NRF24L01+ Pamoka: Šiame projekte parodysiu, kaip aš naudoju populiarųjį nRF24L01+ RF IC, norėdamas belaidžiu būdu sureguliuoti LED juostos ryškumą per tris nenaudingus televizoriaus nuotolinio valdymo pulto mygtukus. Pradėkime
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: 6 žingsniai
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: jei kada nors pametėte televizoriaus ar DVD grotuvo nuotolinio valdymo pultą, žinote, kaip apmaudu, kai tenka vaikščioti, ieškoti ir naudoti paties įrenginio mygtukus. Kartais šie mygtukai net nesuteikia tokių funkcijų kaip nuotolinio valdymo pultas. Gauti
Mobiliojo telefono infraraudonųjų spindulių oro kondicionieriaus nuotolinio valdymo pultas „Pasidaryk pats“Gamyba: 7 žingsniai
Mobiliojo telefono infraraudonųjų spindulių oro kondicionieriaus nuotolinio valdymo pultas „Pasidaryk pats“gamyba: Karštą vasarą, eidami namo ar į biurą, norite įjungti oro kondicionierių, tačiau kurį laiką nerandate nuotolinio valdymo pulto. Tai labai erzina dalykas. Tais laikais, kai šis mobilusis telefonas neišeina, ar galite jį naudoti kaip
Infraraudonųjų spindulių nuotolinio valdymo pulto testeris naudojant TSOP4838: 5 žingsniai
Infraraudonųjų spindulių nuotolinio valdymo pulto testeris naudojant TSOP4838: Štai kaip sukurti paprastą nuotolinio valdymo pulto testavimo grandinę. Tiesiog atlikite toliau nurodytus veiksmus ir užtruksite mažiau nei 5 minutes. Jei tai veikia, palikite like ant mūsų vaizdo įrašo ir praneškite mums komentaruose
„Alexa“balso valdymo televizoriaus nuotolinio valdymo pultas ESP8266: 9 žingsniai
„Alexa“balso valdymo televizoriaus nuotolinio valdymo pultas ESP8266: Ar kas nors jūsų namuose atleidžia nuotolinio valdymo pultą, ar einate į tuščią kambarį, kad pamatytumėte, kaip televizorius skleidžiasi. Baterijos pradeda gesti ir nekontroliuojamos iš kambario galo. Dabar galite valdyti savo televizorių, DVR, bet ką su IR valdikliu, kurį galite