Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 12

CHAPTER 7

IMPLEMENTATION AND TESTING


7.1 PROCESS
Basically, the processor of the Arduino board uses the Harvard architecture where the Program
code and program data have separate memory. It consists of two memories Such as program
memory and data memory. Wherein the data is stored in data Memory and the code is stored in
the flash program memory. The Atmega328 Micro controller has 32kb of flash memory, 2kb of
SRAM 1kb of EPROM and Operates with a 16MHz clock speed. Program to Arduino The main
advantage of the Arduino technology is, we can directly load the programs into the device
without the need of a hardware programmer to burn the program. This is done because of the
presence of the 0.5KB of boot loader, that allows the program to be dumped into the circuit. The
Arduino tool window contains a toolbar with a various button like new, open, verify, upload and
serial monitor. And additionally, it Comprises of a text editor (employed to write the code), a
message space (displays the Feedback) like showing the errors, the text console, that displays the
o/p & a series of Menus just like the file, tool menu & edit. 1. Programming into the Arduino
board is called as sketches. Each sketch contains of three parts such as Variables Declaration,
Initialization and Control code. Where, Initialization is written in the setup function and Control
code is written in the loop function
WORKING
PRACTICAL IMPLEMENTATION
A. Making On Arduino Board Since, we believe in learning by doing. So, we decided to make
our own Arduino board instead of using the ready made board. So, the steps required to make an
arduino board are as follows: Boot-loading an Atmega328 using the Arduino board/AVR
Programmer by uploading the boot loader to the Micro-controller Making the connections on a
general purpose PCB, connecting the crystal oscillator, capacitors, connectors for the connections
to Arduino board etc. Providing the power supply, usually 5 volts. Arduino is Ready to use. After
you have done all this, then only the minimum circuitry like crystal oscillator, capacitors,
connectors, power supply is required to complete the board. The same circuit can be made on the
PCB, either designed or general purpose. Since, Arduino is an Open-Source. Hence, it is easy to
make and can have any enhancements as per the requirements

B.Connecting Servo Motor A servomotor is a rotary actuator that allows for precise control of
angular position, velocity and acceleration. A normal servo motor has three terminals:
1. VCC
2. GND
3. PULSE
A servo motor works at normally 4.8 to 6 volts. Ground is provided by connecting it to the
Ground of the Arduino. The total time for a servo motor pulse is usually 20ms. To move it to one
end of say 0 degree angle, a 1ms pulse is used and to move it to other end i.e 180 .degrees, a 2ms
pulse is applied. Hence, according to this to move the axis of the servo motor to the center, a
pulse of time 1.5 ms should be applied. For this, the pulse wire of the servo motor is connected to
the Arduino that provides the digital pulses for pulse width modulation of the pulse. Hence, by
programming for a particular pulse interval the servo motor can be controlled easily.

Connecting Ultrasonic Sensor:- An Ultrasonic Sensor consists of three wires. One for Vcc,
second for Ground and the third for pulse signal. The ultrasonic sensor is mounted on the servo

1
motor and both of them further connected to the Arduino board. The ultrasonic sensor uses the
reflection principle for its working. When connected to the Arduino, the Arduino provides the
pulse signal to the ultrasonic sensor which then sends the ultrasonic wave in forward direction.
Hence, whenever there is any obstacle detected or present in front, it reflects the waves which are
received by the ultrasonic sensor.
If detected, the signal is sent to the Arduino and hence to the PC/laptop to the processing
software that shows the presence of the obstacle on the rotating RADAR screen with distance and
the angle at which it has been detected.

2
7.2. CODE

ARDUNIO CODE

#include <Servo.h>.
const int trigPin = 8;
const int echoPin = 9;
long duration;// defining time and distance
int distance;
Servo myServo; // Object servo
void setup()
{
pinMode(trigPin, OUTPUT); // trigPin as an Output
pinMode(echoPin, INPUT); // echoPin as an Input
Serial.begin(9600);
myServo.attach(10); // Pin Connected To Servo
}
void loop()
{
for(int i=15;i<=165;i++)// rotating servo i++ depicts increment of one degree
{
myServo.write(i);
delay(30);
distance = calculateDistance();
Serial.print(i);
Serial.print(“,”);
Serial.print(distance);
Serial.print(“.”);
}
for(int i=165;i>15;i–)// Repeats the previous lines from 165 to 15 degrees
{
myServo.write(i);
delay(30);
distance = calculateDistance();
Serial.print(i);
Serial.print(“,”);
Serial.print(distance);
Serial.print(“.”);
}
}
int calculateDistance()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);// Sets the trigPin on HIGH state for 10 micro seconds
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

3
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
return distance;
}

PROCESSING 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
String angle="";// defubes variables
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;
void setup()
{
size (1920, 1080); // change to your screen resolution
smooth();
myPort = new Serial(this,"COM7", 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);
noStroke(); // simulating motion blur and slow fade of the moving line
fill(0,4);
rect(0, 0, width, height-height*0.065);
fill(98,245,31); // green color
drawRadar(); // calls the functions for drawing the radar
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 put it into the variable index1
angle= data.substring(0, index1); // read the data from position "0" to position of
the variable index1 or that the value of the angle the Arduino Board sent into
4
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
iAngle = int(angle);// converts the String variables into Integer
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) // limiting the range to 40 cms
{
// 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();
}
5
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("Radar System ", 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();
6
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();
}

7.3. SNAPSHOTS

7
7.4. TESTING

8
CHAPTER 8
RESULTS AND DISCUSSION
8.1 DATASET <Times New Roman, Font 14, CAPS>
Content.

<Times New Roman, Font 12>

8.2. EXPERIMENTAL SETUP

9
8.3. RESULTS

8.4. PERFORMANCE METRICS<Times New Roman, Font 14, CAPS>


Content.

<Times New Roman, Font 12>

8.5.DISCUSSION
Introduction Initially, upload the code to Arduino after making the connections. We can observe
the servo sweeping from 00 to 1800 and again back to 00. Since the Ultrasonic Sensor is
mounted over the Servo, it will also participate in the sweeping action. Now, open the
processing application and paste the code that we already wrote. In the Processing Sketch, make
necessary changes in the CO M Port selection and replace it with the COM Port number to
which our Arduino is connected to COM3. After note the Processing Sketch, we used the output
display size as 12 80×720. Now, run the sketch in the Processing and if everything goes well, a
new Processing window opens up like the one shown below

10
CHAPTER 9
<Times New Roman, Font 12, Bold>

CONCLUSION
<Times New Roman, Font 16, Bold>

11
12

You might also like