¿Qué es un sonar?

Prácticas con DASA

Título de la práctica:¿Qué es un sonar?
Objetivo:El alumno aprenderá a detectar objetos en un rango de distancia determinado con la implementación de un sonar con Arduino, haciendo uso de un servomotor y un sensor ultrasónico.
Tiempo estimado:100 minutos
Nivel de dificultad:Avanzado
Autora:Sara Rodríguez González

Introducción

Un sonar es un dispositivo que utiliza la propagación del sonido con el fin de navegar, comunicarse o detectar objetos. En un inicio, los sonares se desarrollaron para ayudar a los capitanes de la marina a detectar objetos en las profundidades del mar que pudieran llegar a dañar los barcos. Hoy en día tienen diversas aplicaciones en distintos campos tales como:

  • Aplicaciones militares. Usados desde la época de la Segunda Guerra Mundial para que los barcos pudieran detectar submarinos enemigos y evitar ataques sorpresa.
  • Aplicaciones civiles. Empleados en actividades de pesca y en la búsqueda de aviones o barcos hundidos en el océano.
  • Aplicaciones científicas. Aprovechados para en el cálculo de la biomasa, así como para en la caracterización del suelo marino y arqueología subacuática.
Figura 1 Sonar. Fuente: National Ocean Servie Image Gallery

Materiales

Programas

Arduino IDE. Disponible en: https://www.arduino.cc/en/software

Desarrollo

Para el desarrollo de esta práctica utilizaremos varios componentes, de los cuales algunos se encuentran ya integrados en la tarjeta DASA, como los LEDs y el zumbador pasivo. Por otra parte, también emplearemos otros dispositivos que conectaremos de manera externa como es el caso del sensor ultrasónico HC-SR04 y el servomotor.

A continuación, encontrarás videos que contienen información acerca de las características y funcionamiento de los elementos mencionados:

Servomotor
Sensor de ultrasonido
Zumbador piezoeléctrico

Construcción del circuito electrónico

En esta sección empezaremos a conectar todos los dispositivos electrónicos necesarios para construir nuestro sonar.

Conexión del servomotor al DASA

Precaución: Para esta práctica no se conectará el servomotor directamente al header asignado para dicho componente en la tarjeta DASA. Esto es debido a que el sensor ultrasónico HC-SR04 y el servomotor utilizan las mismas líneas de control. Para solucionar esto, se conectará el servomotor al DASA como se muestra en la Figura 2:

  1. Toma dos cables jumper macho-hembra y un cable macho-macho.
  2. Agarra uno de los jumpers macho-hembra y conéctalo a la tierra del servomotor (cable café).
  3. Ubica en el DASA la conexión para el servomotor. Dicha conexión está señalada como «SERVO-D6» en la tarjeta.
  4. Introduce el otro extremo del cable jumper al pin del lado derecho, designado en la serigrafía como «CAFE».
  5. Toma otro cable jumper macho-hembra y conéctalo al pin de alimentación del servomotor (cable rojo).
  6. De nuevo en la conexión designada para el servomotor en la tarjeta DASA, conecta el otro extremo del cable jumper al pin central.
  7. Toma el jumper macho-macho y conéctalo al último pin disponible del servomotor, el cual corresponde a la señal (cable naranja).
  8. Por último, deberás ubicar el header correspondiente al pin analógico A5. Este pin se encuentra en la conexión designada para el sensor de gas MQ-x. Una vez ubicado este header de 6 pines, el pin al que debes conectar el extremo del jumper estará etiquetado como «A5».
Figura 2 Conexión del servomotor al DASA

Conexión y ensamble del sensor ultrasónico HC-SR04 al DASA

Para la conexión del sensor ultrasónico HC-SR04 utilizaremos la liga de hule, un brazo para servo (incluido con el servomotor) y cuatro cables jumper macho-hembra. Empezaremos por ensamblar el brazo para servo con el sensor ultrasónico, para lo cual se recomienda seguir los siguientes pasos:

  1. Tomar los cuatro cables jumper y conectar los extremos macho a los pines del sensor ultrasónico.
  2. Colocar la liga por encima del sensor y debajo de los cables jumper.
  3. Empezar a dar vuelta a la liga, de tal manera que pase por en medio del receptor y emisor del sensor ultrasónico.
  4. Coloca el brazo para servo de manera que sostenga el extremo opuesto a los pines del sensor. Asimismo, asegúrate de que la parte donde se conecta al servomotor quede libre, es decir, hacia abajo para que se pueda acoplar al mismo.
  5. Sigue dando vuelta a la liga alrededor del servomotor. Una vez que llegues a los pines y los cables jumper, deberás pasar los jumpers por debajo de la liga. Asegúrate que los extremos del brazo se mantengan soportados por la liga.
  6. Después, deberás volver a dar una vuelta con la liga al sensor y al brazo, hasta volver a pasar los cables jumper debajo de la liga. Esto deberás hacerlo cuantas veces te permita la liga, lo que dependerá de su largo.
  7. Luego, pasa el extremo de la liga alrededor del emisor y receptor del sensor ultrasónico. De esta forma, el sensor tendrá un buen soporte para después colocarlo al servo.
  8. Por último, conecta el brazo al servomotor.

