You are on page 1of 6

Control remoto con

Arduino UNO *
Taller de Electronica

Libre
El siguiente documento provee de la informacion
necesaria para la programacion
con arduino de
UNO de un control remoto que puede ser utilizado para cualquier tipo de electrodomestico. El software que se brindara contiene los codigos

de un televisor Panavox DTH-2041FS. De conocer los codigos

de otro electrodomestico, estos pueden ser colocados en la programacion


para lograr una correcta comunicacion
con el control. Adicionalmente se provee la informacion
necesaria para el ensamblado del
hardware adicional.
Esquematico:

Lista
de
materiales:
Item
Cantidad
Resistencia 8.2 K 6
Resistencia 120
1
Resistencia 33
1
Pulsador 2 patas
6
LED
1
Emisor infrarojo
1
Headers
12
Lista de herramientas e insumos:
Soldador, estano,
placa de cobre,
mechas de 0.8 mm y taladro.

Figura 1: PCB

Figura 2: Layout

* Este circuito se basa en el diseno


de Zovirl Industries y Tronnico . Esta gua fue preparada por Octavio Rodrguez (Taller de
Electronica

Libre), y esta bajo una licencia Creative Commons Reconocimiento-CompartirIgual 3.0.

Descripcion
tecnica
Hardware
El circuito que se muestra en la pagina anterior permite:
la conexion
directa con la placa arduino UNO.
disponer de un panel de botones para el control remoto.
visualizar cuando el comando fue leido por la placa arduino mediante un LED.
Software
En lo referente a la programacion
es necesario tener en cuenta que el codigo

enviado por el control


original sera clonado por la placa arduino, digitalizado de la siguiente forma::
la placa enviara ceros y unos.
el cero correspondera al no envo de senal.

el uno correspondera al envo de la placa arduino de una onda cuadrada de frecuencia variable
dependiendo del control que se quiera clonar.
En el ultimo

punto se deberan contemplar los tiempos delay de la placa Arduino. Es decir, una vez
conocida la frecuencia del control remoto a clonar (la cual se puede obtener de los datos del fabricante o
mediante ensayos), la programacion
en la placa Arduino debe tener en cuenta que los tiempos de delay
modificaran la frecuencia programada (enlenteciendola). Por este motivo, a base de prueba y error, se
debe ir corrigiendo la programacion
de esta onda cuadrada en la placa, de manera que la senal
de salida
se asemeje lo maximo posible a la original. Para el modelo que este software trae pre programado estas
consideraciones ya han sido tomadas en cuenta.
A continuacion
se muestra el codigo

a cargar a la placa arduino:


/* Software para control remoto */
#define BIT_IS_SET(i, bits) (1 << i & bits)
// Emisor infra-rojo conectado al pin 13
const int LED_PIN = 13;
const int pulsador_on = 9;
const int pulsador_arriba=7;
const int pulsador_abajo=6;
const int pulsador_vol_arri=5;
const int pulsador_vol_abajo=4;
const int pulsador_mute=3;
int prender=1;
int arriba=1;
int abajo=1;
int vol_arriba=1;
int vol_abajo=1;
int silencio=1;
int led_luz=2;
// Ancho de un pulso, en microsegundos
const int PULSE_WIDTH = 600;
// # de bytes por comando
const int COMMAND_LENGTH = 8;
// Comandos
const int UP[]
const int DOWN[]
const int ON[]

= {224, 42, 40, 170, 2, 34, 40, 170};


= {254, 2, 162, 138, 160, 42, 136, 170};
= {248, 10, 138, 42, 128, 138, 40, 170};

const int SUBIR[] = {248, 10, 138, 42, 128, 136, 168, 170};
const int BAJAR[] = {254, 2, 162, 138, 160, 42, 40, 170};
const int MUTE[]= {254, 2, 162, 138, 160, 40, 168, 170};
void setup()
{
// Configuraci
on de los puertos
pinMode(LED_PIN, OUTPUT);
pinMode(pulsador_on, INPUT);
pinMode(pulsador_arriba, INPUT);
pinMode(pulsador_abajo, INPUT);
pinMode(pulsador_vol_arri, INPUT);
pinMode(pulsador_vol_abajo, INPUT);
pinMode(pulsador_mute, INPUT);
pinMode(led_luz, OUTPUT);
}
/* Generar onda cuadrada de frecuencia adecuada */
void on(int pin, int time) {
static const int period = 25;
// tiempo de espera hallado mediante prueba y error
static const int wait_time = 7;
for (time = time/period; time > 0; time--) {
digitalWrite(pin, HIGH);
delayMicroseconds(wait_time);
digitalWrite(pin, LOW);
delayMicroseconds(wait_time);
}
}
/* Enviar un cero por una cantidad de tiempo dada */
void off(int pin, int time) {
digitalWrite(pin, LOW);
delayMicroseconds(time);
}
/* Enviar un byte a trav
es del Emisor infra-rojo*/
void send_byte(int bits) {
for (int i = 7; i >= 0; i--)
{
if (BIT_IS_SET(i, bits)) {
on(LED_PIN, PULSE_WIDTH);
} else {
off(LED_PIN, PULSE_WIDTH);
}
}
}
/*Enviar un comando */
void command(const int bytes[]) {
for (int i = 0; i < COMMAND_LENGTH; i++) {
send_byte(bytes[i]);
}
off(LED_PIN, 2 * PULSE_WIDTH);
}
Taller de Electronica

