Cómo conectar un Sensor de distancia ultrasónico HC-SR04 a Arduino

En este pequeño tutorial veremos cómo conectar un sensor de distancia Ultrasónico HC-SR04 a una tarjeta Arduino, también encontrarás un código de programación para tus primeras pruebas.

El sensor HC-SR04 nos permite conocer la distancia a la que se encuentra un objeto, cuenta con dos transductores ultrasónicos y con 4 terminales de conexión:

  • GND – Alimentación negativa
  • ECHO – Pin para mandar la señal ultrasónica
  • TRIG – Pin para recibir el rebote de la señal ultrasónica
  • VCC – Alimentación positiva

Su funcionamiento consiste en emitir una señal ultrasónica con uno de sus transductores para después recibir el rebote de dicha señal en su segundo transductor. Si medimos el tiempo que le toma a la señal alcanzar el objeto más cercano y regresar y conocemos la velocidad del sonido podemos calcular la distancia a la que se encuentra dicho objeto con la siguiente formula:

 Distancia = ( Tiempo_medido ) * (velocidad_del_sonido) / 2

El sensor HC-SR04 es entonces un componente de entrada, es decir, su funcionamiento consiste en entregar la información correspondiente a la distancia a través del tiempo de un pulso en su pin de señal ECHO, la tarjeta Arduino a su vez recibe la señal y obtiene el tiempo de duración del pulso con uno de sus pines digitales de entrada y con ayuda de la función pulseIn(). En este ejemplo conectaremos el pin de señal ECHO de nuestro sensor al pin digital #3 de la tarjeta y el pin de señal TRIGGER al pin digital #2.

Diagrama de conexiones

Arduino Uno – Protoboard Chica – Sensor Ultrasónico de distancia HC-SR04

Código de Arduino

Cargamos el código a la tarjeta Arduino Uno y abrimos el monitor serie para observar la distancia medida cada 0.1 segundos aproximadamente.


const int pinTrigger = 2;  //Variable que contiene el número del pin al cual conectamos la señal "trigger"
const int pinEcho = 3;   //Variable que contiene el número del pin al cual conectamos la señal "echo"

void setup() {
  Serial.begin(9600);//Configuramos la comunicación serial
  pinMode(pinTrigger, OUTPUT); //Configuramoms el pin de "trigger" como salida
  pinMode(pinEcho, INPUT);  //Configuramoms el pin de "echo" como entrada
  digitalWrite(pinTrigger, LOW);//Ponemos en voltaje bajo(0V) el pin de "trigger"
}

void loop()
{

  unsigned long t; //Variable de tipo unsigned long que contendrá el tiempo que le toma a la señal ir y regresar
  float d; //Variable de tipo float que contendrá la distancia en cm

  digitalWrite(pinTrigger, HIGH);//Ponemos en voltaje alto(5V) el pin de "trigger"
  delayMicroseconds(10);//Esperamos en esta línea para conseguir un pulso de 10us
  digitalWrite(pinTrigger, LOW);//Ponemos en voltaje bajo(0V) el pin de "trigger"
  
  t = pulseIn(pinEcho, HIGH);         //Utilizamos la función  pulseIn() para medir el tiempo del pulso/echo
  d = t * 0.000001 * 34300.0 / 2.0; //Obtenemos la distancia considerando que la señal recorre dos veces la distancia a medir y que la velocidad del sonido es 343m/s
  
  Serial.print("Distancia: ");
  Serial.print(d);
  Serial.print("cm");
  Serial.println();
  delay(100);          //Nos mantenemos en esta línea durante 100ms antes de terminar el loop
}