Proyecto 6: Sensor Ultrasónico

(1) Descripción:

El sensor ultrasónico HC-SR04 utiliza sonar para determinar la distancia a un objeto, similar a lo que hacen los murciélagos. Ofrece una excelente detección de rango sin contacto con alta precisión y lecturas estables en un paquete fácil de usar. Viene completo con módulos transmisores y receptores ultrasónicos.

El HC-SR04 o sensor ultrasónico se utiliza en una amplia gama de proyectos electrónicos para crear aplicaciones de detección de obstáculos y medición de distancias, así como otras aplicaciones variadas. Aquí presentamos el método sencillo para medir la distancia con Arduino y el sensor ultrasónico, y cómo usar el sensor ultrasónico con Arduino.

(2) Parámetros:

  • Alimentación: +5V DC

  • Corriente en reposo: <2mA

  • Corriente de trabajo: 15mA

  • Ángulo efectivo: <15°

  • Distancia de medición: 2cm – 400 cm

  • Resolución: 0.3 cm

  • Ángulo de medición: 30 grados

  • Ancho de pulso de entrada del disparador: 10uS

(3) El principio del sensor ultrasónico:

Como se muestra en la imagen anterior, es como dos ojos. Uno es el extremo transmisor y el otro es el extremo receptor.

El módulo ultrasónico emitirá ondas ultrasónicas después de recibir una señal de disparo. Cuando las ondas ultrasónicas encuentran el objeto y se reflejan de vuelta, el módulo genera una señal de eco, por lo que puede determinar la distancia del objeto a partir de la diferencia de tiempo entre la señal de disparo y la señal de eco.

El tiempo t es el tiempo que tarda la señal emitida en encontrar el obstáculo y regresar. La velocidad de propagación del sonido en el aire es de aproximadamente 343 m/s, y distancia = velocidad × tiempo. Sin embargo, la onda ultrasónica se emite y regresa, lo que equivale a 2 veces la distancia. Por lo tanto, se debe dividir entre 2; la distancia medida por la onda ultrasónica = (velocidad × tiempo)/2

  1. Método de uso y diagrama de temporización del módulo ultrasónico:

  2. Establecer el tiempo de retardo del pin Trig del SR04 a al menos 10μs, lo que puede dispararlo para detectar la distancia.

  3. Tras el disparo, el módulo enviará automáticamente ocho pulsos ultrasónicos de 40KHz y detectará si hay una señal de retorno. Este paso lo completará automáticamente el módulo.

  4. Si la señal regresa, el pin Echo generará un nivel alto, y la duración del nivel alto es el tiempo desde la transmisión de la onda ultrasónica hasta su retorno.

Diagrama de circuito del sensor ultrasónico:

(4) Diagrama de conexión:

Nota: Los pines VCC, Trig, Echo y Gnd del sensor ultrasónico están conectados respectivamente a 5v(V), 12(S), 13(S) y Gnd(G) del shield.

(5) Código de prueba:

(Nota: No conecte el módulo Bluetooth antes de cargar el código, porque la carga del código también utiliza comunicación serial, y puede haber conflictos con la comunicación serial Bluetooth, lo que puede causar que la carga falle.)

/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 6.1
Ultrasonic sensor
http://www.keyestudio.com
*/

int trigPin = 12; // El pin Trig se conecta al 12
int echoPin = 13; // El pin Echo se conecta al 13
long duration, cm, inches;

void setup() 
{
    // Inicio del puerto serial
    Serial.begin(9600);// Establece la velocidad en baudios a 9600
    // Definir entrada y salida
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}

void loop() 
{
    // Se da un pulso bajo corto para asegurar un pulso alto limpio
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);// Al menos dar un disparo de nivel alto de 10us
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    // El tiempo en nivel alto equivale al intervalo de tiempo entre la transmisión y el retorno del sonido ultrasónico
    duration = pulseIn(echoPin, HIGH);
    // Convertir a distancia
    cm = (duration / 2) / 29.1; // convertir a centímetros
    inches = (duration / 2) / 74; // Convertir a pulgadas
    // Imprimir por el puerto serial
    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    delay(50);
}

(6) Resultados de la prueba:

Cargue el código de prueba en la placa de desarrollo, abra el monitor serial y configure la velocidad en baudios a 9600. La distancia detectada se mostrará en cm y pulgadas. Cuando obstaculice el sensor ultrasónico con su mano, el valor de distancia mostrado será menor.

(7) Explicación del código:

int trigPin = 12; este pin está definido para transmitir ondas ultrasónicas, generalmente como salida.

int echoPin = 13; este está definido como el pin de recepción, generalmente como entrada.

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

Podemos calcular la distancia usando la siguiente fórmula:

distancia = (tiempo de viaje/2) x velocidad del sonido

La velocidad del sonido es: 343m/s = 0.0343 cm/uS = 1/29.1 cm/uS

O en pulgadas: 13503.9in/s = 0.0135in/uS = 1/74in/uS

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

(8) Práctica de extensión:

Acabamos de medir la distancia mostrada por el sensor ultrasónico. ¿Qué tal si controlamos el LED con la distancia medida? Intentémoslo y conectemos un módulo de luz LED al pin D9.

Código de prueba

(Nota: No conecte el módulo Bluetooth antes de cargar el código, porque la carga del código también utiliza comunicación serial, y puede haber conflictos con la comunicación serial Bluetooth, lo que puede causar que la carga falle.)

/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 6.2
Ultrasonic LED
http://www.keyestudio.com
*/

int trigPin = 12; // Trig está conectado al 12
int echoPin = 13; // Echo está conectado al 13
int LED = 9;
long duration, cm, inches;

void setup() 
{
    // iniciar puerto serial
    Serial.begin (9600);// establecer velocidad en baudios a 9600
    // definir entrada y salida
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(LED, OUTPUT);
}

void loop() 
{
    // Se da un pulso bajo corto para asegurar un pulso alto limpio
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);// Dar al menos un disparo de nivel alto de 10us
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    // La duración del nivel alto es el tiempo desde el lanzamiento hasta el retorno de la onda ultrasónica
    duration = pulseIn(echoPin, HIGH);
    // convertir a distancia
    cm = (duration / 2) / 29.1; // convertir a centímetros
    inches = (duration / 2) / 74; // convertir a pulgadas
    // imprimir por el puerto serial
    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    if (cm >= 2 && cm <= 10) 
    {
    	digitalWrite(LED, HIGH);// encender el LED
    } 
    else 
    {
    	digitalWrite(LED, LOW); // apagar el LED
    }
    delay(50);
}

Cargue el código de prueba en la placa de desarrollo y bloquee el sensor ultrasónico con la mano, luego verifique si el LED está encendido.