Skip to main content

Sensor de ultrasonidos

Conocimiento previo

Programación básica de Arduino, escritura en puerto serie.

Objetivos

Manejar este tipo de sensores que son muy comunes en las aplicaciones de robótica para medir distancias. Para ello aprenderás a:

  • Realizar las conexiones necesarias sobre el sensor ultrasonidos HC-SR04.
  • Conocer el funcionamiento de un radar.
  • Cómo convertir el tiempo de rebote de un sonido en distancia.

La lista de materiales necesaria para el montaje es:

  • Arduino UNO.
  • Sensor de ultrasonidos HC-SR04.
  • Protoboard.
  • Cableado.

Montaje 8: Medición de la distancia

Este tipo de sensores también nos permite conocer la distancia a un objeto. Es más preciso que el de infrarrojos visto en la sección anterior y su rango de funcionamiento también es mayor. Funciona desde los 2cm hasta los 3 metros.  

El sensor tiene 2 partes como puedes ver en la figura. Una se encarga de enviar un sonido (a una frecuencia alta que no podemos escuchar), y la otra parte detecta cuando ese sonido vuelve.

Este sensor es muy útil en robots móviles para diversas acciones como no chocar o mantenerse a cierta distancia de una pared.

Podemos usar un sensor de ultrasonidos para obtener la distancia a un objeto. Este sensor se basa en el envío de una señal acústica y la recepción del eco de dicha señal. Lo que haremos después, al igual que hace un radar , un aparato de ecografías o un murciélago es calcular la distancia en función del tiempo que ha tardado el rebotar el sonido y la velocidad del sonido. Podemos encontrar las especificaciones en la página del fabricante. Uno de los modelos más comunes es el HC-SR04:

El sensor que usamos en estos ejemplos tiene 4 pines que corresponden (de izquierda a derecha):

  • GND , Vcc (a +5V)
  • Trig: es el que emite el ultrasonido
  • Echo: Es el que recibe el rebote

(Algunos modelos solo tienen 3 pines -HCSR05- indicándonos por el tercer pin ya directamente un valor proporcional con la distancia.) No aconsejamos usar la Shield de Edubasica, sino conectar diréctamente, en este caso no nos supone un ahorro de cableado, no como en los motores:

El programa es:

int trigPin = 8;
int echoPin = 9;
long duration; //tiempo de ida/vuelta
int cm=0; //Para almacenar el valor obtenido en cm valor=0

void setup() {

  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

}

void loop()

{

//ponemos al trigger a low para activarlo después 

   digitalWrite(trigPin, LOW);
   delayMicroseconds(2);

//Activar el módulo con un pulso de 10microsec.

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

//Esperamos la llegada de un pulso HIGH

duration = pulseIn(echoPin, HIGH);

 //tiempo de ida y vuelta, dividimos por 2

duration=duration/2;

//La velocidad del sonido es de 340 m/s
//es decir, 29 microsegundos por centímetro

cm = duration/ 29;
Serial.print("Distancia:");
Serial.println(cm);
delay(100);

}

El resultado :

Medición con LCD

Vamos a repetir el anterior programa pero que lo visualice el LCD {% youtube %} https://www.youtube.com/watch?v=eZvLMnHBypQ {% endyoutube %}

Conexión:

Conectar el sensor de Ultrasonidos

Y el LCD

Código

#include 

#include  

LiquidCrystal_I2C lcd(0x3F,16,2); ////Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas

int trigPin = 8;
int echoPin = 9;
float duration; //tiempo de ida/vuelta
float cm=0; //Para almacenar el valor obtenido en cm valor=0

void setup() {

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  // Inicializar el LCD
  lcd.init();
  lcd.backlight(); //Encender la luz de fondo.

}

void loop() {
 //ponemos al trigger a low para activarlo después 
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 //Activar el módulo con un pulso de 10microsec.
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 //Esperamos la llegada de un pulso HIGH
 duration = pulseIn(echoPin, HIGH);
 //tiempo de ida y vuelta, dividimos por 2
  duration=duration/2;
  //La velocidad del sonido es de 340 m/s
  //es decir, 29 microsegundos por centímetro
  cm = duration/ 29;
  lcd.setCursor(0, 0); // Escribimos el Mensaje en el LCD en una posición 1,0
  lcd.print("Distancia:");
  lcd.setCursor(0, 1); // Escribimos el Mensaje en el LCD en una posición 1,0
  lcd.print(cm);
  lcd.print(" cm ");
  delay(100);
}