Encuentra tu pasión a solo 4,17 US$/mes | Aprende Robótica, IA e IOT.

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.

Circuito del proyecto Sonar con Arduino y sensor ultrasónico

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.h>


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.

Ingrese a su cuenta