Introduction: ITTT Arduino Yun Schoolproject

Things you'll need for this project:

A computer/laptop

Arduino Yun board

Servo Motor

Breadboard

Jump Wires (male)

Pin Header cable (female to female)

Ultrasonic sensor HC- SR04

A piece of cardboard (just a small piece should be enough)

Tape

Step 1: Wires!

Apply the pin header to the Ultrasonic sensor. After this, apply the jumper wires in the same way as is shown in the schematic (for the Ultrasonic sensor connection, you need to put the jump wires in the other end of the pin header).

Step 2: Cardboard

Second step: Cut a small quadrangle from the piece of cardboard you have. Make it just a bit bigger than the ports of the pin header. After this, cut two small gaps across the short end of the piece of cardboard, a bit above the middle. Leave some distance between the gaps, you don't want to cut the piece of cardboard in half [look at the second image for reference).

Next, make a small hole in the piece of cardboard to put one of the small screws through it. Screw it down on the servo motor, so you can put the Ultrasonic sensor on top of it. To make sure it stays there, apply some tape (you may want to do the same to the servo motor if it keeps falling down).

Step 3: Code

Connect the Arduino board to your computer/laptop. Next, open the Arduino IDE and add the following code in a new sketch file:

// Adds Servo library
#include

// Defines Tirg and Echo pins of the Sensor and to what power pin they'll be attached const int trigPin = 10; const int echoPin = 11;

// Variables for the duration and the distance long duration; int distance;

Servo myServo; // Code to controle 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 power pin the servo motor is attached }

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 every 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 when rotating back 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 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); // returns the sound wave travel time in microseconds by reading the echoPin distance= duration*0.034/2; return distance; }

Upload this code to your Arduino. The servo motor should be moving around right now.

Step 4: More Code!

Open the Processing IDE and copy the following code to a new sketch file:

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

// Defines needed 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 (1280, 720); // Screen resolution smooth(); myPort = new Serial(this,"/dev/cu.usbmodemfa131", 9600); // Starts the serial communication by registering the serial port (must be in use by the Arduino to work, but it also differs from Windows to Mac) myPort.bufferUntil('.'); // Reads the data from the serial port (angle and distance) }

void draw() { fill(98,245,31); // Gives the effect of the motion blur and the slow fade of the moving line noStroke(); fill(0,4); rect(0, 0, width, height-height*0.065); fill(98,245,31); // Code for the green color // Functions for drawing the radar drawRadar(); drawLine(); drawObject(); drawText(); }

void serialEvent (Serial myPort) { // Code to start reading data from the Serial Port 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 // Turns the String variables into Integer iAngle = int(angle); iDistance = int(distance); }

void drawRadar() { // Code to make radar appear on screen 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 // Limits 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() { // Code to draw the line(s) 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() { // Code to draw text 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("Object: " + noObject, 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(); }


After this, run the code and it should open a new window, with the radar displayed like in the image. After this you can play around with the sensor for a bit!