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
Método de uso y diagrama de temporización del módulo ultrasónico:
Establecer el tiempo de retardo del pin Trig del SR04 a al menos 10μs, lo que puede dispararlo para detectar la distancia.
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.
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.
