Lav en ridder LED-scanner med Arduino

Nogensinde ønsket at du havde din egen Knight Industries Two Thousand (KITT) bil - du ved, fra Knight Rider? Gør din drøm et skridt tættere på virkeligheden ved at bygge en LED scanner!

Nogensinde ønsket at du havde din egen Knight Industries Two Thousand (KITT) bil - du ved, fra Knight Rider?  Gør din drøm et skridt tættere på virkeligheden ved at bygge en LED scanner!
Reklame

Nogensinde ønsket at du havde din egen Knight Industries Two Thousand (KITT) bil - du ved, fra Knight Rider? Gør din drøm et skridt tættere på virkeligheden ved at bygge en LED scanner! Her er slutresultatet:

Hvad du har brug for

Der er ikke mange dele nødvendige til dette projekt, og du har måske mange af dem allerede:

  • 1 x Arduino UNO eller lignende
  • 1 x brødbræt
  • 8 x røde lysdioder
  • 8 x 220 ohm modstande
  • 1 x 10k ohm potentiometer
  • Mand til mandlige krog op ledninger

Har du et Arduino starterpakke Hvad er inkluderet i et Arduino Starter Kit? [MakeUseOf Forklarer] Hvad er inkluderet i et Arduino Starter Kit? [MakeUseOf Forklarer] Jeg har tidligere introduceret Arduino open source hardware her på MakeUseOf, men du skal bruge mere end bare den faktiske Arduino at bygge noget ud af det og faktisk komme i gang. Arduino "starter kits" er ... Læs mere Det er sandsynligvis, at du har alle disse dele (hvad kan du lave med et startpakke? 5 Unikke Arduino Projekter til begyndere, du kan lave med bare et Starter Kit 5 Unique Arduino Projekter for Begyndere Du Kan gøre med bare et Starter Kit Læs mere).

Næsten enhver Arduino vil arbejde, hvis den har otte ledige stifter (Har aldrig brugt en Arduino før? Kom i gang her Kom i gang med Arduino: En nybegyndervejledning Kom i gang med Arduino: En nybegyndervejledning Arduino er en open source elektronik prototypeplan baseret på fleksibel, nem at bruge hardware og software. Det er beregnet til kunstnere, designere, hobbyister og alle interesserede i at skabe interaktive objekter eller miljøer. Læs mere). Du kan bruge et Shift Register Arduino Programmering - Playing With Shift Registers (også flere LED'er) Arduino Programmering - Spiller med Shift Registers (også flere LED'er) I dag forsøger jeg at lære dig lidt om Shift Registers. Disse er en forholdsvis vigtig del af Arduino-programmeringen, da de udvider antallet af udgange, du kan bruge, i stedet for ... Læs mere for at styre LED'erne, selv om dette ikke er nødvendigt for dette projekt, da Arduino har nok ben .

Build Plan

Arduino-Knight-Rider-Led-scanner-Complete
Dette er et meget simpelt projekt. Selv om det kan se kompleks ud fra det store antal ledninger, er hver enkelt del meget enkel. Hver lysdiode (LED) er forbundet med sin egen Arduino-pin. Det betyder, at hver LED kan tændes og slukkes individuelt. Et potentiometer er forbundet til Arduino-analoga i stifter, som vil blive brugt til at justere scannerns hastighed.

Kredsløbet

Arduino-Knight-Rider-Circuit
Tilslut den ydre venstre stift (se på forsiden, med stifterne i bunden) på potentiometeret til jorden. Tilslut den modsatte ydre pin til + 5v. Hvis det ikke fungerer korrekt, skal du dreje om disse stifter. Tilslut midterstiften til Arduino analog i 2.

Tilslut anoden (langbenet) af hver LED til digitale stifter en til otte. Tilslut katodene (kort ben) til Arduino jorden.

Koden

Lav en ny skitse og gem 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); } } 

Lad os bryde det ned. Hver LED-pin gemmes i en matrix:

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

Et array er i det væsentlige en samling af relaterede poster. Disse elementer defineres som konstant ("const"), hvilket betyder at de ikke kan ændres senere. Du behøver ikke bruge en konstant (koden fungerer perfekt, hvis du fjerner "const"), selv om det anbefales.

