Introduction: Arduino RADAR Sensor
I have always been interested in radars that airports and the military use. The ways they implement radio wave to find objects, and know its precise distances, have always been a mystery to me. But, after looking around youtube for a while, I realized that I could make my own mini-model of a radar, that could actually sense objects! So, with my skills with electronics, and my love of radars, I introduce to you the Arduino RADAR Sensor!
Mini RADAR can be assembled:
- To help Visually Impaired people observe their surroundings
- For Underwater Exploration
- For Underwater Plastic Cleanup
Supplies
To create your very own Mini Arduino RADAR system, you will need the following materials:
- 1 programmable Arduino (I'm using an Arduino Mega, but you can use an UNO or even a MINI)
- 1 micro servo 9g (I'm using a Tiankongrc SG90 micro servo motor)
- 1 HC-SR04 Ultrasonic Ranging Module
- 1 USB A to USB B cable (For connecting the Arduino to your computer)
- 4 Female to Male Jumper Wires (For your Ultrasonic Sensor)
- 3 Male to Male Jumper Wires (For your Servo Motor)
- Arduino IDE Software
- Processing 4 Software
Optional Materials:
- Double Sided Foam Tape
- Arduino Prototype Shield
- Electrical Tape
Step 1: Optional Prototype Shield
In my opinion, the prototype shield for the Arduino MEGA is a lifesaver! I love how you can solder on it without actually damaging your Arduino. So, for this project, I will be using the Arduino MEGA Prototype Shield. I won't actually be soldering on to the shield, but it makes for an easier surface to mount the servo motor on.
If you would like to follow along, all you need to do is to place your Shield on top of the Arduino and push down until they are flush together.
Step 2: Servo to Arduino
The first step in making your own Mini Arduino RADAR system is to connect the servo motor to the Arduino. In our model, the servo motor will be our platform in which the Ultrasonic Ranging Module will mount on to. This will allow for a 180 degree rotation and view angle for the RADAR.
***Before you do the following, be sure to connect the three Male to Male Jumper wires to the three wires on the servo. If you skip this, you will not be able to connect your Servo motor to the Arduino.***
- Connect the ground wire to the ground pin on your Arduino.
- Connect the VCC wire to the 5V pin on your Arduino.
- Connect the Signal wire to Pin 12 of your Arduino.
A Schematic and Image for this step is attached below.
Attachments
Step 3: Ultrasonic Module to Arduino
The next step in making your own Mini Arduino RADAR system is to connect the Ultrasonic Ranging Module to the Arduino. In our model, the Ultrasonic Module will be the "Radar" of our RADAR. This will be the device that actually senses to see if there are any objects nearby.
***Before you do the following, be sure to connect the four Male to Female Jumper wires to the four pins on the Ultrasonic Module. If you skip this, you will not be able to connect your Ultrasonic Module to the Arduino.***
- Connect the ground wire to the ground pin on your Arduino.
- Connect the VCC wire to the 5V pin on your Arduino. (You may need to use another 5V pin. If you are not using an Arduino MEGA, you may need to use a breadboard and use your 5V pin to connect both VCC's to the same pin)
- Connect the Echo wire to Pin 11 of your Arduino.
- Connect the Trigger (Trig) wire to Pin 10 of your Arduino.
A Schematic and Image for this step is attached below.
Attachments
Step 4: Ultrasonic and Servo
The next step in making your own Mini Arduino RADAR system is to glue the Ultrasonic Module to the Servo Motor. This will allow for 180 degree rotation of the Ultrasonic Module.
Step 5: Assembling All of the Parts
This is a collection of photos of how I assembled my Mini RADAR. I used some double sided tape to help stick the servo motor to the Arduino, and some hot glue to mount the ultrasonic module to the servo motor.
Step 6: Adding Code to Arduino IDE
The next step in making your own Mini Arduino RADAR system is add code to our Arduino.
The code is attached below:
// Includes the Servo library #include <Servo.h>. // Defines Tirg and Echo pins of the Ultrasonic Sensor const int trigPin = 10; const int echoPin = 11; // 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(12); // 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; }
Be sure to upload the code onto your Arduino by clicking the Upload button after you plugged in the Arduino into your computer!
Step 7: Adding Code to Processing 4
The next step in making your own Mini Arduino RADAR system is add code to our Arduino.
***Before running the code, be sure to change the COM3 port (When myPort is being defined) to the port that your Arduino is on.
Check under Tools --> Port in the Arduino IDE***
The code is attached below:
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, 700); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION*** smooth(); myPort = new Serial(this,"COM3", 9600); // ****CHANGE THE COM3 To the PORT YOUR ARDUINO IS ON!!!!**** 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 = "Out of Range"; } else { noObject = "In Range"; } 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(40); text("Arduino Radar", width-width*0.975, height-height*0.0277); text("Angle: " + iAngle +" °", width-width*0.68, height-height*0.0277); text("Distance: ", width-width*0.36, height-height*0.0277); if(iDistance<40) { text(" " + iDistance +" cm", width-width*0.26, height-height*0.0277); } 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(); }
Step 8: Run the Code!
Press the run button, and watch your RADAR in action!