Conexión de un receptor IR a un arduino nano. Arduino Uno. Conexión de un receptor de infrarrojos. Descripción de las funciones principales de la biblioteca

Receptor IR y mando a distancia por infrarrojos control remoto- la forma más común y fácil de controlar equipos electrónicos. El espectro infrarrojo de la radiación no es visible para el ojo humano, pero los receptores IR integrados en los dispositivos electrónicos lo reciben perfectamente. Los módulos remotos Arduino ir se utilizan para controlar varios equipos en la línea de visión.

El uso generalizado de emisores IR se ha hecho posible debido a su bajo costo, simplicidad y facilidad de uso. La radiación IR se encuentra en el rango de 750 a 1000 micrones, esta es la parte del espectro más cercana a la luz visible. En la región infrarroja, las propiedades ópticas de varios materiales pueden cambiar. Algunos vidrios, por ejemplo, se vuelven opacos a los rayos IR, mientras que la parafina, por el contrario, es transparente en el espectro IR.

La radiación se registra con la ayuda de materiales fotográficos especiales, sobre la base de los cuales se fabrican los receptores. Además de los cuerpos calentados (el Sol, lámparas incandescentes o velas), la fuente de radiación infrarroja puede ser dispositivos de estado sólido: LED IR, láseres. Radiación en rango infrarrojo Tiene una serie de características que lo hacen conveniente para usarlos en consolas:

  • Los emisores de estado sólido (LED IR) son baratos y compactos.
  • Los rayos infrarrojos no son percibidos y no son fijados por el ojo humano.
  • Los receptores IR también son baratos y de tamaño pequeño.
  • Poca interferencia, ya que el transmisor y el receptor están sintonizados en la misma frecuencia.
  • Ausente Influencia negativa sobre la salud humana.
  • Alta reflectividad en la mayoría de los materiales.
  • Los emisores de infrarrojos no afectan al funcionamiento de otros dispositivos.

El control remoto funciona de la siguiente manera. Cuando se presiona el botón, la señal se codifica en luz infrarroja, el receptor la recibe y realiza la acción requerida. La información se codifica como una secuencia lógica de ráfagas de pulsos con una determinada frecuencia. El receptor recibe esta secuencia y demodula los datos. Para recibir una señal, se utiliza un microcircuito que contiene un fotodetector (fotodiodo), amplificadores, filtro de paso de banda, un demodulador (un detector que permite resaltar la envolvente de la señal) y un transistor de salida. También tiene filtros - eléctricos y ópticos. Dichos dispositivos funcionan a una distancia de hasta 40 metros. El método IR de transmisión de datos existe en muchos dispositivos: electrodomésticos, equipos industriales, computadoras, líneas de fibra óptica.

Receptor de infrarrojos Arduino

Para leer la señal IR, necesitará la placa Arduino, una placa de prueba, un receptor de señal IR y puentes. Hay una gran cantidad de receptores diferentes, pero es mejor usar TSOP312 u otros adecuados para Arduino. Los datos del control remoto al receptor se pueden transmitir utilizando el protocolo RC5 o NEC.

Para determinar qué pierna pertenece a qué, debe mirar el sensor desde el costado del receptor. Luego, en el receptor, el contacto central es el suelo, a la izquierda está la salida al microcontrolador, a la derecha está la fuente de alimentación.

Para mayor comodidad, puede usar módulos receptores de infrarrojos listos para usar.

Conexión del receptor IR a arduino

Las salidas del receptor IR están conectadas al Arduino a los puertos GND, 5V y de entrada digital. El diagrama para conectar el sensor al pin digital 11 se muestra a continuación.

Así es como se ve el circuito con el módulo receptor de infrarrojos:


Bibliotecas para trabajar con IR

Para trabajar con dispositivos IR, puede utilizar la biblioteca IRremote, que simplifica la construcción de sistemas de control. Puedes descargar la biblioteca. Una vez descargados, copie los archivos a la carpeta \arduino\libraries. Para conectarse a su boceto de biblioteca, debe agregar el archivo de encabezado #include .

Para leer la información, use el ejemplo IRrecvDumpV2 de la biblioteca. Si el control remoto ya existe en la lista de los reconocidos, no es necesario escanear. Para leer los códigos, debe iniciar ARduino IDE y abrir el ejemplo IRrecvDemo desde IRremote.

