Let's Make Robots!

Make your own IR obstacle detection sensor

Detects objects at close range. Can be used for object tracking.
MPSA13.pdf154.35 KB
MPSA14.pdf43.7 KB

Now with video of the sensor being used as a Mintvelt inspired object tracker! This sensor is a short range obstacle detector with no dead zone. It has a reasonably narrow detection area which can be increased using the dual version. Range can also be increased by increasing the power to the IR LEDs or adding more IR LEDs

The photo below shows my test setup with some IR LED's (dark blue) as a light source and two phototransistors in parallel for the reciever. You could use one of each but I wanted to spread them out to cover a wider area. This setup works like a FritsLDR but with IR. It has a range of about 10-15cm (4-6 inches) with my hand as the object being detected.

I'm only running my LEDs about 20mA. My LEDs are capable of 50mA continuous and some LEDs are capable of 100mA (see "Getting the most from a LED").

I'm using this setup on Junior as a general purpose object advoidance sensor to prevent him backing into anything. I'm getting a good response with less than a volt when my hand is up close and reflecting the IR and over 4.5V with no IR.


To get this to work well with an A/D input it needs to have a much lower impedance (needs to let more current through). You can do this with an op-amp but most op-amps like more than 5V and are usually more expensive than my one transistor and three resistors. This is a simple one transistor amplifier that gives my ADC good resolution. Click on the schematic for a larger picture.


Starting from the left you can see my two IR LEDs with a resistor and transistor in series. The transistor allows the processor to turn the LEDs on or off. This is necessary to tell the difference between the ambiant IR from daylight and indor lighting and the reflected light from the LEDs that indicates the presence of an object.

Next are my two phototransistors in parallel with a 1M resistor in series. You could use only one but I wanted to cover a wider area so my transistors will point in slightly different directions. If either one detects IR it will allow more current to flow. Since volts=current x resistance, even a small increase in current will create a reasonable increase in voltage across the 1M resistor. Unfortunately the low input impedance of many AD converters will act like a small resistor in parallel with the 1M resistor and dramatically reduce the output to the processor. This is where our BC549 transistor comes in to save the day. In conjunction with the 1K and 10K resistors it amplifies the signal so that the analog input on your processor gets a nice strong signal.  The BC549 is not too critical, just about any general purpose signal transistor should do. My transistor had a hfe of 490 when measured with a multimeter. You should probably have a hfe of at least 200-300.


As you can see my sensor is made from liberal amounts of hotglue. Click image for a bigger picture. This has the advantage that you can flex the leds and transistors outward to cover a larger area. This is Juniors reversing sensor to prevent him reversing into anything and as such will cover a wide area. I will make single Led/Phototransistor sensors for front left and front right. This will allow him to avoid crashing into obstacles when his rangefinder/object tracker is looking elsewhere.

Note that the phototransistors are slightly forward of the blue LEDs. This helps stop stray light from the LEDs being detected.







Below is the sensor hooked up to Juniors mainboard which has three of my amplifiers built in.


 Using a simple test program that turns on the IR LEDs, stores the value of the ADC, turns off the LEDs, reads the ADC again and then subtracts the stored value from the recent value I was getting readings from 6 to 940. This was with the curtains closed and the lights off. When the reading was 6, my hand was about 300mm (1ft) away. With the lights on the values ranged from about 60 to 940 with a value of 60 being with my hand only about 150mm (6inches) away. Considering the max possible resolution with a 10bit ADC is 0 to 1023, I thought 60-960 with the lights on was a very good result.

After a comment about using sleeves I repeated these test with heatshrink sleeves on the LEDs and phototransistors. The sleeves actually had a negative effect and reduced the range. After I removed the sleeves I did not get the same reduction in range with the lights on. I don't know if it is because during the first test it was daylight outside and the curtains didn't block it all or if it was the way I held the sensor but the second set of test gave an almost identical range of approximately 300mm (12 inches) reguardless of the lights being on or off. I'll have to try again tomorrow when it is daylight again. It seems my initial test was at fault, maybe the way I held the sensor?

