Publicitate

V-ați dorit vreodată să aveți mașina dvs. Knight Industries Two Thousand (KITT) - știți, de la Knight Rider? Faceți-vă visul cu un pas mai aproape de realitate, construind un scaner LED! Iată rezultatul final:

De ce ai nevoie

Nu există o mulțime de piese necesare pentru acest proiect și este posibil să aveți multe dintre ele deja:

  • 1 x Arduino UNO sau similar
  • 1 x Panou
  • 8 x LED-uri roșii
  • Rezistente de 8 x 220 ohmi
  • Potentiometru 1 x 10k ohm
  • Cabluri de la mascul la bărbat

Dacă aveți un Trusa de pornire Arduino Ce este inclus într-un kit de pornire Arduino? [FaceUseOf Explică]Am introdus anterior hardware-ul Arduino open-source aici pe MakeUseOf, dar veți avea nevoie de mai mult decât doar Arduino pentru a construi ceva din el și pentru a începe de fapt. Arduino "seturile de început" sunt ... Citeste mai mult este probabil să aveți toate aceste părți (ce poți face cu un kit de pornire? 5 proiecte unice Arduino pentru începători pe care le puteți realiza doar cu un kit de pornire Citeste mai mult ).

instagram viewer

Aproape orice Arduino va funcționa, cu condiția să aibă opt pini disponibili (nu ați folosit niciodată un Arduino înainte? Începeți aici Noțiuni introductive cu Arduino: Ghid pentru începătoriArduino este o platformă de prototipare electronică open-source bazată pe hardware și software flexibile, ușor de utilizat. Este destinat artiștilor, designerilor, pasionaților și oricui este interesat să creeze obiecte sau medii interactive. Citeste mai mult ). Ai putea folosiți un Shift Register Programare Arduino - joacă cu registrele Shift (a.k.a și mai multe leduri)Astăzi voi încerca să vă învăț un pic despre Registrele Shift. Acestea sunt o parte destul de importantă a programării Arduino, practic pentru că extind numărul de ieșiri pe care le puteți utiliza, în schimbul ... Citeste mai mult pentru a controla LED-urile, deși acest lucru nu este necesar pentru acest proiect, deoarece Arduino are destui pini.

Plan de construire

Arduino-Knight-Rider-Led-Scanner-complete
Acesta este un proiect foarte simplu. Deși poate părea complexă din numărul mare de fire, fiecare parte este foarte simplă. Fiecare diodă de emisie de lumină (LED) este conectată la propriul pin Arduino. Aceasta înseamnă că fiecare LED poate fi pornit și oprit individual. Un analog potențiometru este conectat la analogul Arduino în pini, care va fi utilizat pentru a regla viteza scanerului.

Circuitul

Arduino-Knight-Rider-Circuit
Conectați știftul exterior stâng (privind spre față, cu știfturile din partea de jos) a potențiometrului la sol. Conectați pinul opus opus la + 5v. Dacă nu funcționează corect, inversați acei pini. Conectați pinul de mijloc la analogul Arduino în 2.

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

Codul

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

led int const [] = {1,2,3,4,5,6,7,8}; // Pinii led const int totalLeds = 8; timp int = 50; // Default speed void setup () {// Inițializează toate ieșirile pentru (int i = 0; i <= totalLeds; ++ i) {pinMode (leduri [i], OUTPUT); } } bucla void () {pentru (int i = 0; i  0; --i) {// Scanați de la dreapta la stânga = analogRead (2); digitalWrite (leduri [i], HIGH); timp de intarziere); digitalWrite (leduri [i - 1], HIGH); timp de intarziere); digitalWrite (leduri [i], LOW); } }

Să o dărâmăm. Fiecare pin LED este stocat într-un tablou:

led int const [] = {1,2,3,4,5,6,7,8};

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

La elementele unui tablou se accesează folosind paranteze pătrate („[]”) și un număr întreg numit index. Indicii încep de la zero, astfel încât „led-urile [2]” vor întoarce cel de-al treilea element din tablou - pinul 3. Schițele fac codul mai rapid pentru a scrie și mai ușor de citit, ele fac computerul să facă munca grea!

O pentru buclă este utilizată pentru a configura fiecare pin ca ieșire:

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

Acest cod se află în funcția „setup ()”, deoarece trebuie să fie executat o singură dată la începutul programului. Pentru bucle sunt foarte utile. Acestea vă permit să rulați de fiecare dată același cod, cu o valoare diferită de fiecare dată. Sunt perfecte pentru a lucra cu tablouri. Un număr întreg „i” este declarat și numai codul din interiorul buclei poate accesa această variabilă (aceasta este cunoscută sub numele de „scop”). Valoarea i începe de la zero, iar pentru fiecare iterație a buclei, i se mărește cu unu. Odată ce valoarea lui i este mai mică sau egală cu variabila „totalLeds”, bucla „se rupe” (se oprește).