También hay una segunda biblioteca para trabajar con señales IR: esta es IRLib. Es similar en su funcionalidad al anterior. En comparación con IRremote, IRLib tiene un ejemplo para determinar la frecuencia de un sensor IR. Pero la primera biblioteca es más fácil y conveniente de usar.

Después de cargar la biblioteca, puede comenzar a leer las señales recibidas. Para ello se utiliza el siguiente código.

El operador decode_results es necesario para asignar a la señal recibida el nombre de la variable de resultados.

En el código, debe reescribir "HEX" a "DEC".

Luego, después de cargar el programa, debe abrir el monitor en serie y presionar los botones del control remoto. Varios códigos aparecerán en la pantalla. Es necesario anotar con qué botón corresponde el código recibido. Es más conveniente registrar los datos obtenidos en una tabla. Después de que este código se pueda escribir en el programa para que pueda controlar el dispositivo. Los códigos se escriben en la memoria de la propia placa Arduino EEPROM, lo cual es muy conveniente, ya que no tienes que programar los botones cada vez que enciendes el control remoto.

Sucede que al cargar un programa se genera un error “TDK2 no fue declarado en su alcance”. Para solucionarlo, debe ir al explorador, ir a la carpeta donde está instalada la aplicación Arduino IDE y eliminar los archivos IRremoteTools.cpp e IRremoteTools.h. Después de eso, debe volver a cargar el programa en el microcontrolador.

Conclusión

El uso del control remoto Arduino ir hace la vida más fácil para el usuario. Se puede usar como control remoto teléfono móvil, tableta o computadora; para esto solo necesita un software especial. Con la ayuda de Arduino, puedes centralizar todo el control. Con un botón en el control remoto, puede realizar varias acciones a la vez, por ejemplo, encender el televisor y Blu-Ray al mismo tiempo.

El artículo de hoy analizará la conexión del receptor IR TSOP34836 a una placa Aduino UNO. A estos efectos, puede utilizar cualquier receptor del que disponga que sea compatible con su mando a distancia en frecuencia. La asignación de pines se muestra en la figura.

1. Vout - salida del receptor.
2. GND - "tierra", cable común.
3. Vcc - potencia.
La transmisión de datos del mando a distancia IR al receptor se realiza según el protocolo RC5, que es una secuencia de pulsos. La conexión se realiza de acuerdo con el siguiente esquema.

Y habiendo recopilado, obtenemos algo como esto:

Para procesar los datos transmitidos por el control remoto, utilizamos la biblioteca IRremote, esta biblioteca se adjunta al artículo. Pegue el siguiente código:

#incluye "IRremoto.h" IRrecv irrecv(11); // Especifique el pin al que está conectado el receptor decode_results results; void setup() ( Serial.begin(9600); // Establecer la velocidad del puerto COM irrecv.enableIRIn(); // Empezar a recibir) void loop() ( if (irrecv.decode(&results)) // Si los datos han llegado ( Serial .println(results.value, HEX); // Envía los datos recibidos a la consola irrecv.resume(); // Acepta el siguiente comando ) )

Ahora en la consola del puerto COM puede ver el código de la tecla presionada en HEX.


Eso es todo, ahora puedes usar este circuito en tus dispositivos. A continuación se muestra un ejemplo de uno de aplicaciones prácticas Receptor IR.

Como demostración, le mostraré cómo controlar el servo usando el control remoto IR.

Diagrama del dispositivo:

Así es como debería verse:

Usamos el siguiente código para ejecutar el dispositivo:

#incluye "Servo.h" #incluye "IRremote.h" IRrecv irrecv(11); decodificar_resultados; Servo principal; intservPoz = 90; //Posición inicial del servo int lastPoz = 0; void setup() ( irrecv.enableIRIn(); servoMain.attach(10); // Servo adjunto al pin 10 servoMain.write(servPoz); ) void loop() ( if (irrecv.decode(&results)) ( int res = resultados.valor; Serial.println(res, HEX); if(res==0xFFFF906F)// Si se presiona el botón "+" ( lastPoz=res; servPoz++; servoMain.write(servPoz); ) else if(res= = 0xFFFFA857)// Si se presiona el botón "-" ( servPoz--; lastPoz=res; servoMain.write(servPoz); ) else if(res==0xFFFFFFFF)// Si se presiona el botón ( if(lastPoz ==0xFFFF906F) servPoz++; // Mantener "+" if(lastPoz==0xFFFFA857) servPoz--;// Mantener "-" servoMain.write(servPoz); ) irrecv.resume(); delay(100); ) )