Las Figuras 3 y 4 ilustran los pasos anteriormente mencionados.

Figura 3. Ensamble del sensor ultrasónico HC-SR04 al brazo para servomotor
Figura 4 Ensamble del sensor ultrasónico HC-SR04 al servomotor

Ahora conectaremos el sensor ultrasónico HC-SR04 al DASA. Para ello, ubica el header de 4 pines señalado como HC-SR04 en la tarjeta. Después, conecta cada extremo macho de los cables jumper utilizados en el sensor ultrasónico. Asegúrate que cada pin del sensor HC-SR04 (los cuales se encuentran rotulados en la parte posterior del sensor) correspondan con cada pin del header (designados en la serigrafía de la tarjeta).

Figura 5 Conexión del sensor ultrasónico HC-SR04 al DASA

Por último, conecta el DASA a la tarjeta Arduino UNO, como se muestra en la Figura 6. Confirma que todos los pines se introduzcan completamente en los conectores de la tarjeta Arduino correspondientes.

Figura 6 Conexión de la tarjeta DASA al Arduino UNO

Nota: si no cuentas con un DASA, puedes construir el circuito electrónico mostrado en la Figura 7, o bien, utilizar la herramienta de simulación de circuitos electrónicos Arduino de Tinkercad.

Figura 7 Diagrama esquemático del circuito electrónico del sonar

Programación del circuito electrónico

El procedimiento que debemos seguir para el funcionamiento del sonar es el siguiente:

  1. Mover un grado el servomotor.
  2. Enviar un pulso de 10 microsegundos por el pin TRIG.
  3. Medir el tiempo que transcurre entre el envío del pulso ultrasónico del pin TRIG y la recepción de la señal de rebote por el pin ECHO.
  4. Calcular la distancia.
  5. Evaluar si la distancia es menor a 30 cm. Si lo es, encender el LED rojo, producir un sonido en el buzzer y mostrar el mensaje  «OBJETO DETECTADO» en el monitor serial.
  6. En caso de que la distancia sea mayor a 30 cm, encender el led verde y mostrar el mensaje «ESPACIO DESPEJADO» en el monitor serial.
  7. Repetir desde el paso 1.

Esta instrucciones se realizan utilizando la estructura de decisión if-then-else. Asimismo, se deben crear dos ciclos for para hacer el barrido con el servomotor.

Nota: Si tienes dudas acerca de cómo se programa el sensor ultrasónico HC-SR04, se te recomienda revisar la práctica «Sensor ultrasónico: medición de distancias» que podrás encontrar en el apartado del DASA.

Programación del circuito electrónico

A continuación, se presenta el programa del circuito electrónico del sonar

/* Sonar
* Programa que busca objetos a una distancia menor a 30 cm.
* Si la distancia es menor, se encenderá el led rojo, se producirá un tono con el buzzer y se
* desplegará "OBJETO DETECTADO" en el monitor serial.
* Por el contrario, si la distancia es mayor, se encenderá el led verde y se desplegará
* "ESPACIO DESPEJADO" en el monitor serial.
* NOTA: El sensor ultrasónico está conectado a los pines 6 (TRIG) y 7 (ECHO). Mientras que el servomotor
* está conectado al pin A5.
* UNAM 2022
*/

#include <Servo.h> //Biblioteca del servomotor

const int TRIG = 6; // Declaración de la constante TRIG que almacena el pin al que está conectado el canal TRIGGER del sensor
const int ECHO = 7; // Declaración de la constante ECHO que almacena el pin al que está conectado el canal ECHO del sensor

// Declaración de variables
long distancia = 0;
long tiempo = 0;
int i = 0;

Servo MOTOR; //Creación de un objeto "MOTOR"

// Declaración de LEDs
const int LEDR = 3;
const int LEDV = 5;

void setup() {
Serial.begin(9600);
pinMode(LEDR, OUTPUT); //LED Rojo
pinMode(LEDV, OUTPUT); //LED Verde
MOTOR.attach(A5); //Liga el objeto MOTOR al pin A5
pinMode(TRIG, OUTPUT); // Activación del pin TRIG como salida
pinMode(ECHO, INPUT); // Activación del pin ECHO como entrada
digitalWrite(TRIG, LOW); // Garantizar que la señal trigger inicie en bajo
pinMode(A1, OUTPUT);
}

void loop() {
//Ciclo for para hacer el barrido con el servomotor
for(i = 0; i <= 180; i++){
detectar_objeto();
}

//Ciclo for para hacer el barrido de regreso con el servomotor
for(i = 180; i >= 0; i--){
detectar_objeto();
}
}

void detectar_objeto() {
MOTOR.write(i); //Manda el servo a la posición
delay(90); //Pausa de 90 milisegundos para estabilizar el servo
digitalWrite(TRIG, HIGH);
delayMicroseconds(10); // Se envía un pulso de 10 microsegundos
digitalWrite(TRIG, LOW); // Activación de la señal ultrasónica
/* pulseIn es la función que mide la longitud del pulso entrante.
Mide el tiempo que transcurre entre el envío del pulso ultrasónico del pin TRIG
y la recepción de la señal de rebote por el pin ECHO
*/
tiempo = pulseIn(ECHO, HIGH);
distancia = 0.01716 * tiempo; // Cálculo de la distancia en cm

//Evaluar si la distancia es menor a 30cm
if(distancia < 30 && distancia != 0) {
digitalWrite(LEDR, HIGH); //Encender el led rojo
digitalWrite(LEDV, LOW); //Apagar el led verde
Serial.println("OBJETO DETECTADO");
// Se genera un tono de 350 Hz en el pin A1
// El tono dura 50 milisegundos y se apaga
tone(A1,350);
delay(50); // Pausa de 50 milisegundos
noTone(A1);
}
else {
digitalWrite(LEDR, LOW); //Apagar el led rojo
digitalWrite(LEDV, HIGH); //Encender el led verde
Serial.println("ESPACIO DESPEJADO");
}
delay(20); //Pausa de 20 milisegundos
}

Captura, compila y ejecuta tu programa por medio de siguientes acciones:

  1. Abre el IDE de Arduino.
  2. Crea un nuevo sketch.
  3. Captura las instrucciones del programa.
  4. Guarda tu programa.
  5. Compila tu programa. En caso necesario, depúralo hasta que no tenga ningún error.
  6. Conecta la tarjeta Arduino a tu computadora.
  7. Selecciona el puerto serial (COM) de la computadora asociado a la tarjeta.
  8. Sube el programa a la memoria de la tarjeta Arduino UNO.
  9. Ejecuta tu programa.

Nota: se recomienda fijar con cinta adhesiva el servomotor a tu mesa de trabajo. Asimismo, busca objetos de superficie lisa para probar como obstáculos a detectar por el sonar.

Resultados

Pon a prueba tu circuito electrónico colocando distintos objetos a diferentes distancias para que sean detectados por el sonar. Trata de que haya un espacio de al menos 5 cm entre los objetos.

También puedes modificar el código de tu programa con distancias mayores o menores a 30 cm. Observa si cambia el nivel de precisión de la detección del sonar conforme vas haciendo las modificaciones. Recuerda, el sensor ultrasónico HC-SR04 tiene un rango de medición de 2cm a 400 cm.

Discusión y conclusiones

La fórmula para calcular una distancia con el sensor ultrasónico es:

distancia= int(0.01716*tiempo);

Finalmente, responde las siguientes preguntas como conclusión:

  1. ¿Qué aprendiste con esta práctica?
  2. ¿Se te ocurre alguna aplicación en tu día a día con el sonar?
  3. Menciona, además de las aplicaciones mencionadas en la introducción, algún ejemplo de proceso científico o industrial donde se pudiera hacer uso de un sonar.
  4. ¿Cómo mejorarías el diseño del sonar?

Retos Arduino

Para que practiques tus habilidades de programación con Arduino, te invitamos a que realices el siguiente reto:

  1. Agrega al circuito electrónico del sonar un display LCD y prográmalo para que muestre los mensajes del monitor serial en el display LCD, lo más centrados posible.

Referencias

Arduino. (2021). Language Reference. https://www.arduino.cc/reference/en/

Bañuelos, M., Pacheco, M. y Villegas, R. (2022). Dispositivo Automatizado de Sensores Arduino (DASA). Manual de usuario. 

deeper. (s. f.). Cómo funciona el Sonar. https://deepersonar.com/es/es_es/como-funciona/como-funciona-el-sonar#:%7E:text=Un%20dispositivo%20de%20sonar%20env%C3%ADa,un%20objeto%20y%20luego%20rebotar.