En el siguiente tutorial vamos a enviar códigos por infrarrojos entre dos tarjetas arduino.
Como habéis visto en proyectos anteriores, las señales infrarrojas son códigos en hexadecimal de distinta longitud, pueden ser de 12, 20 ó 32 bits dependiendo del fabricante del dispositivo.
En el proyecto aquí descrito vamos a utilizar dos Arduinos, uno será el emisor y el otro el receptor.
El circuito para el emisor lo he sacado de la web de Adafruit y el receptor de Tronixstuff.
Emisor y receptor usan librerías diferentes, están disponibles para descargar al final de la página.
El receptor se puede usar para capturar los códigos que emiten los diferentes mandos y posteriormente utilizarlos para programar el Arduino con esos códigos y controlar los dispositivos de casa, la tele, el DVD, o programar el aire acondicionado.
El funcionamiento del circuito es el siguiente: conectamos cada Arduino a un PC, una vez cargado el sketch, abrimos el monitor serie en emisor y receptor. Cada vez que pulsemos una tecla en el emisor seguida de Intro, éste eviará el código a través del led infrarrojo, será capturado por el receptor y mostrado en el monitor serie.
// Sending IR Codes to another Arduino
// see the original code here:
// https://learn.adafruit.com/using-an-infrared-library/sending-ir-codes
#include <IRLib.h>
IRsend My_Sender;
void setup()
{
Serial.begin(9600);
}
void loop() {
if (Serial.read() != -1) {
//send a code every time a character is received from the serial port
My_Sender.send(SONY,0x4678E6B3, 32);
}
}
// example 32.1 - IR receiver code repeater
// http://tronixstuff.com/tutorials > chapter 32
// based on code by Ken Shirriff - http://arcfn.com
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume(); // receive the next value
} // Your loop can do other things while waiting for an IR command
}
Descarga las librerías IR aquí abajo.