Annonse

Noen gang ønsket at du hadde din egen Knight Industries To Thousand (KITT) bil - vet du, fra Knight Rider? Gjør drømmen et skritt nærmere virkeligheten ved å bygge en LED-skanner! Her er sluttresultatet:

Hva trenger du

Det er ikke mange deler som trengs for dette prosjektet, og du har kanskje mange av dem allerede:

  • 1 x Arduino UNO eller lignende
  • 1 x brødbrett
  • 8 x røde lysdioder
  • 8 x 220 ohm-motstander
  • 1 x 10 k ohm potensiometer
  • Ledninger til mann til mann kobles til

Hvis du har en Arduino startpakke Hva er inkludert i et Arduino Starter Kit? [MakeUseOf Explains]Jeg har tidligere introdusert Arduino-open source-maskinvaren her på MakeUseOf, men du trenger mer enn bare den faktiske Arduino for å bygge noe ut av det og faktisk komme i gang. Arduino "startpakker" er ... Les mer det er sannsynlig at du har alle disse delene (hva kan du lage med et startsett? 5 unike Arduino-prosjekter for nybegynnere du kan lage med bare et startpakke Les mer ).

Nesten hvilken som helst Arduino vil fungere, forutsatt at den har åtte tilgjengelige pinner (Har du aldri brukt en Arduino før?

instagram viewer
Kom i gang her Komme i gang med Arduino: En nybegynnerguideArduino er en åpen kildekode-prototypeplattform for elektronikk basert på fleksibel, brukervennlig maskinvare og programvare. Den er beregnet på kunstnere, designere, hobbyister og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer ). Du kan bruk et skiftregister Arduino-programmering - leking med skiftregistre (a.k.a enda flere lysdioder)I dag skal jeg prøve å lære deg litt om skiftregistre. Dette er en ganske viktig del av Arduino-programmeringen, i utgangspunktet fordi de utvider antall output du kan bruke, i bytte mot ... Les mer for å kontrollere lysdiodene, selv om dette ikke er nødvendig for dette prosjektet, siden Arduino har nok pinner.

Bygg plan

Arduino-Knight-Rider-Led-skanner-Complete
Dette er et veldig enkelt prosjekt. Selv om det kan se komplekst ut fra det store antall ledninger, er hver enkelt del veldig enkel. Hver lysemitterende diode (LED) er koblet til sin egen Arduino-pinne. Dette betyr at hver LED kan slås av og på individuelt. Et potensiometer er koblet til Arduino-analogen i pinner, som vil brukes til å justere hastigheten på skanneren.

Kretsløpet

Arduino-Knight-Rider-Circuit
Koble den ytre venstre pinne (ser foran, med pinnene i bunnen) av potensiometeret til bakken. Koble den motsatte ytre pinnen til + 5v. Hvis det ikke fungerer riktig, kan du reversere disse pinnene. Koble midtstiften til Arduino-analog i 2.

Koble anoden (langbenet) til hver LED til digitale pinner en til åtte. Koble katodene (korte benet) til Arduino bakken.

Koden

Lag en ny skisse og lagre den som "knightRider". Her er koden:

const int leds [] = {1,2,3,4,5,6,7,8}; // Ledpinner. const int totalLeds = 8; int-tid = 50; // Innstilling av standardhastighet tomrom () {// Initialiser alle utganger for (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i  0; --i) {// Skann høyre til venstre tid = analog Les (2); digitalWrite (leds [i], HIGH); forsinkelsestid); digitalWrite (leds [i - 1], HIGH); forsinkelsestid); digitalWrite (leds [i], LOW); } }

La oss bryte det ned. Hver LED-pinne er lagret i en matrise:

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

En matrise er egentlig en samling relaterte elementer. Disse elementene er definert som konstante (“const”), noe som betyr at de ikke kan endres senere. Du trenger ikke å bruke en konstant (koden vil fungere perfekt hvis du fjerner “const”), selv om den anbefales.

Elementer i en matrise er tilgjengelige ved å bruke firkantede parenteser (“[]”) og et heltall kalt en indeks. Indeksene starter på null, så “leds [2]” vil returnere det tredje elementet i array - pin 3. Arrays gjør koden raskere å skrive og enklere å lese, de gjør datamaskinen gjør det harde arbeidet!

A for loop brukes til å konfigurere hver pinne som en utgang:

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

