18-2 Grupo 3

**Autor - Lista de nomes e RA dos participantes do grupo.**

ADERLEI WESLEI SOARES DE LIMA - RA: 0040961823006

BRUNO VITOR CORREA - RA: 0040961823049

VITOR NIIMI NOVO - RA: 0040961823031

**Projeto** - Radar Sonar.

**Resumo - Em poucas palavras, o projeto.**

O projeto tem por objetivo determinar a distância de algum objeto em 360º.

**Software / materiais utilizados - Lista do que foi utilizado para a execução do projeto.**

Materiais utilizados:

* Motor de passo;
* Led RGB;
* Piezo-elétrico;
* Ultra-som;

importação processing.serial. \*; // servidor serial para comunicação serial

import java.awt.event.KeyEvent; // importa uma biblioteca para ler os dados da porta serial

import java.io.IOException;

Série MyPort; // define uma serial do objeto

// defuga variables

Ângulo da corda = "";

Distância da corda = "";

Dados de string = "";

String noObject;

float pixsDistance;

int iAngle, iDistance;

int index1 = 0;

int index2 = 0;

PFont orcFont;

int cx, cy;

float secondsRadius;

float circleDiameter;

void setup () {

// size (1200, 800); // \*\*\* MUDE ISTO PARA SUA RESOLUÇÃO DE TELA \*\*\*

tamanho (1200, 540);

s **mooth ();**

myPort = new Serial (isto é, "COM3", 9600); // inicia uma comunicação serial

myPort.bufferUntil ('.'); // lê os dados da porta serial até o caractere '.' Então, na verdade, lê isto: ângulo, distância.

orcFont = createFont ("Arial", 4);

int radius = min (largura, altura) / 2;

segundosRádio = raio \* 0,9;

circleDiameter = raio \* 1,8;

cx = 0;

cy = -250;

}

void draw () {

preenchimento (98,245,31);

textFont (orcFont);

// simulando motion blur e slow fade da linha em movimento

noStroke ();

preenchimento (0,4);

rect (0, 0, largura, altura-altura \* 0,065);

preenchimento (98,245,31); // cor verde

// chama as funções para desenhar o radar

drawRadar ();

símbolo linha ();

drawObject ();

drawText ();

}

void serialEvent (Serial myPort) {// inicia uma leitura de dados da porta serial

// lê os dados da porta serial até o caractere '.' e coloca na variável String "data".

data = myPort.readStringUntil ('.');

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

index1 = data.indexOf (","); // encontre o caractere ',' e coloque-o na variável "index1"

ângulo = data.substring (0, índice1); // lendo os dados da posição "0" para a posição da variável index1 ou é o valor do ângulo que uma placa do Arduino foi enviada para uma porta serial

distance = data.substring (index1 + 1, data.length ()); // leia os dados da posição "index1" para o final dos dados pr que é o valor da distância

// converte as variáveis ​​String em Integer

iAngle = int (ângulo);

iDistance = int (distância);

}

void drawRadar () {

pushMatrix ();

traduzir (largura / 2, altura-altura \* 0,074); // mover como coordenadas iniciais para o novo local

Sem preenchimento ();

cursoPeso (2);

acidente vascular cerebral (98,245,31);

// desenha as linhas do arco

elipse (cx, cy, circleDiameter, circleDiameter);

elipse (cx, cy, circleDiameter / 1.3, circleDiameter / 1.3);

elipse (cx, cy, circleDiameter / 2, circleDiameter / 2);

elipse (cx, cy, circleDiameter / 4, circleDiameter / 4);

linha (largura / 2,0, largura / 2,0);

popMatrix ();

}

void drawObject () {

pushMatrix ();

traduzir (largura / 2, altura-altura \* 0,074); // mover como coordenadas iniciais para o novo local

acidente vascular cerebral (9);

acidente vascular cerebral (98,245,31);

pixsDistance = iDistance \* 5.6; Para sensor de cm para pixels

text (pixsDistance, 600,600);

// limitando o alcance a 40 cms

if (iDistance <40 e iDistance> = 0) {

// desenha o objeto de acordo com o início e a distância

float s = map (iAngle, 0, 360, 0, TWO\_PI) - HALF\_PI;

// linha (cx, cy, pixsDistance, cy + sin (s) \* segundosRadius);

// linha (cx, cy, cos (ns) \* quantasRádio, cy + sen (s) \* -vidasRádio);

linha (cx, cy, cx + cos (s) \* pixsDistância, cy + pecado (s) \* pixsDistance);

}

popMatrix ();

}

