INHOUDSOPGAWE:

I2C infrarooi afstandsbediening met die Arduino: 8 stappe (met foto's)
I2C infrarooi afstandsbediening met die Arduino: 8 stappe (met foto's)

Video: I2C infrarooi afstandsbediening met die Arduino: 8 stappe (met foto's)

Video: I2C infrarooi afstandsbediening met die Arduino: 8 stappe (met foto's)
Video: Arduino Tutorial 31- How to Use the Infrared (IR) Remote 2024, November
Anonim
I2C infrarooi afstandsbediening met die Arduino
I2C infrarooi afstandsbediening met die Arduino
I2C infrarooi afstandsbediening met die Arduino
I2C infrarooi afstandsbediening met die Arduino

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

Kort oorsig van die kring
Kort oorsig van die kring

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

Kort oorsig van die sagteware
Kort oorsig van die sagteware
Kort oorsig van die sagteware
Kort oorsig van die sagteware
Kort oorsig van die sagteware
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

I2C -pakkie -inhoud
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)

Verkry afstandsbedieningskodes (ui32Data)
Verkry afstandsbedieningskodes (ui32Data)
Verkry afstandsbedieningskodes (ui32Data)
Verkry afstandsbedieningskodes (ui32Data)
Verkry kodes vir afstandbeheer (ui32Data)
Verkry kodes vir afstandbeheer (ui32Data)
Verkry afstandsbedieningskodes (ui32Data)
Verkry afstandsbedieningskodes (ui32Data)

Daar is drie maniere waarop u 'n onderskeie afstandsbedieningsleutelkode kan bekom;

  1. Via bitselling met 'n ossilloskoop,
  2. Soek dit op 'n webwerf,
  3. 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

Hoe u u I2C -slawe -toestel kan toets
Hoe u u I2C -slawe -toestel kan toets
Hoe om u I2C -slawe -toestel te toets
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

Krimp u ontwerp
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

Afsluiting
Afsluiting
Afsluiting
Afsluiting

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: