En la práctica de hoy aprenderemos controlar sistemas utilizando el par emisor-detector de infrarrojos. Centrándonos en los elementos del simulador TinkerCad usaremos el sensor IR de la primera imagen de la derecha (con sus tres patillas de alimentación 5V, GND 0V y Señal) y el emisor de infrarrojos de la segunda imagen de la derecha. 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. 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 reflejado por superficies reflectantes, 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.
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.
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. Para más información sobre este aspecto puedes visitar esta web (1 y 2).
Muy simplificado, en el caso del emisor por mando a distancia todo se reduce al envío de un código hexadecimal por cada uno de los botones del mismo. Ese código será recibido por el sensor IR, procesado el código introducido en Arduino que actuará en consecuencia manejando entradas y salidas. Para el caso que nos ocupa el código de emisiones hexadecimales del mando de TinkerCad esta en la tabla de abajo. Veremos como obtenemos estos valores en la primera práctica de este apartado.
Montamos el circuito de la figura en TinkerCad. El objetivo aprender el control del binomio sensor IR y mando a distancia.
El programa sería:
De modo resumido y orientativo, una librería es un trozo de código hecho por terceros que usamos en nuestro programa. Esto nos facilita mucho la programación y permite la abstracción haciendo que nuestro programa sea más sencillo de hacer y de entender. En nuestro caso vamos a utilizar la librería IRremote.h que incluimos con la instrucción #include <IRremote.h>. Dentro de cada librería en su programación pueden aparecer clases y objetos que son los que determinan el funcionamiento correcto del programa que constituye la librería, a los que debemos llamar en nuestro código para que esta librería haga su trabajo correctamente. En el caso que nos ocupa aparecen:
IRrecv sensorIR (pinSensorIR); //Crea el objeto recibidor usando el nombre (en este caso) pinSensorIR
decode_results codigoIR; //decode_results es una clase que se encuentra en IRremote.h,
//lo que hacemos es instanciarla creando un objeto llamado "resultado"
Nota.- Instanciar es crear una instancia de un objeto en un lenguaje de programación orientado a objetos (OOP). Un objeto instanciado recibe un nombre y se crea en la memoria o en el disco utilizando la estructura descrita en una declaración de clase.
Los datos obtenidos mediante el monitor serie (M.S.) de los valores leídos por el sensor IR en formato HEX al pulsar las teclas del 0 al 9, se muestran en la imagen de abajo a la derecha. A la izquierda una tabla con todos los valores leídos de cada uno de los botones del mando.
Montamos el circuito de la figura en TinkerCad. El objetivo es encender el LED rojo con el botón 1, apagarlo con el 2, encender el LED verde con la tecla 4 y apagarlo con la tecla 5. También usaremos la tecla 9 para apagar uno o los dos LEDs a la vez si están ambos encendidos.
El programa sería:
Montamos el circuito de la figura en TinkerCad. El objetivo es controlar el ángulo de giro del servomotor con los botones 1 y 3 del control remoto, de tal forma que cuando pulsemos 1 se desplace el eje del servo 5º en sentido horario, cuando pulsemos 3 el eje gire 5º en sentido antihorario y cuando de forma continuada pulsemos 1 o 3 el eje se desplace de forma fluida en el sentido marcado por el botón pulsado.
El programa sería:
Resolución de las prácticas:
Min 0 < Funcionamiento < Min 5:45
Min 5:45 < Práctica 13.1 < Min 11:18
Min 11:18 < Práctica 13.3 < Min 16:33