Introduction: Controlar El Televisor, Dvd Y Equipo De Sonido Desde El Celular Y Arduino.

Hola, en esta oportunidad quiero compartirles este proyecto que quise realizar desde que conocí el mundo del arduino. Se trata de poder controlar nuestro televisor, reproductor de dvd y equipo de sonido con arduino desde una aplicación en nuestro celular con Android. Esto es una base para la domótica, ya que ustedes podran ampliar el rango de dispositivos a ser controlados como luces, ventiladores, aires acondicionados, etc.

El proyecto consta de dos partes:

La primera en la cual se arma el circuito que nos permitirá obtener los códigos de cada botón del control remoto que controla a cada electrodomestico. Y el segundo en el cual es el proyecto en sí, el del controlador.

La lista de materiales es la siguiente:

  • (1) Tarjeta arduino uno o cualquier versión.
  • (1) Módulo de bluetooth HC-05.
  • (1) Módulo receptor de infrarojos TSOP 1738 o equivalente.(Usado sólo para recibir los códigos, no en el proyecto final)
  • (2) Led's infrarojos.
  • (2) Resistencias de 220 ohm
  • Cables de conexión.
  • Celular con sistema operativo android.

La cantidad de leds infrarojos depende de la disposición de sus aparatos , en mi caso el televisor y el dvd estaban en lamisma línea de manera que un led era suficiente para controlarlos a ambos mientras que el equipo de audio se encontraba a cierta distancia y por eso me tocó usar otro led que apuntara directamente hacie el sensor del equipo.

Step 1: Obtener Los Códigos De Los Controles Remotos.(I)

Primero se deben obtener los códigos de cada botón de la función que quiera ser ejecutada. Por ejemplo, si se quiere encender/apagar, cambiar el volumen y modificar los canales de nuestro televisor desde la App; debemos entonces identificar los códigos de los respectivos botones de nuestro televisor. De igual manera hacer lo mismo para el control del DVD, equipo de sonido o aparato que se quiera controlar.

Para ello, armamos el circuito según se muestra en la figura:

El receptor de infrarojos Tsop 1738 o equivalente tiene 3 pines;

El primero es la salida de señal y va conectado hacia el pin 11 del arduino ( puede ser usado cualquier pin digital del arduino teniendo la precaución de configurarlo en el sketch).

El segundo pin va conectado a GND.

El tercer pin va conectado a los +5V.

Luego descargue la librería IrRemote escrita por Ken Shirriff, que es la que nos permitirá obtener los códigos y enviar los mismos en protocolos Nec, Philips RC5, RC6 y Raw.

A continuación descargue (recomiendo mejor descargarla )o copie las siguientes líneas de código y cargue el sketch en el arduino:

#include IrRemote.h //Esto va entre los signos mayoy menor que pero aca no los deja escribir.
int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()

{

Serial.begin(9600);

irrecv.enableIRIn(); // Start the receiver

}

// Dumps out the decode_results structure.

// Call this after IRrecv::decode()

// void * to work around compiler issue //void dump(void *v)

{ /

/ decode_results *results = (decode_results *)v

void dump(decode_results *results)

{

int count = results->rawlen;

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)

{ Serial.print("Decoded RC5: "); }

else if (results->decode_type == RC6)

{ Serial.print("Decoded RC6: "); }

else if (results->decode_type == PANASONIC)

{ Serial.print("Decoded PANASONIC – Address: ");

Serial.print(results->panasonicAddress,HEX);

Serial.print(" Value: "); }

else if (results->decode_type == JVC)

{ Serial.print("Decoded JVC: "); }

Serial.print(results->value, HEX);

Serial.print(" (");

Serial.print(results->bits, DEC);

Serial.println(" bits)");

Serial.print("Raw (");

Serial.print(count, DEC);

Serial.print("): ");

for (int i = 0; i < count; i++)

{ if ((i % 2) == 1)

{ Serial.print(results->rawbuf[i]*USECPERTICK, DEC); }

else

{

Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); }

Serial.print(" ");

}

Serial.println("");

}

void loop()

{ if

(irrecv.decode(&results))

{

Serial.println(results.value, HEX);

dump(&results); irrecv.resume();

// Receive the next value

}

}

Step 2: Obtener Los Códigos (II)

Después de haber construido el circuito y cargarlo en nuestro arduino, abra el monitor serial de arduino, apunte el control remoto hacia el receptor infrarojo y presione la tecla de la cual se quiera capturar el código. Debe visualizarse el el monitor serial el protocólo, código y array de tiempos de la tecla presionada.

En la figura se muestra a manera de ejemplo los códigos obtenidos cuando presioné la tecla de encendido y abrir/cerrra bandeja de cd de mi reproductor de DVD.

Si vemos que el protocolo mostrado es conocido, se anota el código hexadecimal de 6 dígitos obtenido, ya que será el que se va a usar. Si se muestra un protócolo desconocido, hay que copiar el array recibido de 32 o 68 bits.

Estos códigos sera utilizados en el proximo sketch.

Step 3: Diagrama Del Circuito

Como se ve, el circuito es muy simple ya que sólo se usan 3 pines del arduino.

Nota importante: El led infrarojo debe ser conectado al pin número 3 del arduino. Esto es asi ya que la libreria ya viene configurada internamente para usar este pin como emisor.

El pin 0 del arduino (Rx) debe ir conectado al pin Tx del módulo BT.

El pin 1 del arduino (Tx) debe ir conectado al pin Rx del módulo BT.

Recordar desconectar el módulo de bluetooth al momento de cargar el programa en el arduino.

Step 4: El Código En Arduino

Copie las siguientes líneas o descargue el código desde aca y carguelo Arduino.

#include "<\IrRemote.h\>";
IRsend ir;

int estado=0;

char dato;

//These codes are for controlling the Audio System

unsigned int powerEquipo[32]={300,750,300,1800,300,700,350,700,350,1750,350,700,300,1800,250,1800,350,700,300,1800,350,700,300,700,350,700,350,1750,300,750,300}; //unsigned int chEmisoraUp[32]= {300,750,300,750,300,1750,250,800,300,750,300,750,250,800,300,750,250,1800,250,1850,300,750,250,800,200,800,300,1800,300,750,300}; unsigned int chEmisoraUp[32] ={300,750,300,750,300,1800,200,850,300,750,250,750,300,750,300,750,300,1800,300,1750,300,750,300,750,300,750,300,1800,250,750,300}; unsigned int chEmisoraDown[32] = {350,700,400,650,300,1750,350,700,350,700,350,700,300,750,300,700,350,700,300,750,350,1750,400,650,300,700,350,1750,300,750,300}; unsigned int playCd[32] = {400,650,400,650,350,1750,350,700,350,650,350,1750,350,1750,300,1750,400,1700,350,1750,350,700,350,650,400,650,350,1750,450,600,350}; //These codes are for controlling the Tv unsigned int pwrTv[68]={4600,4350,700,1550,650,1550,650,1600,650,450,650,450,650,450,650,450,700,400,700,1550,650,1550,650,1600,650,450,650,450,650,450,700,450,650,450,650,450,650,1550,700,450,650,450,650,450,650,450,650,450,700,400,650,1600,650,450,650,1550,650,1600,650,1550,650,1550,700,1550,650,1550,650}; // volume up unsigned int volUpTv[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,450,650,1550,700,1500,700,1550,700,1500,700,1550,650}; // volume down unsigned int volDownTv[68]={4600,4350,700,1550,650,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,450,650,1550,700,400,700,400,700,450,700,400,700,400,700,400,700,1550,700,400,700,1500,700,1500,700,1550,700,1500,700}; // channel up unsigned int chUpTv[68]={4600,4350,700,1500,700,1500,700,1550,700,450,650,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,450,650,450,700,400,700,400,700,400,700,400,700,1550,700,400,700,400,700,1550,650,450,700,400,700,400,700,1550,650,450,650,1600,650,1550,650,450,700,1500,700,1500,700,1550,650}; // channel down unsigned int chDownTv[68]={4650,4300,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,1550,700,400,700,450,650,400,700,1550,700,1500,700,1550,700,1500,700,400,700,1550,650,1550,700,1500,700}; // Tv/Video unsigned int videoTv[68]={4500,4300,650,1600,650,1550,650,1600,650,500,600,500,650,500,650,500,650,500,600,1650,600,1600,650,1550,650,500,650,500,650,500,600,500,650,500,650,1600,600,500,650,500,650,500,650,500,600,550,600,500,650,500,650,500,650,1550,650,1600,650,1550,650,1600,650,1550,650,1600,650,1550,650}; void setup()

{

Serial.begin(9600);

}

void loop()

{

if(Serial.available()>0)

{ dato=Serial.read();

switch (dato)

{

case 'R':

ir.sendRaw(powerEquipo,32,38);

delay(500);

break;

case 'T':

ir.sendRaw(chEmisoraUp,32,38);

delay(100);

break;

case 'U':

ir.sendRaw(chEmisoraDown,32,38);

delay(100);

break;

case 'V':

ir.sendRaw(playCd,32,38);

delay(100);

break;

case 'K': //Power the TV

ir.sendRaw(pwrTv,68,38);

delay(100);

break;

case 'L': //Volume +

ir.sendRaw(volUpTv,68,38);

delay(100);

break; case 'M': /

/Volume -

ir.sendRaw(volDownTv,68,38);

delay(100);

break;

case 'N': //Channel +

ir.sendRaw(chUpTv,68,38);

delay(100);

break;

case 'O': //Channel -

ir.sendRaw(chDownTv,68,38);

delay(100);

break;

case 'P': // Tv/Video

ir.sendRaw(videoTv,68,38);

delay(100);

break;

case 'A':

for (int i = 0; i < 3; i++)

{ ir.sendNEC(0xFF30CF, 32); // Power the DVD

delay(40);

}

break;

case 'B':

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF00FF, 32); // Open /Close cd tray

delay(40);

}

break;

case 'C':

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF52AD, 32); // Play cd

delay(40);

}

break;

case 'D':

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF728D, 32); // Stop

delay(40);

}

break;

} // fin del switch }

//fin del if

}//fin del loop

Step 5: La App

Este es el diagrama de bloques de la app. Hace uso del componente BlueTooth cliente, varios botones, etiquetas y un cuadro de lista que permitirá escoger la conexión hacia el módulo de BT.

Haz clic aca para descargar la Apk.

Gracias y espero sus comentarios. Si te gusta este proyecto regalame tu voto para el concurso Home Automation Contest.

Comments

author
TaniaT12 (author)2016-05-11

holis solo una preguntita donde se colocan los codigos que sacamos con el primer codigo??

author
sistemasymicros (author)TaniaT122016-05-12

Hola, se colocan en el encabezado del segundo código. Revisa mi artículo original para que lo notes mejor.

http://www.sistemasymicros.com.co/controlar-el-tel...

Por favor suscribete a mi canal:

https://www.youtube.com/c/sistemasymicros1

Gracias.

About This Instructable

4,387views

13favorites

License:

Bio: My name is José Luis Bejarano Vásquez.Tecnólogo en electrónica, estudiante de ing electrónica, desarrollador de software. Aficionado a la robótica. Blogger.
More by sistemasymicros:Localizador / Rastreador En Tiempo Real Con Linkit OneNumber puzzle with ArduinoSpeed Math Game with Arduino
Add instructable to: