Introduction: IR Radar System

Picture of IR Radar System

Recently I've worked on a IR radar system by utilizing the sharp GP2D12 sensor. The sensor generates a voltage proportional to the distance to the measured object. I've used a PIC 18F458 microcontroller to measure that voltage and draw a radar screen on the 128x64 graphical LCD display.

The microcontroller also generates the pwm signals for driving the RC servo motor. The servo motor turns the IR sensor for scanning the environment.

Step 1: Videoclip

Picture of Videoclip

here is a videoclip of the system while working.

Step 2: Circuit Schematic

Picture of Circuit Schematic

here is the circuit schematic and the proteus simulation file

a more detailed version of the circuit schematic is in the zip file.

the DSN file is also full detail. it also simulates the circuit, all you need to do is to download the proteus demo version from

Step 3: Source Code

#include <18F458.h>
#device ADC=8
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#define GLCD_WIDTH 128

#define GLCD_E PIN_E0 // Enable
#define GLCD_DI PIN_B5

#define GLCD_CS1 PIN_A1 // Chip Selection 1
#define GLCD_CS2 PIN_B0

#define SERVO PIN_A3

#include <HDM64GS12.c>
#include <graphics.c>
#include <math.h>

char message[] = "EndtaS RaDaR";
float theta = 0, ytheta;

