Annuncio pubblicitario
Hai mai desiderato di avere la tua macchina Knight Industries Two Thousand (KITT) - sai, da Knight Rider? Rendi il tuo sogno un passo 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 molte già:
- 1 x Arduino UNO o simile
- 1 x tagliere
- 8 LED rossi
- 8 resistori da 220 ohm
- 1 potenziometro da 10k ohm
- Cavi di collegamento maschio a maschio
Se hai un Starter kit Arduino Cosa è incluso in uno Starter Kit Arduino? [MakeUseOf Explains]In precedenza ho introdotto l'hardware open-source Arduino qui su MakeUseOf, ma avrai bisogno di qualcosa di più del semplice Arduino per costruirne qualcosa e iniziare davvero. Gli "starter kit" di Arduino sono ... Leggi di più è probabile che tu abbia tutte queste parti (cosa puoi fare con uno starter kit? 5 progetti unici di Arduino per principianti che puoi realizzare con un semplice kit di partenza Leggi di più ).
Quasi ogni Arduino funzionerà, a condizione che abbia otto pin disponibili (mai usato un Arduino prima?
Inizia qui Introduzione ad Arduino: una guida per principiantiArduino è una piattaforma di prototipazione elettronica open source basata su hardware e software flessibili e di facile utilizzo. È destinato ad artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi. Leggi di più ). Potresti utilizzare un registro a scorrimento Programmazione Arduino - Giocare con i registri a scorrimento (a.k.a ancora più LED)Oggi cercherò di insegnarti un po 'di Shift Registers. Queste sono una parte abbastanza importante della programmazione di Arduino, fondamentalmente perché espandono 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, poiché Arduino ha abbastanza pin.Costruisci piano
Questo è un progetto molto semplice. Mentre può sembrare complesso dal gran numero di fili, ogni singola parte è molto semplice. Ogni diodo a emissione luminosa (LED) è collegato al proprio pin Arduino. Ciò significa che ogni LED può essere acceso e spento singolarmente. Un potenziometro è collegato all'analogo Arduino 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}; // Pin a led. const int totalLeds = 8; int time = 50; // Default void setup () {// Inizializza tutte le uscite per (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; 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); } }
Smettiamolo. 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.
È possibile accedere agli elementi di un array utilizzando parentesi quadre (“[]”) e un numero intero chiamato indice. Gli indici iniziano da zero, quindi "leds [2]" restituisce il terzo elemento nell'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 impostare ciascun pin come uscita:
per (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'avvio del programma. Per 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 array. Viene dichiarato un numero intero "i" e solo il codice all'interno del ciclo può accedere a questa variabile (questo è noto come "ambito"). Il valore di i inizia da zero e per ogni iterazione del loop, i viene aumentato di uno. Una volta che il valore di i è inferiore o uguale alla variabile "totalLeds", il ciclo "si interrompe" (si arresta).
Il valore di i viene utilizzato per accedere all'array "led". Questo loop 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 dirti quanti elementi ci sono in un array (di solito con sintassi come array.length), Arduino non lo rende così semplice (comporta un po 'più di matematica). Poiché il numero di elementi nell'array è già noto, non è un problema.

All'interno del circuito principale (void loop ()) sono altri due per i loop. Il primo imposta i LED su ON e poi su OFF da 1 a 8. Il secondo loop imposta i LED su ON e poi su OFF da 8 a 1. Notare come è impostato il pin corrente e anche il pin corrente più uno. Questo assicura che ci siano sempre due LED contemporaneamente, rendendo lo scanner più realistico.
All'inizio di ogni loop, il valore del pot viene letto nella variabile "time":
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 - funzionerebbe solo una volta terminata l'esecuzione di un loop. I vasi sono analogici, quindi perché viene utilizzato "analogRead (pin)". Ciò 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 più di 1 secondo.
Scanner avanzato

Ora che conosci le basi, diamo un'occhiata a qualcosa di più complesso. Questo scanner illumina i LED a coppie partendo dall'esterno e funzionando. Invertirà quindi e passerà dalle coppie interne a quelle esterne. Ecco il codice:
const int leds [] = {1,2,3,4,5,6,7,8}; // Pin a led. const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Default void setup () {// Inizializza tutte le uscite per (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Scansiona dentro 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. Notare come entrambi i loop passano da zero a "halfLeds - 1" (3). Questo rende uno scanner migliore. Se entrambi i loop passassero da 4 - 0 e 0 - 4, gli stessi LED lampeggerebbero 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ù o più grandi o implementare il proprio schema. Questo circuito è molto facile da portare su a Raspberry Pi (nuovo di Pi? Comincia qui Raspberry Pi: The Unofficial TutorialChe tu sia un attuale proprietario Pi che desideri saperne di più o un potenziale proprietario di questo dispositivo di dimensioni di una carta di credito, questa non è una guida che vuoi perdere. Leggi di più ) o ESP8266 Incontra Arduino Killer: ESP8266E se ti dicessi che esiste una scheda di sviluppo compatibile con Arduino con Wi-Fi integrato per meno di $ 10? Bene, c'è. Leggi di più .
Stai costruendo una replica KITT? Mi piacerebbe vedere tutto ciò che Knight Rider nei commenti.
Joe è laureato in Informatica presso l'Università di Lincoln, nel Regno Unito. È uno sviluppatore di software professionale e quando non pilota droni o scrive musica, spesso si trova a scattare foto o a produrre video.