IR_Sensor_Single__small_.jpgThis is the single version of the sensor and will cost about half. In the photo you can see the current limiting resistor for the LED. Ignore the value as I had different requirements for Junior. Use the values shown in the schematic.

I've joined the positives together so there is only three wires going back to the mainboard.

Note that the phototransistor is slightly in front of the LED to prevent stray light from the LED being detected.


IR_Sensor_Single_2__small_.jpgOnce again I've used hotglue and heatshrink to make it solid and well insulated.












This is the schematic for the single version. Click on it and the photos for larger images.


Because this sensor only has a single phototransistor it isn't quite as sensitive. To compensate I've increased the current to the LED to almost 50mA which is the maximum continuous current allowed. Because the LED is pulsed on and off this is quite safe and could have been increased to 100mA. The problem with pushing a LED to its limits when controlled by a proccesor is that if a fault occurs in the software then the LED could be destroyed.

When tested, The readings from the ADC of the picaxe ranged from about 100 - 910 reguardless of background lighting. Despite the slightly reduced resolution due to a single phototransistor the range was about 400mm (16inches). This increased range was due to the increased power to the LED.

Make certain your LED and phototransister are parallel to each other for good range.

It was asked how wide is the detection area. Using my hand as the object at a distance of aproximately 300mm (12 inches) from the single sensor the detection area was about 150mm (6 inches) wide. The double sensor can detect a wider area if the phototransistors are spread out at different angles.

Using my hand sideon to the single sensor the detection area was only about 60-70mm (2-3 inches). This is reasonably narrow due to the lenses in the LEDs and the phototransistors.

It should be noted that this is not a linear sensor because the intensity of light from the LEDs is 1 divided by distance squared. In other words, when the object is twice the distance away, the IR from the LEDs is 1/4. As a result, the closer the object, the better the resolution.

This would be a useful sensor to fill in for the dead zone of other IR sensors such as the SHARP GP2D12. To prevent interferance, one should be disabled when using the other.



As mentioned at the start, I've also experimented with using two of these sensors for a simple object tracker inspired by Mintvelt's "four eyes". This version can't tell the size or distance of an object but can track an object well enough for a robot to recognise a moving object and give chase. Wish I still had a cat, imagine a robot with a waterpistol chasing a cat around the house :

I've attached the code used in the video as well as an improved version (V1.7) that eliminated the servo jitter.



 Good luck and enjoy :)


Sunday 4-1-2009


This is the latest version of my object tracker as used in SplatBot. I've used 20 IR leds to increase the range. They are limited to 50mA at the moment so that they can't be damaged by faulty code. If I was to push them to their limit then the range could be increased further but they could then be damaged by something like an interupt routine occuring when the LEDs are on.


This is the schematic.


Click on it for a larger picture. I found with all The LEDs on that the sensors were swamped by reflected IR from my hand even at a distance of about 400mm. The circuit works fine and I definitely get a lot more range but I'm going to have to remove the sensors from the board and mount them seperately so that I can adjust their distance relative to each other to optimise tracking and so I can better shield them from ambiant IR.

This is a work in progress.


Updated: 19-1-2009

I've experimented with improving and simplifying the detection circuit. This will give you better range.


The MPSA13 is a high gain darlington transistor with a hfe of over 5000. If you get the MPSA14 it has about twice the gain. By adjusting the 500 ohm trimpot you should get much better range than the old circuit.




Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

The way your going you shoulb be able to get at least 2-3 meters. If you can find an old remote control, get the LED out of it, should handle at least 250mA pulsed. If you reduce the dutycycle to about 10% you should be able to get 500mA plus but without a data sheet I can't make promises.

Careful not to overheat the LED while desoldering!

Use two or more LEDs to increase the range.

Not to  mention smoothing and bulk capacitors with that much current! Expect a lot of spikes on the power supply if you don't have  enough caps.

I was wondering about that. I've seen you use two leds in series, but wont that reduce the brightness of each LED? Also; the second led get a lower voltage because of the voltage drop from the first led.

