DISTANCE MEASURING WITH THE MODULE US-100 OR HC-SR04 FOR ARDUINO

1 – MEASURE DISTANCES WITH ARDUINO

For this project we will need the following items:

- A protoboard.

- An Arduino board (In my case I use the Arduino UNO).

- An Ultrasonic sensor module US-100 or HC-RS04 (I don’t know if there are other similar ultrasound modules).

- A LCD display.

- Two 10Kohm potentiometers.

- Few Wires for protoboard.

We must ensure that we remove the jumper from the ultrasound module that is placed on pins “UART Select”, once done do the following assembly:

With the potentiometers we can regulate the brightness and contrast of the LCD in which we can watch the distance measured by the ultrasound sensor.

The program I used for measure de distance and display it is the following:

<br />
//http://zygzax.com/webproyectos/websensorus-100/?lang=en<br />
#include &lt;LiquidCrystal.h&gt;<br />
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);</p>
<p>const int trigger=10;<br />
const int echo=13;</p>
<p>float distance;</p>
<p>void setup(){<br />
 Serial.begin(9600);<br />
 pinMode(trigger,OUTPUT);<br />
 pinMode(echo,INPUT);<br />
 lcd.begin(16,2);<br />
}</p>
<p>void loop(){<br />
//Initialize the sensor<br />
 digitalWrite(trigger,LOW);<br />
 delayMicroseconds(5);<br />
//We start the measurements<br />
//We send out a signal activating the trigger output for 10 microseconds<br />
 digitalWrite(trigger,HIGH);<br />
 delayMicroseconds(10);<br />
 digitalWrite(trigger,LOW);<br />
//We acquire the data and We convert the measurement to meters<br />
 distance=pulseIn(echo,HIGH); //We measure the pulse width<br />
 //(When the pin is HIGH It will measure<br />
 //the amount of time until it is LOW)<br />
 distance=distance*0.0001657;<br />
//We send the measured data through the serial port and to the LCD display<br />
 Serial.println(distance);<br />
 lcd.setCursor(0,0);<br />
 lcd.print(distance);<br />
 delay(100);<br />
}<br />

 

2 – ALARM WITH THE ULTRASOUND SENSOR

This alarm will sound when the measured value drops bellow a threshold that will set with a potentiometer. To use the ultrasonic sensor as an alarm, wich is activated when the distance falls below a certain threshold set by a potentiometer, we will add to the circuit in the previous section a piezo speaker and a potentiometer. The connections are as follows: In the program code we have to add the analog input of the potentiometer and its adaptation of bits (0-1023) to meters (0-3). We also have to configure a PWM output for the speaker.

<br />
//http://zygzax.com/webproyectos/websensorus-100/?lang=en<br />
#include &lt;LiquidCrystal.h&gt;<br />
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);</p>
<p>const int trigger=10;<br />
const int echo=13;<br />
const int altavoz=9;<br />
const int potAlarma=0;</p>
<p>float distance;<br />
int val;<br />
float lim;</p>
<p>void setup(){<br />
 Serial.begin(9600);<br />
 pinMode(trigger,OUTPUT);<br />
 pinMode(echo,INPUT);<br />
 lcd.begin(16,2);<br />
}</p>
<p>void loop(){</p>
<p>//We read the potentiometer value that indicates the alarm limit<br />
 val=analogRead(potAlarma);<br />
 lim=val*0.00293;<br />
//Initialize the sensor<br />
 digitalWrite(trigger,LOW);<br />
 delayMicroseconds(5);<br />
//We start the measurements<br />
//We send out a signal activating the trigger output for 10 microseconds<br />
 digitalWrite(trigger,HIGH);<br />
 delayMicroseconds(10);<br />
 digitalWrite(trigger,LOW);<br />
//We acquire the data and We convert the measurement to meters<br />
 distance=pulseIn(echo,HIGH); //We measure the pulse width<br />
 //(When the pin is HIGH It will measure<br />
 //the amount of time until it is LOW)<br />
 distance=distance*0.0001657;<br />
//Alarm<br />
if(distance&lt;lim){<br />
 analogWrite(altavoz,100);<br />
}<br />
else{analogWrite(altavoz,0);}</p>
<p>//We send the measured data through the serial port and to the LCD display<br />
 Serial.println(distance);<br />
 lcd.clear();<br />
 lcd.setCursor(0,0);<br />
 lcd.print(&quot;Distance:&quot;);<br />
 lcd.setCursor(12,0);<br />
 lcd.print(distance);<br />
 lcd.setCursor(0,1);<br />
 lcd.print(&quot;limit:&quot;);<br />
 lcd.setCursor(9,1);<br />
 lcd.print(lim);<br />
 delay(50);<br />
}<br />

 

