Oglas
Ste si kdaj želeli imeti svoj avto Knight Industries Two Thousand (KITT) - veste, od Knight Rider? Naredite svoje sanje korak bližje resničnosti z gradnjo LED skenerja! Tu je končni rezultat:
Kaj rabiš
Za ta projekt ni potrebnih veliko delov in morda jih imate že veliko:
- 1 x Arduino UNO ali podobno
- 1 x Krušna plošča
- 8 x rdeče LED
- 8 x 220 ohm uporov
- Potenciometer 1 x 10k ohm
- Moški do moški priklopite žice
Če imate Začetni komplet Arduino Kaj je vključeno v zagon Arduino? [MakeUseOf pojasnjuje]Pred tem sem na MakeUseOf predstavil strojno opremo z odprto kodo Arduino, vendar boste potrebovali več kot le dejanski Arduino, da iz tega nekaj sestavite in dejansko začnete. Arduino "zaganjalni kompleti" so ... Preberi več verjetno imate vse te dele (kaj lahko naredite z zagonom? 5 edinstvenih Arduino projektov za začetnike, ki jih lahko naredite s samo začetnim kompletom Preberi več ).
Skoraj kateri koli Arduino bo deloval, če ima osem na voljo nožic (Arduino še nikoli niste uporabljali? Začnite tukaj
Uvod v Arduino: Vodnik za začetnikeArduino je odprtokodna platforma za izdelavo prototipov za elektroniko, ki temelji na fleksibilni, enostavni strojni in programski opremi. Namenjen je umetnikom, oblikovalcem, hobistom in vsem, ki jih zanima ustvarjanje interaktivnih predmetov ali okolij. Preberi več ). Lahko bi uporabite Shift Register Arduino programiranje - igranje z registri Shift (a.k.a še več LED)Danes vas bom poskušal naučiti nekaj o registrih Shift. To je precej pomemben del programiranja Arduino, predvsem zato, ker širijo število izhodov, ki jih lahko uporabite v zameno za ... Preberi več za nadzor LED, čeprav to ni potrebno za ta projekt, saj ima Arduino dovolj zatičev.Načrt zgraditi
To je zelo preprost projekt. Čeprav je od velikega števila žic lahko videti zapleteno, je vsak posamezen del zelo preprost. Vsaka svetleča dioda (LED) je povezana z lastnim zatičem Arduino. To pomeni, da se lahko vsaka LED posamično vklopi in izklopi. Potenciometer je v zatičih priključen na analog Arduino, s pomočjo katerega lahko prilagodite hitrost optičnega bralnika.
Krog
Zunanji levi zatič (gledano spredaj, z zatiči na dnu) potenciometra priključite na tla. Nasprotni zunanji zatič priključite na + 5v. Če ne deluje pravilno, obrnite te zatiče. Srednji zatič priključite na analogni Arduino v 2.
Anodo (dolgo nogo) vsake LED povežite z digitalnimi zatiči ena do osem. Katode (kratka noga) povežite s tlemi Arduino.
Kodeks
Ustvari novo skico in jo shrani kot "knightRider". Tu je koda:
const int led [] = {1,2,3,4,5,6,7,8}; // Led zatiči. const int totalLeds = 8; int čas = 50; // Privzeta nastavitev ničnosti hitrosti () {// Inicializirajte vse izhode za (int i = 0; i <= skupajLeds; ++ i) {pinMode (vodi [i], IZHOD); } } void zanka () {for (int i = 0; i 0; --i) {// Skeniraj desno v levi čas = analogRead (2); digitalWrite (vodi [i], HIGH); zamuda (čas); digitalWrite (LED [i - 1], HIGH); zamuda (čas); digitalWrite (vodi [i], LOW); } }
Razčistimo ga. Vsak LED pin je shranjen v matriki:
const int led [] = {1,2,3,4,5,6,7,8};
Niz je v bistvu zbirka povezanih elementov. Ti elementi so opredeljeni kot konstantni ("const"), kar pomeni, da jih pozneje ni mogoče spremeniti. Ni vam treba uporabljati konstante (koda bo odlično delovala, če odstranite "const"), čeprav je priporočljivo.
Do elementov matrike je mogoče dostopati s kvadratnimi oklepaji ("[]") in celo število, imenovano indeks. Indeksi se začnejo na ničli, zato bi "led [2]" vrnil tretji element v matriki - pin 3. Nizi omogočajo hitrejšo pisanje kode in lažje branje, računalnik jim je težko delati!
Za nastavitev vsakega zatiča kot izhoda se uporablja zanka A za zanko:
za (int i = 0; i <= skupajLeds; ++ i) {pinMode (vodi [i], IZHOD); }
Ta koda je znotraj funkcije "setup ()", saj jo je treba zagnati samo enkrat na začetku programa. Za zanke so zelo koristne. Omogočajo vam, da znova in znova zaženete isto kodo z različnimi vrednostmi. So kot nalašč za delo z nizi. Deklarirano je celo število „i“ in samo koda znotraj zanke lahko dostopa do te spremenljivke (to je znano kot „obseg“). Vrednost i se začne pri ničli in za vsako ponovitev zanke se poveča za eno. Ko je vrednost i manjša ali enaka spremenljivki "totalLeds", se zanka "prelomi" (ustavi).
Vrednost i se uporablja za dostop do matrike "led". Ta zanka dostopa do vseh elementov v matriki in jo konfigurira kot izhod. Ročno lahko vtipkate »pinMode (pin, OUTPUT)« osemkrat, ampak zakaj napisati osem vrstic, ko lahko napišete tri?
Medtem ko vam nekateri programski jeziki lahko povedo, koliko elementov je v matriki (običajno s skladnjo, kot je array.length), Arduino ne naredi tako preprostega (vključuje malo več matematike). Ker je število elementov v matriki že znano, to ni problem.
Znotraj glavne zanke (void zanka ()) sta še dve za zanke. Prva vklopi svetilke LED in jih nato izklopi od 1 do 8. Druga zanka vklopi LED in nato ugasne od 8 - 1. Opazite, kako je vklopljen trenutni zatič in trenutni zatič plus en. To zagotavlja, da sta vedno vklopljeni dve LED-luči hkrati, da bo skener videti bolj realističen.
Na začetku vsake zanke se vrednost lonca prebere v spremenljivki "čas":
čas = analogno branje (2);
To se naredi dvakrat, enkrat znotraj vsake zanke. To je treba nenehno preverjati in posodabljati. Če bi bilo to zunaj zank, bi še vedno delovalo, vendar bi prišlo do majhne zamude - zagnala bi se le, ko bi zanka končala izvajanje. Lonci so analogni, zato se uporablja "analogRead (pin)". To vrne vrednosti med nič (najmanj) in 1023 (največ). Arduino lahko te vrednosti pretvori v nekaj bolj uporabnega, vendar so kot nalašč za ta primer uporabe.
Zamuda med spreminjanjem LED (ali hitrostjo optičnega bralnika) je nastavljena v milisekundah (1/1000 sekunde), tako da je najdaljši čas nekaj več kot 1 sekundo.
Napredni optični bralnik
Zdaj, ko poznate osnove, poglejmo nekaj bolj zapletenega. Ta optični bralnik bo prižgal LED diode v parih, začenši od zunaj in v notranjosti. To bo nato obrnilo in prešlo od znotraj do zunanjih parov. Tu je koda:
const int led [] = {1,2,3,4,5,6,7,8}; // Led zatiči. const int totalLeds = 8; const int halfLeds = 4; int čas = 50; // Privzeta nastavitev ničnosti hitrosti () {// Inicializirajte vse izhode za (int i = 0; i <= skupajLeds; ++ i) {pinMode (vodi [i], IZHOD); } } void zanka () {for (int i = 0; i 0; --i) {// Skeniranje časov zunaj parov = analogRead (2); digitalWrite (vodi [i], HIGH); digitalWrite (led [(totalLeds - i) - 1], HIGH); zamuda (čas); digitalWrite (vodi [i], LOW); digitalWrite (led [(totalLeds - i) - 1], LOW); zamuda (čas); } }
Ta koda je nekoliko bolj zapletena. Opazite, kako obe zanki prehajata od nič do "halfLeds - 1" (3). Tako je boljši optični bralnik. Če bi obe zanki šli od 4 - 0 in 0 - 4, bi iste LED utripale dvakrat v istem zaporedju - to ne bi bilo videti dobro.
Zdaj bi morali imeti v lasti delujoči skener LED Knight Rider! To bi bilo enostavno spremeniti tako, da uporabite več ali večje LED-svetilke ali implementirate svoj vzorec. To vezje je zelo enostavno za priključitev na Malina Pi (novo za Pi? Začni tukaj Malina Pi: Neuradna vadnicaNe glede na to, ali ste trenutno lastnik Pi, ki se želi naučiti več, ali pa potencialni lastnik te naprave z velikostjo kreditne kartice, to ni vodnik, ki ga želite zamuditi. Preberi več ) ali ESP8266 Spoznajte Arduino morilca: ESP8266Kaj pa, če bi vam rekel, da obstaja arduino združljiva razvijalna plošča z vgrajenim Wi-Fi-jem za manj kot 10 dolarjev? No, obstaja. Preberi več .
Ali gradite repliko KITT? Rad bi videl vse stvari Knight Rider v komentarjih.
Joe je diplomirani iz računalništva na Univerzi v Lincolnu v Veliki Britaniji. Je profesionalni razvijalec programske opreme, in ko ne leti z droni ali piše glasbe, ga je pogosto mogoče fotografirati ali ustvarjati videoposnetke.