loader image

Código y conexión del sensor ultrasónico HC-SR04 con Arduino

Arduino Proyectos 0

Este artículo es una guía sobre el popular sensor ultrasónico HC-SR04. Te explicamos cómo funciona, te mostramos algunas de sus características y compartimos un ejemplo de proyecto de Arduino que puedes seguir para integrarlo en tus propios proyectos.

También te proporcionamos un diagrama esquemático sobre cómo conectar el sensor ultrasónico, y un diagrama de ejemplo para utilizarlo con el Arduino.

Materiales

Elementos y componentes

  • Arduino UNO

    Tabla protoboard

    Cable o jumpers

    Sensor ultrasónico HC-SR04

  • Software, aplicaciones y servicios online

  • Arduino IDE

  • Conexión HC-SR04 Arduino

    Sigue este diagrama esquemático para conectar el sensor ultrasónico HC-SR04 al Arduino.

    La siguiente tabla muestra las conexiones que necesita hacer:

    Sensor ultrasónico HC-SR04Arduino
    VCC5V
    TrigPin 11
    EchoPin 12
    GNDGND

    Código

    Sube el siguiente código a tu IDE de Arduino.

    /*
        Ultrasonic sensor Pins:
            VCC: +5VDC
            Trig : Trigger (INPUT) - Pin11
            Echo: Echo (OUTPUT) - Pin 12
            GND: GND
     */
     
    int trigPin = 11;    // Disparador (Trigger)
    int echoPin = 12;    // Eco (Echo)
    long duration, cm, inches;
     
    void setup() {
      //Inicia el Serial Port
      Serial.begin (9600);
      //Define entradas y salidas
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    }
     
    void loop() {
      // El sensor se activa con un pulso ALTO de 10 microsegundos o más
      // Emite un breve pulso BAJO antes para asegurar un pulso ALTO limpio:
      digitalWrite(trigPin, LOW);
      delayMicroseconds(5);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
     
      // Lee la señal del sensor: un pulso ALTO cuya duración
      // es el tiempo (en microsegundos) desde el envío del
      // ping hasta la recepción de su eco de un objeto.
      pinMode(echoPin, INPUT);
      duration = pulseIn(echoPin, HIGH);
     
      // Convierte el tiempo en distancia
      cm = (duration/2) / 29.1;     // Divide entre 29.1 o multiplica por 0.0343
      inches = (duration/2) / 74;   // Divide entre 74 o multiplica por 0.0135
      
      Serial.print(inches);
      Serial.print("in, ");
      Serial.print(cm);
      Serial.print("cm");
      Serial.println();
      
      delay(250);
    }

    Cómo funciona el Código

    Primero, se crean variables para el disparador y el echo pin llamadas trigPin y echoPin, respectivamente. El pin de disparo se conecta al Pin 11 digital, y el pin echo se conecta al Pin 12 digital:

    int trigPin = 11; 
    int echoPin = 12;

    También se crean tres variables de tipo long: duración, cm y pulgadas. La variable de duración guarda el tiempo entre la emisión y la recepción de la señal. La variable cm guardará la distancia en centímetros, y la variable inch guardará la distancia en pulgadas.

    long duration, cm, inches;
    

    En el setup(), se inicializa el puerto serial a una velocidad en baudios de 9600, y se establece el pin de disparo como una salida y el pin de echo como una entrada.

    //Inicia el Serial Port
    Serial.begin (9600);
    //Define entradas y salidas
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);

    En el loop(), se activa el sensor enviando un pulso ALTO de 10 microsegundos. Pero primero, da un breve pulso BAJO para garantizar que se tendrá un pulso ALTO limpio:

    digitalWrite(trigPin, LOW);
    delayMicroseconds(5);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    Luego, podrás leer la señal del sensor – un pulso ALTO cuya duración es el tiempo en microsegundos desde el envío de la señal hasta la recepción de su eco a un objeto.

    duration = pulseIn(echoPin, HIGH);
    

    Finalmente, sólo necesitas convertir la duración en una distancia. Esta distancia se puede calcular con la siguiente fórmula:

    velocidad\space del\space sonido\space (cm)=343m/s = 0.0343 cm/ \mu s = \frac{1}{29.1} cm/ \mu s
    velocidad\space del\space sonido\space (in)=13503.9in/s = 0.0135in/ \mu s = \frac{1}{74} in/ \mu s

    Tenemos que dividir el tiempo de viaje entre 2 porque debemos tener en cuenta que la onda fue enviada, golpeó el objeto, y luego regresó de nuevo al sensor.

    cm = (duration/2) / 29.1;
    inches = (duration/2) / 74;
    

    Finalmente, imprimimos los resultados en el Serial Monitor:

    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();

    Código con NewPing

    También puedes usar la biblioteca de NewPing. Descarga la biblioteca aquí.

    Aprende también sobre:  Controla LED RGB desde App Android con Arduino y Bluetooth

    Después de instalar la biblioteca NewPin, carga el código que se proporciona a continuación:

    #include <NewPing.h>
     
    #define TRIGGER_PIN 11
    #define ECHO_PIN 12
    #define MAX_DISTANCE 200
    
    // Configuración NewPing de los pines y la distancia máxima
    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 
     
    void setup() {
       Serial.begin(9600);
    }
     
    void loop() {
       delay(50);
       unsigned int distance = sonar.ping_cm();
       Serial.print(distance);
       Serial.println("cm");
    }

    Cómo funciona el Código

    Obtener la distancia a un objeto usando la biblioteca de NewPing es mucho más simple.

    Se comienza por incluir la biblioteca NewPing:

    #include <NewPing.h>
    

    Después, define el disparador y el pin de eco. El pin del gatillo está conectado al Pin 11 digital de Arduino, y el eco al Pin 12. También es necesario definir la variable MAX_DISTANCE para poder usar la biblioteca.

    #define TRIGGER_PIN 11
    #define ECHO_PIN 12
    #define MAX_DISTANCE 200

    Luego, se crea una instancia NewPing llamada sonar:

    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
    

    En el setup(), se inicia la comunicación en serie a una velocidad de 9600 baudios.

    Serial.begin(9600);
    

    Finalmente, en el loop(), para obtener la distancia sólo hay que usar el método ping_cm() en el objeto sonar. Esto te dará la distancia en centímetros.

    unsigned int distance = sonar.ping_cm();
    

    Si quieres obtener la distancia en pulgadas debes usar el comando sonar.ping_in() en su lugar.


    Submit your review
    1
    2
    3
    4
    5
    Submit
         
    Cancel

    Create your own review

    MiElectrónicaFácil.com
    Average rating:  
     0 reviews

     

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.

    Deja una Review

    Submit your review
    1
    2
    3
    4
    5
    Submit
         
    Cancel

    Create your own review

    MiElectrónicaFácil.com
    Average rating:  
     0 reviews