Control Anything Remotely With Infrared Signals.

39,418

183

31

About: From solder to zip ties, lead acid batteries and LEDs, and especially Legos, putting things together has always fascinated me. The more challenging the better, because whats the fun of putting something toge...

Intro: Control Anything Remotely With Infrared Signals.

Who would have thought that just about every Arduino attachment can be controlled in some way with a TV remote? Now its time to find out how.

Step 1: Setup and Materials

The setup for this is quite basic. The real challenge is finding neat products for this and writing the code.

Materials.
1x Arduino
1x Servo available @ Hobbyking Sparkfun etc.
Jumper wires
1x Infrared receiver diode available @ Sparkfun Allelectronics Radioshack etc.
4x AA Battery and holder Ebay is the cheapest for the holder
1x TV remote

Anything that you want to control

See the attached sketchup for the setup. If you do not have sketchup you can download it here.
http://sketchup.google.com/intl/en/download/

Step 2: Values

The first thing to do is load the below code on to the arduino and open the serial monitor.
Next press a button on the remote aimed at the receiver to see the value printed. Ignore the first value that you see as it may by off.

#include <IRremote.h>

int RECV_PIN = A0; // Analog Pin 0
IRrecv irrecv(RECV_PIN);
decode_results results;

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

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

Step 3: Code

Now that you have the values for each button on your remote you can control the servo. Below is also code that you can do without a servo and instead just control the LED on digital pin 13.

You will need to download the infrared library from http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html if you do not have it already.

You may recognize some of this code, and that is to keep everything simple. I am using code widely available on the internet largely from arduino.cc and http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html so that if anyone has questions they can look it up for more reference.

LED code



#include <IRremote.h>

unsigned long someValue = 0xXXXXXXXX; // where XXXXXXXX is on our your remote's values.

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int led = 13;

// the setup routine runs once when you press reset:
void setup() {               

Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver

  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);   
}

// the loop routine runs over and over again forever:
void loop() {

if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }

if(results.value == someValue) {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}


}





Servo code



#include <Servo.h>
#include <IRremote.h>

unsigned long Value2 = 0xXXXXXXXX; // where XXXXXXXX is on our your remote's values. We will call this Value 1
unsigned long Value1 = 0xXXXXXXXX; // where XXXXXXXX is another button on your remote

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
Servo servo1;

// the setup routine runs once when you press reset:
void setup() {              

Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver

  // initialize the digital pin as an output.

servo1.attach(10); // attack servo to digital pin 10
}
}
// the loop routine runs over and over again forever:
void loop() {

if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }

if(results.value == Value1) {
servo1.write(179);
}

if(results.value == Value1) {
servo1.write(1);
}

}

Step 4: Remotely Control Your Life

Everything should be working now. Load the servo code and watch it twist and turn to the values you loaded on the arduino. At this point you could control an entire robot with a TV remote or control appliances. The world is open to being controlled entirely by you with infrared signals.

Please let me know if you have any more ideas or what you have done with infrared signals. Enjoy!

Share

    Recommendations

    • Furniture Contest 2018

      Furniture Contest 2018
    • Audio Contest 2018

      Audio Contest 2018
    • Tiny Home Contest

      Tiny Home Contest

    31 Discussions

    0
    None
    AberieG

    2 years ago

    My CODE wont work, can somebody help... It says

    Arduino: 1.6.4 (Windows 8.1), Board: "Arduino Uno"

    sketch_nov11a:5: error: 'IRrecv' does not name a type
    sketch_nov11a:6: error: 'decode_results' does not name a type
    sketch_nov11a.ino: In function 'void setup()':
    sketch_nov11a:8: error: redefinition of 'void setup()'
    sketch_nov11a:1: error: 'void setup()' previously defined here
    sketch_nov11a:11: error: 'irrecv' was not declared in this scope
    sketch_nov11a.ino: In function 'void loop()':
    sketch_nov11a:15: error: 'irrecv' was not declared in this scope
    sketch_nov11a:15: error: 'results' was not declared in this scope
    sketch_nov11a.ino: In function 'void loop()':
    sketch_nov11a:21: error: redefinition of 'void loop()'
    sketch_nov11a:14: error: 'void loop()' previously defined here
    'IRrecv' does not name a type

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.

    please somebody

    0
    None
    HishoW

    2 years ago on Step 3

    but haded a lot of problems with the variable and hexadecimal values

    0
    None
    tnowroz

    3 years ago on Introduction

    Good Tutorial Man! (Y)

    I made something alike using an old TV remote to control several LED lights completely. Playing with Remotes and Signals is really AWESOME! \\m//

    HELP I UPLOAD THE SKETCH TO GET SERIAL VALUES AND I OPEN SERIAL MONITOR AND PRESS BUTTONS BUT IT DONT WORK!!!!

    0
    None
    Daviswatts1234

    3 years ago on Step 4

    Hello!

    I have a great idea to use this for a school project

    For the project we have to make a small wooden truck

    i am making a rocket transporter

    I had the idea of making the rocket move upand down at an angle

    Ill try and add images when im done

    Thanks for the guide though!!!

    0
    None
    claw5

    4 years ago

    I am trying to control a owi robotic arm via a IR remote. I have got the arm to move but as soon as my remote starts sending the FFFFFFFF repeat signal my sketch doesn't recognise it and the motor stops. What is the best way to interpret this signal into my sketch?

    0
    None
    harshjk

    5 years ago on Introduction

    hey, thanks for your tutorial .
    But i m facing one major problem i.e.
    when i fetch the IR code with help of SM0038 in fluorescent lamp light it fetch wrong code. without light it works correctly .
    Please help me .......

    0
    None
    go4th557

    6 years ago on Step 2

    I finally figured it out but it is only picking up zeroes no matter what button I push on a multitude of remotes.

    2 replies
    0
    None
    Hammock Boygo4th557

    Reply 6 years ago on Step 2

    It sounds like you are using it as a button. What pin do you have it attached to? Perhaps try of the PWM pins such as 10 or 11. When you downloaded the library and dropped it into the Arduino folder on your computer there should be a file inside called IRremoteInt.h Inside of that is where you change Wprogram.h to Arduino.h

    Can you send me a screen shot of your program with any of the error messages? Sorry this is causing you so much trouble.

    0
    None
    shail363Hammock Boy

    Reply 5 years ago on Introduction

    Dear Hammock
    I have small issue with controlling servo with remote and will really appreaciate for your help.
    I have implemented IRremote to control hobby king Digital Servo motor.Problem I am facing is that there is lot of Servo jittering. It makes sufficient noise.Did you face this problem? I am trying to maintain position of servo to 90 degree in the loop.(Without Iremote is works fine) Can you please let me know whether do you have any solution to elimiate Servo motor jittering?

    Thank you in advance.

    I downloaded the library and put it into the Arduino library folder. I copied your code into a sketch and when i tried to upload it i get a < 'IRrecv' does not name a type > error when compiling. I'm not sure what this means ( still pretty new to the Arduino / C++ platform.

    7 replies

    I had this exact same problem and spent way to much time trying to fix it. Fortunately there is any easy fix. Open up the Infrared library and change

    #include
    to
    #include
    in IRRemoteInt.h.

    Please let me know if that doesn't work.

    0
    None

    For some reason not all of the text posted. The attached photo shows what you need to change in the Infrared library.

    Picture 2.png
    0
    None
    go4th557Hammock Boy

    Reply 6 years ago on Introduction

    I did this but when i try to save it, I am given a message that says access denied. I am the Admin of my computer so I have no idea why.

    I had this exact same problem and spent way to much time trying to fix it. Fortunately there is any easy fix. Open up the Infrared library and change (see picture).

    Please let me know if that doesn't work.

    Picture 2.png

    opened the IRremoteInt.h in text edit and changed the code but i am still receiving the same error message when compiling. any other thoughts?

    i deleted the library and re-downloaded it and then change the code again and now it seems to be working fine. thanks. this is going to be the main controls on all my robots for a while.

    0
    None
    go4th557

    6 years ago on Step 2

    I can not get this program to work no matter how hard i try. I've downloaded the library and no matter what I do, it gives me multiple errors.