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++){
        buttonState[i]=true;
        lastButtonState[i]=true;
        int physicalPin=i + firstKey;
        pinMode(physicalPin, INPUT);
        digitalWrite(physicalPin, HIGH); // turn on pull-ups
    }
    Serial.begin(9600);
}
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);
                Serial.println("Sending");
            }
            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);
    irrecv.enableIRIn();
}
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();
        irrecv.resume();
        // 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.

References:

http://www.arcfn.com/2009_08_01_archive.html

http://arduino.cc/playground/

http://www.datasheetcatalog.org/datasheets/2300/301522_DS.pdf

Views: 49922

Tags: arduino, infrared, ir

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...

 

Thanks!

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 

http://www.npeducations.com/2011/01/design-of-ir-transmitter-and-re...

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

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

Join GarageLab (arduino, electronics, robotics, hacking)

Latest Activity

Paul Denton updated their profile
Friday
GarageLab posted a blog post
Friday
Profile IconRichard Coplan and Juan V. Sanchez-Andres joined GarageLab (arduino, electronics, robotics, hacking)
Friday
Kshitij Dadhekar commented on GarageLab's blog post Tutorial: How to use the Cellular Shield (SM5100B) with Arduino
"Hello,       Can you tell me what is the resistance of the speaker to be…"
Wednesday
GarageLab posted a blog post
Wednesday
Profile IconKshitij Dadhekar, Marvellous Mark and Enrico M. joined GarageLab (arduino, electronics, robotics, hacking)
Wednesday
david chan commented on GarageLab's blog post Tutorial: Humidity and Temperature Sensor with Arduino
"How do you see the output "
Wednesday
Enrico M. posted a discussion

Power supply circuit

Hi guys,I'm building some sort of wood case to arduino mega with LCD, keypad, LED's ...I also want…See More
Tuesday
GarageLab posted blog posts
Tuesday
Profile Icondavid chan, uday harihar, CVassiliou and 4 more joined GarageLab (arduino, electronics, robotics, hacking)
Tuesday
Jeff Bowen updated their profile
Nov 17
Michael Shaw replied to Jean-Guillaume LALANNE's discussion Smallest Arduino with BLE stack and push button integrated
"Check out Tiny circuits for open source: https://tiny-circuits.com/"
Nov 16
rozzers commented on rozzers's video
Nov 14
rozzers commented on rozzers's video
Thumbnail

20141108 150539

"this is a really simple instructable courtesy of NXTprograms. Build and programming instructions at…"
Nov 14
rozzers posted videos
Nov 14
Profile IconJEAN FRANCOIS ROY, Paul Turner, Jadson Santos Silva and 2 more joined GarageLab (arduino, electronics, robotics, hacking)
Nov 14
GarageLab posted a blog post
Nov 14
GarageLab posted blog posts
Nov 13
Profile IconHareRam Yadav and Ankan Biswas joined GarageLab (arduino, electronics, robotics, hacking)
Nov 12
GarageLab posted a blog post
Nov 11

© 2014   Created by Marcelo Rodrigues.

Badges  |  Report an Issue  |  Terms of Service