Construye un Escáner Ultrasónico Mapeador con Arduino Yun – Guía Paso a Paso
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Arduino Yun | 1 |
| Sensor Ultrasónico (HC-SR04) | 1 |
| Servomotor (Tower Pro MG996R) | 1 |
| Cables jumpers (genéricos) | 10 |
Aplicaciones y Servicios en Línea
- Arduino IDE
- MATLAB
Sobre el Proyecto
Paso 1: Teoría
Usamos un sensor de distancia ultrasónico. Genera ondas de sonido más allá del rango auditivo humano y mide la distancia calculando el tiempo que tardan en rebotar en un obstáculo y volver. Principio similar al de murciélagos y sonares de barcos.

El servomotor difiere de un motor DC estándar: puede girar con precisión a una posición angular dada y mantenerla. Al recibir pulsos de duración específica, se mueve al ángulo correspondiente.

Combinando ambos componentes obtenemos un campo de visión de 180 grados para nuestro robot.
Paso 2: Recopilación de Materiales
- Arduino Uno/Yun (cualquier placa con factor de forma Arduino sirve)
- Shield de prototipado Arduino
- Sensor ultrasónico HC-SR04
- Servomotor (usé Tower Pro SG90 por ser compacto)
- Software: Arduino IDE para cargar código de control del servo y lectura del sensor, enviando datos al puerto serie.
- MathWorks MATLAB para recibir datos del puerto serie, procesarlos y visualizarlos en gráfico.
Paso 3: Montaje Mecánico

Con un trozo de PCB de uso general, crea un pequeño header para el HC-SR04 y fíjalo al brazo del servo con cinta de doble cara.

Opcional: para mayor compacidad, fijé el servo a la parte saliente del shield de prototipado también con cinta de doble cara.

El resultado final recuerda al abdomen de Wall-E.
Paso 4: Código de Arduino
El código controla el movimiento del servo, cuándo y con qué frecuencia capturar lecturas del sensor ultrasónico, y envía los datos al puerto serie.
- Importar bibliotecas
- Inicializar variables y pines
- Inicializar objeto servo
- Iniciar comunicación serie
- Esperar 3 segundos
- Inicializar contadores a 0
- Rotar servo 1 grado
- Obtener datos del sensor ultrasónico 10 veces (por defecto)
- Calcular promedio
- Enviar promedio al puerto serie
- Volver al paso 7
Paso 5: Código de MATLAB
MATLAB maneja los datos, no el control de la placa. Los datos del sensor se envían por serie al PC, donde MATLAB los lee.
Los datos recibidos indican: ángulo de rotación del servo y distancia del obstáculo en esa dirección. Es decir, datos en coordenadas polares. Para visualizarlos comprensiblemente, deben convertirse a coordenadas cartesianas (X-Y).

El código MATLAB lee del puerto COM, guarda en matriz con el ángulo, y convierte a cartesianas con la fórmula:
x = r * cos(θ)
y = r * sin(θ)
Luego grafica los puntos. Colocando el dispositivo en una caja, obtuve este resultado:

Paso 6: Conclusión

Aunque el sistema no es perfecto, cumple su función. Estima aproximadamente ancho y largo de la caja y envía datos con precisión.
Los únicos errores visibles son por vibración del sensor al mover el servo y lecturas erróneas del propio sensor.
Fuera de eso, funciona bien y puede usarse para experimentos de percepción de profundidad y proyectos básicos de visión artificial.
Código
- matlab_code_to_run_on_pc.m
- Código Arduino
matlab_code_to_run_on_pc.m MATLAB
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
#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
Archivo Fritzing para conexiones de servo y sensor ultrasónico: YunConfig.fzz
Proceso de manufactura
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso
- Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
- FlickMote: Mando IR por gestos para Smart Home
- Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
- Monitor de Frecuencia Cardíaca IoT en Tiempo Real con Arduino y MAX30100
- Vehículo Controlado por Android con Raspberry Pi, Arduino y Motor Shield: Guía Completa
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Servidor Web Arduino Uno WiFi: Controla un LED desde el Navegador
- Robot Seguidor de Línea Autónomo con Arduino UNO: Guía Paso a Paso
- Automatiza el Juego del Dinosaurio de Chrome con Arduino y Python