Sensor Ultrasónico HC-SR04 con Arduino en IOTeca

Sensor Ultrasónico HC-SR04 con Arduino

El sensor ultrasónico HC-SR04 se utiliza, entre otras posibles aplicaciones, para medir distancias y evitar chocar contra algún objeto o generar un sensor de movimiento.

Funciona enviando un pulso de ultrasonido (inaudible para el oído humano por su alta frecuencia) a través de un emisor (T) y esperando a que dicho sonido rebote sobre un objeto y vuelva para ser captado por receptor (R).

Este módulo tiene un área de trabajo de entre 3cm y 3m con una precisión de 3mm y se alimenta a 5V (15 ma) lo que lo hace ideal para proyectos con Arduino.

El funcionamiento del sensor se basa en medir el tiempo entre el envío y la recepción de un pulso ultrasónico. Sabemos que la velocidad del sonido es 343,2 m/s en condiciones normales.

Por lo tanto una onda de sonido necesita 0,002914 segundos para recorrer un metro.

En el programa vamos a utilizar un pulso de 10 µs(micro segundo, millonésima parted de un segundo) y medir en centímetros, por lo tanto realizamos la siguiente conversión de unidades.

Por último estaremos registrando el tiempo que tarda en llegar el pulso al objeto, rebotar,y volver.

Entones la fórmula para calcular la distancia deberá resultar de dividir el trayecto en dos.


Conexiones

HC-SR0Arduino Uno
VCC5V
Trig6
Echo5
GNDGND


En el siguiente sketch utilizaremos la fórmula para obtener la distancia a partir del tiempo entre la emisión (Trigger) y recepción (Eco).

const int Echo = 5;
const int Trigger = 6;
 
void setup() {
   Serial.begin(9600);
   pinMode(Trigger, OUTPUT);
   pinMode(Echo, INPUT);
}
 
void loop() {
   int dist
}ancia = calcularDistancia(Trigger, Echo);
   Serial.println(String(distancia) + " cm");
   delay(1000);
 
int calcularDistancia(int TriggerPin, int EchoPin) {
   long intervalo, distancia;
   
   digitalWrite(TriggerPin, LOW);  //pin a LOW durante 4us para generar un pulso limpio
   delayMicroseconds(4);
   digitalWrite(TriggerPin, HIGH);  //genera el Trigger (disparo)
   delayMicroseconds(10); // pulso activo por 10us
   digitalWrite(TriggerPin, LOW); //corta el pulso y espera el eco
   
   intervalo = pulseIn(EchoPin, HIGH);  //medimos el intervalo entre pulsos, en microsegundos
   distancia = ((intervalo * 100) / 2914) / 2; // multiplicado por 100 para no utilizar flotantes
   return distancia;

Si se prefiere no realizar estas fórmulas, una opción es emplear la librería NewPing, explicada en Sensor Ultrasónico HC-SR04 con Arduino y NewPing

Creado: 24/01/2020  

Publicidad

| Volver a Arduino |

Comentarios

Para poder comentar debés registrarte e ingresar al sitio.