Mainos
Oletko koskaan halunnut, että sinulla olisi oma Knight Industries Two Thousand (KITT) -autosi - tiedätkö, Knight Rideriltä? Tee unelmasi askeleen lähemmäksi todellisuutta rakentamalla LED-skanneri! Tässä on lopputulos:
Mitä tarvitset
Tätä hanketta varten ei tarvita paljon osia, ja sinulla voi olla jo monia niistä:
- 1 x Arduino UNO tai vastaava
- 1 x leipätaulu
- 8 x punaista LEDiä
- 8 x 220 ohmin vastukset
- 1 x 10 k ohm-potentiometri
- Uros uros koukku johdot
Jos sinulla on Arduino-aloitussarja Mitä sisältyy Arduino-aloituspakettiin? [MakeUseOf selittää]Olen aiemmin esitellyt Arduinon avoimen lähdekoodin laitteiston täällä MakeUseOfilla, mutta tarvitset muutakin kuin pelkkää Arduinoa rakentaaksesi siitä jotain ja aloittaaksesi käytännössä. Arduinon "aloitussarjat" ovat ... Lue lisää todennäköisesti sinulla on kaikki nämä osat (mitä voit tehdä aloituspaketilla? 5 ainutlaatuista Arduino-projektia aloittelijoille, joita voit tehdä vain aloituspaketilla Lue lisää ).
Lähes kuka tahansa Arduino toimii, jos sillä on kahdeksan käytettävissä olevaa nastaa (Etkö ole koskaan käyttänyt Arduinoa aiemmin?
Aloita täältä Arduinon aloittaminen: Aloittelijan opasArduino on avoimen lähdekoodin elektroniikan prototyyppialusta, joka perustuu joustavaan, helppokäyttöiseen laitteistoon ja ohjelmistoon. Se on tarkoitettu taiteilijoille, suunnittelijoille, harrastajalle ja kaikille, jotka ovat kiinnostuneita luomaan interaktiivisia esineitä tai ympäristöjä. Lue lisää ). Sinä voisit käytä Vaihtorekisteriä Arduino-ohjelmointi - leikkiminen siirtorekistereillä (a.k.a vielä enemmän LEDiä)Yritän tänään opettaa sinulle vähän Shift-rekistereistä. Nämä ovat melko tärkeä osa Arduino-ohjelmointia, pääasiassa siksi, että ne lisäävät käytettävien ulostulojen määrää vastineeksi ... Lue lisää LEDien ohjaamiseksi, vaikka sitä ei tarvita tässä projektissa, koska Arduinolla on tarpeeksi nastaa.Rakenna suunnitelma
Tämä on hyvin yksinkertainen projekti. Vaikka se voi näyttää monimutkaiselta johtimien lukumäärän perusteella, jokainen yksittäinen osa on hyvin yksinkertainen. Jokainen valodiodi (LED) on kytketty omaan Arduino-nastaan. Tämä tarkoittaa, että jokainen LED voidaan kytkeä päälle ja pois päältä erikseen. Arduino-analogiin on kytketty potentiometri nastoissa, joita käytetään skannerin nopeuden säätämiseen.
Piiri
Kytke potentiometrin vasen ulkotappi (edestä katsottuna, alaosassa olevien tapien kanssa) maahan. Liitä vastakkainen ulkotappi + 5v: iin. Jos se ei toimi oikein, käännä nämä nastat. Kytke keskitappi Arduino-analogiin kohdassa 2.
Kytke kunkin LEDin anodi (pitkä jalka) digitaalisiin tapiin yhdestä kahdeksaan. Kytke katodit (lyhyt jalka) Arduinon maahan.
Koodi
Luo uusi luonnos ja tallenna se nimellä “knightRider”. Tässä on koodi:
const int ledit [] = {1,2,3,4,5,6,7,8}; // Led-nastat. const int totalLeds = 8; int aika = 50; // Oletusnopeus void-asetus () {// Alusta kaikki lähdöt kohteelle (int i = 0; i <= totalLeds; ++ i) {pinMode (ledit [i], OUTPUT); } } tyhjä silmukka () {varten (int i = 0; i 0; --i) {// Skannaa oikealta vasemmalle = analogRead (2); digitalWrite (ledit [i], HIGH); viiveaika); digitalWrite (ledit [i - 1], HIGH); viiveaika); digitalWrite (ledit [i], LOW); } }
Hajotamme sen. Jokainen LED-tappi tallennetaan taulukkoon:
const int ledit [] = {1,2,3,4,5,6,7,8};
Matriisi on olennaisesti kokoelma liittyviä esineitä. Nämä elementit on määritelty vakiona (“const”), mikä tarkoittaa, että niitä ei voida muuttaa myöhemmin. Sinun ei tarvitse käyttää vakioita (koodi toimii täydellisesti, jos poistat “const”), vaikka sitä suositellaan.
Matriisin elementteihin päästään käyttämällä hakasulkeita (“[]”) ja kokonaislukua, jota kutsutaan indeksiksi. Indeksit alkavat nollasta, joten “ledit [2]” palauttaisivat taulukon kolmannen elementin - nasta 3. Taulukot tekevät koodin kirjoittamisesta nopeamman ja helpommin luettavan. Ne tekevät tietokoneesta kovan työn!
A-silmukkaa käytetään kunkin nasta määrittämiseen tulosteena:
varten (int i = 0; i <= totalLeds; ++ i) {pinMode (ledit [i], OUTPUT); }
Tämä koodi on “setup ()” -toiminnon sisällä, koska sen täytyy suorittaa vain kerran ohjelman alussa. Silmukoille ovat erittäin hyödyllisiä. Niiden avulla voit käyttää samaa koodia uudestaan ja uudestaan, eri arvolla joka kerta. Ne ovat täydellisiä työskentelemään ryhmien kanssa. Kokonaisluku ”i” on ilmoitettu, ja vain silmukan sisällä oleva koodi voi käyttää tätä muuttujaa (tätä kutsutaan ”laajuudeksi”). I: n arvo alkaa nollasta ja jokaiselle silmukan iteraatiolle i kasvaa yhdellä. Kun arvon i arvo on pienempi tai yhtä suuri kuin ”totalLeds” -muuttuja, silmukka “katkeaa” (pysähtyy).
Arvolla i käytetään pääsyä led-ryhmään. Tämä silmukka käyttää kaikkia taulukon elementtejä ja konfiguroi sen tulosteena. Voit kirjoittaa manuaalisesti ”pinMode (pin, OUTPUT)” kahdeksan kertaa, mutta miksi kirjoittaa kahdeksan riviä, kun voit kirjoittaa kolme?
Vaikka jotkut ohjelmointikielet voivat kertoa kuinka monta elementtiä matriisissa on (yleensä syntaksilla kuten array.length), Arduino ei tee siitä niin yksinkertaista (se vaatii hieman enemmän matematiikkaa). Koska taulukon elementtien lukumäärä on jo tiedossa, se ei ole ongelma.
Pääsilmukan sisällä (tyhjä silmukka ()) ovat vielä kaksi silmukoita varten. Ensimmäinen asettaa LEDit PÄÄLLE ja sitten POIS välillä 1 - 8. Toinen silmukka asettaa LEDit päälle ja pois päältä välillä 8 - 1. Huomaa, kuinka nykyinen nasta on asetettu päälle, ja myös nykyinen nasta on asetettu päälle. Tämä varmistaa, että aina on kaksi LED-merkkivaloa samanaikaisesti, joten skanneri näyttää realistisemmalta.
Kunkin silmukan alussa potin arvo luetaan ”time” -muuttujaan:
aika = analoginen lukema (2);
Tämä tehdään kahdesti, kerran kunkin silmukan sisällä. Tätä on jatkuvasti tarkistettava ja päivitettävä. Jos tämä olisi silmukoiden ulkopuolella, se toimisi edelleen, mutta siitä olisi pieni viive - se toimisi vasta, kun silmukka on suorittanut loppuun. Ruukut ovat analogisia, joten miksi ”analogRead (pin)” käytetään. Tämä palauttaa arvot välillä nolla (minimi) ja 1023 (maksimi). Arduino pystyy muuntamaan nämä arvot jotain hyödyllisempää, mutta ne sopivat täydellisesti tähän käyttötapaukseen.
LEDien vaihtamisen (tai skannerin nopeuden) välinen viive asetetaan millisekunniksi (1/1000 sekuntia), joten enimmäisaika on hiukan yli 1 sekunti.
Advanced skanneri
Nyt kun tiedät perusteet, katsotaanpa jotain monimutkaisempaa. Tämä skanneri valaisee LEDit pareittain aloittaen ulkopuolelta ja työskentelemällä. Sitten se kääntää tämän ja menee sisäpuolelta pareihin. Tässä on koodi:
const int ledit [] = {1,2,3,4,5,6,7,8}; // Led-nastat. const int totalLeds = 8; const int halfLeds = 4; int aika = 50; // Oletusnopeus void-asetus () {// Alusta kaikki lähdöt kohteelle (int i = 0; i <= totalLeds; ++ i) {pinMode (ledit [i], OUTPUT); } } tyhjä silmukka () {varten (int i = 0; i 0; --i) {// Skannaa parin loppumisaika = analoginen lukema (2); digitalWrite (ledit [i], HIGH); digitalWrite (ledit [(totalLeds - i) - 1], HIGH); viiveaika); digitalWrite (ledit [i], LOW); digitalWrite (ledit [(totalLeds - i) - 1], LOW); viiveaika); } }
Tämä koodi on hieman monimutkaisempi. Huomaa, kuinka molemmat silmukat siirtyvät nollasta kohtaan “halfLeds - 1” (3). Tämä tekee paremmasta skannerista. Jos molemmat silmukat siirtyivät välillä 4 - 0 ja 0 - 4, samat LEDit vilkkuvat kahdesti samassa järjestyksessä - tämä ei näytä kovin hyvältä.
Sinun pitäisi nyt omistaa toimiva Knight Rider LED -lukija! Tätä olisi helppo muokata käyttämään enemmän tai suurempia LED-valoja tai toteuttamaan oma mallisi. Tämä piiri on erittäin helppo siirtää porttiin Vadelma Pi (uusi Pi? Aloita tästä Vadelma Pi: epävirallinen opasOlitpa nykyinen Pi-omistaja, joka haluaa oppia lisää, tai tämän luottokorttikokoisen laitteen potentiaalinen omistaja, tämä ei ole opas, jonka haluat unohtaa. Lue lisää ) tai ESP8266 Tapaa Arduino Killer: ESP8266Entä jos kerroin sinulle, että siellä on Arduino-yhteensopiva dev-levy, jossa on sisäänrakennettu Wi-Fi, alle 10 dollaria? No, siellä on. Lue lisää .
Rakennatko kopion KITT? Haluaisin nähdä kaikki Knight Riderin kommentit.
Joe on valmistunut tietojenkäsittelytieteestä Lincolnin yliopistosta, Iso-Britannia. Hän on ammattimainen ohjelmistokehittäjä, ja kun hän ei lentä drooneja tai kirjoita musiikkia, hänet voidaan usein löytää ottamasta valokuvia tai tuottamaan videoita.