31/03/2000
Este artículo detalla cómo programar un sensor de ultrasonidos HC-SR04 con Arduino sin usar librerías, ofreciendo un entendimiento profundo del funcionamiento del sensor y el código necesario para medir distancias.

Funcionamiento del Sensor Ultrasónico HC-SR04
El sensor HC-SR04 es un sensor de proximidad que utiliza ondas ultrasónicas para medir la distancia a un objeto. Funciona emitiendo un pulso ultrasónico y midiendo el tiempo que tarda en recibir el eco reflejado. Conociendo la velocidad del sonido, se puede calcular la distancia.
Componentes principales:
- Transmisor: Emite el pulso ultrasónico.
- Receptor: Recibe el eco reflejado.
Principio de funcionamiento:
- El transmisor emite un pulso ultrasónico de alta frecuencia.
- El pulso viaja hasta encontrar un objeto y se refleja.
- El receptor detecta el eco reflejado.
- El microcontrolador mide el tiempo transcurrido entre la emisión del pulso y la recepción del eco.
- Utilizando la velocidad del sonido (aproximadamente 343 m/s a temperatura ambiente), se calcula la distancia.
Conexión del Sensor HC-SR04 a Arduino
La conexión es sencilla y solo requiere cuatro cables:
| Pin Arduino | Pin HC-SR04 | Descripción |
|---|---|---|
| 5V | VCC | Alimentación |
| GND | GND | Tierra |
| Pin digital (ej: 7) | Trig | Trigger (para enviar el pulso) |
| Pin digital (ej: 8) | Echo | Eco (para recibir el eco) |
Código Arduino sin Librería
El siguiente código utiliza los registros de temporización de Arduino para medir el tiempo de vuelo del pulso ultrasónico. Esto elimina la necesidad de librerías adicionales.
const int trigPin = 7; // Pin trigger del sensor
const int echoPin = 8; // Pin eco del sensor
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Limpiar el pin trigger
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Enviar pulso de 10 microsegundos
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Medir el tiempo del eco
long duration = pulseIn(echoPin, HIGH);
// Calcular la distancia
float distance = duration 0.034 / 2; //Velocidad del sonido: 340m/s
// Imprimir la distancia en el monitor serial
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
delay(100);
}Explicación del código:
- const int trigPin = 7; y const int echoPin = 8; : Definen los pines digitales utilizados para el trigger y el eco.
- pinMode(trigPin, OUTPUT); y pinMode(echoPin, INPUT); : Configuran los pines como salida (trigger) y entrada (eco).
- digitalWrite(trigPin, LOW); : Establece el pin trigger en bajo para preparar la medición.
- digitalWrite(trigPin, HIGH); : Envía un pulso de 10 microsegundos al pin trigger.
- delayMicroseconds(2); y delayMicroseconds(10); : Generan pequeños retrasos.
- long duration = pulseIn(echoPin, HIGH); : Esta función crucial mide el tiempo (en microsegundos) que el pin eco permanece en alto, lo que representa el tiempo de vuelo del eco.
- float distance = duration 0.034 / 2; : Calcula la distancia en centímetros. La fórmula utiliza la velocidad del sonido (aprox. 340 m/s o 0.034 cm/µs) y divide por 2 porque el sonido viaja hasta el objeto y regresa.
- Serial.print(); y Serial.println(); : Imprime la distancia en el monitor serial de Arduino.
Consideraciones Adicionales
Calibración: La velocidad del sonido puede variar según la temperatura y la humedad. Para una mayor precisión, se puede calibrar el código usando un valor más preciso de la velocidad del sonido en tu entorno o mediante un proceso de calibración.
Filtrado de Ruido: El sensor puede ser sensible al ruido. Para mejorar la estabilidad de las lecturas, se pueden implementar técnicas de filtrado de señal, como promediar varias lecturas o usar un filtro de media móvil.
Distancias Máximas y Mínimas: El sensor HC-SR04 tiene un rango de medición limitado. El alcance máximo suele ser de alrededor de 400 cm, mientras que el mínimo es de unos pocos centímetros. El código debe tener en cuenta estas limitaciones para evitar lecturas erróneas.
Manejo de Errores: El sensor puede fallar en detectar el eco, especialmente a grandes distancias o con objetos que no reflejan bien las ondas ultrasónicas. Se debe incorporar un manejo de errores para detectar estas situaciones y evitar resultados inesperados. Por ejemplo, se podría establecer un límite de tiempo para la función pulseIn()o verificar si la duración es cero o demasiado larga.
Consultas Habituales
¿Qué es el pin Trigger? El pin Trigger inicia la emisión del pulso ultrasónico. Se envía un pulso corto para activar la transmisión.
¿Qué es el pin Echo? El pin Echo recibe el eco reflejado por el objeto. El tiempo que tarda en recibirse el eco se usa para calcular la distancia.
¿Por qué no usar una librería? Usar la librería simplifica la programación, pero no da un entendimiento completo del funcionamiento. Este método sin librería proporciona mayor control y comprensión.
¿Cómo mejorar la precisión? Calibrar la velocidad del sonido y aplicar técnicas de filtrado de ruido pueden mejorar considerablemente la precisión de las mediciones.
Tabla Comparativa: Con Librería vs Sin Librería
| Característica | Con Librería | Sin Librería |
|---|---|---|
| Complejidad del código | Baja | Alta |
| Facilidad de uso | Alta | Baja |
| Control sobre el hardware | Bajo | Alto |
| Comprensión del funcionamiento | Baja | Alta |
| Flexibilidad | Baja | Alta |
En resumen, programar el sensor HC-SR04 sin usar librerías proporciona un profundo entendimiento de su funcionamiento interno y permite un mayor control sobre el proceso de medición, a costa de una mayor complejidad en el código. Sin embargo, para aplicaciones que requieren una alta precisión o un manejo robusto de errores, esta opción es altamente recomendable.
Si quieres conocer otros artículos parecidos a Cómo programar un módulo ultrasónico en arduino sin librería puedes visitar la categoría Libros y Librerías.
