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!

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!
Annuncio pubblicitario

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 che ti serve

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. I "kit di avvio" Arduino 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 Può fare solo con 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 (anche più LED) Programmazione Arduino - Giocare con i registri a scorrimento (ovvero 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

Arduino-Knight-Rider-Led-Scanner-Complete
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

Arduino-Knight-Rider-Circuit
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() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } }  const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); 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 è necessario utilizzare una costante (il codice funzionerà perfettamente se si rimuove "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 "leds [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:

 for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } 

Questo codice si trova all'interno della funzione "setup ()", poiché deve essere eseguito 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. Viene dichiarato un intero "i" e solo il codice all'interno del ciclo può accedere a questa variabile (questo è noto come "ambito"). Il valore di i parte da zero e per ogni iterazione del ciclo, i viene aumentato di uno. Quando il valore di i è inferiore o uguale alla variabile "totalLeds", il ciclo "si interrompe" (si ferma).

Il valore di i viene utilizzato per accedere alla matrice "leds". Questo ciclo accede a tutti gli elementi dell'array e lo configura come output. È possibile digitare manualmente "pinMode (pin, OUTPUT)" otto volte, ma perché scrivere otto righe quando è possibile 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.

Arduino-Knight-Rider-LED

All'interno del loop principale ( void loop () ) ci sono altri due 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 nella variabile "tempo":

 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. I vasi sono analogici, quindi perché viene usato "analogRead (pin)". 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

Arduino-LED-outside-Pairs

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() { // Initialize all outputs for(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) { // Scan inside pairs out 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); } } 

Questo codice è leggermente più complesso. Notare 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.

In this article