What I'm really asking here is this: Are ther any Ohms-Law pitfalls if I use two LEDS in series, or do I just calculate the resistor i need by asuming the LEDs have no resistance?

The formula is easy: (Vsupply-Vleds) / Ileds = R

this can be adjusted for multiple LEDs.

LED_current_Schematic.jpgAll LEDs have a set voltage drop across them under normal operation conditions. In the data sheet it will be called "forward voltage" or VF. This can vary slightly and a typical value and current are usually specified.

In my schematic on the right, the supply is 5V and using the specs from my IR LEDs, the forward voltage drop across each LED is 1.2V. This means that the voltage across the resistor is

5V - 1.2V - 1.2V = 2.6V

If we want for example to have 50mA flowing through the LEDs then 50mA must flow through the resistor because they are all in series.

Ohms law is V=IR therefore  2.6V across the resistor divided by 0.05A of current means we will have 52ohms of resistance. I would probably round up to 56ohms.

In some cases you may need to work out power for the resistor as well. In this case Watts = Vr x Ir = 2.6 x 0.05 =  0.13W so a standard 1/4watt resistor will be fine.

these IR sensors are no good for linear range measurements as they output binary signal (logical 1s and 0s), rather than analog, continuously voltages.
I'm not trying to get a range measurement from the sensor. I'm trying to get it to pick up a signal reflecting of an object in front of it. Like when you aim your remote control at the ground; the IR signal is reflected on the floor and still picked up by the TV. If you can get the same sensitivity but with focussed IR beam and sensor you could make a nice obstacle detector or even a range finder like the laser rangefinder from Oddbot.

Picaxe LED 020I was looking at the specs of the picaxe IR sensor. The one that is used to receive remote control signals. This device has a build in amplifier, bandpass and modulator and is very sensitive.

I built a test setup on a breadboard and measured the output voltage of the signal pin with a multimeter when I press a button on my (sony) remote control unit. It drops from 5 to 2.5V and I asume that it's rapidly switching high and low from the signal. 

In the testsetup an IR-LED was sending a couple of bytes using the picaxe irout command. The same picaxe 08M had its input pin (3) connected to the output pin of the ir sensor. Because the picaxe cannot receive and send at the same time, an interrupt was set on pin3 to go off when pin3 was low. To signal that the interrupt had been triggered an red LED flashed.

I had to put the IR-LED allmost against the sensor to make it trigger the interrupt. But when I used a remote control unit, no matter where I pointed it, it triggered the interrupt as soon as I pressed a button. 

test setupWhen I compared the IR-LED of the remote control to the IR-LED hooked up to the picaxe by looking at them with a video camera, the difference in brightness was huge! I mean really huge. The LED in the remote control shines brightly and is clearly visible, the one on the breadboard appears to be off unles you point the camera right at it. Then you see a very dim spot of light.

  • Surely it must be possible to get an IR LED connected to the picaxe to shine just as bright?
  • Surely it must be possible to shield part of the IR-sensor to obtain a narrower detecion beam?
  • Surely it must be possible to get those two set-up to build an IR object detector with a range of at least 1 or 2 meters?

Especially when you look at the detectionrange of the IR-sensor when using a regular remote control.



In your schematic you are limiting the current to the IR LED to 13 mA (4.3 v / 330 ohm) from the PIC pin, which is only capable of 25 mA anyway. Oddbot has the PIC pin switching a transistor, which allows the paired IR LEDs getting around 24 mA (ignoring the transistor loss), driving them a bit harder. If you look up the datasheet for the IR LED being used, you should be able to calculate how hard you can drive them. That remote could be putting a few 100 mA across the LEDs it uses, though only briefly. Check this group of messages. At the same time, I think Oddbot said that the LED current must be tuned to best functionality, as in highest LED current may not always be best.

I guess I'll have to start tweaking until I get the LED brighter. I was hoping I could buy a 'special ultrabright, built for remotes'-LED somewhere. Still.. The difference between the remote and the breadboard LEDS is enormous. I can't imagine trippling the current can make that much of a difference.