El control remoto se usa una especie de chino, cuando presiona "+" el servo gira en una dirección, cuando presiona "-", en la otra.

Cada hogar tiene un control remoto de TV, u otro control remoto (mando a distancia). Este dispositivo le permite controlar de forma remota cualquier dispositivo, lo cual es muy conveniente. No hay necesidad de desperdiciar calorías preciosas y hacer movimientos innecesarios. Si tiene un dispositivo y desea controlarlo a distancia, puede controlarlo de forma remota. Si lo deseas, también puedes hacer un control remoto con tus propias manos, pero esto no es necesario y esa es otra historia. ¿Por qué necesitarías un control remoto? - todo es simple:

La pereza es una cualidad que hace que uno haga grandes esfuerzos para reducir los costos generales de energía.

Por primera vez, el control remoto en acción fue mostrado al mundo por el inventor Nikola Tesla, en 1898, en una exposición en el Madison Square Garden, presentó un barco controlado por radio llamado "dispositivo teleautomático". Hasta la fecha, esta tecnología ha recibido la distribución más amplia, solo agregada diferentes caminos transmisión de comandos (canal de comunicación).

Los principales canales de comunicación son:

  • canal de radio
  • Ultrasónico
  • Infrarrojo

En este artículo, hablaremos sobre el control del dispositivo con un control remoto por infrarrojos. Radiación infrarroja - radiación electromagnética, ocupando la región espectral entre el extremo rojo de la luz visible y la radiación de microondas. La radiación infrarroja no es visible para el ojo humano, pero se puede ver con una cámara o cámara de video. A menudo, así es como verifican el rendimiento del control remoto desde el televisor en casa.

hace cuanto tiempo trabajo antiguo Tomé el control remoto y la "mirilla" (receptor IR) del sistema de seguridad fuera de servicio, estuvo inactivo durante mucho tiempo y finalmente pude comprobar que funcionaba.

Después de desmontar este receptor, vi un truco, en este "ojo" se soldaron 4 receptores IR. Esto se hace para recibir ondas IR desde cuatro lados. Y es conveniente, no necesita limitarse a un cierto ángulo de recepción.

También dibujé un circuito similar con cuatro receptores, en caso de que lo necesites. Usé receptores IR TSOP1836, pero puedes tomar otros. Para garantizar una recepción de 360 ​​grados, debe seleccionar los receptores IR apropiados (con un ángulo de recepción amplio) y colocarlos lo más cerca posible entre sí. Con mis receptores, no noté ningún problema con la recepción. También lo tiré en una inversión. placa de circuito impreso y disposición de los elementos.

Para procesar comandos, naturalmente usaré arduino uno, como receptor IR, puedes usar
TSOP34836 (gama alta pero más cara) o TL1838. Puede tomar cualquier control remoto IR incluso desde el televisor. Bueno, si necesitas tu propio control remoto, puedes comprar un kit para arduino.

Principio de funcionamiento:
Cuando presiona el botón del control remoto, envía el código del botón en luz infrarroja, después de lo cual el receptor recibe este código del botón y lo envía al actuador, que, según el botón, realizará una determinada acción.

También puede utilizar ondas infrarrojas para transmitir información a corta distancia. Para transferir tus comandos o información, puedes usar un segundo arduino con un transmisor IR. Pero la velocidad de transferencia es muy lenta. Las ventajas del canal infrarrojo incluyen la insensibilidad a la interferencia electromagnética.

Para recibir señales IR de arduino, conectaremos el receptor IR de la siguiente manera:

Tenga en cuenta que la ubicación de las patas del receptor puede variar.


