⭐⭐⭐ Reto
⏱️ 25 minutos
Medidor de distancia con barra de luz
Vas a hacer una barra de luz que muestra lo cerca que está algo. Lejos: ninguna lucecita. Cuanto más cerca, más lucecitas se encienden. Primero verde, luego naranja y muy cerca rojo.
🧰 ¿Qué necesitas?
🗺️ Esquema de conexión
Sigue los cables desde el Arduino hasta cada pieza. Puedes elegir tú los colores de los cables.
| Desde | Hasta |
|---|---|
Arduino UNO · D9 |
Sensor de distancia HC-SR04 · Trig |
Arduino UNO · D10 |
Sensor de distancia HC-SR04 · Echo |
Arduino UNO · 5V |
Sensor de distancia HC-SR04 · Vcc |
Arduino UNO · GND |
Sensor de distancia HC-SR04 · Gnd |
Arduino UNO · D6 |
Anillo LED RGB (8 LEDs) · DI |
Arduino UNO · 5V |
Anillo LED RGB (8 LEDs) · 5V |
Arduino UNO · GND |
Anillo LED RGB (8 LEDs) · GND |
🛠️ Así lo construyes
- Conecta el HC-SR04: Trig al pin 9, Echo al pin 10, Vcc a 5V y Gnd a GND.
- Conecta el anillo LED: DI al pin 6, 5V a 5V y GND a GND.
💻 El código
// Medidor de distancia con barra de luz
// Cuanto más cerca estás, más lucecitas se encienden: verde, luego naranja, luego rojo.
#include <Adafruit_NeoPixel.h>
const int TRIG_PIN = 9; // Trig del HC-SR04 en el pin 9
const int ECHO_PIN = 10; // Echo del HC-SR04 en el pin 10
const int RING_PIN = 6; // DI del anillo LED en el pin 6
const int NUM_LEDS = 8;
const int DISTANCIA_MAX = 80; // Más lejos que esto (en cm): todas las luces apagadas
Adafruit_NeoPixel anillo(NUM_LEDS, RING_PIN, NEO_GRB + NEO_KHZ800);
long medirDistancia() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long tiempo = pulseIn(ECHO_PIN, HIGH, 30000);
if (tiempo == 0) return 999;
return tiempo / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
anillo.begin();
anillo.setBrightness(40);
anillo.show();
}
void loop() {
long distancia = medirDistancia();
Serial.print(F("Distancia: "));
Serial.print(distancia);
Serial.println(F(" cm"));
// ¿Cuántas lucecitas deben encenderse? Cerca = 8, lejos = 0
int cantidad = map(constrain(distancia, 0, DISTANCIA_MAX), 0, DISTANCIA_MAX, NUM_LEDS, 0);
for (int i = 0; i < NUM_LEDS; i++) {
if (i < cantidad) {
if (i < 3) anillo.setPixelColor(i, anillo.Color(0, 255, 0)); // Verde
else if (i < 6) anillo.setPixelColor(i, anillo.Color(255, 120, 0)); // Naranja
else anillo.setPixelColor(i, anillo.Color(255, 0, 0)); // Rojo
} else {
anillo.setPixelColor(i, 0); // Apagado
}
}
anillo.show();
delay(100);
}
🧠 ¿Qué hace el código?
medirDistancia()mide la distancia con el HC-SR04.map()convierte la distancia en un número de lucecitas: de 0 a 8.- Las primeras 3 lucecitas son verdes, las siguientes 3 naranjas y las últimas 2 rojas.
🎯 Prueba esto…
- Haz que todas las lucecitas rojas parpadeen si estás a menos de 10 cm
- Añade el zumbador que pita en rojo
- Haz el medidor más sensible: todas las lucecitas encendidas a 40 cm en vez de 80 cm
🚀 Construye este proyecto con Codey: abre codey.online/es/starter-kits/uno/projects/distance-light-bar y haz clic en HAZ ESTO. Entonces el código y el esquema de conexión estarán listos enseguida.
Codey Online es un producto de OTRONIC