Professional Documents
Culture Documents
LUIS LLAMAS
INGENIERA, INFORMTICA Y DISEO
TUTORIALES ARDUINO
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 1/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
Todos estamos acostumbrado a emplear mandos a distancia infrarrojos, para la televisin, Dvd,
equipos de msica 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 cmara digital, por ejemplo de un
mvil. 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 transmisin, los mandos a distancia necesitan una lnea de visin
directa con el receptor. El haz puede ser re ejado por supercies re ectantes, como espejos.
El alcance es limitado, tpicamente inferior a 3m. La distancia depende fuertemente del ngulo de
emisin, disminuyendo rpidamente a medida que nos desviamos de la direccin 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 vehculo.
Por otro lado, tambin es posible emplear Arduino para clonar un mando a distancia y, por ejemplo,
controlar el encendido de la televisin a travs de un smartphone, temporizar el encendido de un equipo
de msica, o encender el aire acondicionado a travs de internet.
PRECIO
En el campo de los hobbies y la electrnica casera podemos encontrar kits especialmente diseados
para Arduino, que incluyen mando y receptor HX1838 o similar, instalado en un mdulo para conectar
fcilmente 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/arduinomandoadistanciainfrarrojo/ 2/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
Como en cualquier transmisin el mensaje tiene que seguir unas determinadas normas (forma de los
pulsos, duracin, contenido) que deben ser conocidas tanto por el emisor como por el receptor para
que la comunicacin sea correcta.
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 3/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
Sin embargo, no existe un nico protocolo adoptado como estndar. 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 compaa japonesa Nippon Electronic Company, entre muchos otros.
Por otro lado, el mensaje nunca se enva directamente como un pulso, si no que se enva modulada
sobre una onda portadora. Esto se hace para mejorar el rechazo al ruido y a la luz ambiental la seal de
control se enva modulada en una onda portadora. La frecuencia de la onda portadora depende de
protocolo empleado pero, en general, vara entre 36-50 kHz, siendo el ms habitual en torno a los 38 kHz.
Uno de los protocolos ms habituales, que es el que emplearemos con Arduino, es el protocolo NEC,
que emplea una onda portadora de 38 kHz y modulacin por distancia de pulsos (PDM Pulse Distance
Modulation).
La onda portadora tiene un periodo de 26s, y la seal transmitida distingue entre 0 y 1 por la
duracin de los pulsos, siendo.
En cuanto al contenido del mensaje enviado, el protocolo NEC enva una direccin 8 bits y un
comando de 8 bits. Esto signica que pueden controlarse hasta 256 dispositivos sin interferir entre ellos, y
enviar hasta 256 comandos diferentes.
Una particularidad del protocolo NEC es que se enva cada bloque dos veces, una normal y una
negada, como sistemas de prevencin de errores. La transmisin comienza con una seal de 9ms,
seguido de un espacio de 4.5ms.
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 4/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
De esta forma, la salida que llega a Arduino es la seal digital ya demodulada, lo que simplica
enormemente el proceso respecto a tener que emplear un fotodiodo y realizar los clculos nosotros.
ESQUEMA DE MONTAJE
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 5/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
Por otro lado, conectamos la salida del mdulo Sig a una entrada digital cualquiera de Arduino. En el
ejemplo usaremos la D9, pero podis usar cualquier entrada digital.
Si queris usar el receptor directamente, deberis consultar el datasheet del mismo para vericar 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 mdulos comerciales slo incorporan la resistencia de
100).
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 6/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
EJEMPLOS DE CDIGO
Existen mltiples libreras para emplear mandos a distancia con Arduino. Nosotros usaremos la
librera Arduino-IRremote desarrollada por Ra Khan (z3t0) disponible en este enlace.
El siguiente cdigo realiza la lectura del valor recibido por el mando, y lo muestra por pantalla. El
cdigo se muestra en formato hexadecimal.
1 #include<IRremote.h>
2
3 constintRECV_PIN=9;
4
5 IRrecvirrecv(RECV_PIN);
6 decode_resultsresults;
7
8 voidsetup()
9 {
10 Serial.begin(9600);
11 irrecv.enableIRIn();
12 }
13
14 voidloop()
15 {
16 if(irrecv.decode(&results))
17 {
18 Serial.println(results.value,HEX);
19 irrecv.resume();
20 }
21 }
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 cdigos.
1 #include<IRremote.h>
2
3 constintKEY_UP=0xFF629D;
4 constintKEY_LEFT=0xFF22DD;
5 constintKEY_OK=0xFF02FD;
6 constintKEY_RIGHT=0xFFC23D;
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 7/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
7 constintKEY_DOWN=0xFFA857;
8 constintKEY_1=0xFF6897;
9 constintKEY_2=0xFF9867;
10 constintKEY_3=0xFFB04F;
11 constintKEY_4=0xFF30CF;
12 constintKEY_5=0xFF18E7;
13 constintKEY_6=0xFF7A85;
14 constintKEY_7=0xFF10EF;
15 constintKEY_8=0xFF38C7;
16 constintKEY_9=0xFF5AA5;
17 constintKEY_0=0xFF4AB5;
18 constintKEY_ASTERISK=0xFF42BD;
19 constintKEY_POUND=0xFF52AD;
20 constintKEY_REPEAT=0xFFFFFFFF;
21
22 constintRECV_PIN=9;
23
24 IRrecvirrecv(RECV_PIN);
25 decode_resultsresults;
26
27 voidsetup()
28 {
29 Serial.begin(9600);
30 irrecv.enableIRIn();
31 }
32
33 voidloop()
34 {
35 if(irrecv.decode(&results))
36 {
37 switch(results.value)
38 {
39 caseKEY_UP:
40 Serial.println("KEY_UP");
41 break;
42 caseKEY_LEFT:
43 Serial.println("KEY_LEFT");
44 break;
45 caseKEY_OK:
46 Serial.println("KEY_OK");
47 break;
48 caseKEY_RIGHT:
49 Serial.println("KEY_RIGHT");
50 break;
51 caseKEY_DOWN:
52 Serial.println("KEY_DOWN");
53 break;
54 caseKEY_1:
55 Serial.println("KEY_1");
56 break;
57 caseKEY_2:
58 Serial.println("KEY_2");
59 break;
60 caseKEY_3:
61 Serial.println("KEY_3");
62 break;
63 caseKEY_4:
64 Serial.println("KEY_4");
65 break;
66 caseKEY_5:
67 Serial.println("KEY_5");
68 break;
69 caseKEY_6:
70 Serial.println("KEY_6");
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 8/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
71 break;
72 caseKEY_7:
73 Serial.println("KEY_7");
74 break;
75 caseKEY_8:
76 Serial.println("KEY_8");
77 break;
78 caseKEY_9:
79 Serial.println("KEY_9");
80 break;
81 caseKEY_0:
82 Serial.println("KEY_0");
83 break;
84 caseKEY_ASTERISK:
85 Serial.println("KEY_ASTERISK");
86 break;
87 caseKEY_POUND:
88 Serial.println("KEY_POUND");
89 break;
90 caseKEY_REPEAT:
91 Serial.println("KEY_REPEAT");
92 break;
93 }
94 irrecv.resume();
95 }
96 }
Si te ha gustado esta entrada y quieres leer ms sobre Arduino puedes consultar la seccin tutoriales
de Arduino
TAGS:
ARDUINO ARDUINO INTERMEDIO CONTROLES
RELATED POSTS
DETECTOR DE CRUCE POR CERO CON ARDUINO Y OPTOACOPLADOR H11AA1
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 9/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 10/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
3Comentarios LuisLlamas
1 Acceder
netealaconversacin...
Osquihace3meses
Hola.
Impresionanteblog,deverdad.Esdecalidadsuperior!
Solotengounapreguntamuysimplerespectoestepost...:hayalgnmotivoconcretoporelquehas
elegidolalibreraz3t0envezdeotras?
Muchasgracias!
Responder Compartir
Bueno,dentrodequehayvariasquepuedenconsiderarseun"empate"entreellas,amime
gustaestaporqueporunlado,paralosejemplossencillosesmuysencillapero,alavez,
incorporabastantesprotocolosademsdelNEC.
Estepermite,ademsdeemplearestosmandostipo"kit"quesevenden,podercopiar,recibir,
yemularmandosadistanciadeaparatos,algosobreloquequierohacerunaentradaenel
futuro.
Estomeparecemuchomstil,porejemplo,queusarunmandoadistanciatipoKitpara
controlarunrobot,comofrecuentementesemuestraeninternet,porqueparaesohaymandos
muchomejores(comounsmartphoneconandroid,unmandodelaps2,etc)
Sinembargolaposibilidadde,porejemplo,controlarelaireacondicionadodesdeInternetes
muchomsinteresante.
Responder Compartir
Osqui>luisllamashace3meses
Muchasgracias!!
Responder Compartir
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 11/12
16/1/2017 ControlarArduinoconunmandoadistanciainfrarrojo
Search
SIGUENOS EN
SIGUE LEYENDO EN
TUTORIALES ARDUINO
http://www.luisllamas.es/2016/10/arduinomandoadistanciainfrarrojo/ 12/12