Professional Documents
Culture Documents
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
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
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
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
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
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
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
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
Taller de Electronica