Medir distancia con Arduino y HC-SR04 sensor ultrasonico

Medir Distancia con arduino y sensor ultrasonico HC-SR04

En este post vamos a ver como medir distancias con el sensor ultrasonico HC-SR04 y arduino, para esto vamos a hacer uso de la librería NewPing.h

Este sensor es muy popular dado que se utiliza mucho en robots para detectar obstáculos, pero también pueden sernos útiles en alarmas para detectar movimiento o algún objeto, también se pueden aplicar en la detección de niveles de liquido en contenedores o para algún proyecto donde se necesite activar algún mecanismo sin la necesidad de entrar en contacto directo como por ejemplo en un dispensador de jabón y muchos otras aplicaciones. 

Para este proyecto vamos a utilizar un arduino uno, un display lcd de 16×2 (para mostrar la distancia medida en la pantalla), un sensor ultrasonico HC-SR04 algunos cables para conectar todo, una protoboard, una resistencia de 1k y un potenciómetro de 10k. 

Prime les comento a los que no lo conocen bien este sensor hace uso de un eco de señales de sonido, es decir tiene un emisor de ultra sonido y un receptor.

De modo que este dispositivo lo que hace es enviar hacia adelante una señal sonora que es reflejada por un objeto y ese eco o reflejo es detectado por el receptor.

De modo que por medio de un calculo podemos determinar la distancia hasta ese objeto usando la velocidad del sonido. 

 

sensor sr04 eco

sensor sr04 eco

 

No vamos a entrar en detalles sobre el funcionamiento a nivel electrónico como así tampoco en detalles de los cálculos, lo que queremos es hacer uso de una librería que ya incorpora estas y otras funciones, la librería NewPing.h.

Esta librería incorpora soporte para varios tipos de sensores ultrasonidos para arduino y otros micro controladores.

cuenta con un método llamado ping_median(), el cual hace varias lecturas del sensor y nos entrega un promedio con lo que podemos obtener valores mas estables y precisos.  

Nosotros vamos a utilizar el método del ejemplo simple que es ping_cm() que lo que hace es devolvernos directamente la distancia medida en cm.

Esta librería es bastante rápida de modo que se pueden hacer mas mediciones en menos tiempo, ademas nos permite definir una distancia máxima a medir de modo que se pueden hacer mediciones en distancias cortas y el sensor cuando detecta que se supera esa distancia máxima nos devuelve un cero. Muy útil para ignorar todo lo que este mas allá de cierta distancia. 

Ahora procedemos a montar el circuito como se ve en la imagen que les dejo mas abajo. 

En el pin 2 de arduino uno tenemos que conectar el pin trigger de nuestro sensor ultrasonico HC-SR04, en el pin 3

de arduino vamos a conectar el pin ECHO de nuestro sensor. Lo vamos a alimentar con 5 volts desde el propio arduino.

La conexión del display lcd de 16×2 a arduino también es muy simple vamos a utilizar los pines  8 y 9 a los pines RS y E respectivamente. 

Luego los pines 10, 11, 12 y 13 de arduino uno los vamos a conectar en los pines 4, 5, 6 y 7 de nuestro display lcd respectivamente,también conectamos los pines K y A (correspondientes a los pines cátodo y ánodo del led de iluminación del display) por medio de una resistencia de 1k ohm a los pines de alimentación de arduino 5V y GND. 

Al display lcd deberemos conectarle un potenciómetro de 10k como divisor de tensión para controlar el contraste, de modo que los extremos del potenciómetro queden conectados a tierra y el otro a 5volts y el punto medio del potenciómetro lo conectaremos al pin Vo de nuestro lcd. 

Para finalizar deberemos alimentar el lcd desde los 5volts de arduino en los pines VSS (GND)  y VDD (5Volts).

El armado del circuito es muy simple 

Medir Distancia con arduino y sensor ultrasonico HC-SR04

