In this project, I will show you how to make a radar using the Arduino Board and the Processing Development Environment. This project is excellent for showing the distance and angle of any objects within the radar range. For more details, watch the video below or read the written tutorial below.
Components for Arduino Radar Project
Arduino Uno | × 1 | Amazon |
Ultrasonic Sensor HC-SR04 | × 1 | Amazon |
Servo Motor | × 1 | Amazon |
Breadboard | × 1 | Amazon |
Jumper wires kit | × 1 | Amazon |
USB cable type A/B | × 1 | Amazon |
Disclosure: These are affiliate links. As an Amazon Associate, I earn from qualifying purchases.
Software
Ultrasonic Sensor HC-SR04
The HC – SR04 ultrasonic ranging module has a non-contact measurement range of 2cm to 400cm and a ranging precision of 3mm. Ultrasonic transmitters, receivers, and a control circuit are included in the modules. The basic principle:
(1) Using an IO trigger for a high-level signal of at least 10µs,
(2) The Module sends Eight 40 kHz and determines whether a pulse signal is returned.
(3) If the signal is returned at a high frequency, the time of high output IO length is the time between transmitting the ultrasonic and receiving it. Test distance = (high level time×velocity of sound (340M/S) / 2)
Ultrasonic Sensor HC-SR04 Specifications
Working Voltage | 5V DC |
Working Current | 15mA |
Working Frequency | 40Hz |
Max Range | 4m |
Min Range | 2cm |
Measuring Angle | 15 degree |
Trigger Input Signal | 10uS TTL pulse |
Dimension | 45*20*15mm |
Cost | Check price |
The Ultrasonic Sensor HC-SR04 is made by Elecfreaks. For more information, you can check out the datasheet below:
Servo Motor
Lightweight and tiny, high power output. The servo can spin about 180 degrees (90 in any direction) and perform almost as small as the regular types. To monitor these servos, you can use any servo code, hardware, or library. Good for beginners who want to make things run, particularly because it fits small spots, without creating a motor controller with input & gear. It has 3 horns (arms) and hardware.
Servo Motor Specifications
Operating voltage | 4.8 V (~5V) |
Operating speed | 0.1 s/60 degree |
Rotation | 0°-180° |
Temperature range | 0ºC – 55ºC |
Stall torque | 1.8 kgf·cm |
Dimension | 22.2 x 11.8 x 31 mm approx |
Cost | Check price |
The Servo Motor SG90 is made by Tower Pro. For more information, you can check out the datasheet below:
Arduino Radar Project Circuit Schematics


Ultrasonic Sensor HC-SR04 Connections
Ultrasonic Sensor HC-SR04 | Arduino |
VCC | 5 V |
GND | GND |
Trig | Digital pin 5 |
Echo | Digital pin 6 |
Servo Motor Connections
Servo Motor | Arduino |
VCC | 5 V |
GND | GND |
Servo Pin | Digital pin 2 |
Library for this Arduino Radar Project
To install the library, you can download them from here. Next, go to Sketch > Include Library > Add .ZIP Library… in the Arduino IDE.
Arduino Radar Project Code
By clicking the button in the top right corner of the code field, you can copy the code. Copy and paste it in Arduino IDE.
/********** www.arduinopoint.com ***********/ /********** Arduino Radar Project *********/ // Includes the Servo library #include <Servo.h>. // Defines Tirg and Echo pins of the Ultrasonic Sensor const int trigPin = 5; const int echoPin = 6; // Variables for the duration and the distance long duration; int distance; Servo myServo; // Creates a servo object for controlling the servo motor void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); myServo.attach( 2); // Defines on which pin is the servo motor attached } void loop() { // rotates the servo motor from 15 to 165 degrees for(int i=15;i<=165;i++){ myServo.write(i); delay(30); distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree Serial.print(i); // Sends the current degree into the Serial Port Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing Serial.print(distance); // Sends the distance value into the Serial Port Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing } // Repeats the previous lines from 165 to 15 degrees for(int i=165;i>15;i--){ myServo.write(i); delay(30); distance = calculateDistance(); Serial.print(i); Serial.print(","); Serial.print(distance); Serial.print("."); } } // Function for calculating the distance measured by the Ultrasonic sensor int calculateDistance(){ digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds distance= duration*0.034/2; return distance; }
Arduino Radar Project Processing Code
By clicking the button in the top right corner of the code field, you can copy the code. Copy and paste it in Arduino IDE.
Note: You must change “COM7” in the “myPort = new Serial(this,”COM7″, 9600);”
To check the port name, go to Arduino IDE>Tools>Port
/************* www.arduinopoint.com *************/ /************* Arduino Radar Project *************/ /* Fits any screen resolution! * Just change the values in the size() function, * with your screen resolution. * You must change "COM7" in the "myPort = new Serial(this,"COM7", 9600);" * To check the port name, go to Arduino IDE>Tools>Port */ import processing.serial.*; // imports library for serial communication import java.awt.event.KeyEvent; // imports library for reading the data from the serial port import java.io.IOException; Serial myPort; // defines Object Serial // defubes variables String angle=""; String distance=""; String data=""; String noObject; float pixsDistance; int iAngle, iDistance; int index1=0; int index2=0; PFont orcFont; void setup() { size (1200, 680); // Change this to your screen resulation // Size must be smaller than screen resolution //For best look, size must be (1200, 680); smooth(); //You must change "COM7". To check the port name, go to Arduino IDE>Tools>Port myPort = new Serial(this,"COM7", 9600); // starts the serial communication myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance. } void draw() { fill(98,245,31); // simulating motion blur and slow fade of the moving line noStroke(); fill(0,4); rect(0, 0, width, height-height*0.065); fill(98,245,31); // green color // calls the functions for drawing the radar drawRadar(); drawLine(); drawObject(); drawText(); } void serialEvent (Serial myPort) { // starts reading data from the Serial Port // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data". data = myPort.readStringUntil('.'); data = data.substring(0,data.length()-1); index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1" angle= data.substring(0, index1); // read the data from position "0" to position of the variable index1 or thats the value of the angle the Arduino Board sent into the Serial Port distance= data.substring(index1+1, data.length()); // read the data from position "index1" to the end of the data pr thats the value of the distance // converts the String variables into Integer iAngle = int(angle); iDistance = int(distance); } void drawRadar() { pushMatrix(); translate(width/2,height-height*0.074); // moves the starting coordinats to new location noFill(); strokeWeight(2); stroke(98,245,31); // draws the arc lines arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); // draws the angle lines line(-width/2,0,width/2,0); line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); line((-width/2)*cos(radians(30)),0,width/2,0); popMatrix(); } void drawObject() { pushMatrix(); translate(width/2,height-height*0.074); // moves the starting coordinats to new location strokeWeight(9); stroke(255,10,10); // red color pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels // limiting the range to 40 cms if(iDistance<40){ // draws the object according to the angle and the distance line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); } popMatrix(); } void drawLine() { pushMatrix(); strokeWeight(9); stroke(30,250,60); translate(width/2,height-height*0.074); // moves the starting coordinats to new location line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle popMatrix(); } void drawText() { // draws the texts on the screen pushMatrix(); if(iDistance>40) { noObject = "Nothing"; } else { noObject = "Detect"; } fill(0,0,0); noStroke(); rect(0, height-height*0.0648, width, height); fill(98,245,31); textSize(25); text("10cm",width-width*0.3854,height-height*0.0833); text("20cm",width-width*0.281,height-height*0.0833); text("30cm",width-width*0.177,height-height*0.0833); text("40cm",width-width*0.0729,height-height*0.0833); textSize(32); text("Object: " + noObject, width-width*0.93, height-height*0.0277); text("Angle: " + iAngle +" °", width-width*0.5735, height-height*0.0277); text("Distance: ", width-width*0.277, height-height*0.0277); if(iDistance<40) { text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277); } translate(width-width*0.98,height-height*0.95); text("Arduino Point",0,0); resetMatrix(); textSize(25); fill(98,245,60); translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); rotate(-radians(-60)); text("30°",0,0); resetMatrix(); translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); rotate(-radians(-30)); text("60°",0,0); resetMatrix(); translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); rotate(radians(0)); text("90°",0,0); resetMatrix(); translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); rotate(radians(-30)); text("120°",0,0); resetMatrix(); translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); rotate(radians(-60)); text("150°",0,0); popMatrix(); }