INHOUDSOPGAWE:
- Stap 1: Kort oorsig van die stroombaan
- Stap 2: Kort oorsig van die sagteware
- Stap 3: I2C -pakkie -inhoud
- Stap 4: Verkry afstandbeheerkodes (ui32Data)
- Stap 5: Hoe om u I2C -slawe -toestel te toets
- Stap 6: Krimp u ontwerp
- Stap 7: Gevolgtrekking
- Stap 8: Gebruikte verwysings
Video: I2C infrarooi afstandsbediening met die Arduino: 8 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Inleidende inligting oor hoe u 'n universele afstandsbediening met I2C vir die koppelvlak kan skep.
Hoe vreemd sê jy met 'n I2C -slawe -toestel?
Ja, 'n I2C -slawe -toestel.
Dit is omdat die akkurate tydsberekening van IR -pakkies taamlik veeleisend is en een waarmee 'n tipiese Arduino sal sukkel as dit al baie ander take op dieselfde tyd uitvoer. Dit is beter om die rekenaarlading te versprei deur tydsberekende intensiewe aktiwiteite aan toegewyde verwerkers toe te ken waar moontlik (dit is beter om dit steeds in hardeware te doen). Aangesien I2C 'n goed gedokumenteerde en robuuste kommunikasiemetode tussen IC's is, het ek dit as die koppelvlak gekies.
Inleiding
Soos hierbo genoem, beskryf hierdie instruksies hoe u huishoudelike toestelle soos TV, DVD -speler en satelliet, ens. Kan beheer met behulp van die IRremote -biblioteek op die Arduino.
Dit word afgesluit met 'n ontwerpvoorbeeld wat die Arduino verander in 'n I2C -slaaf -afstandsbedieningsmodule (foto 1 hierbo) met 'n prototipe toetsbaan (foto 2 hierbo) en gaan verder met die besonderhede oor hoe u u ontwerp tot die minimum komponente moet krimp, sodat dit moontlik is ingebed in 'n ander ontwerp. In my geval gebruik ek hierdie ingeboude toestel in 'n IoT Universal-afstandsbedieningstoestel gebaseer op 'n ESP8266-12E.
Watter onderdele het ek nodig?
Om die stroombaan soos in Stap 1 (IR -sender) te bou, benodig u die volgende dele;
- 2 af 10K weerstande
- 1 af 390R weerstand
- 1 af 33R weerstand
- 1 af 3K8 weerstand
- 1 af rooi LED
- 1 af IR Led TSAL6400
- 1 af op Transistor BC337
- 1 af 220uF kapasitor
- 1 afslag op Arduino Uno
Om die stroombaan soos in stap 4 (IR -ontvanger) te bou, benodig u die volgende dele;
- 1 uit 10K weerstand
- 1 afslag op TSOP38328
- 1 af 220uF kapasitor
- 1 afslag op Arduino Uno
Om die stroombaan wat in stap 5 (slawe -toetsbaan) uitgebeeld word, te bou, benodig u die volgende dele;
- 4 af 10K weerstande
- 2 af 390R weerstand
- 1 af 33R weerstand
- 1 af 3K8 weerstand
- 2 af rooi LED
- 1 af IR Led TSAL6400
- 1 af op Transistor BC337
- 1 af 220uF kapasitor
- 2 af SPST -knoppies
- 2 af by Arduino Unos
Om die stroombaan wat in stap 6 uitgebeeld word (Krimpontwerp) te bou, benodig u die volgende dele;
- 3 af 10K weerstande
- 1 af 270R weerstand
- 1 af 15R weerstand
- 4 af 1K weerstande
- 1 af rooi LED
- 1 af IR Led TSAL6400 of TSAL5300
- 1 af op Transistor BC337
- 1 af 220uF kapasitor elektrolities @ 6.3v
- 1 af 1000uF kapasitor elektrolities @ 6.3v
- 2 af 0.1uF kapasitors
- 2 af 22pF kapasitors
- 1 af op 16MHz Xtal
- 1 afslag op ATMega328P-PU
Opmerking: u benodig ook 'n FTDI -toestel om die ATMega328P te programmeer
Watter vaardighede het ek nodig?
- 'N minimale greep op elektronika,
- Kennis van Arduino en sy IDE,
- Bietjie geduld,
- 'N Begrip van I2C sal nuttig wees (sien hier 'n paar algemene I2C/Wire Library -besonderhede).
Onderwerpe gedek
- Kort oorsig van die stroombaan,
- Kort oorsig van die sagteware,
- I2C -pakkie -inhoud,
- Verkry afstandsbedieningskodes (ui32Data),
- Hoe om u I2C Slave -toestel te toets,
- Krimp u ontwerp,
- Afsluiting,
- Verwysings gebruik.
Vrywaring
Soos altyd gebruik u hierdie instruksies op eie risiko en word dit nie ondersteun nie.
Stap 1: Kort oorsig van die stroombaan
Die doel van die kring is om IR afstandbeheer kodes oor te dra. Die ontwerp is redelik eenvoudig en eenvoudig.
As transistor Q1 'n BC337 NPN aangeskakel word via 'n logiese een van Arduino PWM O/P D3 na Resistor R5, gaan die stroom deur Leds 1 en 2. Slegs beperk deur ballastweerstande R3 en R4. Q1 word gebruik om die stroom wat deur die IR -diode gaan (IF Max = 100mA) te verhoog tot meer as wat die Arduino O/P in staat is ~ 40mA @ +5v toevoer.
Kondensator C1 a 220uF Electrolytic bied 'n mate van stabilisering wat voorkom dat 'n toevoerrail daal deur die krag wat deur Leds 1 en 2 getrek word.
Weerstande R1 en R2 is I2C pull -ups.
Stap 2: Kort oorsig van die sagteware
Aanhef
Om hierdie bronkode suksesvol saam te stel, benodig u die volgende ekstra biblioteek;
IRremote.h
- Deur: z3t0
- Doel: Infrarooi eksterne biblioteek vir Arduino: stuur en ontvang infrarooi seine met verskeie protokolle
- Van:
Kode Oorsig
Soos in foto 1 hierbo getoon, stel die kode die micro-controller I/O by die aanvang op, en dan die status van die interne sagtewarevlag 'bFreshDataFlag'. As hierdie vlag ingestel is, beweer die kontroleerder dat dit 'Busy' is (stuur data -pin D4 laag) en beweeg na die 'eBUSY' -toestand, en volg dan die druk opdragte wat in uDataArray gehou word en druk die opdragte wat in uDataArray gehou word en stuur die IR -gemoduleerde data na die IR LED in 'n transmissie volgorde.
Sodra die data in uDataArray volledig gestuur is, word die 'eIDLE'-toestand hervat en die' Besige 'reël word weer bevestig (die stuur van dataspeld D4 hoog). Die toestel is nou gereed om meer knoppies te druk wat die einde van die transmissie volg.
Ontvangs van IR -knopperspersdata
As data via die I2C na die InfraRed -afstandbeheerder gestuur word, veroorsaak dit 'n onderbreking en die ontvangs -oproep () funksie -oproep word asynchroon geaktiveer.
Nadat die I2C -data geaktiveer is, word dit opeenvolgend in die buffer 'uDataArray ' geskryf.
As 'n einde van die volgorde tydens data -ontvangs deur die meester (bFreshData! = 0x00) aangedui word, word die 'bFreshDataFlag' gestel, wat die begin van die transmissie volgorde aandui.
Foto's 2 … 3 gee 'n voorbeeld van 'n tipiese pakketvolgorde.
Let wel: die volledige bronkode is hier beskikbaar
Stap 3: I2C -pakkie -inhoud
Die formaat van die kontrolepakket wat aan die slaaf oor I2C gestuur is, word hierbo in prentjie 1 gegee, die betekenis van elke veld word hieronder gegee
Betekenis van die kontrolepakketvelde
byte bKodering;
-
IR afstandsbediening kodering,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Die heksvoorstelling van die binêre IR -datastroom 4 Datagrepe (ongeteken lank), LSByte … MSByte
byte bNumberOfBitsInTheData;
Aantal stukkies in die data (maksimum van 32). Bereik = 1… 32
byte bPulseTrainRepeats;
Hoeveel herhalings van hierdie polsstrein. Bereik = 1… 255. Gewoonlik 2 … 4 herhalings. U sal dit moontlik wil uitbrei vir aan/af -opdragte, aangesien die ontvangende toestel soms 'n paar herhaalde polsslae herhaal om 'n aanskakelsein te ontvang
byte bDelayBetweenPulseTrainRepeats;
Vertraging tussen herhalings van hierdie polsstrein. Bereik = 1… 255mS. Gewoonlik 22mS … 124mS
byte bButtonRepeats;
Simuleer herhaalde druk op dieselfde knoppie (maar ondersteun nie die gewysigde kode soos 'n Apple -afstandsbediening nie; dit herhaal net die knoppiekode). Bereik = 1… 256. Standaard = 1
uint16_t ui16DelayBetweenButtonRepeats;
Vertraging tussen knoppieherhalings (ongetekende int). 2 grepe in totaal LSByte … MSByte. Bereik = 1… 65535mS. Verstek = 0mS
byte bFreshData;
-
Vars data. 'N Nie-nul waarde. Laaste geskryf, veroorsaak die IR TX -volgorde. Bereik 0x00 … 0xFF
- Meer kontrolepakkies kom = 0
- Dit is die finale kontrolepakket = Nie-nul waarde 1, 2, … 255
Let op die gebruik van die '_packed_' samestellerriglyn. Dit is om te verseker dat die data pakkie -byte vir byte in die geheue is, ongeag die teikensisteem wat gebruik word (Uno, Due, ESP8266, ens.). Dit beteken dat die unie tussen registerAllocationType en dataArrayType slegs opeenvolgend in bytes uit 'n kontrolepakket hoef uit te klok/klok, wat die TX/RX -sagteware eenvoudig maak.
Stap 4: Verkry afstandbeheerkodes (ui32Data)
Daar is drie maniere waarop u 'n onderskeie afstandsbedieningsleutelkode kan bekom;
- Via bitselling met 'n ossilloskoop,
- Soek dit op 'n webwerf,
- Dekodeer dit direk vanaf die datastroom in sagteware.
Via bitselling met 'n omvang
Dit is nie 'n doeltreffende metode nie, aangesien dit redelik lank neem en moontlik meer as een poging verg, maar dit kan baie akkuraat wees. Dit is ook handig om kodes wat metodes 2 en 3 verkry is, visueel te bekragtig, ook om die eienaardighede van 'n afstandsbediening te bepaal. Byvoorbeeld, as u 'n knoppie op 'n Apple IR -afstandsbediening ingedruk hou. Die afstandbeheer sal aanvanklik 'n opdragreeks uitreik, en daarna die herhaalde saamgeperste volgorde van 0xF ….
Soek dit op 'n webwerf
Die databasis vir afstandbeheer -kode op die Linux Infrared Remote Control -webwerf is 'n goeie bron.
Die nadeel is egter dat u moontlik 'n paar kodes moet probeer totdat u een vind wat by u pas. Miskien moet u sommige van die voorstellings van die kodes ook interpreteer om dit in hul ekwivalente hexvorm te omskep.
Dekodeer dit direk uit die datastroom
Deur die stroombaan in prent 1 hierbo saam met die voorbeeld van IRremote -biblioteek 'IRrecvDumpV2.ino' te gebruik, is dit moontlik om die datastroom direk vanaf die afstandsbediening te dekodeer. Foto 2 toon 'n gedekodeerde Samsung TV -afstandsbediening vir 'n aan/uit -knoppie druk in die Arduino IDE -venster.
Gekombineerde ontvanger/sender
Foto's 3 en 4 hierbo gee 'n oplossing weer wat beide ontvangs en oordrag van IR -opdrag moontlik maak om maklike prototipering moontlik te maak.
Om die druk op die knoppie van die afstandsbediening te dekodeer, moet u die Arduino flits met die voorbeeld 'IRrecvDumpV2.ino' wat by die IRremote -biblioteek kom.
Dit werk ook ewe goed vir transmissie as IR beveel. 'N Rooi led is ingesluit as 'n visuele aanduiding dat die toestel in werking is.
Stap 5: Hoe om u I2C -slawe -toestel te toets
Gebruik die bronkode hier en die kring hierbo in prentjie 1, en programmeer die 'Master' Arduino met 'IR_Remote_Sim_Test.ino' en die 'Slave' Arduino met 'IR_Remote_Sim.ino'.
Gestel u het 'n Sony Bravia TV, Sky HD -boks en 'n Sony BT SoundBar, druk op knoppie 1 en u TV skakel oor na BBC1 (kanaal 101). Druk op knoppie 2 en u klankbalk word gedemp. Druk weer, dan word die demp ontdaan.
Tydens die uitvoering van die IR -transmissieweeks sal LED3 brand wat aandui dat die slaaf besig is en LED1 in lyn met die IR -transmissieproses flikker.
As u natuurlik nie dieselfde vermaakstelsel as hierbo opgestel het nie, kan u die slaaf herprogrammeer met 'IRrecvDumpV2.ino', u afgeleë opdragte van belang dekodeer en dit dan in die 'IR_Remote_Sim_Test.ino' vir u gegewe scenario.
Foto 2 toon die stelsel sagteware -oorsig van die stelselvlak tussen Master en Slave.
Stap 6: Krimp u ontwerp
Ok, as u aanvaar het dat u hierdie instruksies gevolg het deur op twee Arduino's te vertrou om u huistoestelle te beheer, is dit nie die doeltreffendste gebruik van u Arduino -voorraad nie. As u dus die stroombaan in die prent hierbo bou en die instruksies hier volg om die ATMega328P met 'IR_Remote_Sim.ino' te programmeer, sal u die hele stelsel tot die minimale komponente kan verminder. Dit laat u toe om u ontwerp in 'n ander stelsel in te sluit.
Stap 7: Gevolgtrekking
Die oplossing is stabiel en werk goed; dit is al 'n paar weke sonder probleme in 'n ander stelsel ingebed.
Ek het die Arduino Uno R3 gekies omdat ek 'n toestel wou hê wat voldoende RAM gehad het sodat ek 'n knoppiebuffer van redelike diepte kon hê. Ek het besluit oor 'n buffergrootte van 20 pakkies (MAX_SEQUENCES).
Die Hybrid TX/RX -skild wat ek gemaak het, was ook baie handig by die dekodering van Sony- en Sky -afstandsbedienings. Alhoewel ek af en toe moet erken dat ek my digitale omvang gebruik het om te kyk of die sagteware -gedecodeerde IR -opdrag dieselfde was as die van die IR wat ontvang is (TSOP38328).
Die enigste ding wat ek anders sou gedoen het, sou gewees het om die konstante stroom -stroombaan vir die IR -led te gebruik, soos hierbo in prent 2 getoon.
'N Verdere punt om op te let is dat nie alle IR -senders gemoduleer is met 38KHz nie; die TSOP38328 is geoptimaliseer vir 38KHz.
Stap 8: Gebruikte verwysings
IRRemote.h
- Deur: z3t0
- Doel: Infrarooi eksterne biblioteek vir Arduino: stuur en ontvang infrarooi seine met verskeie protokolle
- Van:
IR afstandbiblioteek
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IR (infrarooi) ontvanger sensor - TSOP38238 (ekwivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Om te verhoed dat datastruktuur aan woordgrense voldoen
- 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
Goeie bron van IR -afstandsbesonderhede
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR -afstandsdatabasis
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 -datablad
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Gegevensblad
https://www.vishay.com/docs/81857/1n4148.pdf
Aanbeveel:
Die gebruik van infrarooi sensor met Arduino: 8 stappe (met foto's)
Die gebruik van infrarooi sensor met Arduino: wat is 'n infrarooi (ook bekend as IR) sensor? 'N IR -sensor is 'n elektroniese instrument wat IR -seine in spesifieke frekwensiebepalings wat deur standaarde gedefinieer word, skandeer en dit omskakel in elektriese seine op sy uitsetpen (tipies seinpen genoem) . Die IR -sein
Infrarooi afstandsbediening en IR -ontvanger (TSOP1738) met Arduino: 10 stappe
Infrarooi afstandsbediening en IR -ontvanger (TSOP1738) Met Arduino: hierdie instruksies is vir Arduino -beginners. Dit is een van my vorige projekte met Arduino. Ek het dit baie geniet toe ek dit gemaak het, en ek hoop dat u ook daarvan sal hou. Die aantreklikste kenmerk van hierdie projek is die “ Wireless control ”. En dit is
Olympus Evolt E510 afstandsbediening vir kabel (weergawe 2 met outomatiese fokus op afstandsbediening): 6 stappe (met foto's)
Olympus Evolt E510 afstandsbediening vir kabel (weergawe 2 met outomatiese fokus op afstandsbediening): Gister het ek 'n eenvoudige afstandsbediening vir my Olympus E510 gebou. Die meeste kameras het 'n ontspanknop (die een wat u druk om 'n foto te neem) met twee modusse. As die knoppie saggies ingedruk word, sal die kamera outomaties fokus en die lig meet
Hoe om probleme op te los met die afstandsbediening van die Pionner -stuurwiel - Verhoog die IR -sein en herstel die klein slot: 14 stappe
Hoe om probleme op te los met die afstandsbediening van die stuurwiel van Pionner - Verhoog die IR -sein en herstel die klein slot.: Hierdie afstandsbediening is baie mooi en gerieflik, maar soms werk dit nie behoorlik nie. projek is nie 'n voorbeeld van doeltreffendheid nie. Ek kom uit Brasilië en het hierdie wenk op Amaz gekry
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: 9 stappe (met foto's)
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: die middelste voetsteunhysers moet goed onder die sitplek geberg word en laer om te ontplooi. 'N Meganisme vir die onafhanklike werking van die opberging en ontplooiing van voetsteun is nie ingesluit by rolstoele op die mark nie, en PWC -gebruikers het die behoefte uitgespreek