Lag en ridder LED-skanner med Arduino

Ever ønsket at du hadde din egen Knight Industries Two Thousand (KITT) bil - vet du, fra Knight Rider? Gjør drømmen ett skritt nærmere virkeligheten ved å bygge en LED-skanner!

Ever ønsket at du hadde din egen Knight Industries Two Thousand (KITT) bil - vet du, fra Knight Rider?  Gjør drømmen ett skritt nærmere virkeligheten ved å bygge en LED-skanner!
Annonse

Ever ønsket at du hadde din egen Knight Industries Two Thousand (KITT) bil - vet du, fra Knight Rider? Gjør drømmen ett 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 kan ha 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 10k ohm potensiometer
  • Mann til mannlig krog opp ledninger

Har du et Arduino startpakke Hva er inkludert i et Arduino Starter Kit? [MakeUseOf Forklarer] Hva er inkludert i et Arduino Starter Kit? [MakeUseOf Forklarer] Jeg har tidligere introdusert Arduino open-source hardware her på MakeUseOf, men du trenger mer enn bare den faktiske Arduino å bygge noe ut av det og faktisk komme i gang. Arduino "startpakker" er ... Les mer det er sannsynligvis at du har alle disse delene (hva kan du gjøre med en startpakke? 5 Unike Arduino-prosjekter for nybegynnere du kan gjøre med bare en startpakke 5 Unike Arduino-prosjekter for nybegynnere Du Kan gjøre med bare en startpakke Les mer).

Nesten noen Arduino vil fungere, hvis den har åtte tilgjengelige pinner (Aldri brukt en Arduino før? Kom i gang her Komme i gang Med Arduino: En nybegynnersveiledning Komme i gang med Arduino: En nybegynnersguide Arduino er en åpen kilde elektronikk prototyping plattform basert på fleksibel, brukervennlig maskinvare og programvare. Det er ment for artister, designere, hobbyister og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer). Du kan bruke Shift Register Arduino Programmering - Spille med Shift Registers (også flere LEDer). Arduino Programmering - Spille med Shift Registers (aka enda flere LEDer) I dag prøver jeg å lære deg litt om Shift Registers. Dette er en ganske viktig del av Arduino programmering, i utgangspunktet fordi de utvider antall utganger du kan bruke, i bytte for ... Les mer for å kontrollere lysdiodene, selv om dette ikke er nødvendig for dette prosjektet, da Arduino har nok pinner .

Bygg Plan

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

Kredsløpet

Arduino-Knight-Rider-Circuit
Koble den ytre venstre stiften (se på forsiden, med tappene i bunnen) på potensiometeret til bakken. Koble den motsatte ytre pinnen til + 5v. Hvis det ikke fungerer riktig, reverser du disse pinnene. Koble midtpinnen til Arduino analog i 2.

Koble anoden (langbenet) til hver LED til digitale pinner en til åtte. Koble katodene (kort ben) 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}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } }  const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } } 

La oss slå det ned. Hver LED-pin er lagret i en matrise:

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

Et array er i hovedsak en samling av relaterte elementer. Disse elementene er definert som konstant ("const"), noe som betyr at de ikke kan endres senere. Du trenger ikke å bruke en konstant (koden fungerer perfekt hvis du fjerner "const"), selv om det anbefales.

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

A for loop brukes til å sette opp hver pin 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øre en gang i starten av programmet. For sløyfer er veldig nyttige. De lar deg kjøre samme kode igjen og igjen, med en annen verdi hver gang. De er perfekte for å jobbe med arrays. Et heltall "jeg" er erklært, og bare kode i løkken kan få tilgang til denne variabelen (dette kalles "scope"). Verdien av jeg starter ved null, og for hver iterasjon av løkken blir jeg økt med en. Når verdien av i er mindre enn eller lik "totalLeds" -variabelen, slår løkken "pauser" (stopper).

Verdien av jeg er brukt til å få tilgang til "leds" -arrangementet. Denne løkken åpner hvert element i arrayet og konfigurerer det som en utgang. Du kan manuelt skrive "pinMode (pin, OUTPUT)" åtte ganger, men hvorfor skrive åtte linjer når du kan skrive tre?

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

Arduino-Knight-Rider-LEDS

Inne i hovedløkken ( tomromsløyfe () ) er to ytterligere for sløyfer. Den første setter lysdiodene på og deretter AV 1 - 8. Den andre sløyfen setter lysdiodene PÅ og deretter AV fra 8 - 1. Legg merke til hvordan den nåværende stiften er slått på, og den nåværende stift pluss en er slått på. Dette sikrer at det alltid er to lysdioder på, samtidig som skanneren ser mer realistisk ut.

Ved starten av hver løkke leses verdien av potten i "tid" -variabelen:

 time = analogRead(2); 

Dette gjøres to ganger, en gang inne i hver løkke. Dette må kontinuerlig kontrolleres og oppdateres. Hvis dette var utenfor løkkene, ville det fortsatt fungere, men det ville være en liten forsinkelse - det ville bare løpe når en sløyfe er fullfø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 dette brukstilfellet.

Forsinkelsen mellom skiftende lysdioder (eller skannerens hastighet) er satt i millisekunder (1/1000 sekund), så maksimal tid er litt over 1 sekund.

Avansert skanner

Arduino-LED-outside-Pairs

Nå som du vet det grunnleggende, la oss se på noe mer komplekst. Denne skanneren lyser lysdiodene i par med start fra utsiden og inn i. Det vil da reversere dette og gå fra innvendig til utvendig par. Her er koden:

 const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Default speed void setup() { // Initialize all outputs for(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) { // Scan inside pairs out 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); } } 

Denne koden er litt mer kompleks. Legg merke til hvordan begge sløyfer går fra null til "halvleder - 1" (3). Dette gir en bedre skanner. Hvis begge løkkene gikk fra 4 - 0 og 0 - 4, vil de samme lysdiodene blinke to ganger i samme rekkefølge - 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 flere lysdioder, eller implementere ditt eget mønster. Raspberry Pi: Den uoffisielle opplæringen Raspberry Pi: Den uoffisielle opplæringen Uansett om du er en nåværende Pi-eier som ønsker å lære mer eller en potensiell eier av denne kreditten Dette er ikke en guide du vil savne. Les mer) eller ESP8266 Møt Arduino Killer: ESP8266 Møt Arduino Killer: ESP8266 Hva om jeg fortalte deg at det er et Arduino-kompatibelt dev-kort med innebygd Wi-Fi for mindre enn $ 10? Vel, det er det. Les mer .

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

In this article