Está en la página 1de 8

Aprende ARDUINO

18. Medición de Distancia con ARDUINO

La distancia es uno de los parámetros físicos más importantes dentro del campo de la Computación Física y más
en la Robótica, por lo tanto aprender el uso de sensores que permitan a nuestro Arduino tener un conocimiento
de este parámetro externo es muy importante. Existen diversos sensores en el mercado que nos permiten conocer
la distancia de un objeto o un obstáculo frente al sensor, en esta sección estudiaremos el sensor ultrasónico HC-
SR04, de bajo costo y fácil manejo, ver figura 18-1.

Sensor HC-SR04

Este es un sensor medidor de distancias por señales ultrasónicas, también llamado Ranger, de tipo Digital cuya
salida es un tren de pulsos con información sobre la distancia de un posible obstáculo frente a él. De la figura 18-
1 se aprecia que el sensor HC-SR04 está constituido por dos dispositivos ultrasónicos, emisor y receptor, esto es
porque su principio de funcionamiento se basa en la emisión de una señal ultrasónica hacia al frente del sensor,
luego el rebote de la señal en un obstáculo es capturara por el receptor del sensor, y así la electrónica interna
calcula la distancia a objeto por medio del tiempo que se tarda en rebotar la señal ultrasónica; al final en el pin
de salida del sensor se obtiene una señal digital que contiene información sobre la distancia calculada. En la tabla
siguiente se puede ver algunas características técnicas de funcionamiento de este sensor, cabe destacar que este
sensor posee 4 terminales, dos de ellas para alimentación de voltaje, y las otras dos para interactuar con Arduino.

Características técnicas del sensor HC-SR04

 Voltaje: 5 VDC
 Corriente en reposo: < 2 mA
 Salida: High 5V / Low 0V
 Angulo: < 15º
 Distancia: 2 a 450 cm
 Resolución: 0,3 cm

172 Guía Teórico Práctica


Aprende ARDUINO

Figura 18-1. Sensor Ultrasónico de Distancias HC-SR04.

Figura 18-2. Conexión típica entre Arduino y un sensor HC-SR04

Manejo con Arduino.

El sensor HC-SR04 es de muy fácil conexión y uso con tarjetas Arduino, además con el uso de la librería especial
el firmware se hace sencillo, como primer punto veamos la conexión en hardware entre el sensor y nuestra tarjeta
Arduino, de la figura 18-2 se puede apreciar que solo se requieren dos pines digitales de Arduino para la conexión
con el sensor (pines Trigger y Echo), pueden usarse cualesquiera, además se debe asegurar la conexión de voltaje
para el HC-SR04.

El software de aplicación en Arduino para manejar este tipo de sensor es sencillo y requiere el uso de una librería
especial llamada Ultrasonic.h la cual puede ser descargada de:
https://github.com/elrodri/Ultrasonic-HC-SR04/archive/master.zip, además debe instalarse
en el IDE Arduino antes de incluirla en nuestros Sketches. Esta librería contiene las funciones necesarias para que
Arduino pueda interactuar con el sensor HC-SR04, a continuación se describirá las utilización de cada función
dentro de la librería, para luego realizar algunos ejemplos de aplicación.

173 Guía Teórico Práctica


Aprende ARDUINO

Funciones de Configuración de librería Ultrasonic.h

Ultrasonic miRanger(trigPin, echoPin): esta función se debe incluir al inicio del Sketch antes de la función
setup(), permite la creación de un objeto llamado miRanger (este nombre puede ser cualquiera), para que pueda
ser manipulado más adelante dentro del Sketch. Como parámetro recibe los números de pines Arduino usados
para la conexión con el sensor, pin Trigger y pin Echo.

Funciones de Manipulación de librería Ultrasonic.h

miRanger.Ranging(CM): Activa el sensor y captura su salida, retornando como resultado el valor de la distancia
a un objeto al frente, por lo tanto debe ser asignada a una variable previamente declarada. El valor retornado esta
expresado en centímetros si se usa el parámetro CM y se retornara la distancia en pulgadas si se usa el parámetro
INC. – La distancia máxima a leer es 5 metros, por lo que esta función devolverá 51 cm si no hay algún objeto
frente a él.

EJEMPLO.HC01: Con este ejemplo se demostrara el uso básico la librería Ultrasonic.h y sus funciones para
capturar la distancia medida por un sensor HC-SR04 conectado a Arduino, la lectura de la distancia se enviara
por Monitor Serial para su visualización. El sensor se conecta según la imagen superior de la figura 18-2.

/* Ejemplo HC-SR04
Demostración del uso de un sensor HC-SR04
Conectado a Arduino asi:
Pin Trigger al Pin 12 Arduino
Pin Echo al Pin 11 Arduino
Se usa el Monitor Serial para visualizar la distancia
Leida por el sensor.

Por J.Rodrigo ( www.jra.so )


Modificado: otoniel.flores@mail.utec.edu.sv

Ejemplo de Distribución Libre CC


*/

//Se incluye la libreria


#include <Ultrasonic.h>

//Se configura y crea un objeto para manipular


Ultrasonic ultrasonic(12,11); // (Trig PIN,Echo PIN)

// variable para guardar la lectura


long distancia;

void setup()
{
//habilitar la comunicación serial
Serial.begin(9600);
}

void loop()
{
//leer el sensor y asignar a la variable distancia
distancia = ultrasonic.Ranging(CM); // CM o INC
//enviar el contenido de la variable al Monitor Serial
Serial.print("La distancia medida es: ");
Serial.print(distancia);
Serial.println(" cm" );

174 Guía Teórico Práctica


Aprende ARDUINO

delay(500);
}
//Fin del sketch