Valoarea i este utilizată pentru a accesa matricea „led-uri”. Această buclă accesează fiecare element din tablou și îl configurează ca o ieșire. Ați putea tasta manual „pinMode (pin, OUTPUT)” de opt ori, dar de ce să scrieți opt rânduri când puteți scrie trei?

Cu toate că unele limbaje de programare vă pot spune câte elemente sunt într-un tablou (de obicei cu sintaxa precum array.length), Arduino nu îl face atât de simplu (implică un pic mai mult de matematică). Deoarece numărul de elemente din tablă este deja cunoscut, nu este o problemă.

Arduino-Knight-Rider-LEDS

În interiorul buclei principale (nul buclă ()) sunt încă două pentru bucle. Primul setează LED-urile pe ON și apoi OFF de la 1 la 8. Cea de-a doua buclă setează ledurile ON și apoi OFF de la 8 la 1. Observați cum este activat știftul curent, precum și pinul actual plus unul este activat. Acest lucru asigură că există întotdeauna două LED-uri pornite în același timp, ceea ce face scanerul să pară mai realist.

La începutul fiecărei bucle, valoarea potului este citită în variabila „timp”:

time = analogRead (2);

Acest lucru se face de două ori, o dată în fiecare buclă. Aceasta trebuie verificată și actualizată constant. Dacă acest lucru ar fi în afara buclelor, acesta ar funcționa totuși, însă ar exista o mică întârziere - ar rula doar după terminarea executării unei bucle. Ghivecele sunt analogice, de aceea de ce se utilizează „analogRead (pin)”. Aceasta returnează valori între zero (minim) și 1023 (maxim). Arduino este capabil să transforme aceste valori în ceva mai util, cu toate acestea sunt perfecte pentru acest caz de utilizare.

Întârzierea dintre LED-urile schimbătoare (sau viteza scanerului) este setată în milisecunde (1/1000 secundă), astfel încât timpul maxim este puțin peste 1 secundă.

Scaner avansat

Arduino-LED-uri-exterior-perechi

Acum că cunoașteți elementele de bază, să privim ceva mai complex. Acest scaner va aprinde LED-urile în perechi începând din exterior și funcționând în interior. Se va inversa apoi și se va trece din perechi în interior. Iată codul:

led int const [] = {1,2,3,4,5,6,7,8}; // Pinii led const int totalLeds = 8; const int halfLeds = 4; timp int = 50; // Default speed void setup () {// Inițializează toate ieșirile pentru (int i = 0; i <= totalLeds; ++ i) {pinMode (leduri [i], OUTPUT); } } bucla void () {pentru (int i = 0; i  0; --i) {// Scanați perechi în timp în timp = analogRead (2); digitalWrite (leduri [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); timp de intarziere); digitalWrite (leduri [i], LOW); digitalWrite (leduri (leds (totalLeds - i) - 1], LOW); timp de intarziere); } }

Acest cod este puțin mai complex. Observați cum ambele bucle merg de la zero la „halfLeds - 1” (3). Acest lucru face un scaner mai bun. Dacă ambele bucle ar merge de la 4 - 0 și 0 - 4 atunci aceleași LED-uri ar clipi de două ori în aceeași secvență - acest lucru nu ar arăta foarte bine.

Acum ar trebui să dețineți un scanner LED Knight Rider funcțional! Ar fi ușor să modificați acest lucru pentru a utiliza LED-uri mai mult sau mai mari sau pentru a implementa propriul model. Acest circuit este foarte ușor de portat către o Zmeura Pi (nou la Pi? Începe aici Raspberry Pi: Tutorialul neoficialIndiferent dacă sunteți un proprietar actual de Pi care dorește să învețe mai multe sau un potențial proprietar al acestui dispozitiv de dimensiune a cardului de credit, acesta nu este un ghid pe care doriți să îl pierdeți. Citeste mai mult ) sau ESP8266 Faceți cunoștință cu Arduino Killer: ESP8266Ce se întâmplă dacă v-aș spune că există o placă dev-compatibilă cu Arduino cu Wi-Fi încorporat pentru mai puțin de 10 USD? Ei bine, există. Citeste mai mult .

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

Joe este absolvent în informatică de la Universitatea din Lincoln, Marea Britanie. Este un dezvoltator de software profesionist, iar atunci când nu zboară drone sau scrie muzică, poate fi găsit adesea făcând fotografii sau producând videoclipuri.