Vistas: 164 Autor: Grace Hora de publicación: 2021-07-26 Origen: Sitio
El El sensor ultrasónico HC-SR04 es uno de los módulos de medición de distancia más populares para proyectos Arduino. Se utiliza ampliamente en robots para evitar obstáculos, sensores de estacionamiento, detección de nivel, contenedores de basura inteligentes, medidores de distancia y otras aplicaciones de detección sin contacto.
El módulo emite ondas ultrasónicas de 40 kHz a través de un transmisor. Cuando la onda de sonido encuentra un objeto, se refleja hacia el receptor. Al medir el tiempo del eco y utilizar la velocidad del sonido, Arduino puede calcular la distancia entre el sensor y el objeto.
| Parámetro | Valor |
| Tensión de trabajo típica | 5 VCC |
| Corriente de trabajo estática | Menos de 5 mA en algunas versiones de módulo |
| Frecuencia de funcionamiento | onda ultrasónica de 40kHz |
| Distancia de detección | Rango común: 2 cm a 400 cm; algunas versiones con ganancia ajustada pueden admitir un alcance más largo. |
| Ángulo de detección | Generalmente dentro de los 15 grados; Algunas versiones con mayor ganancia pueden alcanzar unos 30 grados. |
| Precisión | Hasta aproximadamente 0,3 cm en condiciones de prueba adecuadas |
| zona ciega | Distancia mínima de medición de aproximadamente 2 cm |
El módulo ultrasónico HC-SR04 tiene cuatro pines: VCC, TRIG, ECHO y GND. Arduino envía un pulso de disparo corto al pin TRIG y luego lee el pulso de retorno del pin ECHO.
| HC-SR04 Pasador | Conexión Arduino | Función |
| VCC | 5V | Fuente de alimentación para el módulo ultrasónico. |
| TRIGONOMETRÍA | Pin digital 9 | Entrada de disparador. Arduino aplica un pulso de 10us para comenzar a medir el alcance. |
| ECO | Pin digital 10 | Salida de eco. Arduino lee el ancho del pulso para calcular la distancia. |
| Tierra | Tierra | Conexión a tierra. |
El HC-SR04 funciona mediante medición del tiempo de vuelo. Arduino envía una señal de activación de alto nivel de al menos 10 microsegundos al pin TRIG. Luego, el módulo envía automáticamente ocho pulsos ultrasónicos de 40 kHz y espera el eco reflejado.
Cuando se detecta la señal ultrasónica reflejada, el pin ECHO emite un pulso de alto nivel. La duración de este pulso es el tiempo de viaje de ida y vuelta de la onda ultrasónica.
Distancia = Tiempo de eco de alto nivel × Velocidad del sonido / 2
En el código Arduino, la fórmula simplificada común es:
Distancia en cm = duración × 0,0343 / 2
El proceso de sincronización es simple: Arduino mantiene TRIG bajo brevemente, envía un pulso alto de 10 us y luego regresa TRIG a bajo. El HC-SR04 envía una ráfaga ultrasónica y establece ECHO en nivel alto hasta que la señal reflejada regresa o la medición se agota.
Para evitar lecturas inestables, deje un breve retraso entre mediciones. Generalmente se utiliza un ciclo de medición de aproximadamente 60 ms para que el eco ultrasónico anterior tenga tiempo de desaparecer antes del siguiente disparo.
La función Arduino pulseIn() se utiliza para medir cuánto tiempo un pin digital permanece ALTO o BAJO. Para HC-SR04, Arduino usa pulseIn(echoPin, HIGH) para leer el ancho de pulso de alto nivel del pin ECHO.
| Sintaxis | Significado |
| pulseIn(pin, valor) | Lee la duración de un pulso ALTO o BAJO. |
| pulseIn(pin, valor, tiempo de espera) | Lee el pulso con un valor de tiempo de espera en microsegundos. |
Se recomienda utilizar un tiempo de espera. Si no se devuelve ningún eco, la función puede dejar de esperar y devolver 0 en lugar de bloquear el programa por mucho tiempo.
El cableado es sencillo. Conecte VCC a 5V, GND a GND, TRIG a un pin de salida digital de Arduino y ECHO a un pin de entrada digital de Arduino. El siguiente ejemplo utiliza Arduino Uno, TRIG en el pin 9 y ECHO en el pin 10.
El siguiente programa típico de Arduino envía un pulso de disparo de 10us, lee el ancho del pulso del ECO, calcula la distancia en centímetros e imprime el resultado en el monitor serie.
constante int trigPin = 9; constante int echoPin = 10; larga duración; distancia de flotación cm; configuración vacía() { pinMode(trigPin, SALIDA); pinMode(echoPin, ENTRADA); Serie.begin(9600); } bucle vacío() { digitalWrite(trigPin, LOW); retrasoMicrosegundos(2); escritura digital (trigPin, ALTA); retrasoMicrosegundos(10); escritura digital (trigPin, BAJO); duración = pulseIn(echoPin, ALTA, 30000); if (duración == 0) { Serial.println('Fuera de rango'); } else { distanciaCm = duración * 0,0343 / 2; Serial.print('Distancia: '); Serial.print(distanciaCm); Serial.println('cm'); } retraso(60); }
Si ve valores de distancia en el monitor serie, el sensor ultrasónico HC-SR04 y el cableado Arduino están funcionando correctamente. Luego podrá utilizar los datos de distancia para la detección de obstáculos, control de movimiento del robot, puertas automáticas, recordatorios de estacionamiento o proyectos de nivel de líquido.
Mantenga el objeto medido dentro del rango de distancia recomendado y fuera de la zona ciega de 2 cm.
Utilice una superficie objetivo plana y sólida para una mejor reflexión ultrasónica.
Evite medir materiales blandos, angulados, porosos o que absorban el sonido.
Utilice una fuente de alimentación estable de 5 V y mantenga el cableado corto y seguro.
Agregue un tiempo de espera a pulseIn() para evitar un bloqueo prolongado cuando no regresa ningún eco.
Filtre el promedio o la mediana de varias lecturas para reducir el ruido.
Para mayor precisión, compense la temperatura porque la velocidad del sonido cambia con la temperatura del aire.
| Solicitud | Cómo se utiliza HC-SR04 |
| Robot para evitar obstáculos | Detecta objetos cercanos y ayuda al robot a cambiar de dirección. |
| Sensor de distancia de aparcamiento | Mide la distancia entre el vehículo y un obstáculo. |
| Detección de nivel de líquido | Mide la distancia desde el sensor a la superficie del líquido sin contacto. |
| Papelera inteligente | Detecta una mano u objeto cercano y activa la apertura automática de la tapa. |
Para usar un sensor ultrasónico HC-SR04 con Arduino, conecte VCC a 5V, GND a GND, TRIG a un pin de salida digital y ECHO a un pin de entrada digital. Envíe un pulso de disparo de 10us, lea la duración del eco con pulseIn() y calcule la distancia con la fórmula de tiempo de vuelo.
El HC-SR04 es económico, fácil de usar y adecuado para muchos proyectos de medición de distancias con Arduino. Para obtener mejores resultados, preste atención a la superficie objetivo, el ángulo de medición, la zona ciega, la potencia estable, el manejo del tiempo de espera y los efectos de la temperatura.
Arduino envía un pulso de 10us al pin TRIG. El HC-SR04 emite ocho pulsos ultrasónicos de 40 kHz y establece el pin ECHO en alto hasta que regresa el sonido reflejado. Arduino mide este tiempo de pulso y calcula la distancia.
La fórmula es distancia = duración × velocidad del sonido / 2. En centímetros, una fórmula común de Arduino es distanciaCm = duración × 0,0343 / 2, donde la duración se mide en microsegundos.
El tiempo de eco medido es el tiempo de ida y vuelta desde el sensor al objeto y de regreso al sensor. Dividir por 2 da la distancia unidireccional entre el sensor y el objeto.
Puedes utilizar la mayoría de los pines digitales Arduino. En muchos ejemplos, TRIG está conectado al pin digital 9 y ECHO está conectado al pin digital 10. El código debe coincidir con los pines utilizados en su cableado.
Las causas comunes incluyen cableado suelto, alimentación inestable de 5 V, números de pin TRIG o ECHO incorrectos, ningún objeto dentro del alcance, superficies objetivo en ángulo, materiales blandos, cabezales de sensores bloqueados o falta de tiempo de espera en la función pulseIn().
La zona ciega es la distancia mínima donde el módulo no puede medir de manera confiable. Para HC-SR04, la zona ciega suele ser de unos 2 cm. Los objetos más cercanos pueden producir lecturas inestables.
Sí, el HC-SR04 se puede utilizar para proyectos sencillos de nivel de agua sin contacto si el sensor está protegido de la humedad y montado sobre la superficie del líquido. Para tanques húmedos, exteriores o industriales, se recomienda un sensor ultrasónico resistente al agua.
Utilice una fuente de alimentación estable, mantenga el sensor perpendicular al objetivo, evite superficies blandas o en ángulo, agregue tiempo de espera de entrada de pulso, tome lecturas múltiples, use filtrado mediano y permita aproximadamente 60 ms entre mediciones.