Innholdsfortegnelse:
- Trinn 1: Kort oversikt over kretsen
- Trinn 2: Kort oversikt over programvaren
- Trinn 3: I2C -pakkeinnhold
- Trinn 4: Anskaffelse av fjernkontrollkoder (ui32Data)
- Trinn 5: Slik tester du I2C -slaveenheten
- Trinn 6: Krymper designet
- Trinn 7: Konklusjon
- Trinn 8: Referanser brukt
Video: I2C infrarød fjernkontroll med Arduino: 8 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Denne forklaringen beskriver hvordan du lager en universell fjernkontroll ved hjelp av I2C for grensesnittet.
Hvor rart du sier, ved hjelp av en I2C -slaveenhet?
Ja, en I2C -slaveenhet.
Dette er fordi den nøyaktige timingen for IR -pakker er ganske krevende, og en typisk Arduino vil slite med hvis den allerede utfører mange andre oppgaver samtidig. Det er bedre å fordele databehandlingen ved å tildele tidkrevende aktiviteter til dedikerte prosessorer når det er mulig (det er bedre å gjøre det i maskinvare). Gitt I2C er en veldokumentert og robust kommunikasjonsmetode mellom ICer, valgte jeg dette som grensesnitt.
Introduksjon
Som nevnt ovenfor beskriver denne instruksjonen hvordan du kan kontrollere husholdningsapparater som TV, DVD -spiller og satellitt etc. ved bruk av IRremote -biblioteket på Arduino.
Den avsluttes med et designeksempel som gjør Arduino til en I2C -slave -fjernkontrollmodul (bilde 1 ovenfor) med prototype testkrets (bilde 2 ovenfor) og fortsetter med å detaljere hvordan du krymper designet til minimumskomponentene som er nødvendige, slik at det kan være innebygd i et annet design. I mitt tilfelle bruker jeg denne innebygde enheten i en IoT Universal fjernkontrollenhet basert på en ESP8266-12E.
Hvilke deler trenger jeg?
For å bygge kretsen vist i trinn 1 (IR -sender) trenger du følgende deler;
- 2 av 10K motstander
- 1 av 390R motstand
- 1 av 33R motstand
- 1 av 3K8 motstand
- 1 av rød LED
- 1 av IR Led TSAL6400
- 1 av Transistor BC337
- 1 av 220uF kondensator
- 1 av Arduino Uno
For å bygge kretsen vist i trinn 4 (IR -mottaker) trenger du følgende deler;
- 1 av 10K motstand
- 1 av TSOP38328
- 1 av 220uF kondensator
- 1 av Arduino Uno
For å bygge kretsen vist i trinn 5 (slave testkrets) trenger du følgende deler;
- 4 av 10K motstander
- 2 av 390R motstand
- 1 av 33R motstand
- 1 av 3K8 motstand
- 2 av rød LED
- 1 av IR Led TSAL6400
- 1 av Transistor BC337
- 1 av 220uF kondensator
- 2 av SPST -knapper
- 2 av Arduino Unos
For å bygge kretsen vist i trinn 6 (krympet design) trenger du følgende deler;
- 3 av 10K motstander
- 1 av 270R motstand
- 1 av 15R motstand
- 4 av 1K motstander
- 1 av rød LED
- 1 av IR Led TSAL6400 eller TSAL5300
- 1 av Transistor BC337
- 1 av 220uF kondensator elektrolytisk @ 6.3v
- 1 av 1000uF kondensator elektrolytisk @ 6.3v
- 2 av 0,1 uF kondensatorer
- 2 av 22pF kondensatorer
- 1 av 16MHz Xtal
- 1 av ATMega328P-PU
Merk: Du trenger også en FTDI -enhet for å programmere ATMega328P
Hvilke ferdigheter trenger jeg?
- Et minimalt grep om elektronikk,
- Kunnskap om Arduino og dens IDE,
- Litt tålmodighet,
- Litt forståelse av I2C ville være nyttig (se her for noen generiske I2C/Wire Library -detaljer).
Emner dekket
- Kort oversikt over kretsen,
- Kort oversikt over programvaren,
- I2C -pakkeinnhold,
- Anskaffelse av fjernkontrollkoder (ui32Data),
- Slik tester du I2C Slave -enheten,
- Krymper designet ditt,
- Konklusjon,
- Referanser brukt.
Ansvarsfraskrivelse
Som alltid bruker du disse instruksjonene på egen risiko, og de kommer ikke støttet.
Trinn 1: Kort oversikt over kretsen
Formålet med kretsen er å overføre IR -fjernkontrollkoder. Designet er ganske rett frem og ganske enkelt.
Når transistoren Q1 blir en BC337 NPN slått på via en logisk fra Arduino PWM O/P D3 til motstand R5, passerer strømmen gjennom lysdioder 1 og 2. Begrenset bare av ballastmotstander R3 og R4. Q1 brukes til å øke strømmen som går gjennom IR -dioden (IF Max = 100mA) til det som overstiger det Arduino O/P er i stand til ~ 40mA @ +5v forsyning.
Kondensator C1 a 220uF Electrolytic gir en viss stabilisering som forhindrer at forsyningsskinnen faller av kraften fra Leds 1 og 2.
Motstandene R1 og R2 er I2C pull -ups.
Trinn 2: Kort oversikt over programvaren
Innledning
For å lykkes med å kompilere denne kildekoden trenger du følgende ekstra bibliotek;
IRfjern.h
- Av: z3t0
- Formål: Infrarødt eksternt bibliotek for Arduino: send og motta infrarøde signaler med flere protokoller
- Fra:
Kodeoversikt
Som vist på bilde 1 ovenfor, ved oppstart, konfigurerer koden mikrokontrolleren I/O, deretter undersøkes statusen til det interne programvareflagget 'bFreshDataFlag'. Når dette flagget er satt, bekrefter kontrolleren at det er 'Opptatt' linje (sender datapinne D4 lavt) og beveger seg til 'eBUSY' -status, sekvensielt leser knappetrykkommandoene som holdes i uDataArray og sender IR -modulerte data til IR -lysdioden i en overføringssekvens.
Når dataene i uDataArray er fullstendig sendt, gjenopptas tilstanden 'eIDLE' og 'Opptatt' linje blir avkreftet (sender datapinne D4 høy). Enheten er nå klar til å motta flere knappetrykk som markerer slutten på overføringssekvensen.
Mottak av IR -knappetrykkdata
Når data sendes til InfraRed -fjernkontrollen via I2C, utløser det et avbrudd og mottaksevent () -funksjonsanropet utløses asynkront.
Når de mottatte I2C -dataene er utløst, skrives de sekvensielt i bufferen 'uDataArray '.
Under mottak av data, hvis en slutten av sekvensen signaliseres av masteren (bFreshData! = 0x00), er 'bFreshDataFlag' angitt, og dermed signaliseres starten på overføringssekvensen.
Bilder 2 … 3 gir et eksempel på en typisk pakkesekvens.
Merk: Full kildekoden er tilgjengelig her
Trinn 3: I2C -pakkeinnhold
Formatet til kontrollpakken som sendes til slaven over I2C er gitt ovenfor i bilde 1, betydningen av hvert felt er gitt nedenfor
Betydningen av kontrollpakkefeltene
byte bKoding;
-
IR -fjernkontrollkoding,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Den sekskantede representasjonen av den binære IR -datastrømmen 4 Databyte (usignert lang), LSByte … MSByte
byte bNumberOfBitsInTheData;
Antall biter i dataene (maks 32). Rekkevidde = 1… 32
byte bPulseTrainRepeats;
Hvor mange repetisjoner av dette pulstoget. Område = 1… 255. Vanligvis 2 … 4 gjentakelser. Det kan være lurt å utvide dette for På/Av -kommandoer, ettersom mottaksenheten noen ganger krever noen ekstra pulstogrepetisjoner for å motta et signal som skal slås på
byte bDelayBetweenPulseTrainRepeats;
Forsinkelse mellom repetisjoner av dette pulstoget. Rekkevidde = 1… 255mS. Typisk 22mS … 124mS
byte bButtonRepeats;
Simulerer gjentatt trykk på den samme knappen (men støtter ikke den endrede koden som en Apple -fjernkontroll, den gjentar bare knappekoden). Område = 1… 256. Standard = 1
uint16_t ui16DelayBetweenButtonRepeats;
Forsinkelse mellom knappene gjentas (usignert int). 2 byte totalt LSByte … MSByte. Rekkevidde = 1… 65535mS. Standard = 0 ms
byte bFreshData;
-
Nye data. En verdi som ikke er null. Skrevet sist, utløser IR TX -sekvensen. Område 0x00 … 0xFF
- Flere kontrollpakker kommer = 0
- Dette er den endelige kontrollpakken = Ikke-null verdi 1, 2, … 255
Legg merke til bruken av kompileringsdirektivet '_packed_'. Dette er for å sikre at dataene er pakkebyte for byte i minnet uavhengig av målsystemet som brukes (Uno, Due, ESP8266 etc.). Dette betyr at foreningen mellom registerAllocationType og dataArrayType bare trenger å sekvensielt klokke ut/klokke i byte fra en kontrollpakke, noe som gjør TX/RX -programvaren enkel.
Trinn 4: Anskaffelse av fjernkontrollkoder (ui32Data)
Det er tre måter du kan skaffe en respektive fjernkontrollnøkkelkode på.
- Via bittelling med et oscilloskop,
- Slå opp på et nettsted,
- Dekode det direkte fra datastrømmen i programvaren.
Via bit telling med et omfang
Dette er ikke en effektiv metode, da det tar ganske lang tid og potensielt krever mer enn ett forsøk, men det kan være svært nøyaktig. Det er også nyttig for å visuelt validere koder oppnådd ved hjelp av metode 2 og 3, også for å bestemme eventuelle særegenheter ved en fjernkontroll. For eksempel når du holder inne en knapp på en Apple IR -fjernkontroll. Fjernkontrollen vil først utstede en kommandosekvens og deretter følge den med en gjentatt komprimert sekvens på 0xF….
Slå opp på et nettsted
Fjernkontrollkodedatabasen på Linux Infrared Remote Control -nettstedet er en god kilde.
Ulempen er imidlertid at du kanskje må prøve noen koder til du finner en som fungerer for deg. Du må kanskje også tolke noen av representasjonene til kodene for å konvertere dem til tilsvarende hex -form.
Dekode det direkte fra datastrømmen
Ved å bruke kretsen på bilde 1 ovenfor i forbindelse med IRremote -bibliotekseksemplet 'IRrecvDumpV2.ino' er det mulig å dekode datastrømmen direkte fra fjernkontrollen. Bilde 2 viser en dekodet Samsung TV -fjernkontroll for et av/på -knappetrykk i Arduino IDE -terminalvinduet.
Kombinert mottaker/sender
Bildene 3 og 4 ovenfor viser en løsning som muliggjør både mottak og overføring av IR -kommando for enkel prototyping.
For å dekode IR -fjernkontrollknappene må du blinke Arduino med eksempelet 'IRrecvDumpV2.ino' som følger med IRremote -biblioteket.
Det fungerer også like godt for overføring hvis IR -kommandoer. En rød lysdiode er inkludert som en visuell indikasjon på at enheten er i bruk.
Trinn 5: Slik tester du I2C -slaveenheten
Ved å bruke kildekoden her og kretsen som er skissert ovenfor på bilde 1, programmerer du 'Master' Arduino med 'IR_Remote_Sim_Test.ino' og 'Slave' Arduino med 'IR_Remote_Sim.ino'.
Forutsatt at du har en Sony Bravia TV, Sky HD -boks og en Sony BT SoundBar, trykker du på knapp 1 og TVen din bytter til BBC1 (kanal 101). Trykk på knapp 2, så vil lydfeltet dempes. Trykk på igjen, og den vil dempe lyden.
Under utførelsen av IR -overføringssekvensen lyser LED3 for å indikere at slaven er opptatt og LED1 vil flimre inline med IR -overføringsprosessen.
Selvfølgelig, hvis du ikke har det samme underholdningssystemet som ovenfor, kan du omprogrammere slaven med 'IRrecvDumpV2.ino', dekode dine eksterne kommandoer av interesse og deretter programmere dem i 'IR_Remote_Sim_Test.ino' for din gitt scenario.
Bilde 2 viser oversikten over systemnivå -testprogramvare mellom Master og Slave.
Trinn 6: Krymper designet
Ok, så forutsatt at du har fulgt denne instruksjonsbaserte avhengigheten av to Arduinoer for å kontrollere hjemmene dine, er ikke den mest effektive bruken av Arduino -aksjen. Følgelig, hvis du konstruerer kretsen vist på bildet ovenfor og følger instruksjonene her for å programmere ATMega328P med 'IR_Remote_Sim.ino', vil du kunne redusere hele systemet til minimale komponenter. Dette lar deg bygge inn designet i et annet system.
Trinn 7: Konklusjon
Løsningen er stabil og fungerer bra, den har vært innebygd i et annet system i ganske mange uker nå uten problemer.
Jeg valgte Arduino Uno R3 da jeg ønsket en enhet som hadde tilstrekkelig RAM slik at jeg kunne ha en knappbuffer med rimelig dybde. Jeg nøyde meg med en bufferstørrelse på 20 pakker (MAX_SEQUENCES).
Hybrid TX/RX -skjoldet jeg laget, kom også veldig godt i bruk når jeg dekodte fjernkontroller fra Sony og Sky. Selv om jeg må innrømme at jeg bruker mitt digitale omfang fra tid til annen for å kontrollere at programvaren som er avkodet IR -kommandoen var den samme som den som kom fra IR mottatt (TSOP38328).
Det eneste jeg ville ha gjort annerledes ville ha vært å bruke konstant strømkrets for IR -ledningen som vist ovenfor på bilde 2.
Et annet punkt å merke seg er at ikke alle IR -sendere er modulert med 38KHz, TSOP38328 er optimalisert for 38KHz.
Trinn 8: Referanser brukt
IRRemote.h
- Av: z3t0
- Formål: Infrarødt eksternt bibliotek for Arduino: send og motta 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) mottakersensor - TSOP38238 (ekvivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
For å unngå datastruktur utfylling til ordgrenser
- 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 fjernkontrolldatabase
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Datablad
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Dataark
https://www.vishay.com/docs/81857/1n4148.pdf
Anbefalt:
Bruke infrarød sensor med Arduino: 8 trinn (med bilder)
Bruke infrarød sensor med Arduino: Hva er en infrarød (aka IR) sensor? En IR -sensor er et elektronisk instrument som skanner IR -signaler i bestemte frekvensområder definert av standarder og konverterer dem til elektriske signaler på utgangspinnen (vanligvis kalt signalpinne) . IR -signalet
Universal TV -fjernkontroll - Ardiuino, infrarød: 5 trinn
Universal TV -fjernkontroll - Ardiuino, infrarød: Hei! I denne instruksen vil jeg vise deg hvordan du bygger og programmerer din egen universelle fjernkontroll som fungerer med det meste som bruker en infrarød fjernkontroll, og som også vil "lytte". og dekode et infrarødt signal sendt av forskjellige andre
IRduino: Arduino fjernkontroll - etterlign en tapt fjernkontroll: 6 trinn
IRduino: Arduino fjernkontroll - Imitate a Lost Remote: Hvis du noen gang har mistet fjernkontrollen for TV -en eller DVD -spilleren, vet du hvor frustrerende det er å måtte gå til, finne og bruke knappene på selve enheten. Noen ganger tilbyr disse knappene ikke engang den samme funksjonaliteten som fjernkontrollen. Motta
Trådløs fjernkontroll ved bruk av 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sendermottaker for quadcopter - Rc Helikopter - RC -fly som bruker Arduino: 5 trinn (med bilder)
Trådløs fjernkontroll ved bruk av 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sendermottaker for quadcopter | Rc Helikopter | Rc -fly ved bruk av Arduino: For å betjene en Rc -bil | Quadcopter | Drone | RC -fly | RC -båt, vi trenger alltid en mottaker og sender, anta at for RC QUADCOPTER trenger vi en 6 -kanals sender og mottaker, og den typen TX og RX er for kostbar, så vi lager en på vår
Infrarød fjernkontroll og IR -mottaker (TSOP1738) med Arduino: 10 trinn
Infrarød fjernkontroll og IR -mottaker (TSOP1738) med Arduino: Denne instruksjonen er for nybegynnere fra Arduino. Dette er et av mine tidligere prosjekter med Arduino. Jeg likte mye da jeg lagde det, og håper du vil like det også. Den mest attraktive egenskapen til dette prosjektet er “ Trådløs kontroll ”. Og det er