Asigurați-un scanner LED Knight Rider cu Arduino

Asigurați-un scanner LED Knight Rider cu Arduino / DIY

V-ați dorit vreodată să aveți propria dvs. mașină Knight Industries Două Mii (KITT) - știi, de la Knight Rider? Asigurați-vă un vis cu un pas mai aproape de realitate prin construirea unui scanner LED! Iată rezultatul final:

De ce ai nevoie

Nu există multe părți necesare pentru acest proiect și este posibil să aveți deja mulți dintre ei:

  • 1 x Arduino UNO sau similar
  • 1 x Breadboard
  • 8 x LED-uri roșii
  • Resistoare de 8 x 220 ohmi
  • 1 x 10k ohm potențiometru
  • Bărbați pentru bărbați cârlig fire

Dacă aveți un set de pornire Arduino Ce este inclus în kitul de pornire Arduino? [Explică-i pe MakeUseOf] Ce este inclus în kitul de pornire Arduino? [MakeUseOf Explains] Am introdus hardware-ul open-source Arduino aici pe MakeUseOf, dar ai nevoie de ceva mai mult decât Arduino pentru a construi ceva din ea și de fapt începe. Arduino "kituri de starter" sunt ... Citește mai mult este posibil să ai toate aceste părți (ce poți face cu un kit de start?) 5 Proiecte unice de arduino pentru incepatori poti face cu doar un kit Starter 5 Proiecte unice de arduino pentru incepatori poti face Cu doar un Starter Kit Citiți mai mult).

Aproape orice Arduino va funcționa, cu condiția să aibă opt pini disponibili Arduino: Un ghid pentru începători Arduino este o platformă open-source de prototipuri electronice bazată pe flexibilitate , hardware și software ușor de folosit, destinat artiștilor, designerilor, pasionaților și tuturor celor interesați de crearea de obiecte sau medii interactive. Arduino Programare - Redarea cu registre de schimbare (a.k.a chiar mai multe LED-uri) Programare Arduino - Redarea cu registre Shift (a.k.a chiar mai multe LED-uri) Azi voi încerca să vă învăț un pic despre Shift Registre. Acestea sunt o parte destul de importantă a programării Arduino, în principal pentru că acestea extind numărul de ieșiri pe care le puteți utiliza, în schimbul ... Citește mai mult pentru a controla LED-urile, deși acest lucru nu este necesar pentru acest proiect, deoarece Arduino are destui pini.

Construiți un plan


Acesta este un proiect foarte simplu. În timp ce ar putea părea complex din numărul mare de fire, fiecare parte este foarte simplă. Fiecare diodă emitatoare de lumină (LED) este conectată la pinul propriu Arduino. Aceasta înseamnă că fiecare LED poate fi pornit și oprit individual. Un potențiometru este conectat la analogul Arduino în pin, care va fi utilizat pentru reglarea vitezei scanerului.

Circuitul


Conectați pinul exterior stâng (privirea din față, cu știfturile din partea de jos) a potențiometrului la masă. Conectați pinul exterior opus la + 5v. Dacă nu funcționează corect, inversați acești pini. Conectați pinul de mijloc la analogul Arduino în 2.

Conectați anodul (piciorul lung) al fiecărui LED la pinii digitali de la unul la opt. Conectați catodii (piciorul scurt) la solul Arduino.

Codul

Creați o schiță nouă și salvați-o ca “cavaler”. Iată codul:

const int leds [] = 1,2,3,4,5,6,7,8; // Conductoarele const int totalLeds = 8; int timp = 50; // Valoare implicită void setup () // Inițializați toate ieșirile pentru (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) // Scanarea din dreapta la stânga = analogRead (2); digitalWrite (LED-uri [i], HIGH); timp de intarziere); digitalWrite (LED-uri [i-1], HIGH); timp de intarziere); digitalWrite (LED-uri [i], LOW); 

Să-l rupem. Fiecare pin LED este stocat într-o matrice:

const int leds [] = 1,2,3,4,5,6,7,8;

O matrice este în esență o colecție de elemente conexe. Aceste elemente sunt definite ca fiind constante (“const”), ceea ce înseamnă că nu pot fi modificate mai târziu. Nu trebuie să utilizați o constantă (codul va funcționa perfect dacă eliminați “const”), deși este recomandat.

Elementele unei matrice sunt accesate folosind paranteze pătrate (“[]”) și un număr numit index. Indicii încep de la zero, deci “leds [2]” ar întoarce cel de-al treilea element în matricea - pinul 3. Arrays fac codul mai rapid pentru a scrie și mai ușor de citit, fac ca computerul să facă munca grea!

A pentru buclă este folosit pentru a configura fiecare pin ca o ieșire:

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

