#8Intermedio

Efecto coche fantástico con velocidad regulable

4.5(59)
115 completado
Efecto coche fantástico con velocidad regulable
Proyecto con potenciómetro que permite ajustar en tiempo real la velocidad de la animación LED del coche fantástico. Combina entrada analógica y control de bucle bidireccional.

Video

Diagrama del circuito

Efecto coche fantástico con velocidad regulable - Circuit

Código fuente

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Efecto coche fantástico con velocidad regulable
4// ─────────────────────────────────────────
5// Un potenciómetro ajusta la velocidad del efecto LED Knight Rider (ida y
6// vuelta). A0 se lee en cada paso y su valor de 0-1023 se convierte en el
7// tiempo de retardo (ms).
8//
9// Pines:
10//   D2, D3, D4, D5, D6, D7 -> 6 LED (en orden)
11//   Cada LED con una resistencia de 330 ohmios
12//   A0 -> Cursor del potenciómetro
13//   (patillas exteriores a 5V y GND)
14
15int ledPins[] = {2, 3, 4, 5, 6, 7};   // Pines de los LED en orden de encendido
16int potValue;                         // Valor del potenciómetro = retardo (ms)
17
18void setup() {
19  // Configurar todos los pines de LED como salidas
20  for(int i = 0; i < 6; i++) {
21    pinMode(ledPins[i], OUTPUT);
22  }
23}
24
25void loop() {
26  // Hacia adelante: de D2 a D7
27  for(int i = 0; i < 6; i++) {
28    potValue = analogRead(A0);        // Leer la velocidad (0-1023)
29    digitalWrite(ledPins[i], HIGH);
30    delay(potValue);                  // Esperar tantos ms como el valor del potenciómetro
31    digitalWrite(ledPins[i], LOW);
32  }
33
34  // Hacia atrás: de D6 a D3. Se saltan los LED de los extremos para que el rebote parezca continuo
35  for(int i = 4; i > 0; i--) {
36    potValue = analogRead(A0);
37    digitalWrite(ledPins[i], HIGH);
38    delay(potValue);
39    digitalWrite(ledPins[i], LOW);
40  }
41}
42

Preguntas frecuentes

¿En qué se diferencia este proyecto de los anteriores?▾

Conecta la entrada analógica (potenciómetro) mediante un bucle bidireccional: a medida que la luz avanza y retrocede, se lee el potenciómetro en cada paso y se actualiza en el momento del retardo. Es la base para modificar el comportamiento en función del valor del sensor.

El valor que se muestra parpadea, ¿cómo lo fijo?▾

En las lecturas analógicas, es normal que haya pequeñas fluctuaciones. Calcular la media de varias lecturas o dividir el valor en intervalos más amplios con la función map() (por ejemplo, en intervalos de 10 ms) permite ocultar estas fluctuaciones.

¿Puedo utilizar otro sensor en lugar del potenciómetro?▾

Sí. Cualquier sensor que proporcione una salida analógica, como el LDR, se puede conectar a la misma entrada A0; por ejemplo, a medida que el ambiente se oscurece, la luz puede avanzar más rápido. Solo tienes que reajustar el rango de lectura con la función map().

¿Qué pin analógico debo utilizar?▾

En el Uno, todos los pines del A0 al A5 pueden realizar lecturas analógicas. Asegúrate de que el pin que utilices en el código coincida con la conexión del circuito; dado que los pines A4 y A5 también se utilizan para I2C, si tienes pensado añadir una pantalla más adelante, te recomendamos que elijas el A0.

Efecto coche fantástico con velocidad regulable | BlueGrays