Tutorial: Arduino IR sender and receiver

On this tutorial, we will show how to implement an IR sender and receiver with Arduino. To do this, you will need 2x Arduinos, 1x IR emitter, 1x IR receiver, 1x 200 ohm resistor, 1x push button, and 1x LED. You can use your TV remote as an IR transmitter.

First, you have to check the receiver pinout. Look at the datasheet, you should find something like that:

Connect your transmitter like the following picture:

Then, connect your receiver like that:

Before we get to the programming, download and install the IR library.

The sample program was extracted from the Arduino Cookbook book. Open your Arduino IDE and upload the following code:

irSend sketch
this code needs an IR LED connected to pin 3
and 5 switches connected to pins 4 - 8
#include <IRremote.h>
// IR remote control library
const int numberOfKeys = 1;
const int firstKey = 4;
// the first pin of the 5 sequential pins connected to buttons
boolean buttonState[numberOfKeys];
boolean lastButtonState[numberOfKeys];
long irKeyCodes[numberOfKeys] = {
    0x18E758A7, //0 key

IRsend irsend;
void setup()
    for (int i = 0; i < numberOfKeys; i++){
        int physicalPin=i + firstKey;
        pinMode(physicalPin, INPUT);
        digitalWrite(physicalPin, HIGH); // turn on pull-ups
void loop() {
    for (int keyNumber=0; keyNumber<numberOfKeys; keyNumber++)
        int physicalPinToRead=keyNumber+4;
        buttonState[keyNumber] = digitalRead(physicalPinToRead);
        if (buttonState[keyNumber] != lastButtonState[keyNumber])
            if (buttonState[keyNumber] == LOW)
                irsend.sendSony(irKeyCodes[keyNumber], 32);
            lastButtonState[keyNumber] = buttonState[keyNumber];

Do the same with the receiver code:


IR_remote_detector sketch
An IR remote receiver is connected to pin 2.
The LED on pin 13 toggles each time a button on the remote is pressed.
#include <IRremote.h> //adds the library code to the sketch
const int irReceiverPin = 2; //pin the receiver is connected to
const int ledPin = 13; 
IRrecv irrecv(irReceiverPin); //create an IRrecv object
decode_results decodedSignal; //stores results from IR detector

void setup()
    pinMode(ledPin, OUTPUT);
boolean lightState = false;
unsigned long last = millis();

// Start the receiver object
//keep track of whether the LED is on
//remember when we last received an IR
void loop()
    if (irrecv.decode(&decodedSignal) == true) //this is true if a message has been received
        if (millis() - last > 250) {
            //has it been 1/4 sec since last message
            lightState = !lightState;
            //toggle the LED
            digitalWrite(ledPin, lightState);
        last = millis();
        // watch out for another message

It's time to test! When you press the button, the LED on the other Arduino should switch on. When you press it again, the LED switch off.





Views: 116696

Comment by Mitchell S. Lowther, Jr. on May 6, 2012 at 11:26pm

This is neat. I'm going to do this, but I need to purchase another 'duino first. 

Thanks for posting this!

Optional add-on:  if a speaker was added to the receiving unit as well, then you could have it emit a small tone in addition to lighting up the LED. Then a lower note when shutting off the led.  Just a thought...



Comment by lovakiranvarma on August 3, 2012 at 7:24pm

I think, this circuit range is less to detect the IR signal. To improve the range of the IR circuit, one should generate 38KHz signal as a carrier, I found in 


off course you should need to increase the voltage required to drive the IR circuit

Comment by lunia on March 8, 2013 at 1:24am

hey..how about i just want to transmit data like 123 or abc..and i dont want to use irsend.sendSony because my project do not use remote


Comment by kkukkuk on March 13, 2015 at 9:21am

hi..there are some errors in both irsend and irreceive coding..

ir sender:

sketch_mar14a.ino:17:1: error: 'IRsend' does not name a type
sketch_mar14a.ino: In function 'void loop()':
sketch_mar14a.ino:38:17: error: 'irsend' was not declared in this scope

whereas in ir receiver coding:

'TKD2' was not declared in this scope

int RECV_PIN = TKD2; // the pin the IR receiver is connected to
help me please :)

Comment by AnalysIR on March 13, 2015 at 10:56am


this problem has been discussed receltly on the Arduino forum - why not search there.

You should be able to find the solutiion there.


Visit the AnalysIR Blog


You need to be a member of GarageLab (arduino, electronics, robotics, hacking) to add comments!

Join GarageLab (arduino, electronics, robotics, hacking)

Latest Activity

Profile IconJames Pearce and caca joined GarageLab (arduino, electronics, robotics, hacking)
20 hours ago
Profile IconWilliam Johnson and Todd Enger joined GarageLab (arduino, electronics, robotics, hacking)
Carlos Kwiek posted a blog post


Turning on and off a lamp on the internet and smartphone using ESP8266 with MQTT languageThank you…See More
Avtar Singh is now a member of GarageLab (arduino, electronics, robotics, hacking)
Oct 20
Profile IconPete Z, Anatolio Filho and ashok joined GarageLab (arduino, electronics, robotics, hacking)
Oct 18
Profile IconEmrah Ponjevic and Sergio Salazar joined GarageLab (arduino, electronics, robotics, hacking)
Oct 17
autoelectric is now a member of GarageLab (arduino, electronics, robotics, hacking)
Oct 14
Gary Plaza is now a member of GarageLab (arduino, electronics, robotics, hacking)
Oct 13
James Anderson is now a member of GarageLab (arduino, electronics, robotics, hacking)
Oct 10
Adan Salinas commented on Marcelo Rodrigues's blog post SwagBot
"Great use of technology right there."
Oct 5
Ojasvi Gupta left a comment for Olivy Gis
"Something is fishy here....what do you wish to talk about...if you could be a tad more specific?"
Oct 5
Profile IconDave Petersen, Olivy Gis, gian crespo and 1 more joined GarageLab (arduino, electronics, robotics, hacking)
Oct 5
Olivy Gis updated their profile
Oct 5
Alaa Alrashdan commented on GarageLab's blog post Tutorial: How to use the Monster Moto Shield
"Hi I have a firgelli actuator that i run using arduino+monster moto shield. I can run it with a…"
Oct 4
Richard Reubenstone posted a blog post

Some great maker projects you can join

If you are interested in joining some teams consisting of makers working together from all over the…See More
Oct 4
Dmitry Slepov posted a blog post

Tibbo Project System-based Office Aircon Controller Application

The app allows you to manage traditional air conditioners that are controlled through infrared…See More
Oct 4
Marcelo Rodrigues left a comment for Jose Gustavo Abreu Murta
"Spammer member suspended. Thanks!"
Oct 2
Profile IconCharles Howey, Neil Besner and Jim Ory joined GarageLab (arduino, electronics, robotics, hacking)
Oct 2
Roosevelt Sebial left a comment for Roosevelt Sebial
"I have left a message to your given e-mail address Mr. Frank. Thanks!"
Sep 29
Eric Delgado updated their profile
Sep 29

© 2016   Created by Marcelo Rodrigues.   Powered by

Badges  |  Report an Issue  |  Terms of Service