Taula de continguts:
- Pas 1: Breu visió general del circuit
- Pas 2: Breu descripció general del programari
- Pas 3: contingut del paquet I2C
- Pas 4: Adquisició de codis de control remot (ui32Data)
- Pas 5: Com provar el dispositiu esclau I2C
- Pas 6: reduir el disseny
- Pas 7: Conclusió
- Pas 8: referències utilitzades
Vídeo: Control remot infraroig I2C amb l'Arduino: 8 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Preàmbul Aquest document instructiu detalla com crear un control remot universal mitjançant I2C per a la interfície.
Què us sembla estrany de fer servir un dispositiu esclau I2C?
Sí, un dispositiu esclau I2C.
Això es deu al fet que la sincronització exacta dels paquets IR és bastant exigent i amb la qual un Arduino típic lluitarà si ja està realitzant moltes altres tasques al mateix temps. És millor distribuir la càrrega informàtica assignant activitats intensives de temps a processadors dedicats sempre que sigui possible (millor fer-ho encara en maquinari). Atès que I2C és un mètode de comunicacions robust i ben documentat entre ICs, he escollit aquesta com a interfície.
Introducció
Com s'ha esmentat anteriorment, aquesta instrucció descriu com controlar els electrodomèstics com TV, reproductor de DVD i satèl·lit, etc. mitjançant la biblioteca IRremote de l'Arduino.
Conclou amb un exemple de disseny que converteix l’Arduino en un mòdul de control remot esclau I2C (foto 1 anterior) amb circuit de prova de prototip (foto 2 superior) i continua detallant com reduir el disseny fins als components mínims necessaris perquè pugui ser incrustat en un altre disseny. En el meu cas, faig servir aquest dispositiu incrustat en un dispositiu de control remot IoT Universal basat en un ESP8266-12E.
Quines parts necessito?
Per construir el circuit representat al pas 1 (transmissor IR) necessitareu les parts següents;
- 2 resistències de 10K de descompte
- 1 resistència 390R fora
- 1 resistència de 33R
- 1 resistència 3K8 de descompte
- 1 apagat LED vermell
- 1 de LED IR TSAL6400
- 1 del transistor BC337
- 1 condensador de 220uF de descompte
- 1 de descompte a Arduino Uno
Per construir el circuit representat al pas 4 (receptor IR), necessitareu les parts següents;
- 1 resistència de 10K fora
- 1 de descompte TSOP38328
- 1 condensador de 220uF de descompte
- 1 de descompte a Arduino Uno
Per construir el circuit representat al pas 5 (circuit de prova d’esclau), necessitareu les parts següents;
- 4 resistències de 10K de descompte
- 2 resistències 390R
- 1 resistència de 33R
- 1 resistència 3K8 de descompte
- 2 apagats LED vermell
- 1 de LED IR TSAL6400
- 1 de transistor BC337
- 1 condensador de 220uF de descompte
- 2 botons SPST
- 2 de descompte a Arduino Unos
Per construir el circuit representat al pas 6 (disseny reduït), necessitareu les parts següents;
- 3 resistències de 10K de descompte
- 1 resistència de 270R
- 1 resistència 15R fora
- 4 resistències de 1K de descompte
- 1 apagat LED vermell
- 1 de LED IR TSAL6400 o TSAL5300
- 1 de transistor BC337
- 1 off 220uF condensador electrolític @ 6,3v
- 1 off de condensador 1000uF electrolític @ 6,3v
- 2 condensadors de 0,1 uF de descompte
- 2 condensadors de 22pF
- 1 descompte Xtal a 16 MHz
- 1 de descompte en ATMega328P-PU
Nota: També necessiteu un dispositiu FTDI per programar l'ATMega328P
Quines habilitats necessito?
- Una comprensió mínima de l’electrònica,
- Coneixement d'Arduino i el seu IDE,
- Una mica de paciència,
- Alguna comprensió d’I2C seria útil (consulteu aquí alguns detalls genèrics d’I2C / Wire Library).
Temes tractats
- Breu visió general del circuit,
- Breu descripció general del programari,
- Contingut del paquet I2C,
- Adquirir codis de control remot (ui32Data),
- Com provar el dispositiu I2C Slave,
- Reduir el vostre disseny,
- Conclusió,
- Referències utilitzades.
Exempció de responsabilitat
Com sempre, utilitzeu aquestes instruccions pel vostre compte i risc i no s’admeten.
Pas 1: Breu visió general del circuit
El propòsit del circuit és transmetre codis de control remot IR. El seu disseny és bastant senzill i senzill.
Quan el transistor Q1 s’encén un BC337 NPN mitjançant un lògic des d’Arduino PWM O / P D3 fins a la resistència R5, el corrent passa per les leds 1 i 2. Limitades només per les resistències de llast R3 i R4 respectivament. Q1 s'utilitza per augmentar el corrent que passa pel díode IR (IF Max = 100mA) fins a un excés del que és capaç de subministrar Arduino O / P ~ 40mA @ + 5v.
El condensador C1 a 220uF electrolític proporciona una certa estabilització que impedeix que el carril de subministrament caigui per la potència consumida pels leds 1 i 2.
Les resistències R1 i R2 són extraccions I2C.
Pas 2: Breu descripció general del programari
Preàmbul
Per compilar correctament aquest codi font, necessitareu la següent biblioteca addicional;
IRremote.h
- Per: z3t0
- Finalitat: biblioteca remota d'infrarojos per a Arduino: enviar i rebre senyals d'infrarojos amb múltiples protocols
- De:
Visió general del codi
Com es mostra a la imatge 1 anterior, en iniciar el codi, es configura la E / S del microcontrolador i, a continuació, examina l'estat de la marca interna del programari "bFreshDataFlag". Quan s'estableix aquest senyalador, el controlador afirma que és la línia "Ocupat" (envia el pin de dades D4 baix) i es mou a l'estat "eBUSY" llegint seqüencialment el botó de premsa de les ordres que es mantenen a uDataArray i envia les dades modulades IR al LED IR a seqüència de transmissió.
Un cop enviades les dades de uDataArray , es reprèn l'estat "eIDLE" i es deixa la línia "Ocupat" (enviant el pin D4 alt). Ara el dispositiu està a punt per rebre més prems de botons que marquen el final de la seqüència de transmissió.
Recepció de dades de premsa de botó IR
Quan les dades s’envien al controlador remot InfraRed mitjançant I2C, provoca una interrupció i la trucada de la funció recevevent () s’activa de manera asíncrona.
Un cop activades, les dades I2C rebudes s'escriuen seqüencialment al buffer 'uDataArray '.
Durant la recepció de dades, si el mestre assenyala un final de seqüència (bFreshData! = 0x00), es defineix "bFreshDataFlag", cosa que indica l'inici de la seqüència de transmissió.
Les imatges 2 … 3 donen un exemple d'una seqüència de paquets típica.
Nota: el codi font complet està disponible aquí
Pas 3: contingut del paquet I2C
El format del paquet de control enviat a l'esclau a través d'I2C es dóna a la imatge 1 a la part superior; el significat de cada camp es dóna a continuació.
Significat dels camps del paquet de control
byte bCodificació;
-
Codificació de control remot IR,
- RC6 (Cel) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Representació hexadecimal del flux de dades IR binari 4 bytes de dades (sense signar llarg), LSByte … MSByte
byte bNumberOfBitsInTheData;
Nombre de bits a les dades (màxim 32). Rang = 1 … 32
byte bPulseTrainRepeats;
Quantes repeticions d’aquest tren de pulsacions. Rang = 1 … 255. Normalment 2 … 4 repeticions. És possible que vulgueu ampliar això per a les ordres d’encès / apagat, ja que el dispositiu receptor de vegades requereix algunes repeticions addicionals del tren de polsos per rebre un senyal d’encès
byte bDelayBetweenPulseTrainRepeats;
Retard entre les repeticions d’aquest tren d’impulsos. Abast = 1 … 255 mS. Normalment 22mS … 124mS
byte bButtonRepeats;
Simula que es prem repetidament el mateix botó (però no admet el codi modificat com un comandament a distància d'Apple, només repeteix el codi del botó). Rang = 1 … 256. Per defecte = 1
uint16_t ui16DelayBetweenButtonRepeats;
Retard entre les repeticions del botó (int sense signe). 2 bytes en total LSByte … MSByte. Abast = 1 … 65535 mS. Per defecte = 0 mS
byte bFreshData;
-
Dades noves. Un valor diferent de zero. L'últim escrit, activa la seqüència IR TX. Rang 0x00 … 0xFF
- Hi haurà més paquets de control = 0
- Aquest és el paquet de control final = valor diferent de zero 1, 2, … 255
Tingueu en compte l'ús de la directiva del compilador "_packed_". Això és per garantir que les dades siguin paquets de bytes per bytes a la memòria, independentment del sistema de destinació utilitzat (Uno, Due, ESP8266, etc.). Això significa que la unió entre registerAllocationType i dataArrayType només necessita rellotjar / byclock en bytes d’un paquet de control de manera seqüencial, cosa que fa que el programari TX / RX sigui senzill.
Pas 4: Adquisició de codis de control remot (ui32Data)
Hi ha tres maneres d’adquirir un codi de clau de control remot respectiu;
- Mitjançant el recompte de bits amb un oscil·loscopi,
- Cerqueu-ho en un lloc web,
- Descodifiqueu-lo directament des del flux de dades del programari.
Mitjançant el recompte de bits amb un abast
Aquest no és un mètode eficient, ja que triga força temps i pot requerir més d’un intent, però pot ser molt precís. També és útil per validar visualment els codis obtinguts mitjançant els mètodes 2 i 3, també per determinar les peculiaritats d’un comandament a distància. A tall d’exemple quan es manté premut un botó d’un comandament a distància IR d’Apple. El comandament remot inicialment emetrà una seqüència d’ordres i després la seguirà amb una seqüència comprimida repetida de 0xF …
Cerqueu-lo en un lloc web
La base de dades de codis de control remot al lloc web de control remot per infrarojos de Linux és una bona font.
L'inconvenient, però, és que potser haureu de provar uns quants codis fins que en trobeu un que us funcioni. És possible que també hagueu d’interpretar algunes de les representacions dels codis per convertir-los en la seva forma hexadecimal equivalent.
Descodifiqueu-lo directament des del flux de dades
Utilitzant el circuit de la imatge 1 anterior junt amb l'exemple de la biblioteca IRremote 'IRrecvDumpV2.ino' és possible descodificar el flux de dades directament des del comandament a distància. La imatge 2 mostra un comandament Samsung TV descodificat per prémer un botó d’encesa / apagat a la finestra del terminal Arduino IDE.
Receptor / transmissor combinat
Les imatges 3 i 4 anteriors representen una solució que permet tant la recepció com la transmissió de comandes IR per facilitar el prototipatge.
Per descodificar els botons de control remot IR, haureu de fer flash l'Arduino amb l'exemple "IRrecvDumpV2.ino" que inclou la biblioteca IRremote.
També funciona igual de bé per a la transmissió si ordena IR. S'inclou un led vermell com a indicació visual del dispositiu en acció.
Pas 5: Com provar el dispositiu esclau I2C
Utilitzant el codi font aquí i el circuit esbossat anteriorment a la imatge 1, programeu l'Arduino 'Master' amb 'IR_Remote_Sim_Test.ino' i l'Arduino 'Slave' amb 'IR_Remote_Sim.ino'.
Suposant que tingueu un televisor Sony Bravia, una caixa Sky HD i un Sony BT SoundBar, premeu el botó 1 i el televisor canviarà a BBC1 (canal 101). Premeu el botó 2 i la barra de so es silenciarà. Torneu a prémer i es silenciarà.
Durant l'execució de la seqüència de transmissió IR el LED3 s'encendrà indicant que l'esclau està ocupat i el LED1 parpellejarà en línia amb el procés de transmissió IR.
Per descomptat, si no teniu configurat el mateix sistema d’entreteniment que l’anterior, podeu tornar a programar l’esclau amb “IRrecvDumpV2.ino”, descodificar les ordres remotes d’interès i, a continuació, programar-les a “IR_Remote_Sim_Test.ino” per al vostre escenari determinat.
La imatge 2 mostra la visió general del programari de proves de nivell de sistema entre Master i Slave.
Pas 6: reduir el disseny
D’acord, doncs, suposant que heu seguit aquesta instrucció basant-vos en dos Arduinos per controlar els vostres dispositius domèstics, no és l’ús més eficient de les vostres existències d’Arduino. En conseqüència, si construïu el circuit que es mostra a la imatge superior i seguiu les instruccions aquí per programar l'ATMega328P amb 'IR_Remote_Sim.ino', podreu reduir tot el sistema als components mínims. Això us permetrà incrustar el vostre disseny en algun altre sistema.
Pas 7: Conclusió
La solució és estable i funciona bé, ja fa força setmanes que està incrustada en un altre sistema sense cap problema.
Vaig triar l'Arduino Uno R3 ja que volia un dispositiu que tingués prou memòria RAM per poder tenir un botó de memòria intermèdia de profunditat raonable. Em vaig conformar amb una mida de memòria intermèdia de 20 paquets (MAX_SEQUENCES).
L’escut Hybrid TX / RX que vaig fabricar també va ser molt útil a l’hora de descodificar els comandaments a distància de Sony i Sky. Tot i que he de confessar que fer servir el meu abast digital de tant en tant per comprovar si la comanda IR descodificada del programari era la mateixa que la procedent de la IR rebuda (TSOP38328).
L'única cosa que hauria fet de manera diferent hauria estat utilitzar el circuit de transmissió de corrent constant per al led IR, tal com es mostra a la imatge 2.
Un altre punt a destacar és que no tots els transmissors d’IR estan modulats a 38 KHz, el TSOP38328 està optimitzat per a 38 KHz.
Pas 8: referències utilitzades
IRRemote.h
- Per: z3t0
- Finalitat: biblioteca remota d'infrarojos per a Arduino: enviar i rebre senyals d'infrarojos amb múltiples protocols
- De:
Biblioteca remota IR
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Sensor de receptor IR (infrarojos): TSOP38238 (equivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Per evitar el farciment de l'estructura de dades als límits de les paraules
- 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
Bona font de detalls remots IR
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Base de dades de comandaments a distància IR
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Full de dades
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Full de dades
https://www.vishay.com/docs/81857/1n4148.pdf
Recomanat:
IRduino: control remot Arduino: imiteu un control remot perdut: 6 passos
IRduino: control remot Arduino: imiteu un control remot perdut: si alguna vegada heu perdut el comandament a distància del vostre reproductor de TV o DVD, sabeu el frustrant que és haver d’anar, trobar i utilitzar els botons del propi dispositiu. De vegades, aquests botons ni tan sols ofereixen la mateixa funcionalitat que el comandament a distància. Rebre
Remot infraroig i receptor IR (TSOP1738) amb Arduino: 10 passos
Receptor infraroig remot i IR (TSOP1738) amb Arduino: aquest instructiu és per a principiants d’Arduino. Aquest és un dels meus projectes anteriors amb Arduino. Vaig gaudir molt quan ho vaig fer i espero que també us agradi. La característica més atractiva d’aquest projecte és el „ control sense fils ”. I això és
Controleu-vos els aparells elèctrics amb el vostre control remot de televisió (control remot ir) amb pantalla de temperatura i humitat: 9 passos
Controleu-vos els aparells elèctrics amb el vostre control remot de televisió (control remot ir) amb pantalla de temperatura i humitat: hola, sóc Abhay i és el meu primer bloc sobre Instructables i avui us mostraré com controlar els vostres electrodomèstics amb el vostre control remot de TV construint aquest projecte senzill. gràcies al laboratori atl per obtenir suport i proporcionar el material
Liberació del cable remot Olympus Evolt E510 (versió 2 amb enfocament automàtic al control remot): 6 passos (amb imatges)
Liberació del cable remot Olympus Evolt E510 (versió 2 amb enfocament automàtic al control remot): ahir vaig construir un comandament senzill amb un botó per al meu Olympus E510. La majoria de càmeres tenen un botó de disparador (el que premeu per fer una foto) que té dos modes. Si es prem el botó suaument, la càmera enfocarà automàticament i mesurarà la llum
Control remot remot: 11 passos (amb imatges)
Control remot a distància: tinc un nadó acabat de néixer i no creu que hagi de dormir el temps que la meva dona i jo també ho desitgem. Una cosa que el manté feliç al bressol és el mòbil que li penja. Així que quan es desperti si necessitem uns 25 minuts més o menys de sl