Controlar Arduino Con Un Mando a Distancia Infrarrojo

March 20, 2018 | Author: Javier | Category: Remote Control, Arduino, Light Emitting Diode, Infrared, Electronics
Share Embed Donate


Short Description

Descripción: 9O...

Description

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo











LUIS LLAMAS INGENIERÍA, INFORMÁTICA Y DISEÑO

TUTORIALES ARDUINO

CONTROLAR ARDUINO CON UN MANDO A DISTANCIA INFRARROJO — 6 OCTUBRE, 2016

SHARE ON:













¿QUÉ ES UN MANDO A DISTANCIA INFRARROJO? Un mando a distancia es un dispositivo de control que emplea un LED infrarrojo para enviar una señal al receptor. La señal puede ser detectada para controlar un autómata o procesador como Arduino.

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

1/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

Todos estamos acostumbrado a emplear mandos a distancia infrarrojos, para la televisión, Dvd, equipos de música… De hecho, es posible emular cualquiera de estos mandos, lo que permite controlar estos dispositivos desde Arduino. Un mando a distancia emplea un emisor de luz en el infrarrojo cercano, invisible para el ojo humano, pero que puede ser captado con facilidad por un receptor infrarrojo.



Es posible ver la luz del mando mirando el LED infrarrojo con una cámara digital, por ejemplo de un móvil. La luz del led de muestra como un resplandor morado. Esto puede ser útil para detectar si el mando funciona correctamente.

Al emplear luz como medio de transmisión, los mandos a distancia necesitan una línea de visión directa con el receptor. El haz puede ser re ejado por superᑹ�cies re ectantes, como espejos. El alcance es limitado, típicamente inferior a 3m. La distancia depende fuertemente del ángulo de emisión, disminuyendo rápidamente a medida que nos desviamos de la dirección frontal. Podemos emplear un mando a distancia como control remoto para controlar Arduino. Podemos, por ejemplo, encender o apagar un sistema de luces o sonido, encender o apagar un dispositivo por relé, o controlar un robot o un vehículo. Por otro lado, también es posible emplear Arduino para clonar un mando a distancia y, por ejemplo, controlar el encendido de la televisión a través de un smartphone, temporizar el encendido de un equipo de música, o encender el aire acondicionado a través de internet.

PRECIO En el campo de los hobbies y la electrónica casera podemos encontrar kits especialmente diseñados para Arduino, que incluyen mando y receptor HX1838 o similar, instalado en un módulo para conectar fácilmente a Arduino. Podemos encontrar este tipo de kits por 0.75, buscando en vendedores internacionales en eBay o AliExpress.

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

2/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

Si únicamente queremos el receptor, por ejemplo, porque queremos controlar más de un dispositivo o porque queremos emplear el mando de algún aparato (TV, dvd, etc), podemos adquirir únicamente el receptor HX1838 por unos 0.10€.

¿CÓMO FUNCIONA UN MANDO A DISTANCIA INFRARROJO? Un mando a distancia transmita un cierto mensaje al receptor empleando luz infrarroja como sistema de transmisión. La luz empleada típicamente está en el rango de 940 nm. Como en cualquier transmisión el mensaje tiene que seguir unas determinadas normas (forma de los pulsos, duración, contenido…) que deben ser conocidas tanto por el emisor como por el receptor para que la comunicación sea correcta.

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

3/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

Sin embargo, no existe un único protocolo adoptado como estándar. En su lugar cada fabricante ha desarrollado los suyos propios. Así, tenemos el RC-5 y RC-6 de Philips, el SIRC de Sony, el protocolo NEC desarrollado por la compañía japonesa Nippon Electronic Company, entre muchos otros. Por otro lado, el mensaje nunca se envía directamente como un pulso, si no que se envía modulada sobre una onda portadora. Esto se hace para mejorar el rechazo al ruido y a la luz ambiental la señal de control se envía modulada en una onda portadora. La frecuencia de la onda portadora depende de protocolo empleado pero, en general, varía entre 36-50 kHz, siendo el más habitual en torno a los 38 kHz. Uno de los protocolos más habituales, que es el que emplearemos con Arduino, es el protocolo NEC, que emplea una onda portadora de 38 kHz y modulación por distancia de pulsos (PDM Pulse Distance Modulation). La onda portadora tiene un periodo de 26µs, y la señal transmitida distingue entre 0 y 1 por la duración de los pulsos, siendo.  Logical 0 – Un pulso de 562.5µs seguido por un espacio de 562.5µs.  Logical 1 – Un pulso de 562.5µs seguido por un espacio de 1.675µs.