El receptor tiene 3 patas, fuente de alimentación "+" y "-" (principalmente voltaje 3.3-5V) y la pierna de datos es la que transmite información al dispositivo (en nuestro caso, arduino). La tensión de alimentación del TSOP34836 es de 2,7 a 5,5 voltios. Usaré 5 voltios de la salida estándar de arduino.

Y, por supuesto, necesita firmware para arduino. El algoritmo de funcionamiento será el siguiente: cuando presionas el botón superior del control remoto de arduino, enciende el relé, y cuando lo presionas nuevamente, lo apaga. Con este relé, puede encender, por ejemplo, la luz de fondo, pero no es necesario programar la presión del botón en el relé, puede enviar un comando a la computadora o realizar una determinada operación en arduino, etc.
Para simplificar el trabajo, utilizaremos una biblioteca preparada. Código de firmware:

#incluir int RECEIVE_PIN = 11;//pin del receptor int RELAY_PIN = 3;//contacto de relé IRrecv irrecv(RECEIVE_PIN);//asignar pin del receptor decode_results results;//datos recibidos

configuración vacía()(
Serial.begin(9600);
irrecv.enableIRIn(); // enciende el receptor
pinMode(RELÉ_PIN, SALIDA); // establecer el relé en la salida
escritura digital (RELÉ_PIN, ALTO); // establecer un valor alto
}

bucle vacío() (
if (irrecv.decode(&results)) (//si se reciben datos
Serial.print("0x");
Serial.println(resultados.valor, HEX);//salida recibida en el terminal
if ((results.value == 0x8FF40BF) ||(results.value == 0xD72040BF)) digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));//si el código del botón es 0x8FF40BF o 0xD72040BF, cambie el estado del relé al contrario
delay(200);//retraso por activación doble
irrecv.resume();// Obtener el siguiente valor
}
}

Me explico un poco con el boceto:



if ((resultados.valor == 0x8FF40BF) ||(resultados.valor == 0xD72040BF))

El valor resultante se compara con "0x8FF40BF" y "0xD72040BF": estos son códigos de botón en hexadecimal. Dos valores solo porque uso dos controles remotos con códigos únicos.



digitalWrite(RELÉ_PIN, !digitalRead(RELÉ_PIN));

Procedimiento estándar para escribir digitalmente un pin, excepto "!digitalRead(RELAY_PIN)". Firmar "!" significa inversión, en nuestro caso la inversión del estado de la salida digital "RELAY_PIN".



Serial.print("0x");
Serial.println(resultados.valor, HEX);//salida recibida en el terminal

Estas líneas envían todos los códigos recibidos al terminal. EN programa de trabajo es innecesario, pero es necesario averiguar código deseado cualquier botón. Es decir, primero cargamos el boceto en arduino, vamos a la terminal y al hacer clic en el botón obtenemos el código deseado.


También en la biblioteca IRremote hay varios diferentes ejemplos que podría ser útil.


Adjunto al artículo:


  • boceto para arduino

  • placa de circuito impreso para 4 sensores

El módulo receptor IR junto con el control remoto IR facilitará la implementación del control remoto de la placa Arduino.

No es más que un receptor IR VS1838B con un fleje recomendado por el fabricante instalado en la placa.

Para trabajar con este módulo "listo para usar" necesita un control remoto con una frecuencia de 38 kHz.

La ventaja de esta placa es un conector de pinza que le permite reemplazar el receptor IR por otro, operando a la frecuencia requerida para su proyecto, sin el uso de soldadura.

Características técnicas principales:

Tensión de alimentación: 2,7 - 5,5 V

Frecuencia de modulación: 38kHz

Rango de temperatura: - 20 ... + 80°C

Interfaz: Digital

Conexión a Arduino

El módulo está equipado con un conector de 2,54 mm de tres pines

: conectar al pin GND

: conectado a la salida de +5V

: conectado a un pin digital (en el ejemplo D2)

Un ejemplo de trabajo en el entorno Arduino

Para trabajar con este módulo, debe instalar la biblioteca IRRemote

Descargue, descomprima y colóquelo en la carpeta de bibliotecas en la carpeta Arduino. Si en el momento de agregar la biblioteca, el IDE de Arduino estaba abierto, reinicie el entorno.

Lectura de botones de control remoto

Para leer el control remoto, complete el esquema a continuación. Enviará las codificaciones de los botones presionados al puerto.

Como ejemplo, usaremos el control remoto, como en la imagen, porque. este tipo de mando a distancia está incluido

Puede leer sobre las diferencias en la lógica de funcionamiento de varias consolas en el artículo original de un miembro de nuestra comunidad bajo el apodo

Ejemplo de código de programa:

#incluir int RECV_PIN = 2; IRrecv irrerecv(RECV_PIN); //Crear un objeto para recibir una señal de un puerto específico decodificar_resultados; //Variable que contiene el resultado vacío configuración () { De serie // Empezar a recibir) vacío bucle() (if (irrecv.decode(&resultados)) //Al recibir una señal... { De serie.println(resultados.valor); //...enviar su valor al puerto serial irrecv.resume(); ) )

Debería ver lo siguiente en el monitor de puerto:

Con casi un segundo manteniendo presionado cada botón, obtenemos unos 10 códigos. El primero es el código del botón. Y después de eso, comienza a aparecer un código estándar que informa que el botón está atascado.

Controlar una placa Arduino con un control remoto

Hagamos que el LED de la placa Arduino (D13) se encienda cuando se reciba la codificación del primer botón y se apague cuando se reciba la codificación del segundo botón.

Ejemplo de código de programa:

// Probado en Arduino IDE 1.0.3#incluir int RECV_PIN = 2; LED int = 13; IRrecv irrerecv(RECV_PIN); decodificar_resultados; vacío configuración () { De serie.begin(9600); irrecv.enableIRIn(); // Inicia el receptor pinMode(LED, SALIDA); ) vacío bucle() (si (irrecv.decode(&resultados)) ( De serie.println(resultados.valor); si (resultados.valor == 16769565) // Al obtener la codificación 1(escritura digital (LED, ALTO); // Enciende el LED) si (resultados.valor == 16761405) // Al obtener la codificación 2(escritura digital (LED, BAJO); // Apagar el LED) irrecv.resume(); // Obtener el siguiente valor } }

Hace poco necesitaba controlar el control remoto del televisor pequeño proyecto en arduino. El punto era controlar el aire acondicionado a través del arduino con sensor de temperatura. Un control remoto bastante conveniente va a mi aire acondicionado, pero necesitamos automatizar el encendido, el ajuste de la temperatura y el apagado. Como resultado de una larga búsqueda, pude encontrar una solución para mí. Sobre él en detalle bajo el corte.

Cómo funciona

Nos conectamos receptor IR, directo control remoto al receptor, graba la señal y envíala a De serie. (Dado que esta es la primera parte del artículo, no consideramos enviar una señal. Hablaremos de enviar solo en la segunda parte).

Qué necesitamos

  • arduino(o equivalente, yo uso Tosduino- 2 veces más barato, compatibilidad total con arduino convencional)
  • Diodo emisor de luz ( CONDUJO)
  • Resistencia a 220 kOhm
  • Receptor IR de la serie

Conexión

Receptor IR (Receptor)

CONDUJO

arduino Tablero de circuitos arduino
pin número 11 resistencia 220 kilohmios TIERRA (TIERRA)

tecnología de infrarrojos

La forma más económica de controlar de forma remota un dispositivo dentro del alcance visible mediante radiación infrarroja. Casi todos los equipos de audio y video se pueden controlar de esta manera. Debido a su amplia distribución, los componentes necesarios son bastante económicos, lo que hace que esta tecnología sea ideal para los que nos gusta usar un control remoto IR para nuestros propios proyectos.

La radiación infrarroja es en realidad luz normal con un color específico. Los humanos no podemos ver este color porque su longitud de onda es de 950 nm, que está por debajo del espectro visible. Esta es una de las razones por las que se elige IR para la telemecánica, queremos usarlo, pero no nos interesa verlo. Aunque no podemos ver luz infrarroja, emitido desde el control remoto, pero eso no significa que no podamos hacerlo visible.

videocámara o cámara digital"ve" la luz infrarroja, como puede ver en el video a continuación. Incluso el más barato Celulares tienen cámaras incorporadas. Simplemente apunte el control remoto a una cámara de este tipo, presione cualquier botón y verá que el LED parpadea.