To see how to read the sensor data with Matlab by the serial port: How to read data from Arduino to Matlab through serial port.

58 thoughts on “DISTANCE MEASURING WITH THE MODULE US-100 OR HC-SR04 FOR ARDUINO

  1. francisco

    hola disculpa una pregunta copio y pego el programa y ala hora de copilar me sale este error
    Arduino:1.6.3 (Windows 8.1), Placa:”Arduino Uno”

    proy.ino:2:10: error: #include expects “FILENAME” or

    proy.ino:3:1: error: ‘LiquidCrystal’ does not name a type

    proy.ino: In function ‘void setup()':

    proy.ino:18:3: error: ‘lcd’ was not declared in this scope

    proy.ino: In function ‘void loop()':

    proy.ino:40:13: error: ‘amp’ was not declared in this scope

    proy.ino:40:16: error: expected ‘)’ before ‘;’ token

    proy.ino:40:17: error: ‘lt’ was not declared in this scope

    proy.ino:40:23: error: expected ‘;’ before ‘)’ token

    proy.ino:43:1: error: ‘else’ without a previous ‘if’

    proy.ino:47:3: error: ‘lcd’ was not declared in this scope

    proy.ino:49:14: error: ‘amp’ was not declared in this scope

    proy.ino:49:18: error: ‘quot’ was not declared in this scope

    proy.ino:49:43: error: expected primary-expression before ‘)’ token

    proy.ino:49:43: error: expected ‘;’ before ‘)’ token

    proy.ino:53:40: error: expected primary-expression before ‘)’ token

    proy.ino:53:40: error: expected ‘;’ before ‘)’ token

    Error de compilación

    This report would have more information with
    “Show verbose output during compilation”
    activala desde Archivo > Preferencias

      1. ivan.rodrigo

        mmm la paguina no muestra al parecer lo que esta dentro de ()
        #include () escribe esto sin parentesis en vez de #include &lt;LiquidCrystal.h&gt;

        1. Alfonso

          Pues entonces ya me quedé sin terminar el proyecto, ponlo quizá con espacios o algo, que se yo, no se si tu blog es de blogger o de wordprees o de que pero cada uno tiene la manera de escribir código en los comentarios o cámbialo en el post y avisa que ya está arreglado porque entonces esto no sirvió de nada.

        2. Alfonso

          Espero te sirva este link para resolver tus dudas, es simple y al parecer si funciona.

          Como cambiar el código

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

          Te dejo el blog con la explicación:

      2. andres

        ya hice todo lo que dices ahi y me sigue saliendo el error que otra cosa puedo hacer

  2. Emilio

    quiero que el pitido del parlante se vaya aumentando según el objeto se vaya acercando …por que apenas pongo el objeto solo suena piiiiiiiiiiiiii y asi se queda ayuda porfavor.

    1. Michael VArgas

      Hola, facil haces el circuito con un transistor por ejemplo un 2N222, la base del transistor le conectas una resistencia de 1k y luego lo conectas a un pin PWM del arduino, el buzzer el positivo lo conectas a una fuenta depende de tu buzzer puede ser 5v y el negativo del buzzer lo conectas al colector del transistor y por ultimo conectas el emisor a tierra :) segun la distancia varias el PWM de 8 bits

  3. LEOPOLDO MARTINEZ

    mi pregunta es la siguiente: Armé el diagrama tal y como lo especificas (el de sensor ultrasonico sin alarma y con pantalla LCD) pero me sale este mensaje cuando lo cargo:

    Tamaño binario del Sketch: 6,028 bytes (de un máximo de 32,256 bytes)
    avrdude: stk500_getsync(): not in sync: resp=0x30

  4. loraine A

    Hola tengo una pregunta a que te refieres con
    const int trigger=10;

    ( trigger que es ?)

    const int echo=13;

    ( echo que es ?)
    const int altavoz=9;

    (el altavoz es un buzzer ?)

    const int potAlarma=0;

    la alarma que es en el circuito ? no entiendo

    int val; ( para que usamos este)???

    porfavor responde Javier

  5. Pingback: Manejo de sensores y servomotores arduino | El blog de arduino

  6. carlos

    como habría que conectarse si quiero que la alarma se active cuando la distancia en vez de disminuir aumente. Es decir en vez de que se active cuando el objeto se acercar se active cuando e objeto se aleje.

  7. Javier

    que tal, saludos!!
    una pregunta, hice un programa parecido al ejemplo que explicas con la alarma, pero en lugar de utilizar el monitor serial de arduino para observar la distancia, quisiera utilizar el programa processing para saber la distancia medida en una gráfica,
    ¿me podrías ayudar?

Comments are closed.