Figura 18-3. Salida vía Monitor Serial del Ejemplo 01

EJEMPLO.HC02: En este ejemplo se usara la pantalla LCD KEYPAD SHIELD para visualizar la distancia de un
obstáculo frente al sensor, se mostrara la distancia en formato Centímetros y Pulgadas, el sensor se conecta a los
pines digitales 12 y 13 de Arduino.

/* Ejemplo HC-SR04 / Lcd Shield


Demostración del uso de un sensor HC-SR04
Conectado a Arduino asi:
Pin Trigger al Pin 9 Arduino
Pin Echo al Pin 8 Arduino
Se despliega en un LCD la distancia
en formato Centimetros y Pulgadas.

Por J.Rodrigo ( www.jra.so )


Modificado: otoniel.flores@mail.utec.edu.sv

Ejemplo de Distribución Libre CC


*/

// Librerias a utilizar
#include <Ultrasonic.h>
#include <LiquidCrystal.h>

//Configuracion pines LCD SHIELD


LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// pines de para el sensor
Ultrasonic ultrasonic(13,12); // (Trig PIN,Echo PIN)

void setup()
{
//configura el tamaño del LCD
lcd.begin(16, 2);
}

void loop()
{
//lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Dist = ");
lcd.print(ultrasonic.Ranging(CM));

175 Guía Teórico Práctica


Aprende ARDUINO

lcd.print(" cm");
delay(100);
lcd.setCursor(3, 1);
lcd.print("Dist = ");
lcd.print(ultrasonic.Ranging(INC));
lcd.print(" pulg");
delay(250);
}
//Fin del sketch

Figura 18-4. Salida en LCD SHIELD del Ejemplo 02

EJEMPLO.HC03: En este ejemplo se usaran 2 sensores HC-SR04 y se mostrara cada medición en el Monitor Serial
del IDE, se mostrara la distancia en formato Centímetros. Un sensor se conecta en los pines digitales 13 y 12,
mientras que el segundo sensor se conecta a los pines 3 y 2 de Arduino.

/* Ejemplo HC-SR04
Medicion de DOS sensores HC-SR04
con visualizacion via Monitor Serial

Por J.Rodrigo ( www.jra.so )


Modificado: otoniel.flores@mail.utec.edu.sv

Ejemplo de Distribución Libre CC


*/

//Incluir la libreria
#include <Ultrasonic.h>

//Definicor pines para los sensores


//Izquierdo y Derecho
Ultrasonic sensorIzq(13,12);
Ultrasonic sensorDer(3,2);

// variables para obtener la lectura


// de los sensores
long distanciaIzq = 0;

176 Guía Teórico Práctica


Aprende ARDUINO

long distanciaDer = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
distanciaIzq = sensorIzq.Ranging(CM);
distanciaDer = sensorDer.Ranging(CM);

Serial.print("Izquierda: ");
Serial.print(distanciaIzq);
Serial.print(" cm " );
delay(50);
Serial.print("Derecha: ");
Serial.print(distanciaDer);
Serial.println(" cm" );
delay(500);
}
//Fin del sketch

Figura 18-5. Conexión de 2 sensores del Ejemplo 03

Figura 18-6. Salida vía Monitor Serial del Ejemplo 01

177 Guía Teórico Práctica


Aprende ARDUINO

EJEMPLO.HC04: En ocaciones no es obligatorio el uso de una “libreria” para leer el sensor ULtrasonico, basta con
activar el pin TRIGER del sensor y esperar una respuesta en el pin ECHO del sensor. Calcular el tiempo entre la
activacion y la recepcion y via calculo amtematico se obtiene la distancia. En este ejemplo se decmuestra lo
anterior, se implementa un Sistema que indica por medio de una escala de leds la distacia detectada por el sensor.
El circuito a construer se puede observer en la figura 18-7

/* Ejemplo HC04
Medicion de un sensor con escala
indicative de LEDS y Monitor Serial

Modificado: otoniel.flores@mail.utec.edu.sv

Ejemplo de Distribución Libre CC


*/

// definicion de variables
int distanceThreshold = 0; // distancia limite
int cm = 0; // distancia en centimetros
int inches = 0; // distancia en pulgadas

//***definicion de Funcion
//***activa y leer el sensor ultrasonico
//***retorna un valor long
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // pin TRG apagado
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Activar pin TRG por 10us
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// leer el pin ECHO por la respuesta
return pulseIn(echoPin, HIGH);
}

// configuracion de pines
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}

void loop()
{
// definer el limite de distancia para activar escala de LEDs
distanceThreshold = 350;
// utilizar la function definida para leer la distancia en CM
cm = 0.01723 * readUltrasonicDistance(7, 6);
// convertirla en pulgadas
inches = (cm / 2.54);
Serial.print(cm);
Serial.print("cm, ");
Serial.print(inches);
Serial.println("in");
// activar escala de LEDs
if (cm > distanceThreshold)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);

178 Guía Teórico Práctica


Aprende ARDUINO
digitalWrite(4, LOW);
}
if (cm <= distanceThreshold && cm > distanceThreshold - 100)
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);

digitalWrite(4, LOW);
}
if (cm <= distanceThreshold - 100 && cm > distanceThreshold - 250)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (cm <= distanceThreshold - 250 && cm > distanceThreshold - 350)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
if (cm <= distanceThreshold - 350) {
digitalWrite(2, HIGH);digitalWrite(3, HIGH); digitalWrite(4, HIGH);
}
delay(100); // Wait for 100 millisecond(s)
}
// fin del codigo

Figura 18-7. Circuito de conexcion del ejemplo HC04.

179 Guía Teórico Práctica

También podría gustarte