Este proyecto es una excelente introducción al mundo de la microelectrónica y la programación, combinando la versatilidad de la placa Arduino Uno con la precisión de un sensor ultrasónico HC-SR04 y la conveniencia de una pantalla LCD 16×2 con interfaz I2C. El objetivo principal es medir la distancia entre el sensor y un objeto y mostrar el resultado en centímetros directamente en la pantalla de cristal líquido.
🔩Funcionamiento
El Poder de I2C en la LCD
Tradicionalmente, las pantallas LCD 16×2 requerían hasta 12 cables para funcionar en modo de 4 bits, consumiendo la mayoría de los pines digitales del Arduino. La interfaz I2C (Inter-Integrated Circuit) resuelve esto a través de un pequeño adaptador que contiene un chip (a menudo un PCF8574).
- Principio: I2C es un protocolo de comunicación serial de dos hilos (SDA y SCL) que permite que múltiples dispositivos (‘esclavos’) se comuniquen con un ‘maestro’ (el Arduino) utilizando solo esos dos pines.
- Ventaja: En este proyecto, el uso de I2C libera los pines Digitales 2 al 7 para otros usos (como controlar un relé para abrir una cerradura real), permitiendo una escalabilidad del proyecto.
PINES del I2C
| Pin del I2C | Protocolo | Notas Importantes |
|---|---|---|
| VCC | Alimentación | Uso de 5V. |
| GND | Tierra | Conexión de referencia. |
| SDA | I2C | Línea de Datos Serial. |
| SCL | I2C | Línea de Reloj Serial. |
El Sensor Ultrasónico HC-SR04
El HC-SR04 es el corazón de la medición. Utiliza el principio de la ecolocalización, similar a como lo hacen los murciélagos.
- Emisión: Un pulso corto (de al menos 10µs) enviado al pin TRIG del sensor hace que este emita un tren de 8 pulsos ultrasónicos de 40kHz.
- Viaje: Las ondas de sonido viajan hasta chocar con un objeto.
- Recepción: El eco de las ondas rebota y es detectado por el pin ECHO del sensor.
- Medición: El tiempo que tarda el sonido en ir y volver es capturado por el Arduino.
La distancia se calcula usando la fórmula física de la cinemática:
Distancia = Velocidad del sonido x tiempo de viaje / 2
Dado que la velocidad del sonido en el aire es aproximadamente 343 m/s (0.0343cm / µs), y dividimos por 2 porque el tiempo medido es de ida y vuelta, la fórmula práctica para el Arduino es:
Distancia (cm) ≈ Duración del Pulso Echo (μs) / 58
PINES del HC-04
| Pin del HC-04 | Protocolo | Notas Importantes |
|---|---|---|
| VCC | Alimentación | Uso de 5V. |
| GND | Tierra | Conexión de referencia. |
| TRIG | PWM | Emisor del pulso ultrasónico |
| ECHO | PWM | Receptor del pulso de eco (mide el tiempo) |
🔨Componentes
| Componente | Cantidad | Especificación | Función |
|---|---|---|---|
| Placa Arduino | 1 | Arduino Uno, Nano, etc. | Control de componentes(cerebro) |
| LCD | 1 | 1602a 16×2 | Mostrar información |
| Interfaz | 1 | I2C | Reducir pines del LCD |
| Sensor ultrasónico | 1 | HC-04 | Medir distancias |
| Cables de conexión | n | Unir los componentes |
🔌Conexiones
Conexión LCD 16×2 con I2C
| LCD (I2C)Pin | Arduino Pin |
|---|---|
| GND | GND |
| VCC | 5V |
| SDA | A4 |
| SCL | A5 |
Conexión del HC-04 ultrasónico:
| HC-04 Pin | Arduino Pin |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | D9 |
| ECHO | D10 |
0️⃣Código
Ejecuta el siguiente código, no olvidar instalar la librería “LiquidCrystal_I2C” por marcoschwartz o similar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | // 1. INCLUSIÓN DE LIBRERÍAS // Necesaria para manejar la pantalla LCD 16x2 con interfaz I2C. #include <LiquidCrystal_I2C.h> // 2. DEFINICIÓN DE CONSTANTES Y PINES // Definición de los pines para el sensor ultrasónico HC-SR04 const int pinTrig = 9; // Pin digital 9 conectado a TRIG del HC-SR04 const int pinEcho = 10; // Pin digital 10 conectado a ECHO del HC-SR04 // Constante para la velocidad del sonido en cm/microsegundo // 1 / 58 = 0.01724 (que es 1 / (2 * 0.0343 cm/µs)) const float divDistancia = 58.0; // 3. INICIALIZACIÓN DE OBJETOS // Inicialización del objeto LCD: // La dirección I2C común es 0x27 o 0x3F. (Asegúrate de verificar la tuya si no funciona). // 16, 2 indican que es una pantalla de 16 columnas y 2 filas. LiquidCrystal_I2C lcd(0x27, 16, 2); // 4. FUNCIÓN SETUP() - Configuración Inicial void setup() { // Inicialización de la comunicación serial (opcional, para depuración en el monitor) Serial.begin(9600); Serial.println("Iniciando Medidor Ultrasónico..."); // Configuración de los pines del sensor pinMode(pinTrig, OUTPUT); // TRIG como salida para enviar el pulso pinMode(pinEcho, INPUT); // ECHO como entrada para recibir el tiempo // Inicialización de la pantalla LCD lcd.init(); // Inicializa el LCD lcd.backlight(); // Enciende la retroiluminación // Mensaje de bienvenida inicial en el LCD lcd.setCursor(0, 0); // Coloca el cursor en la columna 0, fila 0 lcd.print(" Medidor de Distancia "); lcd.setCursor(0, 1); // Coloca el cursor en la columna 0, fila 1 lcd.print(" Iniciando... "); // Pequeña pausa para que se vea el mensaje de inicio delay(2000); lcd.clear(); // Limpia la pantalla } // 5. FUNCIÓN LOOP() - Bucle Principal void loop() { // 5.1. MEDICIÓN DE DISTANCIA // ---------------------------------------------------- // Garantizar que el pin TRIG esté en LOW antes de enviar el pulso digitalWrite(pinTrig, LOW); delayMicroseconds(2); // Enviar el pulso de 10 µs para activar la emisión de ultrasonido digitalWrite(pinTrig, HIGH); delayMicroseconds(10); digitalWrite(pinTrig, LOW); // La función pulseIn() mide la duración del pulso en el pin ECHO. // Mide el tiempo que tarda el pin ECHO en pasar de LOW a HIGH (el eco). long duracion = pulseIn(pinEcho, HIGH); // 5.2. CÁLCULO DE DISTANCIA // ---------------------------------------------------- // Cálculo de la distancia en centímetros: // Distancia = Duración del Pulso (µs) / 58 (factor de conversión) float distancia_cm = duracion / divDistancia; // 5.3. IMPRESIÓN DE RESULTADOS // ---------------------------------------------------- // Imprimir en el Monitor Serial (para depuración) Serial.print("Tiempo (us): "); Serial.print(duracion); Serial.print(" | Distancia (cm): "); Serial.println(distancia_cm); // Imprimir en la Pantalla LCD lcd.setCursor(0, 0); lcd.print("Distancia Actual:"); // Mover el cursor a la segunda fila para el valor lcd.setCursor(0, 1); // Imprimir el valor flotante con 2 decimales lcd.print(distancia_cm, 2); lcd.print(" cm "); // Espacios en blanco para borrar restos de valores anteriores // Pausa antes de la siguiente medición para evitar lecturas erráticas delay(500); // 500 milisegundos (media segundo) } |
🖌️Diseños

🎬Videos
📑Conclusión
Este proyecto de medidor de distancia ultrasónico, que integra un Arduino Uno, un sensor HC-SR04 y una LCD 16×2 I2C, ha demostrado ser una implementación práctica y altamente eficiente de los principios de la acústica y la microelectrónica.
Hemos logrado con éxito la adquisición de datos en tiempo real mediante el método de ecolocalización. El Arduino, actuando como el cerebro del sistema, mide con precisión el tiempo de vuelo (Time-of-Flight) de la onda ultrasónica y traduce este valor a centímetros, utilizando una fórmula física simple, pero potente (Distancia (cm) ≈ Duración del Pulso Echo(μs) / 58)
La elección de la pantalla LCD con interfaz I2C ha sido crucial, ya que simplifica el cableado a solo cuatro conexiones (VCC, GND, SDA, SCL), liberando valiosos pines digitales del Arduino para futuras expansiones.
En resumen, este proyecto no solo proporciona una herramienta funcional para medir distancias con un margen de error mínimo, sino que también sirve como una sólida base educativa que entrelaza la programación (C++ en el entorno Arduino), la electrónica digital y conceptos físicos fundamentales, siendo un excelente punto de partida para aplicaciones más complejas como la robótica de evasión de obstáculos o sistemas de monitoreo de niveles.