En cuanto al contenido del mensaje enviado, el protocolo NEC envía una dirección 8 bits y un comando de 8 bits. Esto signiᑹ�ca que pueden controlarse hasta 256 dispositivos sin interferir entre ellos, y enviar hasta 256 comandos diferentes. Una particularidad del protocolo NEC es que se envía cada bloque dos veces, una normal y una negada, como sistemas de prevención de errores. La transmisión comienza con una señal de 9ms, seguido de un espacio de 4.5ms.

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

4/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

Por tanto, la señal completa es a señal completa  Pulso 9ms + espacio 4.5ms  8 bits, dirección del receptor  8 bits, dirección del receptor invertida  8 bits, comando enviado  8 bits, comando enviado invertido

Finalmente recibir la señal de control se emplean receptores especíᑹ�cos como el AX-1838HS (HX1838). Estos receptores son dispositivos normalmente de tres de terminales, que consisten en un sensor infrarrojo que incluyen un demodulador en la banda de 36-38kHz, un ᑹ�ltro PCM (Pulse Code Modulation) y preampliᑹ�cación rechazo de luz ambiental.

De esta forma, la salida que llega a Arduino es la señal digital ya demodulada, lo que simpliᑹ�ca enormemente el proceso respecto a tener que emplear un fotodiodo y realizar los cálculos nosotros.

ESQUEMA DE MONTAJE http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

5/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

Si usamos un módulo con el receptor integrado la conexión es sencilla. Alimentamos el módulo conectando Vcc y Gnd, respectivamente, a 5V y Vcc de Arduino. Por otro lado, conectamos la salida del módulo Sig a una entrada digital cualquiera de Arduino. En el ejemplo usaremos la D9, pero podéis usar cualquier entrada digital. Por tanto, la conexión queda como en el siguiente esquema,

Que vista desde el lado de Arduino resulta,

Si queréis usar el receptor directamente, deberéis consultar el datasheet del mismo para veriᑹ�car su esquema de montaje. En el caso del AX-1838HS (HX1838) es el siguiente, donde, al menos, la resistencia de 100Ω es obligatoria y el resto opcionales (los módulos comerciales sólo incorporan la resistencia de 100Ω).

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

6/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

EJEMPLOS DE CÓDIGO Existen múltiples librerías para emplear mandos a distancia con Arduino. Nosotros usaremos la librería Arduino-IRremote desarrollada por Raᑹ� Khan (z3t0) disponible en este enlace. El siguiente código realiza la lectura del valor recibido por el mando, y lo muestra por pantalla. El código se muestra en formato hexadecimal. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

#include    const int RECV_PIN = 9;   IRrecv irrecv(RECV_PIN); decode_results results;   void setup() {  Serial.begin(9600);  irrecv.enableIRIn(); }   void loop() {  if (irrecv.decode(&results))  {  Serial.println(results.value, HEX);  irrecv.resume();  } }

El siguiente ejemplo emplea el comando hexadecimal para imprimir por puerto de serie la tecla pulsada. La tecla dependerá del mando que estemos usando, pero sirve como ejemplo de como actuar en caso de recibir diferentes códigos. 1 2 3 4 5 6

#include    const int KEY_UP = 0xFF629D; const int KEY_LEFT = 0xFF22DD; const int KEY_OK = 0xFF02FD; const int KEY_RIGHT = 0xFFC23D;

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

7/12

16/1/2017

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

Controlar Arduino con un mando a distancia infrarrojo

