Tabla de contenido:
- Paso 1: Breve descripción general del circuito
- Paso 2: Breve descripción general del software
- Paso 3: Contenido del paquete I2C
- Paso 4: Adquirir códigos de control remoto (ui32Data)
- Paso 5: Cómo probar su dispositivo esclavo I2C
- Paso 6: Reducir su diseño
- Paso 7: Conclusión
- Paso 8: Referencias utilizadas
Video: Control remoto infrarrojo I2C con Arduino: 8 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:44
Preámbulo Este Instructable detalla cómo crear un control remoto universal usando I2C para la interfaz.
¿Qué tan extraño dices, usando un dispositivo esclavo I2C?
Sí, un dispositivo esclavo I2C.
Esto se debe a que la sincronización precisa de los paquetes IR es bastante exigente y un Arduino típico tendrá dificultades si ya está realizando muchas otras tareas al mismo tiempo. Es mejor distribuir la carga informática asignando actividades intensivas en tiempo a procesadores dedicados siempre que sea posible (mejor aún hacerlo en hardware). Dado que I2C es un método de comunicación robusto y bien documentado entre circuitos integrados, elegí este como interfaz.
Introducción
Como se mencionó anteriormente, este instructivo describe cómo controlar electrodomésticos como TV, reproductor de DVD y satélite, etc. utilizando la biblioteca IRremote en el Arduino.
Concluye con un ejemplo de diseño que convierte el Arduino en un módulo de control remoto esclavo I2C (imagen 1 arriba) con circuito de prueba prototipo (imagen 2 arriba) y continúa detallando cómo reducir su diseño a los componentes mínimos necesarios para que pueda ser incrustado en otro diseño. En mi caso, uso este dispositivo integrado en un dispositivo de control remoto IoT Universal basado en un ESP8266-12E.
¿Qué partes necesito?
Para construir el circuito que se muestra en el paso 1 (transmisor de infrarrojos), necesitará las siguientes piezas;
- 2 resistencias de 10K
- 1 resistencia 390R
- 1 resistencia 33R
- 1 resistencia 3K8
- 1 LED rojo apagado
- 1 de LED IR TSAL6400
- 1 transistor BC337
- 1 condensador de 220uF
- 1 de Arduino Uno
Para construir el circuito que se muestra en el Paso 4 (Receptor de infrarrojos), necesitará las siguientes piezas;
- 1 resistencia de 10K
- 1 de TSOP38328
- 1 condensador de 220uF
- 1 de Arduino Uno
Para construir el circuito que se muestra en el Paso 5 (circuito de prueba esclavo), necesitará las siguientes partes;
- 4 resistencias de 10K
- 2 de resistencia 390R
- 1 resistencia 33R
- 1 resistencia 3K8
- 2 LED rojo apagado
- 1 de LED IR TSAL6400
- 1 transistor BC337
- 1 condensador de 220uF
- 2 botones SPST
- 2 de Arduino Unos
Para construir el circuito que se muestra en el Paso 6 (Diseño encogido), necesitará las siguientes partes;
- 3 resistencias de 10K
- 1 resistencia 270R
- 1 resistencia 15R
- 4 resistencias de 1K
- 1 LED rojo apagado
- 1 LED de infrarrojos TSAL6400 o TSAL5300
- 1 transistor BC337
- 1 condensador electrolítico de 220 uF a 6,3 v
- 1 condensador electrolítico de 1000 uF a 6,3 v
- 2 condensadores de 0.1uF
- 2 condensadores de 22pF
- 1 de 16 MHz Xtal
- 1 de ATMega328P-PU
Nota: También necesitará un dispositivo FTDI para programar el ATMega328P
¿Qué habilidades necesito?
- Un mínimo de conocimientos de electrónica,
- Conocimiento de Arduino y su IDE,
- Un poco de paciencia,
- Sería útil tener algún conocimiento de I2C (consulte aquí algunos detalles genéricos de I2C / Wire Library).
Tópicos cubiertos
- Breve descripción del circuito,
- Breve descripción general del software,
- Contenido del paquete I2C,
- Adquirir códigos de control remoto (ui32Data),
- Cómo probar su dispositivo esclavo I2C,
- Reduciendo tu diseño
- Conclusión,
- Referencias utilizadas.
Descargo de responsabilidad
Como siempre, usa estas instrucciones bajo su propio riesgo y vienen sin soporte.
Paso 1: Breve descripción general del circuito
El propósito del circuito es transmitir códigos de control remoto por infrarrojos. Su diseño es bastante sencillo y sencillo.
Cuando el transistor Q1 a BC337 NPN se enciende a través de uno lógico desde Arduino PWM O / P D3 a la resistencia R5, la corriente pasa a través de los Leds 1 y 2. Limitado solo por las resistencias de balasto R3 y R4 respectivamente. Q1 se usa para aumentar la corriente que pasa a través del diodo IR (IF Max = 100mA) a un exceso de lo que el Arduino O / P es capaz de suministrar ~ 40mA @ + 5v.
El condensador C1 a 220uF electrolítico proporciona cierta estabilización evitando una caída del riel de suministro por la potencia consumida por los Leds 1 y 2.
Las resistencias R1 y R2 son pull ups I2C.
Paso 2: Breve descripción general del software
Preámbulo
Para compilar correctamente este código fuente, necesitará la siguiente biblioteca adicional;
IRremote.h
- Por: z3t0
- Propósito: biblioteca remota de infrarrojos para Arduino: envíe y reciba señales de infrarrojos con múltiples protocolos
- De:
Descripción general del código
Como se muestra en la imagen 1 anterior, en el inicio, el código configura la E / S del microcontrolador y luego sondea el estado del indicador de software interno 'bFreshDataFlag'. Cuando esta bandera está configurada, el controlador afirma que es la línea 'Ocupado' (enviando el pin de datos D4 bajo) y se mueve al estado 'eBUSY' leyendo secuencialmente los comandos de pulsación del botón retenidos en uDataArray y enviando los datos modulados por infrarrojos al LED de infrarrojos en un secuencia de transmisión.
Una vez que los datos retenidos en uDataArray se han enviado por completo, el estado 'eIDLE' se reanuda y la línea 'Ocupado' se desactiva (enviando el pin de datos D4 alto). El dispositivo ahora está listo para recibir más pulsaciones de botones que marcan el final de la secuencia de transmisión.
Recepción de datos de pulsación del botón IR
Cuando se envían datos al controlador remoto de infrarrojos a través de I2C, se activa una interrupción y la llamada a la función ReceiveEvent () se activa de forma asincrónica.
Una vez activados, los datos I2C recibidos se escriben secuencialmente en el búfer 'uDataArray '.
Durante la recepción de datos, si el maestro indica un final de secuencia (bFreshData! = 0x00), se establece 'bFreshDataFlag', lo que indica el inicio de la secuencia de transmisión.
Las imágenes 2… 3 dan un ejemplo de una secuencia típica de paquetes.
Nota: el código fuente completo está disponible aquí
Paso 3: Contenido del paquete I2C
El formato del paquete de control enviado al esclavo a través de I2C se da arriba en la imagen 1, el significado de cada campo se da a continuación
Significado de los campos del paquete de control
byte bEncoding;
-
Codificación de control remoto por infrarrojos,
- RC6 (cielo) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
La representación hexadecimal del flujo de datos IR binarios 4 bytes de datos (longitud sin signo), LSByte… MSByte
byte bNumberOfBitsInTheData;
Número de bits en los datos (máx. 32). Rango = 1… 32
byte bPulseTrainRepeats;
Cuántas repeticiones de este tren de pulsos. Rango = 1… 255. Normalmente 2… 4 repeticiones. Es posible que desee extender esto para los comandos de encendido / apagado, ya que el dispositivo receptor a veces requiere algunas repeticiones de tren de pulsos adicionales para recibir una señal de encendido
byte bDelayBetweenPulseTrainRepeats;
Retraso entre repeticiones de este tren de pulsos. Rango = 1… 255 mS. Normalmente 22 mS… 124 mS
byte bButtonRepeats;
Simula la presión repetida del mismo botón (pero no admite el código modificado como un control remoto de Apple, simplemente repite el código del botón). Rango = 1… 256. Predeterminado = 1
uint16_t ui16DelayBetweenButtonRepeats;
Retraso entre repeticiones de botones (unsigned int). 2 bytes en total LSByte… MSByte. Rango = 1… 65535mS. Predeterminado = 0 ms
byte bFreshData;
-
Datos frescos. Un valor distinto de cero. Escrito en último lugar, activa la secuencia IR TX. Rango 0x00… 0xFF
- Más paquetes de control por venir = 0
- Este es el paquete de control final = valor distinto de cero 1, 2,… 255
Tenga en cuenta el uso de la directiva del compilador '_packed_'. Esto es para asegurar que los datos sean paquete byte por byte en la memoria, independientemente del sistema de destino utilizado (Uno, Due, ESP8266, etc.). Esto significa que la unión entre registerAllocationType y dataArrayType solo necesita reloj de salida / reloj en bytes secuencialmente desde un paquete de control, lo que hace que el software TX / RX sea simple.
Paso 4: Adquirir códigos de control remoto (ui32Data)
Hay tres formas de adquirir un código de llave de control remoto respectivo;
- Mediante el recuento de bits con un osciloscopio,
- Búscalo en un sitio web,
- Decodifíquelo directamente del flujo de datos en el software.
A través del recuento de bits con un alcance
Este no es un método eficiente, ya que lleva bastante tiempo y potencialmente requiere más de un intento, sin embargo, puede ser muy preciso. También es útil para validar visualmente los códigos obtenidos mediante los métodos 2 y 3, y también para determinar las peculiaridades de un control remoto. A modo de ejemplo, al mantener pulsado un botón en un mando a distancia por infrarrojos de Apple. El control remoto inicialmente emitirá una secuencia de comandos y luego la seguirá con una secuencia comprimida repetida de 0xF….
Búscalo en un sitio web
La base de datos de códigos de control remoto en el sitio web de Linux Infrared Remote Control es una buena fuente.
Sin embargo, la desventaja es que es posible que tenga que probar algunos códigos hasta que encuentre uno que funcione para usted. Es posible que también deba interpretar algunas de las representaciones de los códigos para convertirlos en su forma hexadecimal equivalente.
Decodifíquelo directamente desde el flujo de datos
Usando el circuito en la imagen 1 arriba junto con el ejemplo de la biblioteca IRremote 'IRrecvDumpV2.ino' es posible decodificar el flujo de datos directamente desde el control remoto. La imagen 2 muestra un control remoto de TV Samsung decodificado para presionar un botón de encendido / apagado en la ventana del terminal Arduino IDE.
Receptor / transmisor combinado
Las imágenes 3 y 4 de arriba muestran una solución que permite tanto la recepción como la transmisión del comando IR para permitir una fácil creación de prototipos.
Para decodificar las pulsaciones de los botones del control remoto por infrarrojos, necesitará flashear el Arduino con el ejemplo 'IRrecvDumpV2.ino' que viene con la biblioteca IRremote.
También funciona igualmente bien para la transmisión si los comandos IR. Se incluye un LED rojo como indicación visual de que el dispositivo está en acción.
Paso 5: Cómo probar su dispositivo esclavo I2C
Usando el código fuente aquí, y el circuito descrito arriba en la imagen 1, programe el Arduino 'Maestro' con 'IR_Remote_Sim_Test.ino' y el Arduino 'Esclavo' con 'IR_Remote_Sim.ino'.
Suponiendo que tiene un televisor Sony Bravia, una caja Sky HD y un SoundBar Sony BT, presione el botón 1 y su televisor cambiará a BBC1 (canal 101). Presione el botón 2 y su barra de sonido se silenciará. Presione nuevamente y se activará el silencio.
Durante la ejecución de la secuencia de transmisión de infrarrojos, el LED3 se iluminará indicando que el esclavo está ocupado y el LED1 parpadeará en línea con el proceso de transmisión de infrarrojos.
Por supuesto, si no tiene el mismo sistema de entretenimiento configurado como arriba, puede reprogramar el esclavo con 'IRrecvDumpV2.ino', decodificar sus comandos remotos de interés, luego programarlos en el 'IR_Remote_Sim_Test.ino' para su escenario dado.
La imagen 2 muestra la descripción general del software de prueba a nivel del sistema entre maestro y esclavo.
Paso 6: Reducir su diseño
Ok, entonces asumir que ha seguido este instructivo confiando en dos Arduino para controlar sus dispositivos domésticos no es el uso más eficiente de su stock de Arduino. En consecuencia, si construye el circuito que se muestra en la imagen de arriba y sigue las instrucciones aquí para programar el ATMega328P con 'IR_Remote_Sim.ino', podrá reducir todo el sistema a los componentes mínimos. Esto le permitirá incrustar su diseño en algún otro sistema.
Paso 7: Conclusión
La solución es estable y funciona bien, se ha integrado en otro sistema durante varias semanas sin ningún problema.
Elegí el Arduino Uno R3 porque quería un dispositivo que tuviera suficiente RAM para poder tener un búfer de botón de profundidad razonable. Me conformé con un tamaño de búfer de 20 paquetes (MAX_SEQUENCES).
El escudo híbrido TX / RX que hice también fue muy útil al decodificar los controles remotos de Sony y Sky. Aunque debo confesar que usé mi osciloscopio digital de vez en cuando para verificar que el comando IR decodificado por software fuera el mismo que el que provenía del IR recibido (TSOP38328).
Lo único que hubiera hecho de manera diferente hubiera sido usar el circuito de control de corriente constante para el LED IR como se muestra arriba en la imagen 2.
Otro punto a tener en cuenta es que no todos los transmisores de infrarrojos están modulados con 38 KHz, el TSOP38328 está optimizado para 38 KHz.
Paso 8: Referencias utilizadas
IRRemote.h
- Por: z3t0
- Propósito: biblioteca remota de infrarrojos para Arduino: envíe y reciba señales de infrarrojos con múltiples protocolos
- De:
Biblioteca de control remoto por infrarrojos
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Sensor receptor de infrarrojos (IR) - TSOP38238 (equivalente)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Para evitar el relleno de la estructura de datos hasta los límites de las palabras
- 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
Buena fuente de detalles del control remoto por infrarrojos
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Base de datos de mandos a distancia por infrarrojos
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
Hoja de datos BC337
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Hoja de datos
https://www.vishay.com/docs/81857/1n4148.pdf
Recomendado:
El control remoto de TV se convierte en un control remoto de RF -- NRF24L01 + Tutorial: 5 pasos (con imágenes)
El control remoto de TV se convierte en un control remoto de RF || Tutorial de NRF24L01 +: En este proyecto te mostraré cómo utilicé el popular nRF24L01 + RF IC para ajustar el brillo de una tira de LED de forma inalámbrica a través de tres botones inútiles de un control remoto de TV. ¡Empecemos
IRduino: Control remoto Arduino - Imite un control remoto perdido: 6 pasos
IRduino: Control remoto Arduino - Imita un control remoto perdido: si alguna vez has perdido el control remoto de tu televisor o reproductor de DVD, sabes lo frustrante que es tener que caminar, buscar y usar los botones del dispositivo. A veces, estos botones ni siquiera ofrecen la misma funcionalidad que el control remoto. Rece
Convierta su control remoto IR en control remoto RF: 9 pasos (con imágenes)
Convierta su control remoto IR en control remoto RF: en el Instructable de hoy, le mostraré cómo puede usar un módulo RF genérico sin un microcontrolador, lo que eventualmente nos llevará a construir un proyecto en el que puede convertir un control remoto IR de cualquier dispositivo en un RF. Remoto. La principal ventaja de convertir un
Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: 9 pasos
Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: hola, soy Abhay y es mi primer blog sobre Instructables y hoy le mostraré cómo controlar sus electrodomésticos con el control remoto de su televisor construyendo esto. proyecto simple. gracias al laboratorio atl por el apoyo y el suministro de material
Liberación del cable del control remoto Olympus Evolt E510 (versión 2 con enfoque automático en el control remoto): 6 pasos (con imágenes)
Lanzamiento del cable del control remoto Olympus Evolt E510 (versión 2 con enfoque automático en el control remoto): Ayer construí un control remoto simple de un botón para mi Olympus E510. La mayoría de las cámaras tienen un botón disparador (el que presiona para tomar una foto) que tiene dos modos. Si se presiona suavemente el botón, la cámara se enfocará automáticamente y medirá la luz