Serie de receptores en miniatura para sistemas de control remoto por infrarrojos. El diodo PIN y el preamplificador están ensamblados en un marco de plomo y están hechos en la forma filtro de infrarrojos. La señal de salida demodulada se puede decodificar directamente usando un microprocesador. - Este es un receptor estándar, admite todos los principales códigos de transmisión.

parte Frecuencia de carga
30kHz
33kHz
36kHz
36,7kHz
38kHz
40kHz
56kHz

IRremoto.h

Descargar biblioteca IRremoto puedes desde mi repositorio en Github.com

Para instalar esta biblioteca, copie el contenido del archivo a: arduino-1.x/libraries/IRremote Donde arduino-1.x es la carpeta donde está instalado el IDE de Arduino Después de eso, el archivo arduino-1.x/libraries/ IRremote/IRremote.cpp debería estar disponible e IRremote.h

Ejemplo No. 1: obtenemos el código del botón del control remoto

Este boceto leerá el código del botón presionado en el control remoto y enviará información sobre este botón al puerto serie para que podamos usar este código más adelante.

#incluir int RECIBIR_PIN = 2; IRrecv irrecv(RECIBIR_PIN); decodificar_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); // Inicia el receptor ) void loop() ( if (irrecv.decode(&results)) ( Serial.print("0x"); Serial. println(resultados.valor, HEX); retraso(50); irrecv.resume();// Recibir el siguiente valor))

Usaré estos códigos de botón en todos los siguientes ejemplos:

Ejemplo No. 2 - asignar un nombre al botón del control remoto

Enviemos los nombres de los botones al puerto serie. (primero hay que coger los códigos de estos botones y asignarles nombres, mira el código, creo que ahí quedará todo claro).

#incluir int RECIBIR_PIN = 2; IRrecv irrecv(RECIBIR_PIN); decodificar_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() ( if (irrecv.decode(&results)) ( switch (resultados.valor) ( case 0x77E1A0CB: Serial.println( "Centro"); descanso; caso 0x77E160CB: Serial.println("Derecha"); descanso; caso 0x77E190CB: Serial.println("Izquierda"); descanso; caso 0x77E150CB: Serial.println("Arriba"); descanso; caso 0x77E130CB: Serial.println("Down"); break; ) irrecv.resume(); ) )

Ejemplo No. 3: encienda el LED con el botón del control remoto

Ahora enseñemos a nuestro arduino encienda el LED en PIN 11 a través del botón en el control remoto

#incluir LED int = 11; estado int = 0; // 0 = LED apagado while 1 = LED encendido int RECEIVE_PIN = 2; IRrecv irrecv(RECIBIR_PIN); decodificar_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED, OUTPUT); ) void loop() ( if ((irrecv.decode(&results)) && (results.value==0x77E1A0CB) ) ( if (estado == 0) ( estado = 1; digitalWrite(LED, ALTO); Serial.println("Centro - ALTO"); ) else ( estado = 0; digitalWrite(LED, BAJO); Serial.println( "Centro - BAJO"); ) retraso (50); irrecv.resume (); ) )

Ejemplo #4 - PWM con control remoto

Ahora controlemos el brillo de nuestro LED (ya que está conectado al puerto 11, que tiene PWM, esto no debería ser un problema). Los botones arriba y abajo del control remoto se utilizarán para controlar el brillo.

#incluir int RECIBIR_PIN = 2; brillo int = 0; LED int = 11; IRrecv irrecv(RECIBIR_PIN); decodificar_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() ( if (irrecv.decode(&results)) ( switch (results.value) ( ​​caso 0x77E150CB: if(brillo< 255) { brightness+=15; Serial.println(brightness); } break; case 0x77E130CB: if(brightness >0) (brillo-=15; Serial.println(brillo); ) descanso; ) analogWrite (LED, brillo); irrecv.resume(); ) )

De alguna manera como esto. En la segunda parte del artículo hablaremos de cómo enviamos la señal recibida a nuestro equipo. En mi caso, fue el aire acondicionado. Además en la segunda parte habrá un vídeo que mostrará el montaje llave en mano, de principio a fin + un ejemplo de trabajo.

Si encuentra un error, seleccione un fragmento de texto y presione Ctrl+Enter.