17. Sensor ultrasónico

Icono de vídeo de YouTube VÍDEO: Dos maneras de programar el sensor de distancia

Los sensores de distancia HC-SR04 utilizan ondas ultrasónicas para determinar la distancia entre el sensor y un objeto. El sensor mide con una precisión aceptable entre 2 cm y 400 cm.

../_images/arduino-ft-33.jpg

Figura 17.1Sensor de distancia ultrasónico HC-SR04.

Las patillas TRIG (trigguer o disparador) y ECHO (eco) pueden ir a cualquier pin digital de Arduino, configurando el TRIG como salida digital y ECHO como entrada.

El montaje básico sería:

../_images/arduino-ft-34.png

Programación del sensor

Hay dos posibles formas de programar el sensor. Sin biblioteca o con biblioteca.

Sin biblioteca, con más líneas de código, quedaría así:

 1const int TRIG = 9;     // Definimos un pin digital para TRIG
 2const int ECHO = 8;     // Definimos un pin digital para ECHO
 3long tiempo, distancia; // Variables de tipo long por ser cantidades
 4                        // grandes en microsegundos
 5
 6void setup() {
 7  pinMode(TRIG, OUTPUT); // El pin TRIG es de salida
 8  pinMode(ECHO, INPUT);  // El pin ECHO de entrada
 9  Serial.begin(9600);
10}
11
12void loop() {
13  //Emitimos un pulso de 10µs
14  digitalWrite(TRIG, LOW);  // Nos aseguramos de que el trigger está desactivado
15  delayMicroseconds(2);     // Esperamos 2µs
16  digitalWrite(TRIG, HIGH); // Mandamos un pulso de 10µs al TRIG
17  delayMicroseconds(10);
18  digitalWrite(TRIG, LOW);
19
20  tiempo = pulseIn(ECHO, HIGH); // Mide en µs el tiempo en detectar el eco
21  distancia = tiempo * 0.017;   // Convertimos µs -> cm
22
23  Serial.print(distancia);  // Mostramos la distancia en el monitor serial
24  Serial.println(" cm");
25
26  delay(1000); // Tiempo entre mediciones
27}

Con biblioteca, con menos líneas de código, quedaría así:

 1#include <Ultrasonic.h>  // Librería Ultrasonic de Erick Simões
 2
 3Ultrasonic sensorDistancia(9, 8); // Pines de TRIG y de ECHO
 4int distancia;
 5
 6void setup() {
 7  Serial.begin(9600);
 8}
 9
10void loop() {
11  distancia = sensorDistancia.read();  // Lee la distancia en cm
12
13  Serial.print(distancia);
14  Serial.println(" cm");
15
16  delay(1000); // Tiempo entre mediciones
17}