Construa um Mapeador Ultrassônico com Arduino Yun – Guia Passo a Passo
Componentes e Materiais
| Arduino Yun | 1 |
| Sensor Ultrassônico | 1 |
| Servo Tower Pro MG996R | 1 |
| Jumpers (genéricos) | 10 |
Aplicativos e Serviços Online
- Arduino IDE
- MATLAB
Sobre o Projeto
Passo 1: Teoria
Neste projeto usamos sensor ultrassônico de distância. Ele gera ondas sonoras além da audição humana e mede distância calculando o tempo que essas ondas levam para atingir um obstáculo e retornar. Princípio similar ao usado por morcegos e navios.

Outro componente é o servo motor. Diferente de motor DC comum, ele gira precisamente para uma posição angular dada e mantém esse estado. Quando recebe pulsos de duração específica, move para a posição angular correspondente.

Usaremos ambos para obter campo de visão de 180 graus para nosso robô.
Passo 2: Coletando Materiais
Hardware:
- Arduino Uno/Yun (qualquer placa com footprint Arduino serve)
- Shield de Prototipagem Arduino
- Sensor Ultrassônico HC-04
- Servo motor (usei Tower Pro SG90 por ser compacto)
Software:
- Arduino IDE para carregar código de controle no Arduino: rotacionar servo, obter dados do sensor ultrassônico e enviar à porta serial.
- Mathworks MATLAB para receber dados da porta serial, processar e visualizar em gráfico.
Passo 3: Montagem Mecânica

Usando pequeno pedaço de PCB de uso geral, faça um header pequeno para o HC-04 e fixe na haste do servo com fita dupla face.

Este passo é opcional, mas para tornar o sistema mais compacto, fixei o servo na parte saliente do shield protoboard também com fita dupla face.

O resultado final deve parecer o abdômen do Wall-E.
Passo 4: Código do Arduino
O código Arduino controla o movimento do servo, quando as leituras do sensor ultrassônico são capturadas e com que frequência. Também envia dados do sensor à porta serial.
- Importar bibliotecas
- Inicializar variáveis e pinos
- Inicializar objeto servo
- Inicializar comunicação serial
- Aguardar 3 segundos
- Inicializar contadores em 0
- Rotacionar servo 1 grau
- Obter dados do sensor ultrassônico 10 vezes (padrão)
- Calcular média dos dados
- Enviar média à porta serial
- Retornar ao passo 7
Passo 5: Código MATLAB
O código MATLAB lida mais com dados que com controle da placa. Todos os dados do sensor são enviados via serial ao PC, onde são lidos pelo MATLAB.
Os dados recebidos do Arduino nos dizem duas coisas: o grau de rotação do servo e a distância de um obstáculo nessa direção. Portanto, os dados estão no sistema de coordenadas polares. Para fazer sentido visualmente, devem ser convertidos para coordenadas Cartesianas (X-Y).

O código MATLAB faz exatamente isso. Obtém dados serial da porta COM, salva em matriz com ângulo de rotação, converte para coordenadas Cartesianas com a fórmula acima.
Feito isso, plota os pontos no gráfico. Coloquei a placa numa caixa e obtive o seguinte resultado.

Passo 6: Conclusão

Embora o sistema não seja perfeito, cumpre o propósito. Consegue estimar largura e comprimento da caixa e envia dados com precisão.
Os únicos erros visíveis são devido à trepidação do sensor enquanto o servo move e leituras falhas do próprio sensor.
Fora isso, o sistema funciona bem e pode ser usado para experimentos de percepção de profundidade e projetos básicos de visão computacional.
Código
- matlab_code_to_run_on_pc.m
- Código Arduino
matlab_code_to_run_on_pc.m MATLAB
Código MATLAB para compilar e executar no PC
theta = 0:(pi/180):pi;
s = serial('COM10');
s.BaudRate=9600
fopen(s)
i = 0;
inc = 1;
while i<180
A = fgets(s);
num(i+1) = str2num(A);
i = i+1;
end
fclose(s)
j = 1
while j<181
tab(j,1) = (j-1)*inc
tab(j,2) = num(j)
tab(j,3) = num(j)*cosd((j-1)*inc)
tab(j,4) = num(j)*sind((j-1)*inc)
j = j+1
end
plot(tab(:,3),tab(:,4))
Código Arduino Arduino
Código Arduino para carregar no Arduino Yun
#include <Servo.h>
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;
int pos = 0;
int it = 10;
void setup() {
myservo.attach(9);
Serial.begin(9600);
delay(3000);
}
void loop() {
int i = 0;
int t = 0;
int a = 0;
for (i = 0; i < 180; i ++) {
unsigned int uS = sonar.ping();
myservo.write(i);
delay(20);
for (t = 0; t < it; t++) {
uS = sonar.ping();
a = uS/US_ROUNDTRIP_CM + a;
delay(30);
}
a = a / (it-1);
t = 0;
Serial.println(a);
a = 0;
}
}
Esquemáticos
Arquivo Fritzing para conexões do servo e sensor ultrassônico YunConfig.fzz
Processo de manufatura
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo
- Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
- FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
- Veículo Remoto Controlado por Android com Raspberry Pi e Motor Shield
- Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
- Servidor Web Arduino Uno WiFi: Controle LED via Navegador
- Criar Robô Seguidor de Linha Autônomo com Arduino UNO