void main() {

int1 enbas;
int mesafe;
int car1, sayac, a;
int16 servopos;



glcd_text57(30, 0, message, 1, 1);

glcd_circle(29, 37, 26, 0, 1) ;
glcd_pixel( 29 , 37 , ON);
theta = 7.85;
servopos = 550;

mesafe = read_adc();
//printf("th: %f -> %u \r\n\n",theta, mesafe);

ytheta = theta;
sayac = 1;
if ( enbas == TRUE ){
sayac = 50;
for ( a=0 ; a<sayac ; a++){
delay_us( 20000 - servopos );
if ( enbas == TRUE ) {
glcd_circle(29, 37, 25, 1, 0);
glcd_pixel( 29 , 37 , ON);

if (ytheta >= 4.51 ) {
ytheta -=.02;
servopos += 12;
enbas = FALSE;
else {
//glcd_circle(29, 37, 25, 1, 0) ;
ytheta = 7.85;
servopos = 550;
//glcd_pixel( 29 , 37 , ON);
enbas = TRUE;

//glcd_pixel( 28+(int)(car1*sin(-theta)+.5), 38-(int)(car1*cos(theta)+.5), OFF);

//glcd_pixel( 28+(int)(car1*sin(-theta-1)+.5), 38-(int)(car1*cos(theta-1)+.5), OFF);

theta = ytheta;

car1 = mesafe / 8;
glcd_pixel( 28+(int)(car1*sin(-theta)+.5), 38-(int)(car1*cos(theta)+.5), ON);


Reivach777 (author)2013-05-21

Hello, friend. Thanks for sharing your work. But, I try to compile, and got some errors.

I'll apreciate it, if you could help me.

Clean: Deleting intermediary and output files.
Clean: Deleted file "Radar.ESYM".
Clean Warning: File "C:\Microcontroller software\PICC\Devices\Radar.o" doesn't exist.
Clean: Deleted file "Radar.ERR".
Clean: Done.
Executing: "C:\Microcontroller software\PICC\Ccsc.exe" +FH "Radar.c" I+="C:\Microcontroller software\PICC\Devices" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 18 "Radar.c" Line 17(10,23): File can not be opened
Not in "C:\Microcontroller software\PICC\Devices\HDM64GS12.c"
Not in local "C:\Trabajos Micro2\HDM64GS12.c"
*** Error 18 "Radar.c" Line 18(10,22): File can not be opened
Not in "C:\Microcontroller software\PICC\Devices\graphics.c"
Not in local "C:\Trabajos Micro2\graphics.c"
*** Error 18 "Radar.c" Line 19(10,18): File can not be opened
Not in "C:\Microcontroller software\PICC\Devices\math.h"
Not in local "C:\Trabajos Micro2\math.h"
*** Error 12 "Radar.c" Line 35(10,11): Undefined identifier -- glcd_init
*** Error 12 "Radar.c" Line 37(16,17): Undefined identifier -- glcd_fillScreen
*** Error 12 "Radar.c" Line 39(12,13): Undefined identifier -- glcd_text57
*** Error 12 "Radar.c" Line 41(12,13): Undefined identifier -- glcd_circle
*** Error 12 "Radar.c" Line 42(13,14): Undefined identifier -- glcd_pixel
*** Error 12 "Radar.c" Line 63(12,13): Undefined identifier -- glcd_circle
*** Error 12 "Radar.c" Line 64(13,14): Undefined identifier -- glcd_pixel
*** Error 12 "Radar.c" Line 90(13,14): Undefined identifier -- glcd_pixel
11 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Wed May 22 02:15:15 2013

Tobor 2.0 (author)2012-08-12

why dosent the video play when i click play? is there even a video, plz post it to youtube and add a link in the reply

yaly (author)2012-01-25

good project but can i make it with pic 16f877a and Nokia 3310 GLCD?

aefields (author)2011-11-08

Infrared is LiDAR, not RADAR. Please use proper terminology so that when people search for projects they can find what they want.

tzq33tdq (author)aefields2012-01-09

it just the same. i dont think it needs the right terminology.

RoxEroX (author)aefields2011-11-20

a little edgy of a comment. but i am sure you addressed your concern with Sharp directly.
you must have gotten a ticket lately.

tzq33tdq (author)2011-04-04

can it sense more than one object in line?

Berkin (author)2009-01-09

This needs a video... SOOOOO BADDDDDDDDD

hobbyman (author)Berkin2009-01-09

it has a video already. :)

tzq33tdq (author)hobbyman2011-04-02

the video won't work for me but this is awesome!!! i'm hopefully going to make me one!!!

tzq33tdq (author)tzq33tdq2011-04-02

please tell me the link

sahl199 (author)2011-03-13

hiii.. I want that circuit diagram and part list toooo...
hope can sent at my email:


xink25 (author)2011-01-05

i need proteus simulation of infrared beam detector circuit,
that when receiver is not receiving it should enable relay and turn on LED.
a similar circuit is given URL :



palabuto (author)2010-07-27

awesome project man.Can you send me all the component used on this project more detailed and also with the circuit.thanks for sharing this project.This is my emel address

Vapolord (author)2010-07-02

can u also sent me the circuit? thanks

ahem (author)2010-02-04

Can you please mail me the circuit diagram. The proteus file is hard to understand for me. Please! 
My email id is! 

alikhan007 (author)2010-02-02

 WoAAh .... What a project...... 
 can u tell each and every thing which is used in this project..... under a heading of "PARTS LISTs USED"
THAnks ...

ahem (author)2010-01-25

 Oks! But where is the sensor GP2D12 connected? 
I don't see it anywhere in the schematic diagram! 

hobbyman (author)ahem2010-01-25

its connected to the Pin_A0 

ahem (author)2010-01-16

Nice work! 
but I dont understand where have you kept the Gp2D12 sensor from your circuit diagram! 
And pls can you tell me how have you simulated the sensor with Proteus and how can I input the position of any obstacle to it! 
Thanks in advance! 

hobbyman (author)ahem2010-01-16

RV1, the trimmer resistor at the right side of the LCD  simulates the output voltage of the sensor. There is no direct sensor simulation in my proteus file. 

deepanshu203 (author)2010-01-11

 Thanks for the help! 
Now I can work upon the code to understand it and make one for the AT89C51 I intend to use in this project :)

deepanshu203 (author)2010-01-09

Great project! 
But I have just one doubt! 
Is the coding given complete?
Because when i tried to compile it using Mplab it gave an error! And I feel that there are some functions being called in it which do not have any definations given! 
Do i require to be a Pro member to get the full coding? Or am I doing something wrong?
Pls reply, caus I really wanna make it! 

hobbyman (author)deepanshu2032010-01-09


the code is complete but it is for CCS C compiler.

You would need to make some porting to compile and run it in microchip c or any other c compiler. 

FallenSub (author)2009-07-03

Soo... The only thing it does is makes you know when something is in front of the sensor? If i were you, i would add some kind of a progress bar as the sensor scans one wave, and when something is detected, mark the place under the bar, or light a LED or something. If i only knew how.. Great job though!

hobbyman (author)FallenSub2009-07-06

thanks. the progress of the scan is shown on the graphics LCD. detection mark etc. are cosmetic modifications to the code, the code as well as the circuit schematic is included in the article. Any modification can be made by anyone who is interested. I also would love to see my project to be modified and improved. ;)

hg341 (author)2008-09-13

omg!!!you have way to much free time(how old are you?you dont have to tell me)

hobbyman (author)hg3412008-09-14

I'm 38 and not working for a company currently. I'm working on my own, trying to improve my latest works, solar lighting products, planning to sell them and form my own company.

cimulation (author)2009-02-09

Great app there. Can you give me a little more info about the PWM generated for the Servo. I am trying to get the servo rotation between 1ms and 2ms pulse and I get a 90 degree rotation. Your video shows 190degree rotation.

Cryo (author)2008-12-19

Great project... The servo wich you used is modified? The hs55 have a range 0-90°...

hobbyman (author)Cryo2008-12-20

The servo is an unmodified HS55 and it runs like in the videoclip with a nearly 190° range.

jamwaffles (author)2008-12-13

is your souce in hi tech C or CCS? and if not what is it in? thanks for the great inspiration

hobbyman (author)jamwaffles2008-12-14

it is written in CCS C. thanks for your comment.

DavidRobertson (author)2008-08-13

technically its LIDAR not RADAR

rcamp004 (author)DavidRobertson2008-09-14

I thought the L in Lidar stood for laser.

hobbyman (author)rcamp0042008-09-14

LIght Detection And Ranging maybe :)

rcamp004 (author)hobbyman2008-09-14

That's it! That makes more sense. Thanks :)

V-Man737 (author)2008-08-10

THIS IS A MAN'S WORLD!! dun-dun da dunnn! *rocks out*

PKM (author)2008-08-10

This is an interesting project, which makes it a shame the Instructable is so thin. I'm sure if I had all the materials this would provide enough information for me to be able to build my own, but you could have put in a lot more about the context. How does the IR sensor work? What inspired the project? Are you planning to use it in something bigger? Could you replace the IR sensor with an ultrasound one?

hobbyman (author)PKM2008-08-10

thanks friend. Well the instructable is focused only on building the circuit and the source code. Yes the materials are enough to build and run the project. The sensor is a very well designed and produced one and it has got some 20 pages of datasheet. Honestly it can be quite difficult for me to explain how it works. its explained long and well in the datasheet, which is downloadable in the sharp's website. I have tried to build my own IR distance sensor for some time and obtained some good results. Although not as good as this sensor, mine also worked fine and I've used in several robotic projects with success. But due to some tolerances in the components or any other reason, my sensor wasn't an all-times runner. When i build 5 circuits, at most 2 or 3 worked fine. I didn't know why. I've also worked on building an ultrasonic sensor. IT also works fine. Yes the IR sensor can be replaced with an ultrasonic one. The code would need to be modified for sure. The radar circuit is a testbench for the sharp sensors which I'm planning to use in my later robotics projects.

inventorjack (author)2008-08-10

Pretty cool stuff. What sort of azimuth resolution are you getting with this particular sensor? I notice the servo's a bit jerky right as it begins its turn. Any ideas what's causing that? Can you post a larger copy of the schematics? It's difficult to read the pins. Thanks for sharing this project.

hobbyman (author)inventorjack2008-08-10

well i honestly don't know what azimuth resolution is but the details of the sensor can be found in its datasheets. All I know is it works fine within 3-50cms and it is quite adequate for a robotic radar. the servo control pwm signal which is generated by the microcontroller by software is not so well calculated. that may be causing some variations in the beginning and and in the end of the full swing. By improving that part of the software it can be resolved. I've posted a better gif version of the schematics. Its been a pleasure to share. ;) visit my website, there are over a hundred projects to see.

About This Instructable




More by hobbyman:Multi-Mode Table Clock With Graphics LCD ScreenSteampunk Solar Powered Air Conditioner and Identity Card Holder Ghost Busters PKE Meter
Add instructable to: