Proyecto: Cómo medir distancias con Arduino

Construiremos un dispositivo que detecte a que distancia se encuenta un objeto en movimiento, envíe esa distancia al puerto serie y además muestre esa distancia en una pantalla LCD. Dividiremos el proyecto en de dos partes, la primera parte sin utilizar el display LCD y la segunda parte usándolo.

Es importante que la distancia medida esté en metros para que podamos comprenderla y utilizarla fácilmente. Para simplificar el proyecto usaremos una pantalla LCD con un convertidor I2C, por lo que sólo necesitaremos 4 cables para conectarla al Arduino. También necesitaremos añadir bibliotecas adicionales al sketch para utilizar la pantalla LCD.

Qué necesitamos para medir distancias con Arduino?

Estos son los elementos necesarios:

  • 1 x placa Arduino Uno R3 [su_button url=»https://amzn.to/32R57aw» target=»blank» background=»#07b307″ icon=»icon: shopping-cart» rel=» nofollow»]Ver Precio[/su_button]
  • 1 x HC-SR04 sensor ultrasónico [su_button url=»https://amzn.to/2Nnn8tE» target=»blank» background=»#07b307″ icon=»icon: shopping-cart» rel=» nofollow»]Ver Precio[/su_button]
  • 1 x LCD con convertidor I2C
  • Cables

Midiendo distancias con arduino

Primera Parte: Conectar el Sensor de Movimiento a Arduino

En esta primera parte sólo conectaremos el sensor HC-SR04 a la placa arduino y mostraremos los datos por el puerto serie. Las conexiones se hacen como lo indica el siguiente esquema de abajo. No usaremos la pantalla LCD todavía.

conexionado sensor hc-sr04 a arduino uno

La conexión es muy sencilla, la placa Arduino Uno, el sensor ultrasónico y sólo 4 cables. El código que debemos utilizar para que esto funcione y nos muestre las distancias por el puerto serie es el siguiente:

Sketch Sensor HC-SR04

int trig = 2; //pin trig del sensor ultrasónico 
int echo = 3; //pin echo del sensor ultrasónico 
 
void setup() {
  Serial.begin(9600); //configuramos el puerto serie en 9600
  pinMode(trig, OUTPUT); //configura pin trig como output
  pinMode(echo,INPUT);   //configura pin echo como input
}
 
void loop() {
  //Secuencia de lectura del sensor
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
 
  int duracion = pulseIn(echo, HIGH); //Mide el tiempo entre Trig y el Echo
  int distancia = (duracion/2) / 29.1; //y calcula la distancia
  Serial.println(distancia);   //imprime la distancia en el Serial Port
  delay(100);
}

Al ejecutar este código se debería ver en el puerto serie datos similares a estos:

Mostrando distancias por puerto serie

Segunda Parte: Mostrar distancias en un Display LCD

En esta segunda parte del proyecto, vamos a añadir una pantalla LCD para mostrar las mediciones de distancia, así es como debe quedar todo conectado:

Una vez que tenemos las conexiones hechas toca la parte del código. Necesitaremos utilizar la librería LiquidCrystal_I2C.h que no viene por defecto instalada en Arduino, por lo que lo más probable es que tengamos que descargarla e instalarla. La descarga se hace desde el IDE de Arduino, simplemente abriendo en el menú principal la pestana Programa >> Incuir Librería >> Gestionar Librerías y luego buscando «i2c LCD».

Instalar libreria LiquidCrystal_LCD

Luego para incluir la librería en nuestro código vamos al menú Programa > Incluir Librería > y buscamos la librería Liquid Crystal I2C.

También debemos usar la librería Wire.h que sirve para manejar el bus I2C.

El código que tenemos que subir al arduino es similar al primero, con la diferencia de que esta vez en lugar de mostrar en el serial, se muestran los valores en la pantalla LCD.

Sketch Sensor HC-SR04 + Display LCD

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 
int trig = 2; //pin trig del sensor ultrasónico
int echo = 3; //pin echo del sensor ultrasónico

//Setea la pantalla LCD a 0x27 para una pantalla de 16 caracteres y 2 líneas.
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
void setup() {
  lcd.begin(); //inicializa el display LCD
  pinMode(trig, OUTPUT);
  pinMode(echo,INPUT);
 
  //Imprime un mensaje de inicio
  lcd.setCursor(1, 0);
  lcd.print("SENSOR DE DISTANCIA");
  delay(2000);
}
 
void loop() {
  //Secuencia de lectura del sensor 
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
 
  int duracion = pulseIn(echo, HIGH); //Mide el tiempo entre Trig y el Echo
  int distancia = (duracion/2) / 29.1; //y calcula la distancia
  lcd.clear(); //antes de mostrar un valor en la pantalla borra datos anteriores
  lcd.print(distancia); //muestra la distancia medida
  delay(100); //Retraso de 100ms
}