loading

Hi everybody, this is my second instructable and my first in English, so, sorry for the mistakes.

I want to share this project it's about how you can control your Tv, DVD and your Audio System with Arduino and an app for Android made with app inventor.

If you like this project, please vote for it in the Home automamtion contest.

It is divived in two parts, the first it is for obtaining the codes of the remote control, and the second it is the real project of controlling the devices.

General Part List:

  • (1) Arduino One.
  • (1) Breadboard.
  • (1) Ir Receiver Tsop1838 or equivalent.(for capturing the codes, No used in the project of controlling).
  • (2) IR Leds
  • (1) HC-05 Bluetooth module.
  • (2) 220 ohm resistors.
  • Jumper cables.
  • (1) Remote control.

    (for capturing the codes, No used in the project of controlling).

  • Note: the youtube video has english subtitles.

Step 1: Obtain the Codes for Buttons (I)

First, we must to obtain the codes for every button of our remote control.

So, build the circuit on the breadboard like shown on figure.

The Ir receiver TSOP 1738 has three pins.

The first is the output, connected to pin 11 in Arduino.

The second goes to Gnd, and the third it is connected to +5V.

Download the IrRemote library writen by Ken Shirriff. This library let us both send and receive Ir remote codes in multiple protocols like Nec, Philips RC5, Philips RC6 and raw.

we have to connect an infrared sensor like the osp1738 to any digital input pin.

Download from here the sketch

#include
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: Obtain the Codes (II)

After you have built the circuit for capturing the codes, open the serial monitor on the Arduino Ide, press the desired button in the remote control and see which values the arduino is receiving, like is shown in the image. Arduino will receive the protocol, the code and the raw codes.

For example. those are the codes when i pressed the power and the open/close buttons of my dvd player remote control.

Save or copy the codes received for every desired button that you will use for controlling the devices.

In my skethch i used for Tv: power, volume+, volume-, channel + and channel - and TV/Dvd buttons.

For dvd, power, open/close, play and stop.

For audio system i only want to control the power, play cd and presets buttons.

These codes will be used on the next sketch.

Step 3: Diagram Circuit

As you can see, we need only:

  • Arduino board.
  • Bluetooth module HC-05.
  • Infrared led's. (I have used two for the disposition of my tv, dvd and the stereo, the number of infrared leds depends of the disposition of your devices).

Note: the infrared led has to be connected to arduino pin # 3. That's because the library is setup that way.

Only three pins of the Arduino are used:

PIN

3 - To Led's

0 - BT module pin Tx

1 - BT module pin Rx

Remember that when you upload the sketch to the Arduino, the bluetooth module has to be disconnected.

Step 4: The Code in Arduino

Clic here for downloading the code or copy the following lines:

#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

delay(40);

}

break;

case 'C':

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

{

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

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: The App

This is the blocks diagram of the app made in app inventor 2.

Clic here for downloading the app.

The componentes used in this app are:

  • Bluetooth client.
  • Several buttons, labels and listpicker.
  • as you can see, it is very simple, when it runs, we have to choose a bluetooth connection pressing the select device option, and when it is connected only have to press the desired button for controlling the device.

That's all. Thanks for watching and if you like this project, please vote for the home automation contest.

Again, sorry for my english.

<p>Please send me the codes that you obtain when you press the power button of your TV, those are the codes that you are shown on the serial port.</p>
<p>Good morning, </p><p>I've tried your project too, but when i tried, but I'm doing it with my tv, but I have no response of my tv, this is the code i got but i see when you decode you get negative numbers, and when I see your program you dont have any one.Can you help me with that, look this is the code i get:</p><p>C1AA09F6</p><p>Decoded NEC: C1AA09F6 (32 bits)</p><p>Raw (68): 17484 8750 -4500 500 -1700 550 -1650 500 -600 550 -550 550 -600 500 -600 500 -600 550 -1650 550 -1650 550 -600 500 -1700 500 -600 550 -1650 550 -600 500 -1700 500 -600 500 -600 550 -600 500 -600 500 -600 550 -1650 550 -600 500 -600 500 -1700 500 -1700 550 -1650 550 -1650 550 -1650 550 -600 500 -1700 500 -1700 500 -600 550</p><p>and this is the program in arduino</p><p> #include &lt;IRremote.h&gt;</p><p>IRsend ir;</p><p>int estado=0;</p><p>char dato;</p><p>int boton1 =6;</p><p>int boton2 =7;</p><p>unsigned int power2[68]={17484,8750,-4500,500,-1700,550,-1650,500,-600,550,-550,550,-600,500,-600,500,-600,550,-1650,550,-1650,550,-600,500,-1700,500,-600,550,-1650,550,-600,500,-1700,500,-600,500,-600,550,-600,500,-600,500,-600,550,-1650,550,-600,500,-600,500,-1700,500,-1700,550,-1650,550,-1650,550,-1650,550,-600,500,-1700,500,-1700,500,-600,550};</p><p>void setup()</p><p>{Serial.begin(9600);</p><p>Serial.print(&quot;conectado&quot;);</p><p>digitalWrite(boton1,INPUT);</p><p>digitalWrite(boton2,INPUT);</p><p>}</p><p>void loop() {</p><p> Serial.print(&quot;off&quot;);</p><p> Serial.println();</p><p> int b1= digitalRead(boton1);</p><p> int b2= digitalRead(boton2);</p><p> if (b1==HIGH) {</p><p> ir.sendNEC(0xC1AA09F6,32);</p><p>ir.sendRaw(power1,68,32);</p><p>Serial.println(&quot;Sube&quot;);</p><p> delay(40);</p><p> }</p><p>Thanks!</p>
HI, sorry for my english. If you get negative numbers, place them positive, don't place the minus (-). And deletes the first code, so use this code for the power2:<br>unsigned int power2[68]=8750,4500,500,1700,550,1650,500,600,550,550,550,-600,500,600,500,600,550,1650,550,1650,550,600,500,1700,500,600,550,1650,550,600,500,1700,500,600,500,600,550,600,500,600,500,600,550,1650,550,600,500,600,500,1700,500,1700,550,1650,550,1650,550,1650,550,600,500,1700,500,1700,500,600,550};<br><br>ir.sendRaw(power2,68,38);<br><br><br>if that doesn't work, use this:<br><br>for (int i = 0; i &lt; 3; i++)<br> {<br> ir.sendNEC(0xC1AA09F6 , 32); // Powers<br> delay(40);<br> }
<p>Hi, I've tried the solution you gave me but ir led does not turn on, I mean with the camera of my phone, doesnt turn on and i guess that my probem is located in hardware that in software.</p><p>I've been searching trying to find a way to solve my prblem but i see you are using an arduino UNO, and I'm using a the Mega, does it has any problem with the timers and the oscilators output? and the difference betwen the boards?</p><p>I'm doing the conections exactly you say in the instructable, and Im using the code you told me,an TSOP 1100, a Ir led and the arduino Mega.</p>
<p>I've tried your project, but when I press the power tv why no response on my tv, my own program code editing with my tv Polytron.</p><p>please solution.</p>
Could you send me the code that yo have for controlling your tv?
<p>I'm getting desperate, 5x I've tried still not connected with tv Polytron me, all I had to edit and according to the procedure tutorial.</p>
<p>yes, but the project is not connected to my tv, I think the circuit and the code is correct.</p><p>is there a full scheme of this project?</p>
<p>yes, but the project is not connected to my tv, I think the circuit and the code is correct.</p><p>is there a full scheme of this project?</p>
<p>Hi sir.. im Planning on building that one but instead of using the phone apps.. im gonna be Using Visual basic and my Laptop. What part of the codes should I have to edit for my self to work on it..?? Any reply Would be helpful Tnx Sir...God Speed Instructables...</p>
<p>Hi, i uploaded the project in visual basic in this link:</p><p><a href="https://www.dropbox.com/s/vgwik76slnv4cso/DomoArduVb.rar?dl=0">https://www.dropbox.com/s/vgwik76slnv4cso/DomoArdu...</a></p><p>The code in the arduino is the same.</p><p>When you open the form in visual basic, select the numbert of the serial port where the arduino is connected.</p><p>I didn't test this visual basic code, so, if there is any bug please let me know it.</p>
I got an error trying to obtain codes:<br><br>Xxxxxxx.ino: In function 'void dump (decode_results*)':<br>Xxxxxxx.ino:39:23:error: 'class decode_results' has no member named 'panasonicAddress'<br><br>Pls help, I am new to this<br>Thanks in advances
<p>Hi sistemasymicros. Thank you for your amazing project. It works for me! But i have a questions. Why when I transmit the same code from my irreceive, i need to repeat 2-6 times to get the same code from my receiver?</p>
<p>Hi, it happened the same to me when i pressed the buttons of my stereo audio system. But i took the first code it received. It worked. I really don't know the true reason. Thanks.</p>
<p>And do you have any solution?</p>
<p>Could this be a wifi project?</p>
<p>Yes, it could be, instead of using the bluettoth module we can use a wifi shield for arduino.</p>
I can't run the codes while compiling it shows bugs. Can you pls guide me
<p>Pls show me the errors.</p>
<p>Congratulations on this wonderful project but ...</p><p>You can put app for Inventory 2 format to be able to do graphics as they wish? That format file to my e-mail or live here? e-mail publicitate77@gmail.com</p>
Really awesome way of controlling devices! <br>Did you have any trouble setting up the arduino in range of all the infrared sensors?
you make it so easy... <br>thank you
Thanks you for your comment.
<p>Such a great idea! And thank you for your hard work translating to English. I know that it's not an easy task. Keep up the great work! </p>

About This Instructable

31,198views

564favorites

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 One Number puzzle with Arduino Speed Math Game with Arduino 
Add instructable to: