Annons

Har du någonsin önskat att du skulle ha din egen Knight Industries Two Thousand (KITT) bil - du vet, från Knight Rider? Gör din dröm ett steg närmare verkligheten genom att bygga en LED-skanner! Här är slutresultatet:

Vad du behöver

Det behövs inte många delar för det här projektet, och du kanske har många av dem redan:

  • 1 x Arduino UNO eller liknande
  • 1 x brödbräda
  • 8 x röda lysdioder
  • 8 x 220 ohm-motstånd
  • 1 x 10 k ohm potentiometer
  • Ledningar för man till man kopplar upp

Om du har en Arduino startpaket Vad ingår i ett Arduino-startpaket? [MakeUseOf Explains]Jag har tidigare introducerat Arduino-open source-hårdvaran här på MakeUseOf, men du kommer att behöva mer än bara själva Arduino för att bygga något ur det och faktiskt komma igång. Arduino "startpaket" är ... Läs mer det är troligt att du har alla dessa delar (vad kan du göra med ett startpaket? 5 unika Arduino-projekt för nybörjare som du kan göra med bara ett startpaket Läs mer ).

Nästan alla Arduino fungerar, förutsatt att den har åtta tillgängliga stift (Har du aldrig använt en Arduino tidigare?

Kom igång här Komma igång med Arduino: En nybörjarguideArduino är en open-source elektronikprototypplattform baserad på flexibel, lättanvänd hårdvara och mjukvara. Den är avsedd för konstnärer, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer ). Du kunde använd ett skiftregister Arduino-programmering - Spela med skiftregister (a.k.a ännu fler lysdioder)Idag försöker jag lära dig lite om skiftregister. Dessa är en ganska viktig del av Arduino-programmeringen, i grund och botten för att de utökar antalet output du kan använda, i utbyte mot ... Läs mer för att styra lysdioderna, även om detta inte behövs för detta projekt, eftersom Arduino har tillräckligt med stift.

Bygg plan

Arduino-Knight-Rider-Led-skanner-Complete
Detta är ett mycket enkelt projekt. Även om det kan se komplex ut från det stora antalet ledningar, är varje enskild del mycket enkel. Varje ljusemitterande diod (LED) är ansluten till sin egen Arduino-stift. Detta innebär att varje lysdiod kan slås på och stängs separat. En potentiometer är ansluten till Arduino-analogen i stift, som kommer att användas för att justera skannerns hastighet.

Kretsen

Arduino-Knight-Rider-Circuit
Anslut den yttre vänstra stiftet (titta på framsidan, med stiften i botten) på potentiometern till marken. Anslut motsatt yttre stift till + 5v. Om det inte fungerar korrekt, vänd dessa stift. Anslut mittstiftet till Arduino-analog i 2.

Anslut anoden (lång ben) på varje LED till digitala stift en till åtta. Anslut katoderna (korta benet) till Arduino mark.

Koden

Skapa en ny skiss och spara den som "knightRider". Här är koden:

const int leds [] = {1,2,3,4,5,6,7,8}; // Ledstift. const int totalLeds = 8; int-tid = 50; // Inställning av standardhastighet void () {// Initiera alla utgångar för (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {för (int i = 0; i  0; --i) {// Skanna höger till vänster tid = analogRead (2); digitalWrite (leds [i], HÖG); försening); digitalWrite (leds [i - 1], HIGH); försening); digitalWrite (leds [i], LOW); } }

Låt oss bryta ner det. Varje LED-stift lagras i en matris:

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

En matris är i huvudsak en samling relaterade objekt. Dessa element definieras som konstant (“const”), vilket innebär att de inte kan ändras senare. Du behöver inte använda en konstant (koden fungerar perfekt om du tar bort “const”), även om den rekommenderas.

Element i en matris nås genom att använda fyrkantiga parenteser (“[]”) och ett heltal som kallas ett index. Index börjar på noll, så "leds [2]" skulle returnera det tredje elementet i matrisen - stift 3. Matriser gör koden snabbare att skriva och lättare att läsa, de gör datorn gör det hårda arbetet!

En för slinga används för att ställa in varje stift som en utgång:

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

Den här koden finns i funktionen “setup ()” eftersom den bara behöver köras en gång i början av programmet. För slingor är mycket användbara. De låter dig köra samma kod om och om igen, med ett annat värde varje gång. De är perfekta för att arbeta med matriser. Ett heltal "i" deklareras, och endast koden inuti slingan har åtkomst till denna variabel (detta kallas "scope"). Värdet på i börjar vid noll, och för varje iteration av slingan ökas i med en. När värdet på i är mindre än eller lika med variabeln "totalLeds" bryts slingan (stoppar).

Värdet på i används för att komma åt “leds” -fältet. Denna slinga får åtkomst till varje element i matrisen och konfigurerar det som en utgång. Du kan skriva in “pinMode (pin, OUTPUT)” manuellt åtta gånger, men varför skriva åtta rader när du kan skriva tre?

Medan vissa programmeringsspråk kan berätta hur många element som finns i en matris (vanligtvis med syntax som array.length), gör Arduino det inte så enkelt (det innebär lite mer matematik). Eftersom antalet element i matrisen redan är känt är det inte ett problem.

Arduino-Knight-Rider-LEDS

Inuti huvudslingan (void loop ()) är två ytterligare för slingor. Den första sätter lysdioderna PÅ och sedan AV från 1 - 8. Den andra slingan sätter lysdioderna PÅ och sedan AV från 8 - 1. Lägg märke till hur den aktuella stiftet är på och även den aktuella stiftet plus en är på. Detta säkerställer att det alltid finns två lysdioder på samtidigt, vilket gör att skannern ser mer realistisk ut.

Vid början av varje slinga läses värdet på potten in i "tids" -variabeln:

tid = analogLäs (2);

Detta görs två gånger, en gång i varje slinga. Detta måste ständigt kontrolleras och uppdateras. Om detta var utanför slingorna skulle det fortfarande fungera, men det skulle vara en liten fördröjning - det skulle bara köras när en slinga har slutfört körningen. Krukor är analoga, varför “analogRead (pin)” används. Detta returnerar värden mellan noll (minimum) och 1023 (maximalt). Arduino kan konvertera dessa värden till något mer användbart, men de är perfekta för detta användningsfall.

Fördröjningen mellan att byta lysdioder (eller skannerns hastighet) ställs in i millisekunder (1/1000 sekund), så den maximala tiden är drygt 1 sekund.

Avancerad skanner

Arduino-LED-outside-Pairs

Nu när du känner till grunderna, låt oss titta på något mer komplicerat. Den här skannern tänder lysdioderna parvis från utsidan och arbetar in. Det kommer sedan att vända detta och gå från insidan till utsidan par. Här är koden:

const int leds [] = {1,2,3,4,5,6,7,8}; // Ledstift. const int totalLeds = 8; const int halfLeds = 4; int-tid = 50; // Inställning av standardhastighet void () {// Initiera alla utgångar för (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {för (int i = 0; i  0; --i) {// Skanna inuti par ut tid = analogRead (2); digitalWrite (leds [i], HÖG); digitalWrite (leds [(totalLeds - i) - 1], HIGH); försening); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); försening); } }

Den här koden är lite mer komplex. Lägg märke till hur båda slingorna går från noll till “halfLeds - 1” (3). Detta gör en bättre skanner. Om båda slingorna gick från 4 - 0 och 0 - 4 skulle samma lysdioder blinka två gånger i samma sekvens - det här ser inte särskilt bra ut.

Du bör nu äga en fungerande Knight Rider LED-skanner! Det skulle vara lätt att ändra detta för att använda fler eller större lysdioder eller implementera ditt eget mönster. Denna krets är mycket enkel att porta till en Raspberry Pi (nytt för Pi? Börja här Raspberry Pi: Den inofficiella självstudienOavsett om du är en nuvarande Pi-ägare som vill lära dig mer eller en potentiell ägare av denna kreditkortsstorlek, är detta inte en guide du vill missa. Läs mer ) eller ESP8266 Möt Arduino Killer: ESP8266Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi-Fi för mindre än $ 10? Det finns det. Läs mer .

Byggjer du en replika KITT? Jag skulle gärna se alla saker Knight Rider i kommentarerna.

Joe är en examen i datavetenskap från University of Lincoln, Storbritannien. Han är en professionell mjukvaruutvecklare, och när han inte flyger drönare eller skriver musik kan han ofta hitta foton eller producera videor.