Denne koden er inne i “setup ()” -funksjonen, da den bare trenger å kjøres en gang ved starten av programmet. For løkker er veldig nyttige. De lar deg kjøre den samme koden om og om igjen, med en annen verdi hver gang. De er perfekte for å jobbe med matriser. Et heltall "i" er deklarert, og bare kode inne i løkka kan få tilgang til denne variabelen (dette kalles "omfang"). Verdien på i starter på null, og for hver iterasjon av løkken økes i med en. Når verdien til i er mindre enn eller lik variabelen “totalLeds”, sløyfes loopen (stopper).

Verdien av i brukes for å få tilgang til “leds” -feltet. Denne sløyfen får tilgang til hvert element i matrisen og konfigurerer det som en utgang. Du kan skrive “pinMode (pin, OUTPUT)” manuelt åtte ganger, men hvorfor skrive åtte linjer når du kan skrive tre?

Selv om noen programmeringsspråk kan fortelle deg hvor mange elementer som er i en matrise (vanligvis med syntaks som array.length), gjør Arduino det ikke så enkelt (det innebærer litt mer matte). Ettersom antall elementer i matrisen allerede er kjent, er det ikke et problem.

Arduino-Knight-Rider-LEDS

Inne i hovedsløyfen (void loop ()) er to ytterligere for løkker. Den første setter lysdiodene PÅ og deretter AV fra 1 - 8. Den andre sløyfen setter lysdiodene PÅ og deretter AV fra 8 - 1. Legg merke til hvordan den nåværende tappen er satt på, og den nåværende tappen pluss en er satt på også. Dette sikrer at det alltid er to lysdioder på samtidig, slik at skanneren ser mer realistisk ut.

Ved starten av hver sløyfe blir verdien av potten lest inn i "tids" -variabelen:

tid = analog Les (2);

Dette gjøres to ganger, en gang inne i hver sløyfe. Dette må kontinuerlig sjekkes og oppdateres. Hvis dette var utenfor løkkene, ville det fortsatt fungere, men det ville være en liten forsinkelse - den ville bare kjørt når en sløyfe er ferdig utført. Potter er analoge, og derfor brukes “analogRead (pin)”. Dette returnerer verdier mellom null (minimum) og 1023 (maksimum). Arduino er i stand til å konvertere disse verdiene til noe mer nyttig, men de er perfekte for denne bruksaken.

Forsinkelsen mellom å skifte lysdioder (eller hastigheten til skanneren) er satt på millisekunder (1/1000 sekund), så den maksimale tiden er litt over 1 sekund.

Avansert skanner

Arduino-LED-outside-Pairs

Nå som du kjenner det grunnleggende, la oss se på noe mer komplekst. Denne skanneren vil lyse lysdiodene parvis fra utsiden og arbeide i. Den vil deretter reversere dette og gå fra innsiden til ytre par. Her er koden:

const int leds [] = {1,2,3,4,5,6,7,8}; // Ledpinner. const int totalLeds = 8; const int halfLeds = 4; int-tid = 50; // Innstilling av standardhastighet tomrom () {// Initialiser alle utganger for (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i  0; --i) {// Skann innen par ut tid = analog Les (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); forsinkelsestid); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); forsinkelsestid); } }

Denne koden er litt mer sammensatt. Legg merke til hvordan begge løkkene går fra null til “halvledere - 1” (3). Dette gjør en bedre skanner. Hvis begge løkkene gikk fra 4 - 0 og 0 - 4, ville de samme lysdiodene blinke to ganger i samme sekvens - dette ville ikke se veldig bra ut.

Du bør nå eie en fungerende Knight Rider LED-skanner! Det ville være enkelt å endre dette for å bruke flere eller større lysdioder, eller implementere ditt eget mønster. Denne kretsen er veldig enkel å port til en Bringebær Pi (nytt for Pi? Start her Raspberry Pi: Den uoffisielle opplæringenEnten du er en nåværende Pi-eier som vil lære mer eller potensiell eier av denne enheten med kredittkortstørrelse, er dette ikke en guide du vil gå glipp av. Les mer ) eller ESP8266 Møt Arduino Killer: ESP8266Hva om jeg fortalte deg at det er et Arduino-kompatibelt dev-brett med innebygd Wi-Fi for under 10 dollar? Det er det. Les mer .

Bygger du en kopi KITT? Jeg vil gjerne se alle ting Knight Rider i kommentarene.

Joe er utdannet innen informatikk fra University of Lincoln, Storbritannia. Han er en profesjonell programvareutvikler, og når han ikke flyr droner eller skriver musikk, kan han ofte finne bilder og produsere videoer.