Libre, Universidad de la Republica.

void loop()
/*lee las entradas, si alguna est
a accionada entonces enciende un aviso luminoso (LED) y llama a void c
{
prender=digitalRead(pulsador_on);
digitalWrite(led_luz, !prender);
if (!prender)
{
command(ON);
command(ON);
delay (200);}
else
{arriba=digitalRead(pulsador_arriba);
digitalWrite(led_luz, !arriba);
if (!arriba)
{
/* mejor funcionamiento en la pr
actica si se env
a dos veces el comando en cuesti
on*/
command(UP);
command(UP);
delay(200);
}
else {
abajo=digitalRead(pulsador_abajo);
digitalWrite(led_luz, !abajo);
if (!abajo)
{
command(DOWN);
command(DOWN);
delay(200);
}
else {
vol_arriba=digitalRead(pulsador_vol_arri);
digitalWrite(led_luz, !vol_arriba);
if (!vol_arriba)
{
command(SUBIR);
command(SUBIR);
delay(120);
}
else {
vol_abajo=digitalRead(pulsador_vol_abajo);
digitalWrite(led_luz,!vol_abajo);
if (!vol_abajo)
{
command(BAJAR);
command(BAJAR);
delay(120);
}
else {
silencio=digitalRead(pulsador_mute);
digitalWrite(led_luz,!silencio);
Taller de Electronica

Libre, Universidad de la Republica.

if (!silencio)
{
command(MUTE);
command(MUTE);
delay(300);
}
else {}
}
}
}
}
}
}
Adquisicion
senal
del control y generacion
de los comandos digitales
En primera instancia (con el objetivo de clonar los comandos) fue necesario la implementacion
de un
metodo de adquisicion
de la senal
emitida por el control remoto.
Para ello, teniendo en cuenta que con los osciloscopios comunes en el mercado se dificulta dicha
adquisicion,
se utilizo el siguiente metodo:
se soldo a un conector speaka macho un receptor infra-rojo en paralelo con una resistencia de 1K.
se lo conecto a la entrada de microfono

de una computadora.
con un programa de audio se procedio a grabar la senal
emitida por el control remoto.
Una vez realizado este procedimiento se adquirio la siguiente senal:

Figura 3: Senal-original

En la misma se identifico el nivel superior como ceros y el inferior como unos. Con el objetivo de
representar la senal
en forma de bytes, se definio como un bit al uno o cero de menor ancho de la senal.

En esta parte pueden ser de ayuda programas que permitan medir el ancho de este bit creado, para
posteriormente introducirlo en el software brindado.
Luego de realizado el paso anterior, se pudo determinar que con ocho bytes se poda representar el
comando en su totalidad. Es entonces, que se procedio a relevar esos ocho bytes para cada uno de los
comandos del control.
Una vez concluido esto, se obtuvo la senal
emitida de la placa arduino con el objetivo de compararla.
Vistos los contrastes entre la senal
original y la clonada, se procedio a modificar los tiempos de espera,
el ancho del pulso, etc.
Luego de realizar los ajustes correspondientes a los retardos generados por la placa (antes mencionados), el control remoto queda listo para su utilizacion.

Taller de Electronica

Libre, Universidad de la Republica.

A continuacion
se puede apreciar la similitud entre al senal
original(superior) y la clonada(inferior):

Figura 4: Contraste-original-clonada
Consideraciones finales
cualquiera de los comandos consta de cierto numero

de bits de arranque (valor uno), los cuales no


tienen por que ser enviados en su totalidad por la senal
clonada. Es por ello que la codificacion
en
bytes se comenzo desde el ultimo

bit hacia el primero: en caso de que con los 8 bytes codificados no


se llegase a incluir todos los bits de arranque, no se vera afectado el funcionamiento del control.
los valores de resistencias indicados en el diseno
del hardware pueden ser levemente modificados, en el caso de no encontrar disponibilidad a ellos, sin afectar el correcto funcionamiento del
dispositivo.
los comandos elegidos en este documento para el televisor en cuestion
son: el boton
de on/off,
subir canal, bajar canal, subir volumen, bajar volumen y mute, sugun
se indica en el esquematico.
el LED luminoso esta destinado unicamente

a ser una indicacion


visual para el usuario.

Taller de Electronica

Libre, Universidad de la Republica.

You might also like