Indholdsfortegnelse:
- Trin 1: Kort oversigt over kredsløbet
- Trin 2: Kort oversigt over softwaren
- Trin 3: I2C -pakkeindhold
- Trin 4: Anskaffelse af fjernbetjeningskoder (ui32Data)
- Trin 5: Sådan testes din I2C -slaveenhed
- Trin 6: Skrumpning af dit design
- Trin 7: Konklusion
- Trin 8: Anvendte referencer
Video: I2C infrarød fjernbetjening med Arduino: 8 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Denne forudsigelse beskriver, hvordan du opretter en universel fjernbetjening ved hjælp af I2C til grænsefladen.
Hvor mærkeligt siger du ved hjælp af en I2C -slaveenhed?
Ja, en I2C -slaveenhed.
Det skyldes, at den nøjagtige timing af IR -pakker er ret krævende, og en typisk Arduino vil kæmpe med, hvis den allerede udfører mange andre opgaver på samme tid. Det er bedre at fordele computerbelastningen ved at tildele timingintensive aktiviteter til dedikerede processorer, når det er muligt (bedre stadig gøre det i hardware). Da I2C er en veldokumenteret og robust kommunikationsmetode mellem IC'er, valgte jeg dette som grænseflade.
Introduktion
Som nævnt ovenfor beskriver denne instruktør hvordan man styrer husholdningsapparater som f.eks. Tv, dvd -afspiller og satellit osv. Ved hjælp af IRremote -biblioteket på Arduino.
Det afsluttes med et designeksempel, der gør Arduino til et I2C -slave -fjernbetjeningsmodul (billede 1 ovenfor) med prototype -testkredsløb (billede 2 ovenfor) og fortsætter med at detaljerede, hvordan du formindsker dit design til de minimumskomponenter, der er nødvendige, så det kan være indlejret i et andet design. I mit tilfælde bruger jeg denne integrerede enhed i en IoT Universal fjernbetjening baseret på en ESP8266-12E.
Hvilke dele har jeg brug for?
For at bygge kredsløbet afbildet i trin 1 (IR -sender) skal du bruge følgende dele;
- 2 off 10K modstande
- 1 off 390R modstand
- 1 off 33R modstand
- 1 off 3K8 modstand
- 1 slukket Rød LED
- 1 off IR LED TSAL6400
- 1 fra Transistor BC337
- 1 off 220uF kondensator
- 1 fra Arduino Uno
For at bygge kredsløbet afbildet i trin 4 (IR -modtager) skal du bruge følgende dele;
- 1 off 10K modstand
- 1 fra TSOP38328
- 1 off 220uF kondensator
- 1 fra Arduino Uno
For at bygge det kredsløb, der er afbildet i trin 5 (Slave -testkredsløb), skal du bruge følgende dele;
- 4 off 10K modstande
- 2 off 390R modstand
- 1 off 33R modstand
- 1 off 3K8 modstand
- 2 slukket Rød LED
- 1 off IR LED TSAL6400
- 1 fra Transistor BC337
- 1 off 220uF kondensator
- 2 off SPST -knapper
- 2 fra Arduino Unos
For at bygge kredsløbet afbildet i trin 6 (krympet design) skal du bruge følgende dele;
- 3 off 10K modstande
- 1 off 270R modstand
- 1 off 15R modstand
- 4 off 1K modstande
- 1 slukket Rød LED
- 1 off IR Led TSAL6400 eller TSAL5300
- 1 fra Transistor BC337
- 1 off 220uF kondensator elektrolytisk @ 6.3v
- 1 off 1000uF kondensator elektrolytisk @ 6.3v
- 2 off 0.1uF kondensatorer
- 2 off 22pF kondensatorer
- 1 fra 16MHz Xtal
- 1 rabat på ATMega328P-PU
Bemærk: Du skal også bruge en FTDI -enhed til at programmere ATMega328P
Hvilke færdigheder har jeg brug for?
- Et minimalt greb om elektronik,
- Kendskab til Arduino og dens IDE,
- Lidt tålmodighed,
- En vis forståelse af I2C ville være nyttig (se her for nogle generiske I2C/Wire Library -detaljer).
Emner dækket
- Kort oversigt over kredsløbet,
- Kort oversigt over softwaren,
- I2C -pakkeindhold,
- Anskaffelse af fjernbetjeningskoder (ui32Data),
- Sådan testes din I2C Slave -enhed,
- Skrumper dit design,
- Konklusion,
- Referencer brugt.
Ansvarsfraskrivelse
Som altid bruger du disse instruktioner på egen risiko, og de kommer ikke understøttet.
Trin 1: Kort oversigt over kredsløbet
Formålet med kredsløbet er at transmittere IR -fjernbetjeningskoder. Designet er ret ligetil og ganske enkelt.
Når transistoren Q1 en BC337 NPN tændes via en logisk en fra Arduino PWM O/P D3 til modstand R5, passerer strøm gennem Leds 1 og 2. Begrænset kun af ballastmodstande R3 og R4. Q1 bruges til at øge strømmen, der passerer gennem IR -dioden (IF Max = 100mA) til den, der overstiger hvad Arduino O/P er i stand til ~ 40mA @ +5v forsyning.
Kondensator C1 a 220uF Electrolytic giver en vis stabilisering, der forhindrer en forsyningsskinne i at falde af strømmen fra Leds 1 og 2.
Modstandene R1 og R2 er I2C pull ups.
Trin 2: Kort oversigt over softwaren
Præambel
For at kunne kompilere denne kildekode skal du bruge følgende ekstra bibliotek;
IRfjern.h
- Af: z3t0
- Formål: Infrarødt fjernbibliotek til Arduino: Send og modtag infrarøde signaler med flere protokoller
- Fra:
Kodeoversigt
Som vist på billede 1 ovenfor, ved opstart, konfigurerer koden mikro-controller I/O, derefter undersøger status for det interne softwareflag 'bFreshDataFlag'. Når dette flag er indstillet, hævder controlleren, at det er 'Optaget' linje (sender datapind D4 lavt) og flytter til tilstanden 'eBUSY' sekvensielt læseknap -tryk på kommandoer i uDataArray og sender IR -modulerede data til IR -LED'en i en transmissionssekvens.
Når dataene i uDataArray er blevet sendt fuldstændigt, genoptages tilstanden 'eIDLE', og linjen 'Optaget' fjernes (afsendelse af datapind D4 høj). Enheden er nu klar til at modtage flere tastetryk, der markerer afslutningen på transmissionssekvensen.
Modtagelse af IR -knappetryksdata
Når data sendes til InfraRed -fjernbetjeningen via I2C, udløser det en afbrydelse, og modtageevent () funktionsopkald udløses asynkront.
Når de modtagne I2C -data er udløst, skrives de sekventielt i bufferen 'uDataArray '.
Hvis en sekvensafslutning under datamodtagelse signaleres af masteren (bFreshData! = 0x00), indstilles 'bFreshDataFlag', hvilket signalerer starten af transmissionssekvensen.
Billeder 2 … 3 giver et eksempel på en typisk pakkesekvens.
Bemærk: Fuld kildekode er tilgængelig her
Trin 3: I2C -pakkeindhold
Formatet på kontrolpakken sendt til slaven over I2C er angivet ovenfor i billede 1, betydningen af hvert felt er angivet nedenfor
Betydningen af kontrolpakkefelterne
byte bKodning;
-
IR fjernbetjeningskodning,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Hexrepræsentation af den binære IR -datastrøm 4 Databyte (usigneret lang), LSByte … MSByte
byte bNumberOfBitsInTheData;
Antal bits i dataene (maks. 32). Område = 1… 32
byte bPulseTrainRepeats;
Hvor mange gentagelser af dette pulstog. Område = 1… 255. Typisk 2… 4 gentagelser. Du vil måske udvide dette til tænd/sluk -kommandoer, da den modtagende enhed nogle gange kræver et par ekstra pulstogs gentagelser for at modtage et tændingssignal
byte bDelayBetweenPulseTrainRepeats;
Forsinkelse mellem gentagelser af dette pulstog. Rækkevidde = 1… 255mS. Typisk 22mS … 124mS
byte bButtonRepeats;
Simulerer gentaget tryk på den samme knap (men understøtter ikke den ændrede kode som en Apple -fjernbetjening, den gentager bare knapkoden). Område = 1… 256. Standard = 1
uint16_t ui16DelayBetweenButtonRepeats;
Forsinkelse mellem gentagelser af knapper (usigneret int). 2 bytes i alt LSByte … MSByte. Rækkevidde = 1… 65535mS. Standard = 0mS
byte bFreshData;
-
Friske data. En værdi uden nul. Skrevet sidst, udløser IR TX -sekvensen. Område 0x00… 0xFF
- Flere kontrolpakker kommer = 0
- Dette er den sidste kontrolpakke = Non-Zero værdi 1, 2, … 255
Bemærk brugen af kompileringsdirektivet '_packed_'. Dette er for at sikre, at dataene er pakkebyte for byte i hukommelsen uanset det anvendte målsystem (Uno, Due, ESP8266 osv.). Det betyder, at foreningen mellem registerAllocationType og dataArrayType kun behøver sekvensielt at klokke ud/ur i bytes fra en kontrolpakke, hvilket gør TX/RX -softwaren enkel.
Trin 4: Anskaffelse af fjernbetjeningskoder (ui32Data)
Der er tre måder, hvorpå du kan erhverve en respektive fjernbetjeningsnøglekode;
- Via bittælling med et oscilloskop,
- Slå det op på en hjemmeside,
- Afkod det direkte fra datastrømmen i software.
Via bit tælling med et omfang
Dette er ikke en effektiv metode, da det tager ganske lang tid og muligvis kræver mere end et forsøg, men det kan være meget præcist. Det er også nyttigt til visuelt at validere koder opnået ved hjælp af metode 2 og 3, også til at bestemme eventuelle særegenheder ved en fjernbetjening. Som eksempel, når du holder en knap nede på en Apple IR -fjernbetjening. Fjernbetjeningen vil i første omgang udsende en kommandosekvens og derefter følge den med en gentagen komprimeret sekvens på 0xF….
Slå det op på et websted
Fjernbetjeningskodedatabasen på Linux Infrared Remote Control -webstedet er en god kilde.
Ulempen er dog, at du muligvis skal prøve et par koder, indtil du finder en, der fungerer for dig. Du skal muligvis også fortolke nogle af repræsentationerne af koderne for at konvertere dem til deres tilsvarende hexform.
Afkod det direkte fra datastrømmen
Ved hjælp af kredsløbet i billede 1 ovenfor i forbindelse med IRremote -bibliotekets eksempel 'IRrecvDumpV2.ino' er det muligt at afkode datastrømmen direkte fra fjernbetjeningen. Billede 2 viser en afkodet Samsung TV -fjernbetjening til et tryk på tænd/sluk -knappen i Arduino IDE -terminalvinduet.
Kombineret modtager/sender
Billeder 3 og 4 ovenfor viser en løsning, der giver mulighed for både modtagelse og transmission af IR -kommando for let prototypering.
For at afkode IR -fjernbetjeningsknapperne skal du blinke Arduino med eksemplet 'IRrecvDumpV2.ino', der følger med IRremote -biblioteket.
Det fungerer også lige godt til transmission, hvis IR -kommandoer. En rød lysdiode er inkluderet som en visuel indikation, at enheden er i aktion.
Trin 5: Sådan testes din I2C -slaveenhed
Ved hjælp af kildekoden her og kredsløbet skitseret ovenfor i billede 1 programmeres 'Master' Arduino med 'IR_Remote_Sim_Test.ino' og 'Slave' Arduino med 'IR_Remote_Sim.ino'.
Forudsat at du har et Sony Bravia TV, Sky HD -boks og en Sony BT SoundBar, skal du trykke på knap 1, og dit tv skifter til BBC1 (kanal 101). Tryk på knap 2, og din lydbjælke slås fra. Tryk igen, så deaktiveres lyden.
Under udførelsen af IR -transmissionssekvensen lyser LED3, hvilket angiver, at slaven er optaget, og LED1 blinker inline med IR -transmissionsprocessen.
Selvfølgelig, hvis du ikke har det samme underholdningssystem oprettet som ovenfor, kan du omprogrammere slaven med 'IRrecvDumpV2.ino', afkode dine fjernkommandoer af interesse og derefter programmere dem i 'IR_Remote_Sim_Test.ino' til din givet scenario.
Billede 2 viser systemniveau testsoftwareoversigt mellem Master og Slave.
Trin 6: Skrumpning af dit design
Ok, så forudsat at du har fulgt denne instruerbare afhængighed af to Arduinos til at styre dine hjemmeapparater, er ikke den mest effektive brug af din Arduino -lager. Hvis du derfor konstruerer kredsløbet vist på billedet ovenfor og følger instruktionerne her for at programmere ATMega328P med 'IR_Remote_Sim.ino', vil du være i stand til at reducere hele systemet til de minimale komponenter. Dette giver dig mulighed for at integrere dit design i et andet system.
Trin 7: Konklusion
Løsningen er stabil og fungerer godt, den har været integreret i et andet system i nogle uger nu uden problemer.
Jeg valgte Arduino Uno R3, da jeg ville have en enhed, der havde tilstrækkelig RAM, så jeg kunne have en knapbuffer af rimelig dybde. Jeg nøjedes med en bufferstørrelse på 20 pakker (MAX_SEQUENCES).
Hybrid TX/RX -skjoldet, jeg lavede, var også meget praktisk, når jeg dekodede Sony- og Sky -fjernbetjeninger. Selvom jeg fra tid til anden må indrømme, at jeg brugte mit digitale omfang til at kontrollere, at softwarekodede IR -kommandoen var den, der kom fra IR modtaget (TSOP38328).
Det eneste, jeg ville have gjort anderledes, ville have været at bruge konstantstrømskredsløbet til IR -lysdioden som vist ovenfor i billede 2.
Et yderligere punkt at bemærke er, at ikke alle IR -sendere er moduleret med 38KHz, TSOP38328 er optimeret til 38KHz.
Trin 8: Anvendte referencer
IRRemote.h
- Af: z3t0
- Formål: Infrarødt fjernbibliotek til Arduino: Send og modtag infrarøde signaler med flere protokoller
- Fra:
IR fjernbibliotek
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IR (infrarød) modtagersensor - TSOP38238 (ækvivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
For at undgå datastruktur, der fylder til ordgrænser
- 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
God kilde til IR -fjerndetaljer
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR fjernbetjeningsdatabase
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Datablad
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Datablad
https://www.vishay.com/docs/81857/1n4148.pdf
Anbefalede:
TV -fjernbetjening Bliver en RF -fjernbetjening -- NRF24L01+ Tutorial: 5 trin (med billeder)
TV -fjernbetjening Bliver en RF -fjernbetjening || NRF24L01+ Tutorial: I dette projekt vil jeg vise dig, hvordan jeg brugte den populære nRF24L01+ RF IC til at justere lysstyrken på en LED -strimmel trådløst gennem tre ubrugelige knapper på en fjernsyns fjernbetjening. Lad os komme igang
Universal TV -fjernbetjening - Ardiuino, infrarød: 5 trin
Universal TV -fjernbetjening - Ardiuino, infrarød: Hej! I denne instruktive vil jeg vise dig, hvordan du opbygger og programmerer din egen universelle fjernbetjening, der fungerer med de fleste ting, der bruger en infrarød fjernbetjening, og som også " lytter " og afkode et infrarødt signal sendt af forskellige andre
Konverter din IR -fjernbetjening til RF -fjernbetjening: 9 trin (med billeder)
Konverter din IR -fjernbetjening til RF -fjernbetjening: I dagens Instructable viser jeg dig, hvordan du kan bruge et generisk RF -modul uden en mikrokontroller, som i sidste ende vil føre os til at bygge et projekt, hvor du kan konvertere en IR -fjernbetjening af enhver enhed til en RF Fjern. Den største fordel ved at konvertere en
Infrarød fjernbetjening og IR -modtager (TSOP1738) med Arduino: 10 trin
Infrarød fjernbetjening og IR -modtager (TSOP1738) med Arduino: Denne instruktion er for begyndere fra Arduino. Dette er et af mine tidligere projekter med Arduino. Jeg nød meget, da jeg lavede det, og håber, at du også kan lide det. Det mest attraktive ved dette projekt er “ Trådløs kontrol ”. Og det er
Styr dine elektriske apparater med din tv -fjernbetjening (ir -fjernbetjening) med temperatur- og luftfugtighedsvisning: 9 trin
Styr dig elektriske apparater med din tv -fjernbetjening (ir -fjernbetjening) med temperatur- og luftfugtighedsdisplay: hej, jeg er Abhay, og det er min første blog om Instructables, og i dag vil jeg vise dig, hvordan du styrer dine elektriske apparater med din fjernsyns fjernbetjening ved at bygge denne simpelt projekt. tak til atl lab for støtte og levering af materialet