Elementer i et array fås ved hjælp af firkantede parenteser ("[]") og et helt tal kaldet et indeks. Indekserne starter ved nul, så "leds [2]" ville returnere det tredje element i array-pin 3. Arrays gør koden hurtigere at skrive og lettere at læse, de gør computeren det hårde arbejde!

A for loop bruges til at konfigurere hver pin som en output:

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

Denne kode er inde i "setup ()" funktionen, da den kun skal køre en gang i starten af ​​programmet. Til sløjfer er meget nyttige. De giver dig mulighed for at køre den samme kode igen og igen, med en anden værdi hver gang. De er perfekte til at arbejde med arrays. Et helt tal "i" er erklæret, og kun kode inde i sløjfen kan få adgang til denne variabel (dette kaldes "scope"). Værdien af ​​jeg starter ved nul, og for hver iteration af sløjfen øges jeg med en. Når værdien af ​​i er mindre end eller lig med "totalLeds" -variablen, sløjfer "break" (stopper).

Værdien af ​​i er brugt til at få adgang til "leds" array. Denne loop åbner hvert element i arrayet og konfigurerer det som en output. Du kunne manuelt skrive "pinMode (pin, OUTPUT)" otte gange, men hvorfor skrive otte linjer, når du kan skrive tre?

Mens nogle programmeringssprog kan fortælle dig, hvor mange elementer der er i en matrix (normalt med syntakslignende array.length), gør Arduino det ikke så nemt (det indebærer lidt mere matematik). Da antallet af elementer i arrayet allerede er kendt, er det ikke et problem.

Arduino-Knight-Rider-LEDS

Inde i hovedløkken ( void loop () ) er to yderligere for sløjfer. Den første sætter LED'erne TIL og derefter FRA fra 1 til 8. Den anden sløjfe sætter LED'erne ON og derefter OFF fra 8 - 1. Bemærk, hvordan den aktuelle stifter er tændt, og den aktuelle stifter plus en er også tændt. Dette sikrer, at der altid er to LED'er på, samtidig med at scanneren ser mere realistisk ud.

Ved starten af ​​hver løkke læses værdien af ​​potten i "tid" -variablen:

 time = analogRead(2); 

Dette gøres to gange, en gang inden for hver løkke. Dette skal løbende kontrolleres og opdateres. Hvis dette var uden for løkkerne, ville det stadig arbejde, men der ville være en lille forsinkelse - det ville kun køre, når en loop er færdiggjort. Potter er analoge, hvorfor derfor "analogRead (pin)" bruges. Dette returnerer værdier mellem nul (minimum) og 1023 (maksimum). Arduino er i stand til at konvertere disse værdier til noget mere nyttigt, men de er perfekte til denne brugssag.

Forsinkelsen mellem skiftende lysdioder (eller scannerens hastighed) indstilles i millisekunder (1/1000 sekund), så den maksimale tid er lidt over 1 sekund.

Avanceret scanner

Arduino-lysdioder-outside-Par

Nu da du kender det grundlæggende, lad os se på noget mere komplekst. Denne scanner tænder lysdiodene parvis ud fra ydersiden og arbejder ind. Det vil så vende om det og gå fra indvendige til udvendige 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 kode er lidt mere kompleks. Bemærk, hvordan begge sløjfer går fra nul til "halfLeds - 1" (3). Dette giver en bedre scanner. Hvis begge løkker gik fra 4-0 og 0-4, blinker de samme lysdioder to gange i samme rækkefølge - det ser ikke ud til at være meget godt.

Du skal nu eje en fungerende Knight Rider LED scanner! Det ville være let at ændre dette for at bruge flere eller flere lysdioder, eller implementere dit eget mønster. Dette kredsløb er meget nemt at porte til en Raspberry Pi (ny til Pi? Start her Raspberry Pi: Den uofficielle Tutorial Raspberry Pi: Den uofficielle Tutorial Om du er en nuværende Pi ejer, der ønsker at lære mere eller en potentiel ejer af denne kredit -kortstørrelse enhed, dette er ikke en guide, du vil gå glip af. Læs mere) eller ESP8266 Mød Arduino Killer: ESP8266 Mød Arduino Killer: ESP8266 Hvad hvis jeg fortalte dig, at der er en Arduino-kompatibel dev board med indbygget Wi-Fi for mindre end $ 10? Nå er der. Læs mere .

Bygger du en kopi KITT? Jeg vil gerne se alle ting Knight Rider i kommentarerne.

In this article