MEDIR DISTANCIAS CON SENSOR US-100 o HC-SR04 PARA ARDUINO

1 – MEDIR DISTANCIAS CON ARDUINO

Para este montaje vamos a necesitar los siguientes elementos:

– Una Placa Protoboard.

– Una Placa Arduino (En mi caso uso la Arduino UNO).

– Un Módulo sensor ultrasonidos US-100 o HC-SR04 (Desconozco si existen otros módulos de ultrasonidos similares).

– Un Display LCD 16×2.

– Dos Potenciómetros de 10Kohm.

– Unos cuantos Cables para protoboard.

Tenemos que asegurarnos de que quitamos el jumper del modulo de ultrasonidos que esta colocado en los pines “UART Select”, una vez hecho esto hacemos el siguiente montaje:

Con los potenciómetros regulamos el brillo y el contraste del LCD en el que visualizaremos la distancia medida con el sensor de ultrasonidos.

El programa que he utilizado para realizar la medida y mostrarla es el siguiente:

//http://zygzax.com/webproyectos/websensorus-100/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int trigger=10;
const int echo=13;

float distance;

void setup(){
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
lcd.begin(16,2);
}

void loop(){
//Inicializamos el sensor
digitalWrite(trigger,LOW);
delayMicroseconds(5);
// Comenzamos las mediciones
// Enviamos una señal activando la salida trigger durante 10 microsegundos
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
// Adquirimos los datos y convertimos la medida a metros
distance=pulseIn(echo,HIGH); // Medimos el ancho del pulso
// (Cuando la lectura del pin sea HIGH medira
// el tiempo que transcurre hasta que sea LOW
distance=distance*0.0001657;
// Enviamos los datos medidos a traves del puerto serie y al display LCD
Serial.println(distance);
lcd.setCursor(0,0);
lcd.print(distance);
delay(100);
}

 

2 – ALARMA CON EL SENSOR DE ULTRASONIDOS

Esta alarma sonará cuando la distancia leída baje de un determinado limite que estableceremos con un potenciómetro. Para usar el sensor de ultrasonidos como una alarma, que se active cuando la distancia baja de un determinado umbral establecido con un potenciómetro tendremos que añadir al circuito del apartado anterior un altavoz piezoeléctrico y un potenciómetro. Las conexiones serían las siguientes: En el código del programa tendremos que añadir la lectura de la entrada analógica del potenciómetro y su adaptación de bits (0-1023) a metros (0-3). También tendremos que configurar una salida pwm que haga sonar el altavoz.

//http://zygzax.com/webproyectos/websensorus-100/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int trigger=10;
const int echo=13;
const int altavoz=9;
const int potAlarma=0;

float distance;
int val;
float lim;

void setup(){
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
lcd.begin(16,2);
}

void loop(){

//Leemos el valor del potenciometro que nos indica el limite de la alarma
val=analogRead(potAlarma);
lim=val*0.00293;
//Inicializamos el sensor
digitalWrite(trigger,LOW);
delayMicroseconds(5);
// Comenzamos las mediciones
// Enviamos una señal activando la salida trigger durante 10 microsegundos
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
// Adquirimos los datos y convertimos la medida a metros
distance=pulseIn(echo,HIGH); // Medimos el ancho del pulso
// (Cuando la lectura del pin sea HIGH medira
// el tiempo que transcurre hasta que sea LOW
distance=distance*0.0001657;
//Alarma
if(distance<lim){
analogWrite(altavoz,100);
}
else{analogWrite(altavoz,0);}

// Enviamos los datos medidos a traves del puerto serie y al display LCD
Serial.println(distance);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(&quot;Distancia:&quot;);
lcd.setCursor(12,0);
lcd.print(distance);
lcd.setCursor(0,1);
lcd.print(&quot;Limite:&quot;);
lcd.setCursor(9,1);
lcd.print(lim);
delay(50);
}

 

Para ver como leer los datos del sensor con Matlab por el puerto serie: Tutorial leer datos de Arduino con Matlab por el puerto serie.