const int KEY_DOWN = 0xFFA857; const int KEY_1 = 0xFF6897; const int KEY_2 = 0xFF9867; const int KEY_3 = 0xFFB04F; const int KEY_4 = 0xFF30CF; const int KEY_5 = 0xFF18E7; const int KEY_6 = 0xFF7A85; const int KEY_7 = 0xFF10EF; const int KEY_8 = 0xFF38C7; const int KEY_9 = 0xFF5AA5; const int KEY_0 = 0xFF4AB5; const int KEY_ASTERISK = 0xFF42BD; const int KEY_POUND = 0xFF52AD; const int KEY_REPEAT = 0xFFFFFFFF;   const int RECV_PIN = 9;   IRrecv irrecv(RECV_PIN); decode_results results;   void setup() {  Serial.begin(9600);  irrecv.enableIRIn(); }   void loop() {  if (irrecv.decode(&results))  {  switch (results.value)  {  case KEY_UP:  Serial.println("KEY_UP");  break;  case KEY_LEFT:  Serial.println("KEY_LEFT");  break;  case KEY_OK:  Serial.println("KEY_OK");  break;  case KEY_RIGHT:  Serial.println("KEY_RIGHT");  break;  case KEY_DOWN:  Serial.println("KEY_DOWN");  break;  case KEY_1:  Serial.println("KEY_1");  break;  case KEY_2:  Serial.println("KEY_2");  break;  case KEY_3:  Serial.println("KEY_3");  break;  case KEY_4:  Serial.println("KEY_4");  break;  case KEY_5:  Serial.println("KEY_5");  break;  case KEY_6:  Serial.println("KEY_6");

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

8/12

16/1/2017

71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

Controlar Arduino con un mando a distancia infrarrojo

 break;  case KEY_7:  Serial.println("KEY_7");  break;  case KEY_8:  Serial.println("KEY_8");  break;  case KEY_9:  Serial.println("KEY_9");  break;  case KEY_0:  Serial.println("KEY_0");  break;  case KEY_ASTERISK:  Serial.println("KEY_ASTERISK");  break;  case KEY_POUND:  Serial.println("KEY_POUND");  break;  case KEY_REPEAT:  Serial.println("KEY_REPEAT");  break;  }  irrecv.resume();  } }



Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

TAGS: ARDUINO

ARDUINO INTERMEDIO

CONTROLES

PREVIOUS POST

USAR UN TECLADO MATRICIAL CON ARDUINO

NEXT POST

CONTROLAR ARDUINO CON EL MANDO NUNCHUK DE LA WII (WIICHUCK)

RELATED POSTS DETECTOR DE CRUCE POR CERO CON ARDUINO Y OPTOACOPLADOR H11AA1

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

9/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

SALIDAS Y ENTRADAS AISLADAS CON ARDUINO Y OPTOACOPLADOR

MEDIR TENSIONES DE 220V-230V CON ARDUINO Y TRANSFORMADOR

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

10/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

3 Comentarios   Recomendar

1 

Luis Llamas

⤤ Compartir

Acceder

Ordenar por los más nuevos

Únete a la conversación... Osqui • hace 3 meses

Hola.  Impresionante blog, de verdad. ¡Es de calidad superior!  Solo tengo una pregunta muy simple respecto este post...: ¿hay algún motivo concreto por el que has elegido la librería z3t0 en vez de otras? Muchas gracias!

△   ▽ • Responder • Compartir › luisllamas 

Moderador   > Osqui  •  hace 3 meses

Bueno, dentro de que hay varias que pueden considerarse un "empate" entre ellas, a mi me gusta esta porque por un lado, para los ejemplos sencillos es muy sencilla pero, a la vez, incorpora bastantes protocolos además del NEC. Este permite, además de emplear estos mandos tipo "kit" que se venden, poder copiar, recibir, y emular mandos a distancia de aparatos, algo sobre lo que quiero hacer una entrada en el futuro. Esto me parece mucho más útil, por ejemplo, que usar un mando a distancia tipo Kit para controlar un robot, como frecuentemente se muestra en internet, porque para eso hay mandos mucho mejores (como un smartphone con android, un mando de la ps2, etc) Sin embargo la posibilidad de, por ejemplo, controlar el aire acondicionado desde Internet es mucho más interesante.

△   ▽ • Responder • Compartir › Osqui > luisllamas • hace 3 meses

Muchas gracias!!

△   ▽ • Responder • Compartir › ✉ Suscríbete d Añade Disqus a tu sitio web Añade Disqus Añadir

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

🔒 Privacidad

11/12

16/1/2017

Controlar Arduino con un mando a distancia infrarrojo

Search



SIGUENOS EN

TWITTER

G+

LINKEDIN

RSS

SIGUE LEYENDO EN

TUTORIALES ARDUINO DETECTOR DE CRUCE POR CERO CON ARDUINO Y OPTOACOPLADOR H11AA1

SALIDAS Y ENTRADAS AISLADAS CON ARDUINO Y OPTOACOPLADOR

MEDIR TENSIONES DE 220V-230V CON ARDUINO Y TRANSFORMADOR

MEDIR VOLTAJES DE HASTA 25V CON ARDUINO Y FZ0430

EJERCER GRANDES FUERZAS CON ACTUADOR LINEAL Y ARDUINO

http://www.luisllamas.es/2016/10/arduino­mando­a­distancia­infrarrojo/

12/12

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF