Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
Componentes e Materiais
| Arduino UNO | 1 |
| Micro Servo SG90 | 1 |
| Sensor Ultrassônico HC-SR04 | 1 |
| Jumpers (genéricos) | 1 |
| Protoboard Tamanho Completo | 1 |
Ferramentas Necessárias
- Pistola de cola quente
- Kit de solda SolderPro 150
Aplicativos e Serviços Online
- Arduino IDE
- Processing IDE (Fundação Processing)
Sobre o Projeto
Inicialmente pensei em fazer um carro desvia-obstáculos, mas achei muito comum. Decidi criar um sonar usando o mesmo conceito: servo + sensor HC-SR04. Como não tinha display TFT, usei o Processing IDE para visualizar a saída no PC com boa resolução. Pratiquei primeiro no editor web p5 e depois migrei para o Processing com bibliotecas para leitura serial.
O sensor ultrassônico foi colado no servo com cola quente, cobrindo 180°. A saída mostra se objeto foi detectado, além de distância e ângulo precisos.
Código
Código para Arduino IDE (C/C++)
#include
const int trigPin=12;
const int echoPin=11;
long duration;
int distance;
Servo s1;
void setup() {
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
s1.attach(9);
}
void loop(){
for(int i=0;i<180;i+=1){
s1.write(i);
delay(30);
distance = calDist();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
for(int i=180;i>0;i-=1){
s1.write(i);
delay(30);
distance = calDist();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
}
int calDist(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
return distance;
}
Código para Processing IDE (Java)
import processing.serial.*;
Serial myPort;
String ang="", distance="", data="";
int angle, dist;
void setup() {
size(2000,800);
myPort = new Serial(this,"COM3", 9600);
myPort.bufferUntil('.');
background(0);
}
void draw() {
fill(0,5); noStroke();
rect(0, 0, width, height*0.93);
fill(0,255); rect(0,height*0.93,width,height);
drawRadar(); drawLine(); drawObject(); drawText();
}
void serialEvent(Serial myPort) {
data = myPort.readStringUntil('.');
data = data.substring(0,data.length()-1);
int index1 = data.indexOf(",");
ang = data.substring(0, index1);
distance = data.substring(index1+1, data.length());
angle = int(ang);
dist = int(distance);
}
void drawRadar(){ /* desenha arcos e linhas do radar */ }
void drawLine(){ /* desenha linha do ângulo atual */ }
void drawObject(){ /* desenha objeto detectado */ }
void drawText(){ /* desenha textos de escala e distância */ }
Esquemático
Conexões: HC-SR04 (Trig→12, Echo→11), Servo (Sinal→9), alimentação 5V/GND comum.
Processo de manufatura
- Detector de Idiomas TinyML com Edge Impulse no Arduino Nano 33 BLE Sense
- Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
- Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
- Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield
- Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
- Contador Inteligente de Vagas: Rastreamento de Veículos em Tempo Real com Arduino, Processing e PHP
- Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
- Construa uma Bússola Digital em Tempo Real com Arduino e Processing