Control Infra R Rojo
Control Infra R Rojo
Prof: Bolaños D J
Tutorial Arduino y control remoto Infrarrojo (versión 1-9-17)
Este sensor tiene un filtro interno para detectar solo frecuencias infrarrojos cercanas a 38KHz,
lo que lo hace compatible con la mayoría de mandos infrarrojos, posee 3 pines de conexión
GND, VCC y DATA , el cual nos permite conectar directamente a un pin digital de nuestro
Arduino o cualquier microcontrolador que deseemos usar.
NOTA:
La interfase es la siguiente:
1
Electrónica
Prof: Bolaños D J
Lo particular de este protocolo es que envía doble vez tanto la dirección como el comando, de
forma normal y negado, con esto posteriormente se puede validar los datos.
La dirección está asociada a un dispositivo, por ejemplo un TV, una equipo de sonido, un VCR,
etc. Y el comando está asociado a la acción o función del botón. Por ejemplo subir el volumen,
apagar, el número 1 o 2, etc.
Para este tutorial vamos a trabajar como si se tratase de un solo bloque de datos 32 bits.
A continuación se muestra los valores de los datos correspondientes a los botones del control
en mención:
*Como se observa el dato está formado por la dirección, comando y sus negaciones, por
ejemplo para la tecla OK: el dato de 32bits es 0x00FF02FD, donde la dirección es 00 y su
negación FF, y el comando o función es 02 y su negación FD.
2
Electrónica
Prof: Bolaños D J
Control Remoto de TV
Tambien podemos realizar ensayos con otros
mandos de TV, por ejemplo un control remoto de un
TV SONY
Power 1 21 0xA90
Menú 1 96 0X070
izquierda 1 52 0x2D0
Derecha 1 51 0xCD0
1 1 0 0x010
2 1 1 0x810
3 1 2 0x410
4 1 3 0xC10
5 1 4 0x210
6 1 5 0xA10
7 1 6 0x610
8 1 7 0xE10
9 1 8 0x110
0 1 9 0x910
3
Electrónica
Prof: Bolaños D J
*Para convertir el dato de 12 bits en su dirección y comando se toma empezando desde el bit
menos significativo considerándolo de mayor peso.
Hay distintas versiones de librerías Arduino para trabajar con mando infrarrojo, incluso tiene
implementado varios protocolos de las marcas más conocidas como Sony, LG, Samsung,
Sanyo, etc, es decir los reconocen de acuerdo a su función.
Es necesario descargar e importarla a nuestro IDE Arduino para poder trabajar los ejemplos de
este tutorial. Usaremos la Arduino-IRremote-master.zip se incluye una copia en el Tutor de
Arduino, Carpeta Bibliotecas.
4
Electrónica
Prof: Bolaños D J
El código es el siguiente:
//Encendido de un LED
//Tecla 0 Apaga - Tecla 1 lo enciende
//Para infrarrojos-----------
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
//Fin lista bibliotecas------
IRrecv irrecv(receptor);
decode_results codigo; //OBJETO CODIGO DE CLASE decode_result, oriundo de IRremote.h
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // INICIA LA RECEPCIÓN
pinMode(led, OUTPUT);
}
void loop()
{
if (irrecv.decode(&codigo))
{
Serial.println(codigo.value, DEC);//Muestra por MONITOR SERIAL lo que recibe
//en sistema DECIMAL
delay(500);
irrecv.resume();
}
}
Con IRrecv irrecv(receptor) informamos que el receptor IR envía a Arduino por el PIN
especificado por la variable entera receptor (en este caso 12) , luego creamos la variable
codigo, que es una estructura en donde se guardaran todos los datos relacionados cuando
PIN 5 como salida para el LED testigo pinMode(led, OUTPUT) , ya que la variable entera led la
cargamos con 5.
Esto es trabajar con variables para definir los PINES es útil cuando deseamos luego cambiar los
pines utilizados en futuros programas.
5
Electrónica
Prof: Bolaños D J
Podríamos usar cualquier control remoto para nuestros ejemplos, pero debemos decodificarlos.
El programa anterior permite ver por el MONITOR SERIAL lo que llega al sensor, entonces
podemos utilizarlo para obtener los codigos asociados a cada tecla.
A continuación se muestra los datos recibidos al presionar las teclas del control remoto que
viene con el kit del sensor con el que se hicieron los ensayos, tanto en HEXA como en
DECIMAL.
A3C8EDDB E5CFBD7F
F076C13B 2747854299 3855596927
4034314555
97483BFB F0C41643
C101E57B 2538093563 4039382595
3238126971
3D9AE3F7 6182021B
716BE3F 1033561079 1635910171
2534850111
488F3CBB 449E79F
8C22657B 1217346747 71952287
2351064443
1BC0157B 3EC3FC1B
32C6FDF7 465573243 1053031451
851901943
También podríamos utilizar le siguiente programa que dado que la biblioteca empleada es capaz
de reconocer algunos códigos de algunas marcas, nos podría ser útil.
Biblioteca necesaria: (Buscar en Internet o dentro de carpeta Bibliotecas del Tutor de Arduino.
Arduino-IRremote-master.zip
Como ya mencionamos en esta biblioteca figuran algunos codigos conocidos de ciertas marcas,
el programa es capas de detectarlos y lo informa NEC, SONY, RC5, RC6, RPANASONIC etc.
6
Electrónica
Prof: Bolaños D J
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Empezamos la recepción
pinMode(5, OUTPUT); // configura ‘pin’ como salida, para visualizar
//llegada de marca desconocida
}
Serial.print("(");
Serial.print(results->bits, DEC);
Serial.print(" bits)");
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");
}
else if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
7
Electrónica
Prof: Bolaños D J
}
else if (results->decode_type == WHYNTER) {
Serial.print("Decoded Whynter ");
}
Serial.print(results->value, HEX);
Serial.print(" (HEX) , ");
Serial.print(results->value, BIN);
Serial.println(" (BIN)");
void loop() {
if (irrecv.decode(&results)) {
dump(&results);
irrecv.resume(); // empezamos una nueva recepción
}
delay(300);
}
O sea ahora que ya sabemos el valor del dato que corresponde a cada tecla, vamos a asociar
una tecla a un pin digital y prender o pagar leds, que se podrían remplazar por cualquier otro
actuador.
8
Electrónica
Prof: Bolaños D J
Comando Infrarrojo
Características Técnicas:
Contro Remoto:
Modelo I0526017
Material Plástico
Características:
21 botones de función
Control Rango: por encima de los 8M;
Longitud de onda infrarroja: 940nm;
Oscilador de cristal: 455KHz,
Frecuencia portadora: 38 kHz
Ángulo de uso: 60 grados
Adherencia Material: 0.125mmPET,
Tiempo de Vida: 20.000 veces.
Corriente estática: 3 ~ 5uA,
Corriente dinámica: 3 ~ 5 mA
Receptor Infrarrojo:
Modelo: Vs1838B
Working Voltage: 2.7V to 5.5V
Reception Distance: 18M
Reception Angle: 45 Degree
Low Level Voltage: 0.4V
9
Electrónica
Prof: Bolaños D J
Controlar Pines digitales y analogicos (PWM) con control remoto por
infrarrojos TACHOS LEDs
Este ejemplo de programa se hace uso del control infrarrojo para ejecutar ciertas acciones en un
LED RGB cátodo comun(que representa un TACHO LED).
Perol no solamente se puede comandar por mandos infrarrojo sino además por media de
la PC conectada a Arduino y por Bluetooth. En un apunte aparte se podrá encontrar el
desarrollo completo.
Programa (Remoto13)
//FUNCIONO
//Avances de Remoto10
//Para tachos---------------
int red=0,green=0,blue=0;
int num;
//Fin de tachos--------------
//Para infrarrojos-----------
#include <boarddefs.h>
#include <IRremote.h>
10
Electrónica
Prof: Bolaños D J
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
IRrecv irrecv(RECV_PIN);
void setup()
//llegada de desconocido
//Para tachos-------
//Paneo de canales---
analogWrite(9, 255);
delay(1000);
analogWrite(9, 0);
analogWrite(10, 255);
delay(1000);
analogWrite(10, 0);
analogWrite(6, 255);
delay(1000);
analogWrite(6, 0);
//Para infrarrojos---
11
Electrónica
Prof: Bolaños D J
// Call this after IRrecv::decode()
// Serial.print("(");
//Serial.print(results->bits, DEC);
//Serial.print(" bits)");
if (results->decode_type == UNKNOWN) {
delay(100);
//Serial.print(results->value, HEX);
//Serial.print(results->value, BIN);
// Serial.println(" (BIN)");
void loop() {
//Para infrarrojos----------
if (irrecv.decode(&results)) {
dump(&results);
//Serial.print("LEIDO");
//Serial.print(results.value, HEX);
Serial.println(results.value);
switch(results.value)
case 3238126971://Tecla 0
12
Electrónica
Prof: Bolaños D J
//Serial.print(results.value);
SecuenciaA1();
break;
//Serial.print(results.value);
Color(255,0,0);
break;
//Serial.print(results.value);
Color(0,255,0);
break;
//Serial.print(results.value);
Color(0,0,255);
break;
//Serial.print(results.value);
Color(0,0,0);
break;
//Serial.print(results.value);
Color(255,0,255);
break;
//Serial.print(results.value);
Color(255,255,0);
13
Electrónica
Prof: Bolaños D J
break;
//Serial.print(results.value);
Color(255,255,255);
break;
case 2534850111://Tecla 0
//Serial.print(results.value);
SecuenciaA2();
break;
//Para tachos-------------------
/*
*/
if (Serial.available()>0) {
delay(22);
/*
* variable bufferString
14
Electrónica
Prof: Bolaños D J
*/
while (Serial.available()>0) {
bufferString += (char)Serial.read();
num = bufferString.toInt();
//int red=0,green=0,blue=0;
//Colores fijos
if (num==700)
red= 0;
green= 0;
blue= 0;
if (num==750) //Rojo
red= 255;
green= 0;
blue= 0;
if (num==800) //Verde
15
Electrónica
Prof: Bolaños D J
red= 0;
green= 255;
blue= 0;
if (num==850) //blue
red= 0;
green= 0;
blue= 255;
if (num==900) //Blanco
red= 255;
green= 255;
blue= 255;
if (num==130)
SecuenciaA1();
16
Electrónica
Prof: Bolaños D J
}
//---------------------------------------------
// Subiendo intensidad----------
if (num==111)
Mas_red();
if (num ==222)
Mas_green();
if (num ==333)
//Serial.print(num);
//Serial.print(blue);
Mas_blue();
if (num==444)
Menos_red();
if (num ==555)
Menos_green();
17
Electrónica
Prof: Bolaños D J
if (num ==666)
Menos_blue();
//--------------------------------------------------
//*************************************************
//Funciones creadas----------------------
void Menos_blue()
blue = blue - 5;
if (blue == -5)
blue = blue + 5;
//--------------------
void Menos_green()
green= green - 5;
if (green == -5)
green = green + 5;
//--------------------
void Menos_red()
18
Electrónica
Prof: Bolaños D J
red= red - 5;
if (red == -5)
//-----------------------
void Mas_blue()
//Serial.print(num);
blue = blue + 5;
Serial.print(blue);
analogWrite(6, blue);
//--------------------
void Mas_green()
green= green + 5;
green = green - 5;
//--------------------
19
Electrónica
Prof: Bolaños D J
void Mas_red()
red= red-5;
//------------------------------
analogWrite(9 , R) ; // Rojo
//-------------------------
void SecuenciaA1()
delay(20);
delay(25);
delay(20);
20
Electrónica
Prof: Bolaños D J
Color(0, 0, 0); //negro
delay(25);
delay(20);
delay(25);
delay (100);
Color(255, 0, 0);
delay (100);
Color(0, 0, 255);
delay (300);
delay (100);
delay (200);
delay (100);
void SecuenciaA2()
21
Electrónica
Prof: Bolaños D J
{
delay (100);
delay (100);
Color(255, 0, 0);
delay (100);
delay (100);
delay (200);
Color(255, 0, 0);
delay (100);
FUENTE consultada:
http://www.naylampmechatronics.com/blog/36_Tutorial-Arduino-y-control-remoto-
Infrarrojo.html
22