Sonar con Arduino y sensor ultrasónico
Imagina un barco de guerra en medio del océano. Aunque no pueda ver qué hay a kilómetros de distancia, utiliza sistemas de detección para saber si existe otro barco u objeto cerca. Inspirándonos en esta idea, construiremos nuestro propio sonar con Arduino y sensor ultrasónico, capaz de explorar de un lado a otro en busca de objetos cercanos.
Cuando encuentre un objeto dentro del rango establecido, el sistema activará una alerta haciendo titilar un LED rojo y sonar un zumbador.
Materiales
Para construir nuestro sonar con Arduino y sensor ultrasónico, necesitaremos los siguientes componentes y algunos materiales para realizar el montaje:
- 1 Arduino UNO
- 1 Sensor ultrasónico HC-SR04
- 1 Servomotor SG90
- 1 LED rojo
- 1 Resistencia de 220 Ω
- 1 Zumbador
- Cables jumper macho-macho
- Cables jumper macho-hembra
- Silicona
- 1 Base de cartón, madera o similar
Circuito
Realiza las conexiones de todos los componentes siguiendo el siguiente diagrama.
Código
Ahora vamos a darle vida a nuestro sonar. El Arduino será el encargado de mover el sensor de un lado a otro, medir las distancias y activar la alerta cuando encuentre un objeto cercano.
Si todavía no tienes instalado Arduino IDE o no sabes cómo empezar a utilizarlo, sigue primero nuestro tutorial sobre cómo descargar e instalar Arduino IDE.
El programa hará que el servomotor realice un barrido continuo mientras el sensor ultrasónico busca objetos. Si detecta uno a menos de 20 cm, el LED rojo titilará y el zumbador emitirá una alerta.
#include
Servo servoSonar;
// -------------------------
// PINES
// -------------------------
const int TRIG = 4;
const int ECHO = 2;
const int SERVO = 11;
const int LED_ROJO = 7;
const int ZUMBADOR = 8;
// -------------------------
// CONFIGURACIÓN DEL SERVO
// -------------------------
int anguloMinimo = 20;
int anguloCentro = 90;
int anguloMaximo = 160;
// Velocidad del barrido
int pasoServo = 2;
int tiempoServo = 40;
// -------------------------
// CONFIGURACIÓN DEL SONAR
// -------------------------
const int DISTANCIA_ALERTA = 40;
long duracion;
float distancia;
// =========================
// CONFIGURACIÓN INICIAL
// =========================
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(LED_ROJO, OUTPUT);
pinMode(ZUMBADOR, OUTPUT);
servoSonar.attach(SERVO);
// Colocar el servo en el centro
servoSonar.write(anguloCentro);
delay(2000);
Serial.begin(9600);
}
// =========================
// PROGRAMA PRINCIPAL
// =========================
void loop() {
// -------------------------
// Barrido de izquierda a derecha
// -------------------------
for (int angulo = anguloMinimo;
angulo <= anguloMaximo;
angulo += pasoServo) {
servoSonar.write(angulo);
delay(tiempoServo);
distancia = medirDistancia();
mostrarDatos(angulo);
verificarObjeto();
}
// -------------------------
// Barrido de derecha a izquierda
// -------------------------
for (int angulo = anguloMaximo;
angulo >= anguloMinimo;
angulo -= pasoServo) {
servoSonar.write(angulo);
delay(tiempoServo);
distancia = medirDistancia();
mostrarDatos(angulo);
verificarObjeto();
}
}
// =========================
// MEDIR DISTANCIA
// =========================
float medirDistancia() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duracion = pulseIn(ECHO, HIGH, 30000);
// Si no recibe eco
if (duracion == 0) {
return 999;
}
float distanciaCalculada;
distanciaCalculada = duracion * 0.0343 / 2;
return distanciaCalculada;
}
// =========================
// DETECCIÓN DE OBJETOS
// =========================
void verificarObjeto() {
if (distancia <= DISTANCIA_ALERTA) {
digitalWrite(LED_ROJO, HIGH);
tone(ZUMBADOR, 1000);
delay(80);
digitalWrite(LED_ROJO, LOW);
noTone(ZUMBADOR);
delay(80);
}
else {
digitalWrite(LED_ROJO, LOW);
noTone(ZUMBADOR);
}
}
// =========================
// MONITOR SERIAL
// =========================
void mostrarDatos(int angulo) {
Serial.print("Angulo: ");
Serial.print(angulo);
Serial.print(" grados | Distancia: ");
Serial.print(distancia);
Serial.println(" cm");
}
🧠 Aprende Robótica e IA desde cero
🧠 Tus robots también pueden tener IA. Aprende a combinar sensores, motores, visión artificial y voz con proyectos prácticos.
🎁 10% de descuento con el cupón IA10.
Pruebas Experimentales
¡Es momento de poner a prueba nuestro sonar! 📡 Al encenderlo, el servomotor se colocará primero en 90° y después comenzará a explorar de un lado a otro.
Coloca un objeto frente al sensor y acércalo a menos de 20 cm. Al detectarlo, el LED rojo debe comenzar a titilar y el zumbador debe emitir una alerta. Al retirar el objeto, ambos deben desactivarse mientras el sonar continúa su recorrido.
🧠 Aprende Robótica e IA desde cero
🧠 Tus robots también pueden tener IA. Aprende a combinar sensores, motores, visión artificial y voz con proyectos prácticos.
🎁 10% de descuento con el cupón IA10.