Components and supplies
Jumper wires (generic)
SG90 Micro-servo motor
Solderless Breadboard Half Size
Ultrasonic Sensor - HC-SR04 (Generic)
Arduino UNO
Tools and machines
Screwdriver (Phillips)
Apps and platforms
Processing
Arduino IDE
Project description
Code
Proccessing code
processing
Upload second
1/* Arduino Radar Project 2 * 3 * Updated version. Fits any screen resolution! 4 * Just change the values in the size() function, 5 * with your screen resolution. 6 * 7 * by Dejan Nedelkovski, 8 * www.HowToMechatronics.com 9 * 10 */ 11import processing.serial.*; // imports library for serial communication 12import java.awt.event.KeyEvent; // imports library for reading the data from the serial port 13import java.io.IOException; 14Serial myPort; // defines Object Serial 15// defubes variables 16String angle=""; 17String distance=""; 18String data=""; 19String noObject; 20float pixsDistance; 21int iAngle, iDistance; 22int index1=0; 23int index2=0; 24PFont orcFont; 25void setup() { 26 27 size (1920, 1080); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION*** 28 smooth(); 29 myPort = new Serial(this,"COM3", 9600); // starts the serial communication 30 myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance. 31 orcFont = loadFont("OCRAExtended-48.vlw"); 32} 33void draw() { 34 35 fill(98,245,31); 36 textFont(orcFont); 37 // simulating motion blur and slow fade of the moving line 38 noStroke(); 39 fill(0,4); 40 rect(0, 0, width, height-height*0.065); 41 42 fill(98,245,31); // green color 43 // calls the functions for drawing the radar 44 drawRadar(); 45 drawLine(); 46 drawObject(); 47 drawText(); 48} 49void serialEvent (Serial myPort) { // starts reading data from the Serial Port 50 // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data". 51 data = myPort.readStringUntil('.'); 52 data = data.substring(0,data.length()-1); 53 54 index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1" 55 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 56 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 57 58 // converts the String variables into Integer 59 iAngle = int(angle); 60 iDistance = int(distance); 61} 62void drawRadar() { 63 pushMatrix(); 64 translate(width/2,height-height*0.074); // moves the starting coordinats to new location 65 noFill(); 66 strokeWeight(2); 67 stroke(98,245,31); 68 // draws the arc lines 69 arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); 70 arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); 71 arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); 72 arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); 73 // draws the angle lines 74 line(-width/2,0,width/2,0); 75 line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); 76 line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); 77 line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); 78 line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); 79 line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); 80 line((-width/2)*cos(radians(30)),0,width/2,0); 81 popMatrix(); 82} 83void drawObject() { 84 pushMatrix(); 85 translate(width/2,height-height*0.074); // moves the starting coordinats to new location 86 strokeWeight(9); 87 stroke(255,10,10); // red color 88 pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels 89 // limiting the range to 40 cms 90 if(iDistance<40){ 91 // draws the object according to the angle and the distance 92 line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); 93 } 94 popMatrix(); 95} 96void drawLine() { 97 pushMatrix(); 98 strokeWeight(9); 99 stroke(30,250,60); 100 translate(width/2,height-height*0.074); // moves the starting coordinats to new location 101 line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle 102 popMatrix(); 103} 104void drawText() { // draws the texts on the screen 105 106 pushMatrix(); 107 if(iDistance>40) { 108 noObject = "Out of Range"; 109 } 110 else { 111 noObject = "In Range"; 112 } 113 fill(0,0,0); 114 noStroke(); 115 rect(0, height-height*0.0648, width, height); 116 fill(98,245,31); 117 textSize(25); 118 119 text("10cm",width-width*0.3854,height-height*0.0833); 120 text("20cm",width-width*0.281,height-height*0.0833); 121 text("30cm",width-width*0.177,height-height*0.0833); 122 text("40cm",width-width*0.0729,height-height*0.0833); 123 textSize(40); 124 text("Object: " + noObject, width-width*0.875, height-height*0.0277); 125 text("Angle: " + iAngle +" �", width-width*0.48, height-height*0.0277); 126 text("Distance: ", width-width*0.26, height-height*0.0277); 127 if(iDistance<40) { 128 text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277); 129 } 130 textSize(25); 131 fill(98,245,60); 132 translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); 133 rotate(-radians(-60)); 134 text("30�",0,0); 135 resetMatrix(); 136 translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); 137 rotate(-radians(-30)); 138 text("60�",0,0); 139 resetMatrix(); 140 translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); 141 rotate(radians(0)); 142 text("90�",0,0); 143 resetMatrix(); 144 translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); 145 rotate(radians(-30)); 146 text("120�",0,0); 147 resetMatrix(); 148 translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); 149 rotate(radians(-60)); 150 text("150�",0,0); 151 popMatrix(); 152}
Ardiuno code
arduino
Upload first
1#include <Servo.h> 2const int trigPin=12; 3const int echoPin=11; 4long duration; 5int distance; 6Servo s1; 7 8void setup() { 9 Serial.begin(9600); 10 pinMode(trigPin,OUTPUT); 11 pinMode(echoPin,INPUT); 12 s1.attach(9); 13} 14 15void loop(){ 16 for(int i=0;i<180;i=i+1){ 17 s1.write(i); 18 delay(30); 19 distance = calDist(); 20 Serial.print(i); 21 Serial.print(","); 22 Serial.print(distance); 23 Serial.print("."); 24 } 25 for(int i=180;i>0;i=i-1){ 26 s1.write(i); 27 delay(30); 28 distance = calDist(); 29 Serial.print(i); 30 Serial.print(","); 31 Serial.print(distance); 32 Serial.print("."); 33 } 34} 35 36 int calDist(){ 37 digitalWrite(trigPin, LOW); 38 delayMicroseconds(2); 39 digitalWrite(trigPin, HIGH); 40 delayMicroseconds(10); 41 digitalWrite(trigPin, LOW); 42 duration = pulseIn(echoPin, HIGH); 43 distance= duration*0.034/2; 44 return distance; 45} 46
Proccessing code
processing
Upload second
1/* Arduino Radar Project 2 * 3 * Updated version. Fits any screen 4 resolution! 5 * Just change the values in the size() function, 6 * with 7 your screen resolution. 8 * 9 * by Dejan Nedelkovski, 10 * www.HowToMechatronics.com 11 12 * 13 */ 14import processing.serial.*; // imports library for serial communication 15import 16 java.awt.event.KeyEvent; // imports library for reading the data from the serial 17 port 18import java.io.IOException; 19Serial myPort; // defines Object Serial 20// 21 defubes variables 22String angle=""; 23String distance=""; 24String data=""; 25String 26 noObject; 27float pixsDistance; 28int iAngle, iDistance; 29int index1=0; 30int 31 index2=0; 32PFont orcFont; 33void setup() { 34 35 size (1920, 1080); // ***CHANGE 36 THIS TO YOUR SCREEN RESOLUTION*** 37 smooth(); 38 myPort = new Serial(this,"COM3", 39 9600); // starts the serial communication 40 myPort.bufferUntil('.'); // reads 41 the data from the serial port up to the character '.'. So actually it reads this: 42 angle,distance. 43 orcFont = loadFont("OCRAExtended-48.vlw"); 44} 45void draw() 46 { 47 48 fill(98,245,31); 49 textFont(orcFont); 50 // simulating motion 51 blur and slow fade of the moving line 52 noStroke(); 53 fill(0,4); 54 rect(0, 55 0, width, height-height*0.065); 56 57 fill(98,245,31); // green color 58 59 // calls the functions for drawing the radar 60 drawRadar(); 61 drawLine(); 62 63 drawObject(); 64 drawText(); 65} 66void serialEvent (Serial myPort) { // starts 67 reading data from the Serial Port 68 // reads the data from the Serial Port up 69 to the character '.' and puts it into the String variable "data". 70 data = 71 myPort.readStringUntil('.'); 72 data = data.substring(0,data.length()-1); 73 74 75 index1 = data.indexOf(","); // find the character ',' and puts it into 76 the variable "index1" 77 angle= data.substring(0, index1); // read the data 78 from position "0" to position of the variable index1 or thats the value of the 79 angle the Arduino Board sent into the Serial Port 80 distance= data.substring(index1+1, 81 data.length()); // read the data from position "index1" to the end of the data 82 pr thats the value of the distance 83 84 // converts the String variables into 85 Integer 86 iAngle = int(angle); 87 iDistance = int(distance); 88} 89void drawRadar() 90 { 91 pushMatrix(); 92 translate(width/2,height-height*0.074); // moves the starting 93 coordinats to new location 94 noFill(); 95 strokeWeight(2); 96 stroke(98,245,31); 97 98 // draws the arc lines 99 arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); 100 101 arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); 102 arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); 103 104 arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); 105 // draws the 106 angle lines 107 line(-width/2,0,width/2,0); 108 line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); 109 110 line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); 111 line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); 112 113 line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); 114 line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); 115 116 line((-width/2)*cos(radians(30)),0,width/2,0); 117 popMatrix(); 118} 119void 120 drawObject() { 121 pushMatrix(); 122 translate(width/2,height-height*0.074); // 123 moves the starting coordinats to new location 124 strokeWeight(9); 125 stroke(255,10,10); 126 // red color 127 pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers 128 the distance from the sensor from cm to pixels 129 // limiting the range to 40 130 cms 131 if(iDistance<40){ 132 // draws the object according to the angle and 133 the distance 134 line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); 135 136 } 137 popMatrix(); 138} 139void drawLine() { 140 pushMatrix(); 141 strokeWeight(9); 142 143 stroke(30,250,60); 144 translate(width/2,height-height*0.074); // moves the starting 145 coordinats to new location 146 line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); 147 // draws the line according to the angle 148 popMatrix(); 149} 150void drawText() 151 { // draws the texts on the screen 152 153 pushMatrix(); 154 if(iDistance>40) 155 { 156 noObject = "Out of Range"; 157 } 158 else { 159 noObject = "In Range"; 160 161 } 162 fill(0,0,0); 163 noStroke(); 164 rect(0, height-height*0.0648, width, 165 height); 166 fill(98,245,31); 167 textSize(25); 168 169 text("10cm",width-width*0.3854,height-height*0.0833); 170 171 text("20cm",width-width*0.281,height-height*0.0833); 172 text("30cm",width-width*0.177,height-height*0.0833); 173 174 text("40cm",width-width*0.0729,height-height*0.0833); 175 textSize(40); 176 177 text("Object: " + noObject, width-width*0.875, height-height*0.0277); 178 text("Angle: 179 " + iAngle +" �", width-width*0.48, height-height*0.0277); 180 text("Distance: 181 ", width-width*0.26, height-height*0.0277); 182 if(iDistance<40) { 183 text(" 184 " + iDistance +" cm", width-width*0.225, height-height*0.0277); 185 } 186 187 textSize(25); 188 fill(98,245,60); 189 translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); 190 191 rotate(-radians(-60)); 192 text("30�",0,0); 193 resetMatrix(); 194 translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); 195 196 rotate(-radians(-30)); 197 text("60�",0,0); 198 resetMatrix(); 199 translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); 200 201 rotate(radians(0)); 202 text("90�",0,0); 203 resetMatrix(); 204 translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); 205 206 rotate(radians(-30)); 207 text("120�",0,0); 208 resetMatrix(); 209 translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); 210 211 rotate(radians(-60)); 212 text("150�",0,0); 213 popMatrix(); 214}
Ardiuno code
arduino
Upload first
1#include <Servo.h> 2const int trigPin=12; 3const int echoPin=11; 4long duration; 5int distance; 6Servo s1; 7 8void setup() { 9 Serial.begin(9600); 10 pinMode(trigPin,OUTPUT); 11 pinMode(echoPin,INPUT); 12 s1.attach(9); 13} 14 15void loop(){ 16 for(int i=0;i<180;i=i+1){ 17 s1.write(i); 18 delay(30); 19 distance = calDist(); 20 Serial.print(i); 21 Serial.print(","); 22 Serial.print(distance); 23 Serial.print("."); 24 } 25 for(int i=180;i>0;i=i-1){ 26 s1.write(i); 27 delay(30); 28 distance = calDist(); 29 Serial.print(i); 30 Serial.print(","); 31 Serial.print(distance); 32 Serial.print("."); 33 } 34} 35 36 int calDist(){ 37 digitalWrite(trigPin, LOW); 38 delayMicroseconds(2); 39 digitalWrite(trigPin, HIGH); 40 delayMicroseconds(10); 41 digitalWrite(trigPin, LOW); 42 duration = pulseIn(echoPin, HIGH); 43 distance= duration*0.034/2; 44 return distance; 45} 46
Downloadable files
Fritzing digram
Fritzing digram
Comments
Only logged in users can leave comments