Last active
October 2, 2018 02:51
-
-
Save IdrisCytron/a2aa0bce8289d9a2332da69b92d2e46a to your computer and use it in GitHub Desktop.
DIY radar using Arduino and Processing. For more detail, please refer to Cytron Tutorial page.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment