Este dispositivo actúa como un “radar de tramo”. Colocaremos dos sensores a una distancia conocida (d). Cuando un objeto interrumpe el primer haz, el Arduino inicia un cronómetro de alta precisión. Cuando interrumpe el segundo, se detiene el tiempo y se realiza el cálculo matemático.
🔩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
La precisión de este proyecto depende totalmente de la Distancia Física entre ellos. Si en tu código pones que los sensores están a 20 cm, pero en la realidad están a 20.5 cm, tendrás un error sistemático. Usa una regla y mide desde el centro del cilindro del primer sensor hasta el centro del segundo.
Ten en cuenta que estos sensores funcionan por ondas de sonido. Si el objeto es muy pequeño o tiene una superficie que absorbe el sonido (como espuma o tela), es posible que no “rebote” la señal y el sensor no lo detecte. Para mejores resultados, usa objetos con superficies sólidas y planas.
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(I2C) | 1 | 1602a 16×2 | Mostrar información |
| Interfaz | 1 | I2C | Reducir pines del LCD |
| Sensor ultrasónico | 2 | 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 (1) Pin | Arduino Pin |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | D2 |
| ECHO | D3 |
| HC-04 (2) Pin | Arduino Pin |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | D4 |
| ECHO | D5 |
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 93 | #include <Arduino.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> // Configuración de la pantalla LCD (Dirección 0x27 o 0x3F) LiquidCrystal_I2C lcd(0x27, 16, 2); // Definición de pines para los sensores const int trig1 = 2; const int echo1 = 3; const int trig2 = 4; const int echo2 = 5; // Variables de control float distanciaEntreSensores = 16.0; // Distancia en centímetros (ajusta según tu montaje) unsigned long tiempoInicio, tiempoFin; float tiempoTotal, velocidad; bool objetoDetectado1 = false; bool objetoDetectado2 = false; // Umbral de detección (distancia en cm para activar el sensor) const int umbral = 10; void setup() { pinMode(trig1, OUTPUT); pinMode(echo1, INPUT); pinMode(trig2, OUTPUT); pinMode(echo2, INPUT); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Velocimetro v1.0"); delay(2000); lcd.clear(); } float medirDistancia(int trig, int echo) { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); long duracion = pulseIn(echo, HIGH); return duracion * 0.034 / 2; } void loop() { lcd.setCursor(0, 0); lcd.print("Esperando... "); // Paso 1: Esperar a que el objeto pase por el primer sensor while (!objetoDetectado1) { if (medirDistancia(trig1, echo1) < umbral) { tiempoInicio = micros(); objetoDetectado1 = true; lcd.setCursor(0, 0); lcd.print("Detectado S1! "); } } // Paso 2: Esperar a que el objeto pase por el segundo sensor while (!objetoDetectado2) { if (medirDistancia(trig2, echo2) < umbral) { tiempoFin = micros(); objetoDetectado2 = true; } } // Paso 3: Cálculos if (objetoDetectado1 && objetoDetectado2) { tiempoTotal = (float)(tiempoFin - tiempoInicio) / 1000000.0; // Convertir a segundos velocidad = (distanciaEntreSensores / 100.0) / tiempoTotal; // Velocidad en m/s // Mostrar resultados lcd.clear(); lcd.setCursor(0, 0); lcd.print("Vel: "); lcd.print(velocidad); lcd.print(" m/s"); lcd.setCursor(0, 1); lcd.print("T: "); lcd.print(tiempoTotal, 3); lcd.print(" seg"); // Pausa para leer y reiniciar delay(5000); objetoDetectado1 = false; objetoDetectado2 = false; } } |
🖌️Diseños

🎬Videos
📑Conclusión
La construcción de un velocímetro de doble punto con Arduino no es solo un ejercicio de programación; es una lección práctica sobre cómo la electrónica interactúa con las leyes de la física. A través de este proyecto, hemos transformado componentes económicos en una herramienta de medición capaz de capturar eventos que ocurren en fracciones de segundo.
Impacto y Aplicaciones Futuras
Este sistema es la base tecnológica de dispositivos mucho más complejos. Lo que hoy mide la velocidad de un coche de juguete, con sensores láser o de microondas, es la misma lógica que utilizan los radares de tráfico o los sistemas de cronometraje en carreras de atletismo.
Implementar este proyecto te otorga una base sólida en el manejo de sensores de proximidad y procesamiento de señales, habilidades esenciales si decides incursionar en la robótica avanzada o la automatización industrial.

