Funcionamiento de un sensor HC-SR04

Cómo funciona un sensor y un código ejemplo para conectarlo a la placa Arduino.

Ejemplo de un sensor conectado a una placa de Arduino

Los sensores usados en proyectos de electrónica suelen ser sensores de distancia de baja precisión basados en ultrasonidos. Se usan en proyectos como detección de obstáculos y sensores de presencia.

Su funcionamiento es muy simple: El emisor emite ondas que rebotan con el objeto y son captados por el receptor. La distancia se calcula gracias al tiempo que transcurre entre la emisión de la señal y la captación de esta por el receptor.

Sabemos que la velocidad se puede calcular cómo:   

                                                                           Velocidad = Superficie / Tiempo

Si la velocidad del sonido es 343 m/s a una temperatura de 20ºC y con una humedad del 50%.

                                                      343 (m/s) • 100 (cm/m)  1/1e-6 (s/µs) = 0.0343 cm/µs

 Es decir, el sonido 0.0343 cm por cada microsegundo. Por lo que podemos obtener la distancia existente de un objeto a partir del tiempo que transcurre entre la emisión de la señal y su recepción.

                                                             Distancia del objeto = (Velocidad • Tiempo)/2 

Ahora vamos a poner un ejemplo de un posible código en Arduino para controlar un sensor HC-SR04:

//CÓDIGO SENSOR ARDUINO
const int EchoPuerto = 11;  //escribimos constantes de puertos
const int TriggerPuerto = 12;

 

void setup() {
  Serial.begin(9600);              //Iniciamos comunicación serial entre Arduino y Sensor con una vel de 9600 bits/s
  pinMode(TriggerPuerto, OUTPUT);  //definimos puertos
  pinMode(EchoPuerto, INPUT);
}

 

void loop() {
  int distancia = CalcDist(TriggerPuerto, EchoPuerto);  //llamamos funcion
  Serial.print(“Distancia: “);                          //Escribimos la distancia
  Serial.println(distancia);
  delay(1000);
}

 

int CalcDist(int TriggerPuerto, int EchoPuerto) {
  long duracion, distanciaCm;        //variables para cálculos
  digitalWrite(TriggerPuerto, LOW);  //pulso genera disparo limpio de 4us
  delayMicroseconds(4);
  digitalWrite(TriggerPuerto, HIGH);  //pulso activa sensor 10us
  delayMicroseconds(10);
  digitalWrite(TriggerPuerto, LOW);  //pulso desactivamos sensor

 

  duracion = pulseIn(EchoPuerto, HIGH);  //medimos el tiempo entre pulso en us
  // nosotros no sabemos cuando va a regresar la onda, entonces desde que desactivamos el sensor
  // hasta que regresa la onda, es el tiempo que nos ayudará a saber la distancia
  distanciaCm = 0.0343 * duracion;  // 343m/s=0,0343 cm/us
  return distanciaCm;
}

Esperamos que os haya servido de ayuda en vuestros proyectos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *