Components and supplies
SG90 Micro-servo motor
Arduino UNO
Ultrasonic Sensor - HC-SR04 (Generic)
Apps and platforms
Arduino IDE
Processing
Project description
Code
RADAR CODE
c_cpp
1// Includes the Servo library 2#include <Servo.h>. 3// Defines Tirg and Echo pins of the Ultrasonic Sensor 4const int trigPin = 2; 5const int echoPin = 9; 6// Variables for the duration and the distance 7long duration; 8int distance; 9Servo myServo; // Creates a servo object for controlling the servo motor 10void setup() { 11 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output 12 pinMode(echoPin, INPUT); // Sets the echoPin as an Input 13 Serial.begin(9600); 14 myServo.attach(12); // Defines on which pin is the servo motor attached 15} 16void loop() { 17 // rotates the servo motor from 15 to 165 degrees 18 for(int i=15;i<=165;i++){ 19 myServo.write(i); 20 delay(30); 21 distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree 22 23 Serial.print(i); // Sends the current degree into the Serial Port 24 Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing 25 Serial.print(distance); // Sends the distance value into the Serial Port 26 Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing 27 } 28 // Repeats the previous lines from 165 to 15 degrees 29 for(int i=165;i>15;i--){ 30 myServo.write(i); 31 delay(30); 32 distance = calculateDistance(); 33 Serial.print(i); 34 Serial.print(","); 35 Serial.print(distance); 36 Serial.print("."); 37 } 38} 39// Function for calculating the distance measured by the Ultrasonic sensor 40int calculateDistance(){ 41 42 digitalWrite(trigPin, LOW); 43 delayMicroseconds(2); 44 // Sets the trigPin on HIGH state for 10 micro seconds 45 digitalWrite(trigPin, HIGH); 46 delayMicroseconds(10); 47 digitalWrite(trigPin, LOW); 48 duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds 49 distance= duration*0.034/2; 50 return distance; 51}
processing software code
java
1import processing.serial.*; // imports library for serial communication 2import java.awt.event.KeyEvent; // imports library for reading the data from the serial port 3import java.io.IOException; 4Serial myPort; // defines Object Serial 5// defubes variables 6String angle=""; 7String distance=""; 8String data=""; 9String noObject; 10float pixsDistance; 11int iAngle, iDistance; 12int index1=0; 13int index2=0; 14PFont orcFont; 15void setup() { 16 17 size (1200, 700); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION*** 18 smooth(); 19 myPort = new Serial(this,"COM8", 9600); // starts the serial communication 20 myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance. 21} 22void draw() { 23 24 fill(98,245,31); 25 // simulating motion blur and slow fade of the moving line 26 noStroke(); 27 fill(0,4); 28 rect(0, 0, width, height-height*0.065); 29 30 fill(98,245,31); // green color 31 // calls the functions for drawing the radar 32 drawRadar(); 33 drawLine(); 34 drawObject(); 35 drawText(); 36} 37void serialEvent (Serial myPort) { // starts reading data from the Serial Port 38 // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data". 39 data = myPort.readStringUntil('.'); 40 data = data.substring(0,data.length()-1); 41 42 index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1" 43 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 44 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 45 46 // converts the String variables into Integer 47 iAngle = int(angle); 48 iDistance = int(distance); 49} 50void drawRadar() { 51 pushMatrix(); 52 translate(width/2,height-height*0.074); // moves the starting coordinats to new location 53 noFill(); 54 strokeWeight(2); 55 stroke(98,245,31); 56 // draws the arc lines 57 arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); 58 arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); 59 arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); 60 arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); 61 // draws the angle lines 62 line(-width/2,0,width/2,0); 63 line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); 64 line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); 65 line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); 66 line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); 67 line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); 68 line((-width/2)*cos(radians(30)),0,width/2,0); 69 popMatrix(); 70} 71void drawObject() { 72 pushMatrix(); 73 translate(width/2,height-height*0.074); // moves the starting coordinats to new location 74 strokeWeight(9); 75 stroke(255,10,10); // red color 76 pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels 77 // limiting the range to 40 cms 78 if(iDistance<40){ 79 // draws the object according to the angle and the distance 80 line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); 81 } 82 popMatrix(); 83} 84void drawLine() { 85 pushMatrix(); 86 strokeWeight(9); 87 stroke(30,250,60); 88 translate(width/2,height-height*0.074); // moves the starting coordinats to new location 89 line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle 90 popMatrix(); 91} 92void drawText() { // draws the texts on the screen 93 94 pushMatrix(); 95 if(iDistance>40) { 96 noObject = "Out of Range"; 97 } 98 else { 99 noObject = "In Range"; 100 } 101 fill(0,0,0); 102 noStroke(); 103 rect(0, height-height*0.0648, width, height); 104 fill(98,245,31); 105 textSize(25); 106 107 text("10cm",width-width*0.3854,height-height*0.0833); 108 text("20cm",width-width*0.281,height-height*0.0833); 109 text("30cm",width-width*0.177,height-height*0.0833); 110 text("40cm",width-width*0.0729,height-height*0.0833); 111 textSize(40); 112 text("Hashan Sudeera", width-width*0.875, height-height*0.0277); 113 text("Angle: " + iAngle +" °", width-width*0.48, height-height*0.0277); 114 text("Distance: ", width-width*0.26, height-height*0.0277); 115 if(iDistance<40) { 116 text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277); 117 } 118 textSize(25); 119 fill(98,245,60); 120 translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); 121 rotate(-radians(-60)); 122 text("30°",0,0); 123 resetMatrix(); 124 translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); 125 rotate(-radians(-30)); 126 text("60°",0,0); 127 resetMatrix(); 128 translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); 129 rotate(radians(0)); 130 text("90°",0,0); 131 resetMatrix(); 132 translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); 133 rotate(radians(-30)); 134 text("120°",0,0); 135 resetMatrix(); 136 translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); 137 rotate(radians(-60)); 138 text("150°",0,0); 139 popMatrix(); 140}
processing software code
java
1import processing.serial.*; // imports library for serial communication 2import 3 java.awt.event.KeyEvent; // imports library for reading the data from the serial 4 port 5import java.io.IOException; 6Serial myPort; // defines Object Serial 7// 8 defubes variables 9String angle=""; 10String distance=""; 11String data=""; 12String 13 noObject; 14float pixsDistance; 15int iAngle, iDistance; 16int index1=0; 17int 18 index2=0; 19PFont orcFont; 20void setup() { 21 22 size (1200, 700); // ***CHANGE 23 THIS TO YOUR SCREEN RESOLUTION*** 24 smooth(); 25 myPort = new Serial(this,"COM8", 26 9600); // starts the serial communication 27 myPort.bufferUntil('.'); // reads 28 the data from the serial port up to the character '.'. So actually it reads this: 29 angle,distance. 30} 31void draw() { 32 33 fill(98,245,31); 34 // simulating 35 motion blur and slow fade of the moving line 36 noStroke(); 37 fill(0,4); 38 39 rect(0, 0, width, height-height*0.065); 40 41 fill(98,245,31); // green 42 color 43 // calls the functions for drawing the radar 44 drawRadar(); 45 drawLine(); 46 47 drawObject(); 48 drawText(); 49} 50void serialEvent (Serial myPort) { // starts 51 reading data from the Serial Port 52 // reads the data from the Serial Port up 53 to the character '.' and puts it into the String variable "data". 54 data = 55 myPort.readStringUntil('.'); 56 data = data.substring(0,data.length()-1); 57 58 59 index1 = data.indexOf(","); // find the character ',' and puts it into 60 the variable "index1" 61 angle= data.substring(0, index1); // read the data 62 from position "0" to position of the variable index1 or thats the value of the 63 angle the Arduino Board sent into the Serial Port 64 distance= data.substring(index1+1, 65 data.length()); // read the data from position "index1" to the end of the data 66 pr thats the value of the distance 67 68 // converts the String variables into 69 Integer 70 iAngle = int(angle); 71 iDistance = int(distance); 72} 73void drawRadar() 74 { 75 pushMatrix(); 76 translate(width/2,height-height*0.074); // moves the starting 77 coordinats to new location 78 noFill(); 79 strokeWeight(2); 80 stroke(98,245,31); 81 82 // draws the arc lines 83 arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); 84 85 arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); 86 arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); 87 88 arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); 89 // draws the 90 angle lines 91 line(-width/2,0,width/2,0); 92 line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); 93 94 line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); 95 line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); 96 97 line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); 98 line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); 99 100 line((-width/2)*cos(radians(30)),0,width/2,0); 101 popMatrix(); 102} 103void 104 drawObject() { 105 pushMatrix(); 106 translate(width/2,height-height*0.074); // 107 moves the starting coordinats to new location 108 strokeWeight(9); 109 stroke(255,10,10); 110 // red color 111 pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers 112 the distance from the sensor from cm to pixels 113 // limiting the range to 40 114 cms 115 if(iDistance<40){ 116 // draws the object according to the angle and 117 the distance 118 line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); 119 120 } 121 popMatrix(); 122} 123void drawLine() { 124 pushMatrix(); 125 strokeWeight(9); 126 127 stroke(30,250,60); 128 translate(width/2,height-height*0.074); // moves the starting 129 coordinats to new location 130 line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); 131 // draws the line according to the angle 132 popMatrix(); 133} 134void drawText() 135 { // draws the texts on the screen 136 137 pushMatrix(); 138 if(iDistance>40) 139 { 140 noObject = "Out of Range"; 141 } 142 else { 143 noObject = "In Range"; 144 145 } 146 fill(0,0,0); 147 noStroke(); 148 rect(0, height-height*0.0648, width, 149 height); 150 fill(98,245,31); 151 textSize(25); 152 153 text("10cm",width-width*0.3854,height-height*0.0833); 154 155 text("20cm",width-width*0.281,height-height*0.0833); 156 text("30cm",width-width*0.177,height-height*0.0833); 157 158 text("40cm",width-width*0.0729,height-height*0.0833); 159 textSize(40); 160 161 text("Hashan Sudeera", width-width*0.875, height-height*0.0277); 162 text("Angle: 163 " + iAngle +" °", width-width*0.48, height-height*0.0277); 164 text("Distance: 165 ", width-width*0.26, height-height*0.0277); 166 if(iDistance<40) { 167 text(" 168 " + iDistance +" cm", width-width*0.225, height-height*0.0277); 169 } 170 171 textSize(25); 172 fill(98,245,60); 173 translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); 174 175 rotate(-radians(-60)); 176 text("30°",0,0); 177 resetMatrix(); 178 translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); 179 180 rotate(-radians(-30)); 181 text("60°",0,0); 182 resetMatrix(); 183 translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); 184 185 rotate(radians(0)); 186 text("90°",0,0); 187 resetMatrix(); 188 translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); 189 190 rotate(radians(-30)); 191 text("120°",0,0); 192 resetMatrix(); 193 translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); 194 195 rotate(radians(-60)); 196 text("150°",0,0); 197 popMatrix(); 198}
Downloadable files
RADAR Circuit diagram
RADAR Circuit diagram
RADAR Circuit diagram
RADAR Circuit diagram
Comments
Only logged in users can leave comments
kasperlollike
2 years ago
Wich code do i put in the Arduino ID