19-1 Grupo 4

## **Autores**

Edson Vinícius -

Ivan Giusti -

João Roque - 0040961723008

Lucas Coelho da Silva  - 0040961823008

Vinicius Helamã Lameu - 0040961723029

## **Resumo**

Radar Tecnológico que identifica objetos a sua volta.

## **Software/materiais utilizados**

Na lista abaixo, os materiais utilizados na construção do Radar:

* Arduino UNO
* Breadboard and Jump Wires
* Ultrasonic Sensor HC-SR04
* Servo Motor
* Processing (Software de Interface)

## **Metodologia**

Utilizamos um Sensor Ultrassônico para a detecção de objetos, um pequeno Servo Motor para girar o sensor e uma Placa Arduíno para controlá-los. O alcance do radar pode ser ajustado para até 4 metros com rotação de 180 graus.

## **Desenvolvimento**

No projeto usamos o Arduíno para ler os dados do sensor e enviá-lo para o aplicativo de processamento (software de interface) através da porta COM.

Com base nas informações recebidas, é feito um esboço no processing montando uma visualização parcial do elemento imitando a tela de um radar.

Utilizamos o seguinte circuito para o projeto de radar, é muito simples pois envole pouco hardware:

Após realizar as configurações do circuito acima, há um passo importante na construção que você precisa executar, isto não é obrigatório, mas como o sensor (Ultrassônico) deve varrer um anglo de 180 graus (A movimentação será por conta de servo motor), poderá ser usado um suporte de montagem apenas para fixar o sensor.

Depois de fixar o sensor, poderá ser fixado o sensor junto ao servo motor.

Estes passos são opcionais, também pode ser feito uma estrutura simples apenas para segurar o sensor e movimentá-lo usando as mãos.

## Código

Exitem dois códigos para este projeto: um para o arduíno (onde sera feita a programação do servo motor e também do sensor ultrassônico) e outro para o Proccessing.

**<pre>**

#include <Servo.h>.

const int trigPin = 10;

const int echoPin = 11;

long duration;

int distance;

Servo myServo;

void setup() {

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

  Serial.begin(9600);

  myServo.attach(12);

}

void loop() {

  // Este loop é para o funcionamento do servo motor

  for(int i=15;i<=165;i++){

myServo.write(i);

delay(30);

distance = calculateDistance();

Serial.print(i);

Serial.print(",");

Serial.print(distance);

Serial.print(".");

  }

  for(int i=165;i>15;i--){

myServo.write(i);

delay(30);

distance = calculateDistance();

Serial.print(i);

Serial.print(",");

Serial.print(distance);

Serial.print(".");

  }

}

// Funcao para calcular a distancia medida a partir do Sensor ultrassonico

**<pre>**

int calculateDistance(){

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);

  distance= duration\*0.034/2;

  return distance;

}

#### O código para o processing é o abaixo:

**<pre>**

 import processing.serial.\*;

import java.awt.event.KeyEvent;

import java.io.IOException;

Serial myPort;

String angle="";

String distance="";

String data="";

String noObject;

float pixsDistance;

int iAngle, iDistance;

int index1=0;

int index2=0;

PFont orcFont;

void setup() {

 size (1920, 1080);

 smooth();

 myPort = new Serial(this,"COM4", 9600);

 myPort.bufferUntil('.');

 orcFont = loadFont("OCRAExtended-30.vlw");

}

void draw() {

  fill(98,245,31);

  textFont(orcFont);

  noStroke();

  fill(0,4);

  rect(0, 0, width, height-height\*0.065);

  fill(98,245,31); // green color

  drawRadar();

  drawLine();

  drawObject();

  drawText();

}

void serialEvent (Serial myPort) {

  data = myPort.readStringUntil('.');

  data = data.substring(0,data.length()-1);

  index1 = data.indexOf(",");

  angle= data.substring(0, index1);

  distance= data.substring(index1+1, data.length());

  iAngle = int(angle);

  iDistance = int(distance);

}

void drawRadar() {

  pushMatrix();

  translate(width/2,height-height\*0.074);

  noFill();

  strokeWeight(2);

  stroke(98,245,31);

  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);

  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);

  strokeWeight(9);

  stroke(255,10,10);

  pixsDistance = iDistance\*((height-height\*0.1666)\*0.025);

  if(iDistance<40){

   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);

  line(0,0,(height-height\*0.12)\*cos(radians(iAngle)),-(height-height\*0.12)\*sin(radians(iAngle)));

  popMatrix();

}

void drawText() {

  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();

}

### Colocando para funcionar:

Inicialmente faça o upload do código para o Arduino depois de fazer as conexões e abra o aplicativo Processing e cole o código fornecido acima.

Agora, execute o sketch no Processing, caso ocorra o espera você poderá ver a tela abaixo:

## Resultados

Apesar de ser um simples projeto tivemos alguns imprevistos quanto ao software de interface que utilizamos (Processing), pois o mesmo não respeitava a resolução adequada do monitor utilizado.

Para este projeto funcionar de acordo com o previsto também é necessário gastar algum tempo para fazer o suporte do sensor ultrassônico e fixá-lo ao servo motor, feito isso, não é necessário nenhuma interação humana para identificar os objetos a frente.

## Conclusão

Este projeto inicial foi executado com sucesso. Identificamos vários aperfeiçoamentos/upgrade ao projeto que poderá ser incluídos no futuro, tais como:

1- Incluir bip de som, ao aproximar o objeto emitir um sistema sonoro, quanto mais próximo do objeto o som mais alto ficará.

2- Incluir vários sensores ultrassônicos para atingir o ângulo de 360°

3- Adicionar algum potencializar para aumentar o alcance, atualmente atingi 4 metros.

4- Poder controlar o servo motor com algum potenciômetro.

E muitos outros...

Este projeto também agregou nos conhecimentos obtidos tanto para o Arduíno quanto ao software Processing, isto com certeza irá nos ajudar a criar nos projeto mais complexos no futuro.