Crea uno scanner LED Knight Rider con Arduino
Hai sempre desiderato avere la tua auto Knight Industries Two Thousand (KITT) - sai, da Knight Rider? Rendi il tuo sogno più vicino alla realtà costruendo uno scanner a LED! Ecco il risultato finale:
Quello di cui hai bisogno
Non ci sono molte parti necessarie per questo progetto, e potresti averne già molte:
- 1 x Arduino UNO o simile
- 1 x tagliere
- 8 LED rossi
- 8 resistenze da 220 ohm
- 1 potenziometro da 10k ohm
- Fili maschio-maschio
Se hai un kit di avvio Arduino Cosa è incluso in un kit di avvio Arduino? [MakeUseOf Explains] Cosa è incluso in un Arduino Starter Kit? [MakeUseOf Explains] Ho già introdotto l'hardware open source Arduino qui su MakeUseOf, ma non avrai bisogno di altro che l'effettivo Arduino per crearne qualcosa e iniziare davvero. Arduino "starter kits" sono ... Per saperne di più è probabile che tu abbia tutte queste parti (cosa puoi fare con uno starter kit? 5 Progetti Arduino unici per principianti che puoi realizzare con solo un kit di partenza 5 Progetti Arduino unici per principianti che puoi fare Con solo un kit di base Leggi di più).
Quasi tutti gli Arduino funzioneranno, a patto che abbia otto pin disponibili (Non hai mai usato un Arduino in precedenza? Inizia qui per iniziare Arduino: Guida per principianti Guida introduttiva ad Arduino: Guida per principianti Arduino è una piattaforma di prototipazione elettronica open source basata su flessibile hardware e software facili da usare, pensato per artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi. È possibile utilizzare una programmazione Arduino di Shift Register - Giocare con i registri a scorrimento (a.k.a ancora più LED) Programmazione Arduino - Giocare con i registri a scorrimento (a.k.a ancora più LED) Oggi cercherò di insegnarti qualcosa su Shift Registers. Queste sono una parte abbastanza importante della programmazione di Arduino, fondamentalmente perché ampliano il numero di uscite che puoi usare, in cambio di ... Leggi di più per controllare i LED, anche se questo non è necessario per questo progetto, dato che l'Arduino ha abbastanza pin.
Piano di costruzione
Questo è un progetto molto semplice. Mentre può sembrare complesso dal gran numero di fili, ogni singola parte è molto semplice. Ogni LED (Light Emitting Diode) è collegato al proprio pin Arduino. Ciò significa che ogni LED può essere acceso e spento individualmente. Un potenziometro è collegato all'arduino analogico in pin, che verrà utilizzato per regolare la velocità dello scanner.
Il circuito
Collegare il pin esterno sinistro (guardando in avanti, con i pin in basso) del potenziometro a terra. Collegare il pin esterno opposto a + 5v. Se non funziona correttamente, invertire questi pin. Collega il pin centrale all'analogo Arduino in 2.
Collegare l'anodo (gamba lunga) di ciascun LED ai pin digitali da uno a otto. Collegare i catodi (gamba corta) alla terra di Arduino.
Il codice
Crea un nuovo schizzo e salvalo come “knightrider”. Ecco il codice:
const int leds [] = 1,2,3,4,5,6,7,8; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup () // Inizializza tutti gli output per (int i = 0; i <= totalLeds; ++i) pinMode(leds[i], OUTPUT); void loop() for(int i = 0; i < totalLeds - 1; ++i) // Scan left to right time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i + 1], HIGH); delay(time); digitalWrite(leds[i], LOW); for(int i = totalLeds; i > 0; --i) // Scansione da destra a sinistra = analogRead (2); digitalWrite (leds [i], HIGH); ritardo); digitalWrite (leds [i - 1], HIGH); ritardo); digitalWrite (leds [i], LOW);
Scopriamolo. Ogni pin LED è memorizzato in un array:
const int leds [] = 1,2,3,4,5,6,7,8;
Un array è essenzialmente una raccolta di elementi correlati. Questi elementi sono definiti come costanti (“const”), il che significa che non possono essere modificati in seguito. Non devi usare una costante (il codice funzionerà perfettamente se rimuovi “const”), sebbene sia raccomandato.
Si accede agli elementi di un array usando parentesi quadre (“[]”) e un intero chiamato indice. Gli indici partono da zero, quindi “led [2]” restituirebbe il terzo elemento dell'array - pin 3. Gli array rendono il codice più veloce da scrivere e più facile da leggere, fanno sì che il computer faccia il duro lavoro!
Un ciclo for viene utilizzato per configurare ciascun pin come output:
per (int i = 0; i <= totalLeds; ++i) pinMode(leds[i], OUTPUT);
Questo codice è dentro il “impostare()” funzione, poiché deve essere eseguita una sola volta all'inizio del programma. I loop sono molto utili. Ti consentono di eseguire lo stesso codice più e più volte, con un valore diverso ogni volta. Sono perfetti per lavorare con gli array. Un numero intero “io” è dichiarato e solo il codice all'interno del ciclo può accedere a questa variabile (questo è noto come “scopo”). Il valore di i parte da zero e per ogni iterazione del ciclo, i viene aumentato di uno. Una volta il valore di i è inferiore o uguale al “totalLeds” variabile, il ciclo “pause” (fermate).
Il valore di i è utilizzato per accedere a “leds” array. Questo ciclo accede a tutti gli elementi dell'array e lo configura come output. Potresti digitare manualmente “pinMode (pin, OUTPUT)” otto volte, ma perché scrivere otto righe quando puoi scrivere tre?
Mentre alcuni linguaggi di programmazione possono dirvi quanti elementi ci sono in un array (solitamente con sintassi come array.length), Arduino non lo rende così semplice (richiede un po 'più di matematica). Poiché il numero di elementi nella matrice è già noto, non è un problema.
All'interno dell'anello principale (void loop ()) sono altri due per i loop. Il primo imposta i LED su ON e poi OFF da 1 a 8. Il secondo loop imposta i LED su ON e poi OFF su 8 - 1. Notate come è impostato il pin corrente, e anche il pin corrente più uno è impostato. Questo assicura che ci siano sempre due LED contemporaneamente, rendendo lo scanner più realistico.
All'inizio di ogni ciclo, il valore del piatto viene letto nel “tempo” variabile:
time = analogRead (2);
Questo viene fatto due volte, una volta all'interno di ogni ciclo. Questo deve essere costantemente controllato e aggiornato. Se questo fosse al di fuori dei loop, funzionerebbe comunque, tuttavia ci sarebbe un piccolo ritardo - verrebbe eseguito solo dopo che un loop ha terminato l'esecuzione. Le pentole sono analogiche, quindi perché “analogRead (pin)” viene usato. Questo restituisce valori compresi tra zero (minimo) e 1023 (massimo). Arduino è in grado di convertire questi valori in qualcosa di più utile, tuttavia sono perfetti per questo caso d'uso.
Il ritardo tra la modifica dei LED (o la velocità dello scanner) è impostato in millisecondi (1/1000 di secondo), quindi il tempo massimo è di poco superiore a 1 secondo.
Scanner avanzato
Ora che conosci le basi, diamo un'occhiata a qualcosa di più complesso. Questo scanner accenderà i LED a coppie partendo dall'esterno e lavorando. In questo modo si invertirà e passerà da coppie interne a coppie esterne. Ecco il codice:
const int leds [] = 1,2,3,4,5,6,7,8; // Led pins const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Default speed void setup () // Inizializza tutti gli output per (int i = 0; i <= totalLeds; ++i) pinMode(leds[i], OUTPUT); void loop() for(int i = 0; i < (halfLeds - 1); ++i) // Scan outside pairs in time = analogRead(2); digitalWrite(leds[i], HIGH); digitalWrite(leds[(totalLeds - i) - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); digitalWrite(leds[(totalLeds - i) - 1], LOW); delay(time); for(int i = (halfLeds - 1); i > 0; --i) // Scansione all'interno di coppie fuori tempo = analogRead (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); ritardo); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); ritardo);
Questo codice è leggermente più complesso. Si noti come entrambi i cicli passino da zero a “halfLeds - 1” (3). Questo rende uno scanner migliore. Se entrambi i loop sono passati da 4 - 0 e 0 - 4, gli stessi LED lampeggiano due volte nella stessa sequenza - questo non sembrerebbe molto buono.
Ora dovresti possedere uno scanner LED Knight Rider funzionante! Sarebbe facile modificarlo per utilizzare LED più grandi o più grandi, oppure implementare il proprio schema. Questo circuito è molto facile da portare a un Raspberry Pi (nuovo a Pi? Inizia qui Raspberry Pi: The Unofficial Tutorial Raspberry Pi: The Unofficial Tutorial Se sei un attuale proprietario di Pi che vuole saperne di più o un potenziale proprietario di questo credito -card size device, questa non è una guida da non perdere.Per saperne di più) o ESP8266 Incontra l'Arduino Killer: ESP8266 Incontra l'Arduino Killer: ESP8266 E se ti dicessi che c'è una scheda di sviluppo compatibile con Arduino con built-in Wi-Fi per meno di $ 10? Bene, c'è. Leggi di più .
Stai costruendo una replica KITT? Mi piacerebbe vedere tutte le cose di Knight Rider nei commenti.
Scopri di più su: Arduino, Elettronica.