#8Intermedio

Effetto Supercar a velocità regolabile

4.5(59)
115 completato
Effetto Supercar a velocità regolabile
Progetto con potenziometro in grado di regolare in tempo reale la velocità dell'animazione LED Supercar. Combina ingresso analogico e controllo bidirezionale ad anello.

Video

Schema circuito

Effetto Supercar a velocità regolabile - Circuit

Codice sorgente

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Effetto Supercar a velocità regolabile
4// ─────────────────────────────────────────
5// Un potenziometro imposta la velocità dell'effetto LED Knight Rider
6// (avanti e indietro). A0 viene letto a ogni passo e il suo valore 0-1023
7// diventa il tempo di ritardo (ms).
8//
9// Pin:
10//   D2, D3, D4, D5, D6, D7 -> 6 LED (in ordine)
11//   Ogni LED con una resistenza da 330 ohm
12//   A0 -> Cursore del potenziometro
13//   (piedini esterni a 5V e GND)
14
15int ledPins[] = {2, 3, 4, 5, 6, 7};   // Pin dei LED nell'ordine di accensione
16int potValue;                         // Valore del potenziometro = ritardo (ms)
17
18void setup() {
19  // Impostare tutti i pin dei LED come uscite
20  for(int i = 0; i < 6; i++) {
21    pinMode(ledPins[i], OUTPUT);
22  }
23}
24
25void loop() {
26  // Avanti: da D2 a D7
27  for(int i = 0; i < 6; i++) {
28    potValue = analogRead(A0);        // Leggere la velocità (0-1023)
29    digitalWrite(ledPins[i], HIGH);
30    delay(potValue);                  // Attendere tanti ms quanto il valore del potenziometro
31    digitalWrite(ledPins[i], LOW);
32  }
33
34  // Indietro: da D6 a D3. I LED alle estremità vengono saltati così il rimbalzo appare fluido
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

FAQ

Cosa insegna di diverso rispetto ai progetti precedenti?▾

Collega l'ingresso analogico (potenziometro) con un ciclo bidirezionale: mentre la luce si sposta avanti e indietro, il potenziometro viene letto ad ogni passo e aggiornato al momento del ritardo. È la base per modificare il comportamento in base al valore del sensore.

Il valore visualizzato oscilla, come posso stabilizzarlo?▾

Nelle letture analogiche è normale che si verifichino piccole fluttuazioni. Calcolare la media di diverse letture o suddividere il valore in intervalli più grossolani con la funzione map() (ad es. intervalli di 10 ms) consente di mascherare le fluttuazioni.

Posso utilizzare un altro sensore al posto del potenziometro?▾

Sì. Qualsiasi sensore che fornisca un'uscita analogica, come l'LDR, può essere collegato allo stesso ingresso A0; ad esempio, man mano che l'ambiente si oscura, la luce può variare più rapidamente. È sufficiente reimpostare l'intervallo di lettura con la funzione map().

Quale pin analogico devo usare?▾

Su Uno, tutti i pin compresi tra A0 e A5 possono effettuare letture analogiche. Assicurati che il pin utilizzato nel codice corrisponda al collegamento nel circuito; dato che A4 e A5 vengono utilizzati anche per l'I2C, se in futuro prevedi di aggiungere un display, ti consiglio di preferire A0.

Effetto Supercar a velocità regolabile | BlueGrays