void drawLine () {

pushMatrix ();

acidente vascular cerebral (9);

acidente vascular cerebral (30.250,60);

traduzir (largura / 2, altura-altura \* 0,074); // mover como coordenadas iniciais para o novo local

if (iDistance> 0 && iDistance <= 40)

acidente vascular cerebral (255,10,10); // cor vermelha

Outro

acidente vascular cerebral (98,245,31);

float s = map (iAngle, 0, 360, 0, TWO\_PI) - HALF\_PI;

linha (cx, cy, cx + cos (s).

// linha (0, -350, (altura-altura \* 0,12) \* cos (radianos (iAngle)), - (altura-altura \* 0,12) \* sin (radianos (iAngle))); // desenha uma linha de acordo com o ângulo

popMatrix ();

}

void drawText () {// desenha os textos na tela

pushMatrix ();

if (iDistance> 40) {

noObject = "Fora de alcance";

}

outro {

noObject = "Sem alcance";

}

preenchimento (0,0,0);

noStroke ();

rect (0, altura-altura \* 0,0670, largura, altura);

preenchimento (98,245,31);

textSize (25);

float s = map (iAngle, 0, 360, 0, TWO\_PI) - HALF\_PI;

textSize (28);

text ("Objeto:" + noObject, largura-largura \* 1, altura-altura \* 0.0277);

texto ("Ângulo:" + iAngle + "°", largura-largura \* 0,53, altura-altura \* 0,0277);

texto ("Distância:", largura-largura \* 0,30, altura-altura \* 0,0277);

if (iDistance <40 e iDistance> = 0) {

texto ("" + iDistance + "cm", largura-largura \* 0,225, altura-altura \* 0,0277);

}

textSize (25);

popMatrix ();

}

Código do arduino:

# Definir grau 6,25

Tom TonePlayer1 (TCCR1A, TCCR1B, OCR1AH, OCR1AL, TCNT1H, TCNT1L);

HcSr04 hc;

class MyClass: public RunTimer

{

público:

void onTimerEvent ()

{

long dist = hc.hcDist ();

Serial.print (dist);

Serial.print (".");

if (dist <= 20 && dist> 0) {

rgb (255, 0, 0);

tone1.tone (880);

}

else if (dist> 20 && dist <= 40) {

rgb (255, 255, 0);

tone1.tone (220);

}

outro {

rgb (0, 0, 0);

tone1.noTone ();

}

}

void rgb (int redValue, int greenValue, int blueValue) {

analogWrite (redPin, 255 - redValue);

analogWrite (greenPin, 255 - greenValue);

analogWrite (bluePin, 255 - blueValue);

}

};

MyClass mc;

Stepper myStepper (500, 4,6,5,7);

void setup ()

{

pinMode (redPin, OUTPUT);

pinMode (greenPin, OUTPUT);

pinMode (bluePin, OUTPUT);

pinMode (piezo, OUTPUT);

hc.begin (triggPin, echoPin);

mc.startMillis (0);

Serial.begin (9600);

myStepper.setSpeed ​​(60);

}

loop void ()

{

para (int i = 0; i <360; i ++)

{

myStepper.step (grau);

Serial.print (i);

Serial.print (",");

mc.run ();

}

para (int i = 360; i> 0; i--)

{

myStepper.step (-grau);

Serial.print (i);

Serial.print (",");

mc.run ();

}

}

**Metodologia - Descreva o funcionamento do projeto. O que faz o projeto funcionar?**

O projeto do radar foi desenvolvido com o objetivo de detectar um objeto entre 1 a 40 cm de distância em um ângulo de 360º, quando o sensor está entre 1 e 20cm o Led fica vermelho e a frequência do som aumenta, entre 20 e 40cm o Led fica amarelo e o piezo apita em uma frequência baixa, Para isso foi usada os componentes abaixo do Arduino.

Sensor Ultrassônico é um sensor de proximidade e distância; Os principais componentes principais são:

Transmissor Ultrassônico - Emite as ondas ultrassônicas que são direcionadas aos obstáculos;

Um receptor - Identifica o eco do sinal emitido pelo transmissor;

Circuito de controle - Controles de
conjunto / receptor, cálculo de tempo entre a recepção e a recepção do sinal;

Motor de Passo: é um dispositivo eletromecânico que faz os impulsos elétricos em carris discretos mecânicos. O eixo de um motor gira em incrementos discretos quando os impulsos de comando são acionados a uma corrente correta. A rota dos carros tem várias direções com estes pulsos de entrada. A partida dos impulsos está aberta com o botão de direção do motor, a velocidade do movimento do motor com a frequência dos impulsos de entrada e o tamanho da velocidade com o número de impulsos de entrada. Ou seja, para o processo de atualização, aplique uma tensão a cada uma das bobinas em uma frequência.

Piezo: é um dispositivo que varia com a mesma força sobre o transdutor piezelétrico.

1/7

**Desenvolvimento - Como foi o desenvolvimento, problemas encontrados, soluções recém.**

Durante o desenvolvimento do projeto nos deparamos com dois problemas:

1. Fixação do transmissor ultrassônico no motor de passo, foi uma tarefa um pouco complicada tentar fixar na base do motor, pois não o grupo não tinha nenhum suporte para prender o motor com o transmissor, como solução, foi utilizado espetos de churrascos fixados na base do motor e foi amarrado com um elástico oara o transmissor não cair;
2. Problemas na utilização do piezo, pois quando o arduino estava compilando o projeto, existia um conflto entre o runtimer2 com a porta utilizada pelo piezo para emitir sons, para sanar esse problema foi baixado uma biblioteca da web que permitia utilizar a porta 9 para conseguir trablhar com o piezo e o runtimer2.

**Resultados - Atingiu o resultado causado? Comente os resultados.**

Apesar da dificuldade que foi o desenvolvimento do novo código, Atendeu nossas expectativas, atingindo o resultado desejado do que nós tínhamos em mente para o projeto, Talvez pecamos no quesito do Hardware, pois falto uma  melhor fixação do Ultrassónico ao motor de passo e uma base para motor de passo.

**Conclusão - As impressões do grupo sobre esta atividade.**

O projeto foi bem completo pelo grau de dificuldade, apesar de termos pegado a ideia pronta, teve bastante trabalho no desenvolvimento do novo código. Atendendo as expectativas pelo desafio de fazer o projeto.