loading

How to Use IR Remotes with Arduino (Current and Updated)

Picture of How to Use IR Remotes with Arduino (Current and Updated)

I'm tired of these complicated tutorials on how to use certain things. I like simple, easy to understand, step by step instructions. My biggest problem was with IR and POV*. I've finally mastered how to control my project with any TV remote in a few minutes. In this i'ble I'm going to show you simple, step by step instructions on how to control just about anything with your IR remote.

By the way this tutorial is new and updated and works! Last update [ 03/31/2015 ]

Now I've never tested this process on a windows but I know
that it works on a mac. It should be the same for windows, just delete any mac content in the zip.

IMPORTANT NOTICE:

With the latest release of the Arduino IDE there is a conflicting library that renders this tutorial void. If you'd still like to use this tutorial delete the file called "RobotIRemote". This file will be in the Arduino program.

This library is for a specific robot shield that Arduino/venders sell. Unless you intend on buying that shield you can delete that folder and continue with this set of instructions. You can always download it again later!

 
Remove these adsRemove these ads by Signing Up

Step 1: Ingredients:

Electronics:

  • Arduino
  • Any IR remote
  • IR receiver
  • Breadboard
  • Jumper Cables
  • LED


And here is the Make-To-Learn contest questions! - don't forget to vote!

What did you make?
Well I didn't make anything specific in this instructable but it is more of a guide to how to make your other projects 'wireless'.
My projects works by taking TV remotes and other remotes, converting their signals to numbers, and using them.
How did you make it?
I've been working on trying to use IR remotes. All the tutorials I found didn't really put the all the bits and pieces together for me. My main goal was to make an easy tutorial for others to follow.
Where did you make it?
At my computer. I am now able to control my robots and other stuff, like lights and lighting. For instance, I could make it so that whenever I hit the play button on my DVD player remote, the lights in the room dim, or go out.
What did you learn?
My biggest challenge was finding a IR decoder that worked, and then finding installing the proper library.

Step 2: Downloads

Here is the link to all the downloads in this instructable.
(Sorry for some odd reason the link won't work so just copy and paste it in your browser)

http://www.mediafire.com/download/cv0r5191fvtq0y2/IR_I'ble_Package.zip

Step 3: All Those Remotes!

Picture of All Those Remotes!

TV Remotes, CD player remotes, heater remotes, DVD player remotes, all those remotes! Many people just have old remotes laying around because they item that the went to broke. I have collected quite a few remotes over the past week. I just asked all my friends if they had any old remotes laying around and sure enough I collected about 7 of them. So finding a remote isn't very hard. I good option if you want a professional looking one is to buy the specialty MP3 player remote. I have one because it came with my Arduino kit.

Here are a few good cheap remotes that you can get.

Step 4: Installing the IR Library

The very first thing that we need to do associating with Arduino is to download the IR library. Now just about every tutorial directed you to Github, but it took me forever to find out how to even download it. Then even after is was downloaded, it wasn't named properly. So, to make things simpler, I have included a .zip of the IR library. Download it to your computer, unzip it, then place it in your Arduino libraries folder. Don't know where it is?

Open up the Arduino IDE and on the menu select Sketch>Import Library>Add Library and select the 'IRremote' folder. If you are on a PC you need to delete the mac content within the IRremote folder.

For resources here is the Github
https://github.com/shirriff/Arduino-IRremote

Here is the IR remote folder

http://www.mediafire.com/download/jd5j7911amju36g/IRremote.zip



Step 5: Recognizing IR Signals

Picture of Recognizing IR Signals

You now need to download the IR decoder sketch.
http://www.mediafire.com/view/6qnsndqp9a838xe/Decode_IR.ino


I totally re-edited the github sketch to make it work. I put all the credits in the sketch. The sketch is attached to this step or you can get if from step 2. Upload this sketch to your Arduino. Now hook up the IR sensor.

The IR sensor's pins are attached to Arduino as so: (from left to right with the sensor's head facing you)


(Vout) Pin 1 to pin 11(Arduino)
(GND) Pin 2 to GND(Arduino)
(Vcc) Pin 3 to 5v(Arduino)


Now open up granola cereal, wait no, I meant serial monitor. Aim your remote at the sensor and press the POWER button. You should see a list of numbers show. Now you can see we got the numbers:

16753245
4294967295
4294967295
4294967295

Notice you if hold down whatever button you were pressing that the second number just repeats itself.

16753245
4294967295
4294967295
4294967295
4294967295
4294967295
4294967295
4294967295

Note what happens if you press another button

16736925
4294967295
4294967295
4294967295
4294967295

You get a different first number, and the same second number!
Obviously, we just need to use the first number. Try hitting different buttons on the remote. You will notice that each different button has a different first number.

So what you need to do is to open up serial monitor press each button, carefully recording the first number. For example: I press the power button and the mode button, so in my text editor program, I'll type,

Power button = 16753245
Mode button = 16736925

And you do this for every button you need!
With this knowledge we can construct some code!

Step 6: Arduino Test Code

Upload this sketch to your Arduino.
http://www.mediafire.com/view/hmv13ynbihed0eg/Test_LED.ino
/*
 Some Sample code of how to use your IR remote
 
 * Lets get started:
 
 The IR sensor's pins are attached to Arduino as so:
 Pin 1 to Vout (pin 11 on Arduino)
 Pin 2 to GND
 Pin 3 to Vcc (+5v from Arduino)

*/

#include <IRremote.h>

int IRpin = 11;  // pin for the IR sensor
int LED = 13;    // LED pin  
IRrecv irrecv(IRpin);
decode_results results;

boolean LEDon = true; // initializing LEDon as true

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(LED, OUTPUT);
}

void loop() 
{
   
  if (irrecv.decode(&results)) 
    {
      
      irrecv.resume();   // Receive the next value
    }
  
   if (results.value == 0)  // change zero to your IR remote button number
     {
       if (LEDon == true)   // is LEDon equal to true? 
         {
           LEDon = false;   
           digitalWrite(LED, HIGH);
           delay(100);      // keeps the transistion smooth
            
         }
         
        else
          {
            LEDon = true;
            digitalWrite(LED, LOW);
            delay(100);
            
          }
          
     }

}


This code is to turn an LED on and off with the same button. Notice this line in the code.

if (results.value == 0)  // change zero to your IR remote button number

You will change 0 to whatever number your IR remote button makes. For instance, my power button's number is 16753245, so I will change the code to this:

if (results.value == 16753245)

results.value is just what you see in the serial monitor. So if I say, if results.value is equal to 16753245, then do such and such. Make sense?! So the rest of the code if for making the same button turn an LED on and off. When the LED if off and you hit the button it turns on and if the LED is on and if you hit the same button again it turns off.

Step 7: More Code!

So what if we want each button on the remote to do a different function? Making a lot of 'if' statements would be way too much typing! So lets simplify this with a switch/case statement.

switch(results.value)

We are going to put this after the void loop and after the first if statement. Here's the whole thing-

void loop() 
   
  if (irrecv.decode(&results)) 
    {
      irrecv.resume();   // Receive the next value
    }
  
  switch(results.value)
   {

So now we need finish the code. If you don't know what the switch/case are see http://arduino.cc/en/Reference/SwitchCase
Here is the final code. You can keep on adding cases. Now where it says 'case 03' you change the '03' to whatever button number you wish. For instance, the first case could say:

case 16753245: 
// do this
break;
And we just keep on adding different button numbers for to do different things.

Here is the link to the code below.
/*
 Some Sample code of how to use your IR remote
 
 * Lets get started:
 
 The IR sensor's pins are attached to Arduino as so:
 Pin 1 to Vout (pin 11 on Arduino)
 Pin 2 to GND
 Pin 3 to Vcc (+5v from Arduino)

*/

#include <IRremote.h>

int IRpin = 11;  // pin for the IR sensor
int LED = 13;    // LED pin  
IRrecv irrecv(IRpin);
decode_results results;

boolean LEDon = true; // initializing LEDon as true

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(LED, OUTPUT);
}

void loop() 
{
   
  if (irrecv.decode(&results)) 
    {
      
      irrecv.resume();   // Receive the next value
    }
  
  switch(results.value)
 {

  case 01:
  // do this
  break;
  
  case 02:
  // do another thing
  break;
  
  case 03:
  // feed my dog for me
  break;
  
  default:
  digitalWrite(LED, HIGH);
  
  }
  
}

Step 8: Conclusion:

I tried to simplify this as much as I can so that you can be controlling your projects with your TV remotes tomorrow evening.
If you don't understand anything please ask me!

Don't forget to give me a vote!

Step 9: Troubleshooting

Sometimes things don't go as planned so I've added a this step to help those that can't get their project to work. I want all reader to be able to experience the awesomeness of this!!! :D

"My project isn't working!"

  1. READ THE IMPORTANT NOTICE IN FIRST STEP OF THIS I'BLE
  2. Rewire the sensor. Make sure it is wired properly. You may need to look online for your sensor correct pinout. Every sensor will not be the same as mine. Google the datasheet for your specific sensor.
  3. Make sure your remote is working properly. You can test this by pointing the remote at a camera and you should be able to see a dim blue/purple light flashing. Also try a second remote.
  4. Make sure the code works is the way I uploaded it. If you changed it you may not have the correct code.
  5. Retest all connections.

Well I hope these steps help if you still have problems after going through this list PM me or comment.

1-40 of 209Next »
tnowroz2 months ago

Really Good Tutorial here bro. Finally made the IR sensor work! :D

But for some reasons, many of the links are not working properly. If would be awesome if you could fix those.

Anyway, Thanks for this! Really appreciate it as a beginner with Arduino! :)

FoamboardRC (author)  tnowroz2 months ago
Thanks! I'm not sure what you are talking about the links though. I just went through and checked all of them and they are all working. Maybe you might just have to copy the address and paste it in your browser's address bar.
UrbanErosion made it!5 months ago

Thanks for the Instructable! I want to turn my amp on and off when my Arduino senses signal from my Sonos. Needed the codes from my remote as I couldn't find them elsewhere.

IMG_20150224_102731.jpg
FoamboardRC (author)  UrbanErosion3 months ago
NP awesome! Good luck with the project!
SteveR47 months ago

This was SOO much better than Adafruits tutorial that has massive arrays you have to capture and then use for each button. Normally they have the BEST stuff for easy understanding. HOWEVER this was by FAR the easiest for my remotes!! The library is about twice the size of the ada one BUT this is so much better I will take the loss on Flash for this ease!! :)
I only have one small glitch and it may just have to do with the remote I'm using BUT, if you click the remote too fast the read code loops forever. So the led just flashes all on it's own, until you do a long press on the remote. Again not sure if this is all remotes or just the one I chose. But I plan on adding this to my daughters Tiara project seen below. I want to cram a small tiny remote into a cheap wand, so the wand will control the Crown / Tiara.. Thanks AGAIN!! ~Steve~

FoamboardRC (author)  SteveR47 months ago
Hey thanks so much! I'm really glad that I was able to help you out!

Yeah actually it does the same thing for everyone. That was the main complaint I got because of the looping- it's not my library!

The fix is really simple, after the if statement {
if (results.value == X) }
add a small delay, like { delay(25); }.

This worked for me to keep it out of the loop, but don't put the delay too high. I forgot the actual milliseconds I used to fix it. If you go too high then sometimes when you press the button at the same time the arduino is frozen because of the delay. If you go too low then it doesn't fix the loop problem. Experiment, you'll get it.

And very nice project BTW!

Instead of cramming a remote into a wand you should just send a signal using an ATtiny85/45/44/24/ and the send feature of IR library.

I'm still here if you need any help with the IR part. . . :D

After beating my head against the wall for 20 mins trying to solve the flashing with the delay (Which I could not get to work) I found the PERFECT solution that works 100% everytime Change this line to:

if (results.value == 16236607) {results.value = 0; //Do something here}
By resetting the "results" back to 0 it cures the looping, because it can't "see" the correct value again until it gets the real code again from the sensor.
Thanks again you may want to update the code you shared with this correction and the problem is gone for good :)

FoamboardRC (author)  SteveR47 months ago

Duuude of course! I can't believe I didn't think of that! I never actually used the code (like in a project) other than testing it briefly for the i'ble. I'll go back and change it. Thanks! You could get really fancy and go with an ATtiny13-20SU. I just got a shipment of 20 in the mail! :D

Awesome thanks for the hints!!
Yeah no clue why I didn't think of just using the ATTiny!?!?!?! Perfect Idea!!!

nreahal made it!1 year ago

Sir,

I am very thankful for your help by these tutorials. I have just received my Arduino NANO in the afternoon and at 9 i have completed my very first Arduino project "led control using ir remote", thanks to your amazing tutorial. In the following images i have been trying to show that when i press volume up it will switch ' on ' the right LED and when i press the volume down button it will switch ' off ' the LED and same has been done to the right one using program up and down of the ir remote.
Thank you once again,
regards

Nishant(INDIA)

:)

20140524_213404.jpg20140524_213431.jpg20140524_213441.jpg20140524_213913.jpg20140524_213922.jpg
FoamboardRC (author)  nreahal10 months ago

Sweet man! Good job! Keep up the good work!

I have made my mom's room room automated. Now its time for the other room you are awesome ;) :) :). Blessings from my mom too. you are awesome :)

FoamboardRC (author)  nreahal10 months ago

Wow thanks! That is soo cool! I keep on telling myself that I should hook up my light and my fan and outlets to IR, but I'm too lazy to get around to it! Good luck!

skumar2317 days ago

hi frnds i made this but..i have a question that if i connect a five volt dc motor directly to the arduino pins so what happen...is arduino damageg

SeoT116 days ago
Gibz7317 days ago

Hi there, thank you for this, but I have one question. How would I have a task loop until a different button is pushed on remote? Im using switchState and have 3 different tasks. I want each task to loop until a different button is pressed. My code so far;

#include <IRremote.h>

int IRpin = 11; // pin for the IR sensor
int ledPins[] = {3, 4, 5, 7, 6, 8, 9, 12, 10, 13 }; // an array of pin numbers to which LEDs are attached
int pinCount = 10; // the number of pins (i.e. the length of the array)
int brightness = 0; //How bright the LED is
int fadeAmount = 5; //How many points to fade LED by
int timer = 60; // The higher the number, the slower the timing.

IRrecv irrecv(IRpin);
decode_results results;

boolean LEDon = true; // initializing LEDon as true

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
}
}

void loop()
{

if (irrecv.decode(&results))
{

irrecv.resume(); // Receive the next value
}

switch(results.value)
{

case 29876577:

// do this
for(int i=0; i<10; i++)
analogWrite(ledPins[i], brightness); //Set brightness of RedLED1
brightness = brightness + fadeAmount; //Change brightness for nex time through loop

if (brightness == 0 || brightness == 255){ // reverse the direction of the fading at the ends of the fade:

fadeAmount = -fadeAmount;
}
delay(100);

break;

case 1632469053:
// do another thing
for (int thisPin = 0; thisPin < pinCount; thisPin++) { // loop from the lowest pin to the highest:
digitalWrite(ledPins[thisPin], HIGH); // turn the pin on:
delay(timer);
digitalWrite(ledPins[thisPin], LOW); // turn the pin off:
}

for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // loop from the highest pin to the lowest:
digitalWrite(ledPins[thisPin], HIGH); // turn the pin on:
delay(timer);
digitalWrite(ledPins[thisPin], LOW); // turn the pin off:
}
break;

case 482085517:
// feed my dog for me
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[4], HIGH);
digitalWrite(ledPins[6], HIGH);
digitalWrite(ledPins[8], HIGH);
delay(100);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[4], LOW);
digitalWrite(ledPins[6], LOW);
digitalWrite(ledPins[8], LOW);
digitalWrite(ledPins[1], HIGH);
digitalWrite(ledPins[3], HIGH);
digitalWrite(ledPins[5], HIGH);
digitalWrite(ledPins[7], HIGH);
digitalWrite(ledPins[9], HIGH);
delay(100);
digitalWrite(ledPins[1], LOW);
digitalWrite(ledPins[3], LOW);
digitalWrite(ledPins[5], LOW);
digitalWrite(ledPins[7], LOW);
digitalWrite(ledPins[9], LOW);
break;

default:
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], LOW);
}
}
}

Sadly, when i press button on remote it only does the case 1 time, any ideas please?

FoamboardRC (author)  Gibz7317 days ago

Try getting rid of the break; at the end of the statements.

ghall121 days ago

Hey there! I was wondering if there is a way to get the raw data that the IR sensor receives? convert your number codes into Hex codes?

I want to record the codes with an arduino and use my smartphone to transmit them so i can control my Air conditioning.

If you can help at all it would be greatly appreciated.

FoamboardRC (author)  ghall121 days ago

Chat it up on the forums, I can't help :D

http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

Maybe it's because I am using Arduino IDE 1.6.4 but when I move on to Step 6: Arduino Test Code and change the zero in the line of code: if (results.value == 0) to FF30CF I get an error - 'FF30CF' was not declared in this scope . Which is probably an easy issue to resolve but I am still an Arduino coding newbie. So time to do my homework. But thank you for a great Instructable.

Basic Setup.JPG

Maybe it because I'm using Arduino IDE 1.6.4 but in the sketch in Step 6: Arduino Test Code - when I change the zero to FF30CF I get the error - 'FF30CF' was not declared in this scope. Probably a simple to fix issue? I'm still fairly new to coding in Arduino so I'll do my homework but wanted to point it out. Thank you for a very good Instructable.

DIshendra2 months ago

Hi Friend! I am in a small trouble. I had tried many ways to decode the signals (from adafruit's tutorial to your tutorial and irRemote also) but every time i press a key the decoded data is different.

Capture.JPG

Use the first number you get.

If it does not work use all numbers with an or operator in the if statement.

I hope it works.

FoamboardRC (author)  DIshendra2 months ago
It has to be your remote then. Pick up a different remote from the dollar store and try it out!
Thanks friend for quick reply. But i had tried sony, voltas, hathway, samsung remotes but every time generating a different output.
FoamboardRC (author)  DIshendra2 months ago

Chat it up on the forums.

yorams661 month ago
kjn46851 month ago
I really appreciate when somebody takes the time to share their knowledge. Thank you formboradrc
FoamboardRC (author)  kjn46851 month ago
No problem! I'm glad I can help!
WilliamM202 months ago

Great tutorial,

only problem is that the arduino does not register the IR while battery powered, only while it's connected to the pc. Any tips?

FoamboardRC (author)  WilliamM202 months ago
uh what kind of battery are you using?

I'm using a 6V battery pack, I read that the ideal input voltage is 9-12V but will it effect the arduino so much?

FoamboardRC (author)  WilliamM202 months ago

No it shouldn't. I'm not sure. What do you mean by it's not registering IR

Since I can't use the serial monitor while battery powered I do not know if it is registering the IR signals or not. But if it would it should work fine

FoamboardRC (author)  WilliamM202 months ago

One more thing you can try. Take out the servo. Sometimes they can draw too much power and cause the system to keep restarting. So try the code with the servo totally unplugged. Let me know how that goes

Sadly taking out the servo didn't help

FoamboardRC (author)  WilliamM202 months ago

Low voltage isn't a problem because a USB port is only 5 volts whereas you said you were giving it 6. I'd just completely start over with your project. Maybe your Arduino is broken. Sorry I can't help anymore!

I started over and now it works :)

Thanks, I will try to fix it :)

Maybe the low input voltage is my only problem

1-40 of 209Next »