Introduction: Boat Radar

You will need a few materials, especially an Arduino and code to make this Project work, and we will be going through a few steps and showing you the brief detail on how this project works. The project I made is a boat radar, which is typically seen in water. However, instead of a human being who looks through binoculars for any obstacles, we use a distance sensor which will look though a certain area automatically and let you know if there is an obstacle by showing it in the color of red.

I've worked with Arduino for a while and I know how to use them thoroughly, but for those who don't really know what an Arduino is, it is a microcontroller with sets of digital and analogue input/output pins that can be interfaced with various expansion boards and other circuits. The reason we are using an Arduino is because it is easy to control and programm, allowing beginners to learn and try various Arduino projects.

A distance sensor is an sensor that can determine if there is any object within it's certain radius, this is very helpful as it can determine if any vehicle is standing there and can be coded to open the gate that is blocking the vehicle.

A servo motor is a motor that can turn a whole 180 degrees turn and it is very helpful in out toll gate project as it can be coded to be used as a toll which can be moved using the help of the distance sensor.

The way this project operates is that the distance sensor is attached to the top of the servo motor, which rotates 180 degrees continuously. As the servo motor spins, the distance sensor also spins, helping to detect anything within its radius. For instance:- If someone is driving a boat and comes close to an obstacle, the distance sensor detects the obstacle's existence and is then programmed so that the distance sensor will showcase the object as it gets closer in the color red.

Supplies

Supplies for the Boat Radar:-

(Click on the names to go to the website where you can purchase those items)

  1. Arduino Uno
  2. Breadboard
  3. Distance Sensor
  4. Servo Motor
  5. Jumper Cables

(Additional:- Styrofoam Boat)

  1. Styrofoam

Step 1: Arduino and Servo Motor

Step 1:- In the first step we will connect the servo motor with the Arduino, the supplies we will need for this will be Arduino, servo motor, and 3 jumper cables of red, black and 3rd jumper cable of any color.

The servo motor has 3 wires from the right the first one is black which is ground, the second one is red which is power and the last one is orange or sometimes yellow which is signal and this one can be connected to any of the pin/numbers on the right side of the Arduino so I connected it to 9.

Black/brown wire = Ground

Red wire = Power

orange/yellow wire = Arduino pin on the right side like example:- Pin12

Step 2: Arduino, Servo Motor and Distance Sensor

Step 2:- For the Second step we will now connect the servo motor and the Arduino with the distance sensor, but we cannot connect them directly so we will take the help of the breadboard.

Before we begin wiring for the distance sensor, always remember to first add the power and ground pins to the breadboard(as shown on the right side of the breadboard). Next, we will take the entire circuit we constructed with the Arduino and servo motor and bring a breadboard nearby.

Now we will add all the components we have into the Arduino board.

In the end we will have to make sure that the distance sensor is on top of the servo, so when the servo moves the distance sensor also moves with it.

Step 3: Coding(part 1)

This code is for TINKERCAD


// 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

 pinMode(led, OUTPUT);

}

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;

}                    

Step 4: CODE (part 2)

This is the code which we use, when the project is made in real life, before that we first need to download a swoftware called "https://processing.org/" and download windows version and run the code!!


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,"COM5", 9600); // starts the serial communication
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("Indian Lifehacker ", width-width*0.875, height-height*0.0277);
text("Angle: " + iAngle +" °", width-width*0.48, height-height*0.0277);
text("Distance: ", width-width*0.26, height-height*0.0277);
if(iDistance<40) {
text(" " + iDistance +" cm", width-width*0.225, 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 5: THIS IS HOW IT WORKS!!