Instructables

Control your Arduino with a remote

Picture of Control your Arduino with a remote
Wondering about how to control anything in your house with a simple remote control? It's pretty simple and cheap.

 
Remove these adsRemove these ads by Signing Up

Step 2: Assemble the receiver

Plug in the ir receiver to the beradboard and connect it to your Arduino.

Connect the right pin to the 5V of the Arduino, the center pin to GND, and the left pin to digital pin 11.

Step 3: The code

I used the IRremote library for arduino.
You can download it here: IRremote

Close the Arduino IDE and unzip it into the arduino/libraries folder.

Start Arduino IDE and open the IRrecvDemo example sketch. Rewrite "HEX" to "DEC" as the image shows.
Upload the sketch to your board.

Step 4: Identify remote buttons

After uploading the program open the serial monitor and start pushing the buttons on your remote. If you have done everything well, you have to see the codes appearing.

Remember which button was pressed and take notes of the codes appearing.
For example:
Code 50088119 appeared and you pressed the On/Off button.
Code 50073839, Open/Close button etc...

Step 5: Control stuff

Now you know which code the buttons give. To control something you have to write them into the program.

Here is the code you have to use. It's not the best solution I think but it's simple.

switch(results.value){
    case 50088119:
    // do something
    break;
    case 50073839:
    // do something else...
    break;
  }


Have fun ;)
bayarfaj20044 months ago

hi, thanks for you work

i switch, when i press 0 for example

switch(results.value){

case 16738455:

Serial.println(0);

irrecv.resume();

break;

i want it to print 0, but it loops forever, can you help me?

Kamokaki6 months ago

hi im trying to controll my arduino to move a servo.

Could you help me put in the code?

The controll gives off the infrared as i press left: FF22DD and right FFC23D. Please help me figure this out.

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

unsigned long Value1 = 0xFF22DD; // where XXXXXXXX is on our your remote's values
unsigned long Value2 = 0xFFC23D; // 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(160);
}
else if (results.value == Value2){
servo1.write(75);
}
}

tashvin7 months ago
hi please help me i already had all the codes for the IR
what if i want to light 2 leds with the IR? which connections should i make? am new please hlep :(
vek111 year ago
Hello,
Whenever I plug my Arduino(with the IR receiver), it always turns off as soon as I plug it into the computer. Any advice?
(btw, my arduino works fine with anything else plugged into it.)
hello I get this ' IRrevc' does not name a type
jukees1 year ago
lidl remote FTW :D
I hade a small white IR receiver with only 2 leads. Would this work?
dmiller371 year ago
Excellent tutorial, very helpful. I have a quick question, what is the best way to deal with on/off of the same button. Since each button has two keys, i thought I could use them to turn on and off. it works, but the timing is an issue since the other key comes quickly after the first. What is the best way to deal with it?

I tried: (but the button pressing has to be timed perfectly)
case key1:
digitalWrite(LED, HIGH);
delay(150);
break;

case key2:
digitalWrite(LED, LOW);
delay(150);
break;

Thanks!
I have done this before, but I did it with pins so I could check the current state of the pin and then decide whether or not to make it on or off. The way I did this in an Instructable of mine was

switch (results.value)
case (blahblah)
{
if (digitalRead(pin) == LOW)
{
digitalWrite(pin, HIGH);
}
else
{
digitalWrite(pin, LOW);
}
}
}

If you have multiple pins to check, just make it a function, call it for each case and pass in the pin number. Hope this helped.
lawand41 year ago
help when i upload it marks that IRrecv irrecv(RECV_PIN); and says does not name the type
LexanPanda2 years ago
Which IR receiver did you use?
phorvath92 (author)  LexanPanda2 years ago
I don't know the type because I soldered it out maybe from an old dvd player but I'm not sure. I think it works on 38kHz.
Sparkfun has a great one for $1.95
the seaker2 years ago
Okay so i have a problem. I have already been able to get the ir codes from the remote that i wish to us but it will send something like this:
4035
4035
4035
4035
4035
2553
2553
2553
so the code is actually being send 5 times then another 3 are the end code. but sometimes if i press the button again the first number will either send 4 or 6 times. im not sure how to filter out the codes because if i just look for say 4035 it will repeat 4 to 6 times... um please if any one has an idea please help
Try an unsigned long so that in your program it looks like

#include

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

void loop(){

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
}

}
make a method that catches the first time that you receive the signal. then tell it to ignore the rest until you recieve the 2553 signal... something like this:

boolean ignore=false;

void setup(){
...
}

void loop(){
int sig= ;
//set your input here, sending your input to the to sig.
if (!ignore&&sig==4035)doSomething();
else ignore==true;
}

}
go4th5571 year ago
Mine shows zeroes no matter what button I push on any remote.
roachburn2 years ago
How would i use the case function to turn on an led. What I want to do is have the led turn High as long as I hold the button and go low when I release. The problem though is that there are 2 codes for every button on my remote. I press it once and it gives 458. then if I press it again it gives 10458. If I hold the button down It spams the one code and If i release then hold it down again it spams the other code.
thanks
pikmin2052 years ago
I've been receiving error codes saying "error: 'EE008FC9' was not declared in this scope", how do i fix this? (BTW, EE008FC9 is a remote key code)
phorvath92 (author)  pikmin2052 years ago
put it in decimal :)
new error: `.' cannot appear in a constant-expression
nvm fixed that now its expected ';' before break
Bot13982 years ago
Is that the original arduino UNO
phorvath92 (author)  Bot13982 years ago
No, probably it is not. But it is fully functional as well as the original.
I thought of it cause the power light in the original UNO is green and not blue
roachburn2 years ago
How come i get two different codes for each button. For example I press 1 on the remote I get 1025 then if i press it again i get 66561. If i hold it down it just repeats the same number. Every button does this.
i am having problems with the IRremote everytime i goto compile it i get errors lots of em
phorvath92 (author)  oldsmarracin2 years ago
What errors does it write?
nevermind i fixed it
i had to add #include IRremoteint.h
and change the #include WProgram.h inside the IRremoteint.h to #include Arduino.h
IDE 1.0? :-)
O.o?
hi im sorry to bother you again but i was wondering if it is possible to block a certain value from being wrote to the serial

F7708F
F7708F
FFFFFFFF
FFFFFFFF
F7708F
F7708F
F7708F
F7708F
F7708F
FFFFFFFF
F748B7
FFFFFFFF
F748B7
F748B7
FFFFFFFF
FFFFFFFF
i want to block the F's
phorvath92 (author)  oldsmarracin2 years ago
It is not neccessary but if it disturbs you simply write an if statement to filter the F-s.
i am a little new to arduino and i was using this with winlirc and the config was picking up the F's
phorvath92 (author)  oldsmarracin2 years ago
I really don't know winlirc so sorry i don't have an idea :S
its good i just need to block the FFFFFFFF string cause its picking it up as a remote code causing false readings. could you help with that part cause i have tried and failed
phorvath92 (author)  oldsmarracin2 years ago
Insert this:

if(results.value != 4294967295){
Serial.println(results.value, DEC);
}


4294967295 is the decimal value for FFFFFFFF

The F-s won't be shown ;) enjoy

Patrik
Awesome now to figure the rest on my own lol
i didnt think bout inverting the line
Cool.