58 pensamientos en “MEDIR DISTANCIAS CON SENSOR US-100 o HC-SR04 PARA ARDUINO

  1. Cesar

    Te hago una consulta, si el medidor de ultrasonido esta en el exterior. La variacion de las medidas puede variar?
    Es decir, estoy probando uno que mide normalmente pero desde las 7 de la tarde hasta las 10 de la mañana del otro dia mide de 4 mts a 1 mts (es decir 3 mts menos).
    En caso de que sea un problema de temperatura, deberia variar la formula?
    Gracias

  2. pablo

    hola javier, una consulta hay alguna libreria que me permita controlar el sensor ultrasonico, sin que sea necesario que la placa este conectada a mi pc para calcular la distancia atravez del puerto serial de la pc, o estoy equivocado en el concepto de funcionamiento del sensor.

  3. Itzel

    Me marca un error con delayMicroseconds dice algo asi como que no esta declarado, podrias ayudarme ? D;

    1. javiersb Autor

      Hola, en principio la función delayMicroseconds(5) no debería darte ningún error, no necesita importar ninguna librería y lo único que hace es esperar el tiempo en micro segundos que hay dentro de los paréntesis, no entiendo porque te da ese error.

      Un saludo,
      siento no poder ayudarte,
      Javier.

  4. Ernesto Marioni

    Hola una consulta se podria usar este sistema para Prender luces en un pasillo.
    Es decir que mida en que lugar del pasillo esta la persona y que prenda una tira de led correspondiente al sector que esta la persona, y apage el resto es decir hacer un sistema de seguimiento de lud con este sensor las medidas del pasillo son de 5 metros de largo y 1 metro de ancho

    1. jantocv

      Hola Ernesto Marioni!

      En respuesta a tu comentario, He de decir que para implementar ese sistema necesitarías un sistema de medición de distancia con un alcance mayor, ya que el sensor ultrasonidos que mostramos en el Post tiene un alcance máximo de 3 metros aproximadamente. La señal en distancias cortas es, dentro de la baja calidad que ofrece este sistema, relativamente buena. A medida que la distancia se aproxima a la máxima, la señal tiene demasiadas perturbaciones.
      Con todo esto quiero decir que para implementar este sistema de alumbrado a distancia que propones, necesitarías diseñar un sistema de instrumentación con sendos amplificadores operacionales y filtros para la señal (tratamiento de señales) para que la señal de pulso echo recibida del sensor de ultrasonidos sea nítida y, sobretodo, sea correcta.

      Nada es imposible, ya que tus 5 metros de pasillo podían dividirse en tramos de 1 metro y en cada tramo colocar un sensor, con lo que tendrías 5 sensores de ultrasonidos en un pasillo relativamente corto… Desde mi punto de vista, con un detector de presencia normal y corriente, una bombilla led (si quieres ahorrar en consumo) y un temporizador para que la luz se apague a los “x” segundos tras NO detectar movimiento sería mas que suficiente.

      Un saludo, espero que mi respuesta te haya sido útil!

  5. saya maurys

    hola… te escribí al correo de la pagina , pero también quisiera escribir por acá . sobre mi proyecto, tal vez alguien este interesado en compartir ideas , o este en la misma situacion.
    el proyecto que tengo es para una persona lisiada, quisiera hacerle un auto, donde quepa con su silla y usar una serie de sensores al rededor del vehículo , estos sensores comandarían el vehículo un motor unido al volante, para comandar la dirección del vehículo, y un par de actuadores para comandar el freno y el acelerador.
    la idea es, que los sensores mantengan alejado al vehículo de cualquier obstáculo,( cabe anotar que la persona que va a comandar dicho auto, solo tiene movilidad en una mano, por ese motivo es que queremos armar un auto inchocable, cuestión de que el se pueda movilizar en el pueblo donde vive, pero que no corra el riesgo de chocar,
    el vehículo sera eléctrico, y la velocidad máxima que alcanzara sera de 40 km/h
    entonces, la idea principal es, usar un arduino(o mas de uno) que reciba los datos de varios sensores de distancia, (4, 8 o 16) situados en los 4 lados del vehículo, y así el vehículo se mantenga lejos de cualquier otro vehículo u objeto que se le presente ( distancia mínima de 50 cms en cada lado ),
    la verdad lo mio es la electrónica/electricidad y apenas estoy incursionando en el mundo de arduino
    recibo informaciones, contactos y cualquier apoyo que me quieran brindar en mi correo sayama3x3@gmail.com

    graciassss

    1. jantocv

      Hola saya!
      Interesante proyecto el que propones! Antes de darte una respuesta que pueda ser útil,
      ¿Qué ocurre si dicha persona atraviesa una calle/pasillo/corredor en el que hay 30cm a cada lado del auto? ¿Se quedaría parado?… Deberías pensar, también en espacios reducidos.

      También deberías tener en cuenta la “deceleración” de los motores (el frenado) ya que si es muy brusco, no quiero imaginar que le puede pasar a la pobre persona que se encuentre circulando a 40km/h en dicho auto y encuentre una distancia menor de 50cm…

      Un saludo ;)

      1. saya maurys

        bueno, jjjj no había pensado en eso, pero supongo que siempre habría un lado desocupado o frente o atrás… recuerdo que hace unos años cuando estudie electrónica hicimos varios carros de juguetes que salvaban obstáculos, supongo que algo así también puede implementarse
        sobre la cuestión del frenado, pienso que lo mejor seria usar sensores que midan distancias largas ( cosa que no se si existan en el mercado)
        me refiero a que los sensores crearían un escudo invisible a unos 7-10 metros a la redonda del vehiculo

        que opinas?

  6. vanessa

    hola es que estoy haciendo un proyecto pero tengo que mandar los datos del sensor en arduino a una aplicacion de android, se trata de una banda y pues como el sensor va detectando las cajitas se hace un contador y va contando cuantas cajas van en arduino, bueno despues q cuenta se actualizan o imprimen en el lcd pero tambien estos datos se tienen q enviar a una app de android algun ejemplo q conoscan por fis se los agradeceria mucho :)

    1. javiersb Autor

      Hola, aún no he desarrollado ninguna aplicación para Android y por lo tanto desconozco la forma de comunicar Arduino con esta plataforma, no obstante supongo que se podrá comunicar por serie a través del Bluetooth como con Windows.

  7. juan manuel

    men sigo tus indicaciones ; estoy usando un display de 16 X 4 de resto todo igual… a la hora de probarlo con el arduino se enciende el display lcd y los pulsos del ultrasonico estan funcionando pero no se ve nada reflejado en el display si pueda manejar y brillo y contraste pero no tengo nada reflejado en el .. que puede ser?

    1. javiersb Autor

      Hola, al usar un display de 16 X 4 supongo que tendrás que realizar unas conexiones diferentes a las del display de 16 X 2, además en el código del programa deberías configurar el tipo de display correctamente, editando correctamente las líneas:
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2); (Especifica los pines a los que está conectado el display)
      lcd.begin(16,2); (Especifica que es un display de 16 caracteres por línea y 2 líneas) .

      Un saludo y gracias por tu visita,
      Javier.

  8. MILTON ORTEGA

    HOLA JAVIER TIENES UN CORREO PERO EL HOTMAIL.COM
    QUISIERA HACERLE UNAS PREGUNTAS SOBRE SENSORES ES QUE ME QUEDA MAS FACIL X ESE MEDIO
    DE ANTEMANO MIL Y MIL GRACIAS.

  9. jona

    Una pregunta amigo, que tipo de display es el que se ocupa, me funcionara uno de 5V con 16 caracteres ? De anteamano Gracias por tu aporte! Saludos!

    1. javiersb Autor

      Hola, yo he usado un display de 16×2 y 5V TOPWAY LMB162A. En principio este código funciona con cualquier display que use el chipset Hitachi HD44780 o uno compatible con este, la gran mayoría lo son.

      Un saludo y gracias por tu visita.

Los comentarios están cerrados.