Controlar el televisor, equipo de audio y dvd desde el celular con arduino

Publicado el: 24 de junio de 2019
Intermedio
Acerca de este proyecto
Proyecto que explica como controlar el televisor, equipo de sonido, dvd o cualquier electrodom茅stico desde el celular (android) y arduino.
domotica arduino
Publicidad
DETALLES

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 podr谩n 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  electrodom茅stico. Y el segundo en el cual es el proyecto en s铆, el del controlador.

La lista de materiales es la siguiente:

  • Tarjeta arduino uno o equivalente.
  • Modulo de bluetooth HC-05.
  • 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 ohms.
  • Cables de conexion.
  • 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 la misma 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 hacia el sensor del equipo.


OBTENER LOS C脫DIGOS DE LOS  CONTROLES REMOTOS


Protoboard


DIAGRAMA

Diagrama


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 que se encuentra en la secci贸n codificaci贸n de este articulo.


OBTENER LOS C脫DIGOS

Pantallazo


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 protocolo, 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 protocolo desconocido, hay que copiar el array recibido de 32 o 68 bits.

Estos c贸digos sera utilizados en el proximo sketch.


DIAGRAMA CIRCUITO FINAL

Diagrama circuito

Diagrama montaje


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 as铆 ya que la librer铆a 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.


LA APP


Pantallazo app

Pantallazo celular

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 el archivo apk.

CODIFICACI脫N
Codigo para obtener los codigos-
Este es el primero c贸digo que se debe cargar para obtener los c贸digos de los controles remotos que se emularan.
#include <IrRemote.h>
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

}

}
Codigo final-
Este es el codigo que se debe cargar para el proyecto final.
#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

Download me
Autor: sistemasymicros
24 proyectos 1 seguidores 0 siguiendo

Ingeniero en electronica, desarrollador de software. Desarrollo de proyectos con microcontroladores.

COMENTARIOS
Para publicar un comentario debes
COMENTARIOS
sistemasymicros
hace un mes

@ISACC por favor instala una versión anterior de arduino, prueba con la versión 1.6.0.

  • Escriba su comentario de una manera respetuosa y constructiva
ISAAC
hace un mes

BUENAS NOCHES AMIGO GRACIAS POR COMPARTIR TUS CONOCIMIENTOS, PERO TENGO DUDAS SOBRE ESTE PROYECTO, COPIE EL CODIGO FINAL PARA ARDUINO Y ME DA PROBLEMAS AL COMPILARLO ME APARECE "\\IRREMOTE.H\\: NO SUCH FILE OR DIRECTORY" ACTUALICE LA LIBRERIA A UNA VERSION ANTERIORI Y NO SE COMPUSO , QUE PODRIA SER, ME PODRIAS AYUDAR?

  • Escriba su comentario de una manera respetuosa y constructiva