Medir Distancia con arduino y sensor ultrasonico HC-SR04

 

A continuación les dejo el codigo del programa para arduino. En este código haremos uso del constructor: 

Creamos un objeto de tipo NewPing de nombre sonar donde definimos sus pines trigger_pin (corresponde al pin de arduino donde conectamos el trigger del sensor ultrasónico), también definimos el pin echo_pin (correspondiente al pin de arduino donde se conecto el pin echo del sensor), y por ultimo max_cm_distance (donde definimos la distancia máxima que queremos medir).

NewPing sonar(trigger_pin, echo_pin [, max_cm_distance]);

por ejemplo nosotros usaríamos: 

NewPing sonar(2, 3, 200); 

hora veremos que esta librería, tiene varios métodos para obtener la distancia en cm o en pulgadas

  • sonar.ping(); – Envía un ping y retorna el tiempo que demoro en micro segundos o 0 (cero) si no hubo eco o se supera la distancia limite
  • sonar.ping_in(); – Envía un ping, retorna la distancia en pulgadas o 0 (cero) si no hubo eco o se supera la distancia limite
  • sonar.ping_cm(); – Envía un ping, retorna la distancia en centímetros o 0 (cero) si no hubo eco o se supera la distancia limite
  • sonar.ping_median(iterations); – Envia multiples pings (Por defecto 5), descarta todos los que esten fuera de rango y retorna la media de los demás en microsegundos
  • sonar.convert_in(echoTime); – Convierte los micro segundos en pulgadas
  • sonar.convert_cm(echoTime); – Convierte los micro segundos en centímetros 
  • sonar.ping_timer(function); – Envia un ping y llama a una función que comprueba si el ping se ha completado.
  • sonar.check_timer(); – Verifica si el ping ha regresado dentro del límite de distancia establecido
  • timer_us(frequency, function); – Llama una función establecida en “function”, cada cierta cantidad de microsegundos.
  • timer_ms(frequency, function); – ídem que el anterior pero en mili segundos.
  • timer_stop(); – detiene el timer.

Les dejo el resto del programa que es bastante simple y muy facil de comprender ya que he dejado comentada cada linea importante. 

#include <LiquidCrystal.h>
#include <NewPing.h>

#define TRIGGER_PIN  3  // Aqui conectaremos el pin trigger del sensor ultrasonico
#define ECHO_PIN     2  // Aqui conectaremos el pin echo de nuestro sensor
#define MAX_DISTANCE 300 // Maxima distacia a medir en cm . Maximo que permite el sensor 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuramos nuestro sensor.


LiquidCrystal lcd(8,9,10,11,12,13); // configuramos nuestro lcd de 16x2

int distancia= 0;

void setup(){
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
lcd.begin(16,2);

}

void loop(){

  delay(50);  // delay para darle tiempo al sensor entre pings
  distancia = sonar.ping_cm(); // guardamos la distancia medida en la variable
  Serial.print("Ping: ");
  Serial.print(distancia); // imprimimos la distancia a travez del puerto serie (arroja 0 cuando se supera la distancia maxima 
  Serial.println("cm");
  lcd.setCursor(0,0);
  lcd.print("Distancia: ");
  lcd.print(distancia);   // imprimimos la distancia a travez del display lcd (arroja 0 cuando se supera la distancia maxima)
  lcd.print(" cm");

}

Por ultimo nos queda cargar el programa en nuestro arduino uno o el que tengamos a mano y podremos experimentar con este interesante sensor por ultrasonido. 

Les dejo un video con el armado del circuito y algunas pruebas para que vean como funciona. 

 

Si te gusto el contenido de este blog no dudes en compartir en las redes sociales o con quien tu creas que puede apreciar esto.

Si te sientes con ganas de ayudarnos puedes dejarnos una donación por medio del botón que esta mas abajo. 

hasta la próxima. 

Tagged , , , , , , , , , , , , . Bookmark the permalink.

Deja un comentario