Acest cod este în interiorul lui “înființat()” deoarece aceasta trebuie să ruleze o singură dată la începutul programului. Buclele sunt foarte utile. Acestea vă permit să executați același cod de mai multe ori, cu o valoare diferită de fiecare dată. Sunt perfecte pentru a lucra cu matrice. Un număr întreg “eu” este declarată și numai codul din bucla poate accesa această variabilă (aceasta este cunoscută sub numele de “domeniu”). Valoarea i începe de la zero, iar pentru fiecare iterație a buclei, i este mărită cu una. Odată ce valoarea lui i este mai mică sau egală cu “totalLeds” variabilă, bucla “pauze” (opriri).

Valoarea lui i este folosită pentru a accesa “led-uri” matrice. Această bucla accesează fiecare element din matrice și o configurează ca ieșire. Puteți scrie manual “pinMode (pin, OUTPUT)” de opt ori, dar de ce scrie opt linii când poți scrie trei?

În timp ce unele limbi de programare vă pot spune cât de multe elemente sunt într-o matrice (de obicei cu sintaxă ca array.length), Arduino nu o face atât de simplă (implică un pic mai multă matematică). Deoarece numărul elementelor din matrice este deja cunoscut, nu este o problemă.

În interiorul bucla principală (buclă voidă ()) sunt în continuare două pentru bucle. Prima setează LED-urile ON și apoi OFF de la 1 la 8. Cea de-a doua bucla setează LED-urile ON și apoi oprește de la 8 la 1. Observați modul în care pinul curent este activat și pinul curent plus unul este setat și pe acesta. Acest lucru asigură că există întotdeauna două LED-uri în același timp, ceea ce face scanerul să pară mai realist.

La începutul fiecărei buclă, valoarea potului este citită în “timp” variabil:

time = analogRead (2);

Acest lucru se face de două ori, o dată în interiorul fiecărei buclă. Acest lucru trebuie verificat și actualizat în mod constant. Dacă aceasta ar fi fost în afara buclei, ar funcționa în continuare, dar ar exista o întârziere mică - ar fi executat numai după ce o buclă a terminat executarea. Ghivecele sunt analogice, prin urmare, de ce “analogRead (pin)” este folosit. Aceasta returnează valori între zero (minim) și 1023 (maxim). Arduino este capabil de a converti aceste valori la ceva mai util, cu toate acestea ele sunt perfecte pentru acest caz de utilizare.

Întârzierea dintre schimbarea LED-urilor (sau viteza scanerului) este setată în milisecunde (1/1000 secunde), deci timpul maxim este de peste 1 secundă.

Scaner avansat

Acum că știți elementele de bază, să ne uităm la ceva mai complex. Acest scaner va lumina LED-urile în perechi de la exterior și de lucru. Acesta va inversa apoi acest lucru și du-te de la interior la perechi în afara. Iată codul:

const int leds [] = 1,2,3,4,5,6,7,8; // Conductoarele const int totalLeds = 8; const int halfLeds = 4; int timp = 50; // Valoare implicită void setup () // Inițializați toate ieșirile pentru (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) // Scanarea în perechi de timp out = analogRead (2); digitalWrite (LED-uri [i], HIGH); digitalWrite (led-uri [(totalLeds - i) - 1], HIGH); timp de intarziere); digitalWrite (LED-uri [i], LOW); digitalWrite (led-uri [(totalLeds - i) - 1], LOW); timp de intarziere); 

Acest cod este ceva mai complex. Observați cum ambele bucle merg de la zero la “jumatate - 1” (3). Acest lucru face un scaner mai bun. Dacă ambele bucle au trecut de la 4 la 0 și de la 0 la 4, aceleași LED-uri ar clipi de două ori în aceeași ordine - nu ar arăta foarte bine.

Acum ar trebui să dețineți un scanner Knight Rider de lucru! Ar fi ușor să modificați acest lucru pentru a utiliza LED-uri mai mari sau mai mari, sau pentru a implementa modelul propriu. Acest circuit este foarte usor de portat la o Raspberry Pi (nou pentru Pi?) Start Raspberry Pi: Tutorialul Neoficial Raspberry Pi: Tutorialul Neoficial Indiferent daca sunteti un proprietar actual Pi care vrea sa invete mai mult sau un potential proprietar al acestui credit - Citiți mai multe) sau ESP8266 Faceți cunoștință cu ucigașul Arduino: ESP8266 Faceți cunoștință cu ucigașul Arduino: ESP8266 Ce se întâmplă dacă v-am spus că există o placă de disc compatibilă cu Arduino cu built-in Wi-Fi pentru mai puțin de 10 USD? Ei bine, există. Citeste mai mult .

Construiești o replică KITT? Mi-ar plăcea să văd toate lucrurile Knight Rider în comentarii.

Aflați mai multe despre: Arduino, Electronics.