Icono del sitio Home Assistant Fácil

HC-SR04 sensor de ultrasonidos con Arduino

sonar-arduino

En este fragmento de código vamos a tratar un tema muy curioso, vamos a ver como leer y entender un HC-SR04 sensor de ultrasonidos con Arduino. Como ya os hemos dicho en más de un fragmento de código y en el capítulo 48. Sensor de temperatura en Arduino, antes de empezar con un sensor debemos de mirar la ficha técnica del dispositivo. Este dispositivo tiene la referencia HC-SR04. Hacemos un resumen de las características técnicas más importantes:

Además de las características técnicas nos facilitan el conexionado que os lo pongo a continuación.

Es importante fijarse en las patillas que tiene el sensor. Por un lado las típicas GND (tierra) y Vcc (alimentación 5 V) y por otro lado tiene dos patillas que son el Trigger (disparo) y Echo (eco). Estas dos patillas son las importantes. Estas las tenemos que conectar a las entradas/salidas digitales. Por un lado Trigger va a funcionar en modo salida y por otro lado Echo va a funcionar en modo entrada.

Antes de continuar aclarar como funciona un sonar, más concreto el HC-SR04. El Trigger manda un pulso de ultrasonidos y el Echo se encarga en recibirlo. Por lo tanto tenemos el tiempo que tarda en recibirlo y la velocidad, la del sonido, así de fácil. Como hemos tenido que ir hasta el objeto y volver lo estamos calculando por dos así que hay que dividir por dos. Esta fórmula la tenemos también en la ficha técnica.

Distancia = (Tiempo en estado HIGH * Velocidad del sonido) / 2

En el caso de este sensor, hay que iniciar la comunicación entre el Trigger y el Echo para ello debemos mandar un pulso de 10 ms (milisegundos).

Veamos entonces el código que vamos a necesitar

/*
  Creado: Luis del Valle (ldelvalleh@programarfacil.com)
  https://programarfacil.com
*/

// Configuramos los pines del sensor Trigger y Echo
const int PinTrig = 2;
const int PinEcho = 3;

// Constante velocidad sonido en cm/s
const float VelSon = 34000.0;

float distancia;

void setup()
{
  // Iniciamos el monitor serie para mostrar el resultado
  Serial.begin(9600);
  // Ponemos el pin Trig en modo salida
  pinMode(PinTrig, OUTPUT);
  // Ponemos el pin Echo en modo entrada
  pinMode(PinEcho, INPUT);
}
void loop()
{
  iniciarTrigger();
  
  // La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
  unsigned long tiempo = pulseIn(PinEcho, HIGH);
  
  // Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que está en microsegundos
  // por eso se multiplica por 0.000001
  distancia = tiempo * 0.000001 * VelSon / 2.0;
  Serial.print(distancia);
  Serial.print("cm");
  Serial.println();
  delay(1000);
}

// Método que inicia la secuencia del Trigger para comenzar a medir
void iniciarTrigger()
{
  // Ponemos el Triiger en estado bajo y esperamos 2 ms
  digitalWrite(PinTrig, LOW);
  delayMicroseconds(2);
  
  // Ponemos el pin Trigger a estado alto y esperamos 10 ms
  digitalWrite(PinTrig, HIGH);
  delayMicroseconds(10);
  
  // Comenzamos poniendo el pin Trigger en estado bajo
  digitalWrite(PinTrig, LOW);
}

Como compruebas en el código, hay que hacer unos ajustes con las unidades. Por un lado la velocidad del sonido pasar de m/s a cm/s. Por otro lado la función pulseIn que se encarga de medir el tiempo que tarda un pin en cambiar de estado devuelve microsegundos y hay que pasarlo a segundos multiplicando por 0.000001. Con esto ya tenemos nuestro sonar totalmente operativo.

Salir de la versión móvil