DIY Radar Using Arduino and Processing

Let's build simple radar using Arduino (Maker UNO) and Processing software!

INTRODUCTION

This tutorial will guide you how to develop simple DIY radar using Arduino and Processing. Actually, there have a lot of tutorial you can refer to, but most of them is using ultrasonic sensor. In this tutorial, I will using Analog Distance Sensor (10-80cm).

VIDEO

This video will show you how to develop simple DIY radar using Arduino (Maker UNO) and Processing IDE.

ITEM USED IN THE VIDEO

Arduino Radar Wiring
Arduino Radar Hardware

SAMPLE CODE

This is the sample code for Processing and Arduino used in the video.

/*
Project: Arduino Radar
Software: Processing IDE 3.4
Item used:
- Maker UNO
- Analog Distance Sensor (10-80cm)
- TowerPro MG946R Metal Gear Servo
*/
import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;
String Port = "/dev/cu.wchusbserial14120"; // Arduino port
Serial myPort;
int distanceLimit = 40; // Distance limit is set to 40cm
String angle = "";
String distance = "";
String data = "";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1 = 0;
int index2 = 0;
PFont orcFont;
void setup()
{
size(1366, 768);
smooth();
myPort = new Serial(this, Port, 9600);
myPort.bufferUntil('.');
}
void draw()
{
fill(98, 245, 31);
noStroke();
fill(0, 4);
rect(0, 0, width, height - height * 0.065);
fill(98, 245, 31);
drawRadar();
drawLine();
drawObject();
drawText();
}
void serialEvent (Serial myPort)
{
data = myPort.readStringUntil('.');
data = data.substring(0, data.length() - 1);
index1 = data.indexOf(",");
angle = data.substring(0, index1);
distance = data.substring(index1 + 1, data.length());
iAngle = int(angle); // Change string angle to int
iDistance = int(distance); // Change string distance to int
}
void drawRadar()
{
pushMatrix();
translate(width / 2, height - height * 0.074);
noFill();
strokeWeight(2);
stroke(98, 245, 31);
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);
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);
strokeWeight(8);
stroke(255, 10, 10);
pixsDistance = iDistance * ((height - height * 0.1666) * 0.025);
if (iDistance < distanceLimit) { // Distance range limit
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(8);
stroke(30, 250, 60);
translate(width / 2, height - height * 0.074);
line(0, 0, (height - height * 0.12) * cos(radians(iAngle)), -(height - height * 0.12) * sin(radians(iAngle)));
popMatrix();
}
void drawText()
{
pushMatrix();
fill(0, 0, 0);
noStroke();
rect(0, height - height * 0.0648, width, height);
fill(98, 245, 31);
textSize(15);
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(30);
text("Angle: " + iAngle + " °", width - width * 0.48, height - height * 0.0277);
if (iDistance < distanceLimit) {
text("Distance: " + iDistance + "cm", width - width * 0.3, height - height * 0.0277);
}
else {
text("Distance: ", width - width * 0.3, 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();
}
view raw ArduinoRadar.pde hosted with ❤ by GitHub
/*
Project: Arduino Radar
Software: Arduino IDE 1.8.7
Item used:
- Maker UNO https://www.cytron.io/p-maker-uno
- Analog Distance Sensor (10-80cm) https://www.cytron.io/p-sn-gp2y0a21
- TowerPro MG946R Metal Gear Servo https://www.cytron.io/c-84-dc-motor/c-475-servo-motor/p-mg946r
*/
#include <Servo.h>
Servo myServo;
const int SENSOR_PIN = A0;
const int SERVO_PIN = 9;
long duration;
int distance;
void setup()
{
pinMode(SENSOR_PIN, INPUT);
Serial.begin(9600);
myServo.attach(SERVO_PIN);
}
void loop()
{
for (int i = 15; i <= 165; i++) {
myServo.write(i);
delay(30);
distance = measureDistance();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
for (int i = 165; i > 15; i--) {
myServo.write(i);
delay(30);
distance = measureDistance();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
}
int measureDistance()
{
long totalCm = 0;
int cm = 0;
for (int i = 0; i < 50; i++) {
int adc = analogRead(SENSOR_PIN);
cm = (6762 / (adc - 9)) - 4;
totalCm += cm;
}
cm = totalCm / 50;
if (cm > 80) {
cm = 80;
}
return cm;
}

Thank You

References

  1. Arduino Radar Project
  2. Arduino Radar with Processing

Thanks for reading this tutorial. If you have any technical inquiry, please post at Cytron Technical Forum.

Leave a Comment

Your email address will not be published.

Share this Tutorial

Share on facebook
Share on whatsapp
Share on email
Share on print
Share on twitter
Share on pinterest
Share on facebook
Share on whatsapp
Share on email
Share on print
Share on twitter
Share on pinterest

Latest Tutorial

DIY Digital Alarm Clock Using REKA:BIT With Micro:bit
Display Internet Time (NTP) on micro:bit
DIY Interactive Robot Using REKA:BIT With Micro:bit
BLTouch Installation for Ender 3 with 32-bit V4.2.2 Board
Pick and Send Random Meal’s Option and Locations through Telegram Bot Using Grove WiFi 8266 on micro:bit
Tutorials of Cytron Technologies Scroll to Top