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

Picture of 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)

Picture of 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)

Picture of 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

Picture of 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

Picture of 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

TaniaT12 (author)2016-05-11

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

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,777views

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: