IR-RemoteControl
Infrared (IR) Remote
Here's the pinout for almost every 3-pin IR Receiver: And also a diagram of connecting the receiver to an Arduino. You can get IR receivers HERE.
(Here) is a link to a typical IR Receiver Spec Sheet: Media:IR-Receiver-AX-1838HS.pdf
And here's another, said to be more sensitive: Media:IR-tsop48.pdf
There are many different manufacturers of IR Receivers and some have different pinouts:
There is also an easy-to-connect IR Receiver Electronic Brick like this (above).
It can be plugged into a Sensor Shield or YourDuinoRobo1 with a 3-pin cable.
CONNECTION NOTE: The IR Remote Receiver Electronic Brick has 3 pins. From left to right they are: (G) Ground, (V) Voltage, (S) Signal. BUT the marking sometimes vary on the little circuit board. In this photo they are marked G-R-Y. The 3-pin cable in the photo has the typical color code: (G) Ground = Black, (V) Voltage = Red, (S) Signal = White.
This brick also comes with the IR Infrared Robot Remote Control Kit which has a remote with arrow buttons for direction etc. (Scroll down for example).
IR-REMOTE LIBRARY:
Note: The following library must be installed in your Arduino installation for this to work!
CLICK HERE - IR REMOTE CONTROL: ARDUINO LIBRARY
NOTE!! If you have a late version of Arduino with a library IRRobotRemote, it may conflict and you may have to remove that library.
Make sure to delete Arduino_Root/libraries/RobotIRremote. Where Arduino_Root refers to the install directory of Arduino. The library RobotIRremote has similar definitions to IRremote and causes errors.
NOTE: For Info on easier Library Installs, SEE THIS:
More IR examples and projects on the IRemote wiki HERE:
TYPES OF IR REMOTE CONTROLS
NOTE!! Most handheld remotes are shipped with a small clear plastic piece in the battery compartment that must be removed to activate it. You can usually just pull it out.
There are many different IR remote controls. Some from YourDuino.com are the low-cost IR Infrared Remote Control Kit 2 and also the THIS IR Remote (above) which has directional buttons that would be good for controlling a vehicle etc. Then, there are the typical TV and Stereo Remotes. All of these may have different encoding methods and number of physical buttons, and different codes received when a button is pressed. Below we will give example Software Sketches for a few common IR Remotes.
IRrecvDemo SKETCH:Read codes from almost any IR Remote
If you need to discover the codes received from an unknown IR Remote type, use this Sketch from the IR Remote Control Library Examples first. (You must first install that library - the link is above).
(Copy and paste into a blank Arduino IDE Window), Upload to your Arduino and start the Serial Monitor window:
/* * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * http://arcfn.com */ #include <IRremote.h> int RECV_PIN = 11; 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 } delay(100); }
EXAMPLE: The YourDuino.com IR Infrared Remote Control Kit 2
Below is the IR Remote Control Kit connected to a YourDuinoRobo1 with a 3-pin cable. On the right is the detail of the way the IR Receiver is carefully plugged into Gnd and Vcc on the cable, and the Out pin is insulated with a piece stripped from another wire, the pins are cut off evenly, and Out is routed into the Signal (White) pin of the cable. The software below displays the button that was pressed.
Test Arduino Software Sketch for IR Infrared Remote Control Kit 2 (TESTED!!) [Other Versions below]
/* YourDuino.com Example Software Sketch IR Remote Kit Test Uses YourDuino.com IR Infrared Remote Control Kit 2 http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153 based on code by Ken Shirriff - http://arcfn.com Get Library at: https://github.com/shirriff/Arduino-IRremote Unzip folder into Libraries. RENAME folder IRremote terry@yourduino.com */ /*-----( Import needed libraries )-----*/ #include "IRremote.h" /*-----( Declare Constants )-----*/ int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 /*-----( Declare objects )-----*/ IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' /*-----( Declare Variables )-----*/ void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); // Start the receiver }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)) // have we received an IR signal? { // Serial.println(results.value, HEX); UN Comment to see raw values translateIR(); irrecv.resume(); // receive the next value } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ void translateIR() // takes action based on IR code received // describing Car MP3 IR codes { switch(results.value) { case 0xFFA25D: Serial.println(" CH- "); break; case 0xFF629D: Serial.println(" CH "); break; case 0xFFE21D: Serial.println(" CH+ "); break; case 0xFF22DD: Serial.println(" PREV "); break; case 0xFF02FD: Serial.println(" NEXT "); break; case 0xFFC23D: Serial.println(" PLAY/PAUSE "); break; case 0xFFE01F: Serial.println(" VOL- "); break; case 0xFFA857: Serial.println(" VOL+ "); break; case 0xFF906F: Serial.println(" EQ "); break; case 0xFF6897: Serial.println(" 0 "); break; case 0xFF9867: Serial.println(" 100+ "); break; case 0xFFB04F: Serial.println(" 200+ "); break; case 0xFF30CF: Serial.println(" 1 "); break; case 0xFF18E7: Serial.println(" 2 "); break; case 0xFF7A85: Serial.println(" 3 "); break; case 0xFF10EF: Serial.println(" 4 "); break; case 0xFF38C7: Serial.println(" 5 "); break; case 0xFF5AA5: Serial.println(" 6 "); break; case 0xFF42BD: Serial.println(" 7 "); break; case 0xFF4AB5: Serial.println(" 8 "); break; case 0xFF52AD: Serial.println(" 9 "); break; default: Serial.println(" other button "); } delay(500); } //END translateIR /* ( THE END ) */
OTHER IR Remote Kit Test Sketches (IR_Remote_Kit_Numeric):
/* YourDuino.com Example Software Sketch IR Remote Kit Test: Returns numeric value for button pressed Uses YourDuino.com IR Infrared Remote Control Kit V2 http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153 based on code by Ken Shirriff - http://arcfn.com terry@yourduino.com */ /*-----( Import needed libraries )-----*/ #include "IRremote.h" #include "IRremoteInt.h" /*-----( Declare Constants )-----*/ #define REPEAT_DELAY 500 // Delay before checking for another button / repeat int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 // NOTE: Other pins can be used, except pin 3 and 13 /*-----( Declare objects )-----*/ IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' /*-----( Declare Variables )-----*/ int ButtonValue; // 0..9,100,200, top 9 buttons encoded 10..18, -1 Bad Code void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("YourDuino.com IR Infrared Remote Control Kit V2"); Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); // Start the receiver }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)) // have we received an IR signal? { // Serial.println(results.value, HEX); // UN Comment to see raw values ButtonValue = translateIR(); Serial.println(ButtonValue, DEC); delay(REPEAT_DELAY); // Adjust for repeat / lockout time irrecv.resume(); // receive the next value } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ int translateIR() // returns value of "Car MP3 remote IR code received { switch(results.value) { case 0xFFA25D: return 10; // CH- break; case 0xFF629D: return 11; // CH break; case 0xFFE21D: return 12; // CH+ break; case 0xFF22DD: return 13; // PREV break; case 0xFF02FD: return 14; // NEXT break; case 0xFFC23D: return 15; // PLAY/PAUSE break; case 0xFFE01F: return 16; // VOL- break; case 0xFFA857: return 17; // VOL+ break; case 0xFF906F: return 18; // EQ break; case 0xFF6897: return 0; // ZERO break; case 0xFF9867: return 100; // 100+ break; case 0xFFB04F: return 200; // 200+ break; case 0xFF30CF: return 1; // 1 etc.. to 9 break; case 0xFF18E7: return 2; break; case 0xFF7A85: return 3; break; case 0xFF10EF: return 4; break; case 0xFF38C7: return 5; break; case 0xFF5AA5: return 6; break; case 0xFF42BD: return 7; break; case 0xFF4AB5: return 8; break; case 0xFF52AD: return 9; // 9 break; case 0xFFFFFFFF: return -2; // REPEAT: Button Held down longer than break; default: return -1; // Other Button / Bad Code } //END case } //END translateIR /* ( THE END ) */
Blinks Pin 13 number of times according to button number
This may be a place to start when writing your own code to take actions depending on the button.
/* YourDuino.com Example Software Sketch IR Remote Kit Test: Blinks Pin 13 when numeric buttons pressed Uses YourDuino.com IR Infrared Remote Control Kit V2 http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153 based on code by Ken Shirriff - http://arcfn.com terry@yourduino.com */ /*-----( Import needed libraries )-----*/ #include "IRremote.h" #include "IRremoteInt.h" /*-----( Declare Constants )-----*/ #define REPEAT_DELAY 500 // Delay before checking for another button / repeat int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 // NOTE: Other pins can be used, except pin 3 and 13 /*-----( Declare objects )-----*/ IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' /*-----( Declare Variables )-----*/ int ButtonValue; // 0..9,100,200, top 9 buttons encoded 10..18, -1 Bad Code void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("YourDuino.com IR Infrared Remote Control Kit V2"); Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); // Start the receiver }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)) // have we received an IR signal? { // Serial.println(results.value, HEX); // UN Comment to see raw values ButtonValue = translateIR(); Serial.println(ButtonValue, DEC); BlinkNum(ButtonValue); // Blink Pin 13 LED delay(REPEAT_DELAY); // Adjust for repeat / lockout time irrecv.resume(); // receive the next value } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ int translateIR() // returns value of "Car MP3 remote IR code received { switch(results.value) { case 0xFFA25D: return 10; // CH- break; case 0xFF629D: return 11; // CH break; case 0xFFE21D: return 12; // CH+ break; case 0xFF22DD: return 13; // PREV break; case 0xFF02FD: return 14; // NEXT break; case 0xFFC23D: return 15; // PLAY/PAUSE break; case 0xFFE01F: return 16; // VOL- break; case 0xFFA857: return 17; // VOL+ break; case 0xFF906F: return 18; // EQ break; case 0xFF6897: return 0; // ZERO break; case 0xFF9867: return 100; // 100+ break; case 0xFFB04F: return 200; // 200+ break; case 0xFF30CF: return 1; // 1 etc.. to 9 break; case 0xFF18E7: return 2; break; case 0xFF7A85: return 3; break; case 0xFF10EF: return 4; break; case 0xFF38C7: return 5; break; case 0xFF5AA5: return 6; break; case 0xFF42BD: return 7; break; case 0xFF4AB5: return 8; break; case 0xFF52AD: return 9; // 9 break; case 0xFFFFFFFF: return -2; // REPEAT: Button Held down longer than break; default: return -1; // Other Button / Bad Code } //END case } //END translateIR void BlinkNum(int NumBlinks) { int n; for (n = 0; n < NumBlinks; n++) { digitalWrite(13, HIGH); delay(50); digitalWrite(13,LOW); delay(250); } } // END BlinkNum /* ( THE END ) */
If you use the IRrecvDemo Sketch (above) and count the 21 buttons from left to right and top to bottom, the codes received are these: (NOTE: Receiving "FFFFFFFF" means "repeat" if you hold the button down.)
1 |
FFA25D |
2 |
FF629D |
3 |
FFE21D |
4 |
FF22DD |
5 |
FF02FD |
6 |
FFC23D |
7 |
FFE01F |
8 |
FFA857 |
9 |
FF906F |
10 |
FF6897 |
11 |
FF9867 |
12 |
FFB04F |
13 |
FF30CF |
14 |
FF18E7 |
15 |
FF7A85 |
16 |
FF10EF |
17 |
FF38C7 |
18 |
FF5AA5 |
19 |
FF42BD |
20 |
FF4AB5 |
21 |
FF52AD |
Example: MAKER Version Electronic Brick Set IR Remote
The IR Remote supplied with this Set looks like this (Others may also be supplied):
- Based on NEC protocol; Built-in 1 x AG10 battery;
- Remote control range: above 8m;
- Wavelength: 940Nm;
- Frequency: crystal oscillator: 455KHz; IR carrier frequency: 38KHz
This is especially good for remote control of a small robot, using the arrow buttons. Below is an example Software Sketch for this remote. The reported buttons will be Forward, Left, Right, Reverse (for the 4 blue button), OK for the red 'OK' button, 1 to 0 for the white number buttons, and '*' and '#' for the bottom red buttons.
(Copy and paste the Sketch below into a blank Arduino IDE Window), Upload to your Arduino and start the Serial Monitor window. Connect the IR receiver to +5V, Ground and the signal to pin 11. If you have the MAKER Version Electronic Brick Starter Set you can just plug in the supplied IR Receiver Brick with one of the 3-pin cables.
/* YourDuino.com Example Software Sketch Brick Starter Set IR Remote Kit Test http://yourduino.com/sunshop2/index.php?l=product_detail&p=364 based on code by Ken Shirriff - http://arcfn.com Get Library at: https://github.com/shirriff/Arduino-IRremote Unzip folder into Libraries. RENAME folder IRremote terry@yourduino.com */ /*-----( Import needed libraries )-----*/ #include "IRremote.h" /*-----( Declare Constants )-----*/ int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 /*-----( Declare objects )-----*/ IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' /*-----( Declare Variables )-----*/ void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("YourDuino IR Receiver Button Decode Test"); Serial.println("Questions: terry@yourduino.com"); irrecv.enableIRIn(); // Start the receiver }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)) // have we received an IR signal? { // Serial.println(results.value, HEX); UN Comment to see raw values translateIR(); irrecv.resume(); // receive the next value } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ void translateIR() // takes action based on IR code received // describing KEYES Remote IR codes { switch(results.value) { case 0xFF629D: Serial.println(" FORWARD"); break; case 0xFF22DD: Serial.println(" LEFT"); break; case 0xFF02FD: Serial.println(" -OK-"); break; case 0xFFC23D: Serial.println(" RIGHT"); break; case 0xFFA857: Serial.println(" REVERSE"); break; case 0xFF6897: Serial.println(" 1"); break; case 0xFF9867: Serial.println(" 2"); break; case 0xFFB04F: Serial.println(" 3"); break; case 0xFF30CF: Serial.println(" 4"); break; case 0xFF18E7: Serial.println(" 5"); break; case 0xFF7A85: Serial.println(" 6"); break; case 0xFF10EF: Serial.println(" 7"); break; case 0xFF38C7: Serial.println(" 8"); break; case 0xFF5AA5: Serial.println(" 9"); break; case 0xFF42BD: Serial.println(" *"); break; case 0xFF4AB5: Serial.println(" 0"); break; case 0xFF52AD: Serial.println(" #"); break; case 0xFFFFFFFF: Serial.println(" REPEAT");break; default: Serial.println(" other button "); }// End Case delay(500); // Do not get immediate repeat } //END translateIR /* ( THE END ) */