Maak een Knight Rider LED Scanner met Arduino

Maak een Knight Rider LED Scanner met Arduino / DIY

Ooit gewenst dat je je eigen Knight Industries Two Thousand (KITT) auto had - weet je, van Knight Rider? Maak uw droom een ​​stap dichter bij de realiteit door een LED-scanner te bouwen! Dit is het eindresultaat:

Wat je nodig hebt

Er zijn niet veel onderdelen nodig voor dit project en je hebt er misschien al veel:

  • 1 x Arduino UNO of vergelijkbaar
  • 1 x breadboard
  • 8 x rode leds
  • 8 x 220 ohm weerstanden
  • 1 x 10k ohm potentiometer
  • Van mannelijk naar mannelijk aansluitdraden

Als u een Arduino-starterkit heeft Wat zit er in een Arduino-starterkit? [MakeUseOf Explains] Wat zit er in een Arduino Starter Kit? [MakeUseOf Explains] Ik heb eerder de Arduino open-source hardware hier op MakeUseOf geïntroduceerd, maar je zult meer nodig hebben dan alleen de echte Arduino om er iets uit te bouwen en daadwerkelijk aan de slag te gaan. Arduino "starterkits" zijn ... Lees Meer waarschijnlijk heb je al deze onderdelen (wat kun je maken met een starterkit? 5 Unieke Arduino-projecten voor beginners die je kunt maken met slechts een beginnerskit 5 Unieke Arduino-projecten voor beginners die je kunt maken Met Just a Starter Kit Lees meer).

Bijna elke Arduino werkt, mits hij acht beschikbare pinnen heeft (Nooit eerder een Arduino gebruikt? Aan de slag Beginnen met Arduino: een beginnershandleiding Aan de slag met Arduino: een beginnersgids Arduino is een prototype-platform voor open-source elektronica op basis van flexibel , eenvoudig te gebruiken hardware en software, bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Je zou een Shift Register kunnen gebruiken Arduino Programmeren - Spelen met Shift Registers (a.k.a Even Meer LED's) Arduino Programmeren - Spelen met Shift Registers (a.k.a Nog meer LED's) Vandaag zal ik proberen je een klein beetje over Shift Registers te leren. Deze zijn een vrij belangrijk onderdeel van Arduino-programmering, voornamelijk omdat ze het aantal uitgangen uitbreiden dat je kunt gebruiken, in ruil voor ... Lees Meer om de LED's te besturen, hoewel dit niet nodig is voor dit project, omdat de Arduino genoeg pins heeft.

Bouw plan


Dit is een heel eenvoudig project. Hoewel het complex kan lijken op het grote aantal draden, is elk onderdeel zeer eenvoudig. Elke Light Emitting Diode (LED) is verbonden met zijn eigen Arduino-pin. Dit betekent dat elke LED afzonderlijk kan worden in- en uitgeschakeld. Een potentiometer is verbonden met de Arduino-analoog in pinnen, die zal worden gebruikt om de snelheid van de scanner aan te passen.

Het circuit


Verbind de buitenste linkerpin (kijkend naar de voorkant, met de pinnen aan de onderkant) van de potentiometer naar de grond. Verbind de tegenoverliggende buitenpen met + 5v. Als het niet goed werkt, draai deze pinnen om. Verbind de middelste pin met Arduino-analoog in 2.

Verbind de anode (lange been) van elke LED met digitale pennen één tot en met acht. Verbind de kathodes (korte poot) met Arduino-grond.

De code

Maak een nieuwe schets en sla deze op als “Knight Rider”. Hier is de code:

const int leds [] = 1,2,3,4,5,6,7,8; // Led-pins const int totalLeds = 8; int tijd = 50; // Default speed void setup () // Initialiseer alle outputs voor (int i = 0; i <= totalLeds; ++i)  pinMode(leds[i], OUTPUT);   void loop()  for(int i = 0; i < totalLeds - 1; ++i)  // Scan left to right time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i + 1], HIGH); delay(time); digitalWrite(leds[i], LOW);  for(int i = totalLeds; i > 0; --i) // Scan van rechts naar links tijd = analoogRead (2); digitalWrite (leds [i], HIGH); vertragingstijd); digitalWrite (leds [i - 1], HIGH); vertragingstijd); digitalWrite (leds [i], LOW); 

Laten we het afbreken. Elke LED-pin wordt opgeslagen in een array:

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

Een array is in essentie een verzameling gerelateerde items. Deze elementen worden gedefinieerd als constant (“const”), wat betekent dat ze later niet kunnen worden gewijzigd. U hoeft geen constante te gebruiken (de code werkt perfect als u deze verwijdert “const”), hoewel dit wordt aanbevolen.

Elementen van een array zijn toegankelijk door vierkante haakjes te gebruiken (“[]”) en een geheel getal dat een index wordt genoemd. Indexen beginnen bij nul, dus “leds [2]” zou het derde element in de array teruggeven - pin 3. Arrays maken code sneller te schrijven en gemakkelijker te lezen, ze maken de computer het harde werk doen!

Een for-lus wordt gebruikt om elke pin als een uitvoer in te stellen:

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

Deze code bevindt zich in de “opstelling()” functie, omdat het maar één keer hoeft te worden uitgevoerd aan het begin van het programma. For-loops zijn erg handig. Hiermee kunt u dezelfde code steeds opnieuw uitvoeren, met elke keer een andere waarde. Ze zijn perfect voor het werken met arrays. Een geheel getal “ik” wordt gedeclareerd en alleen code binnen de lus heeft toegang tot deze variabele (dit staat bekend als “strekking”). De waarde van i begint bij nul en voor elke iteratie van de lus wordt i met één verhoogd. Zodra de waarde van i kleiner is dan of gelijk is aan de “totalLeds” variabel, de lus “breaks” (Stops).

De waarde van i wordt gebruikt om toegang te krijgen tot de “leds” matrix. Deze lus geeft toegang tot elk element in de array en configureert het als een uitvoer. Je zou handmatig kunnen typen “pinMode (pin, OUTPUT)” acht keer, maar waarom schrijf je acht regels als je er drie kunt schrijven?

Hoewel sommige programmeertalen u kunnen vertellen hoeveel elementen zich in een array bevinden (meestal met syntaxis zoals array.length), maakt Arduino het niet zo eenvoudig (het bevat een beetje meer wiskunde). Aangezien het aantal elementen in de array al bekend is, is dit geen probleem.

In de hoofdlus (ongeldige lus ()) zijn nog twee voor loops. De eerste zet de LED's AAN en vervolgens UIT van 1 - 8. De tweede lus zet de LEDs AAN en vervolgens UIT van 8 - 1. Merk op hoe de huidige pin is ingeschakeld en de huidige pin plus één is ook ingeschakeld. Dit zorgt ervoor dat er altijd twee LEDS tegelijkertijd branden, waardoor de scanner er realistischer uitziet.

Aan het begin van elke lus wordt de waarde van de pot ingelezen in de “tijd” variabele:

tijd = analogRead (2);

Dit gebeurt twee keer, eenmaal binnen elke lus. Dit moet voortdurend worden gecontroleerd en bijgewerkt. Als dit buiten de lussen was, zou het nog steeds werken, maar er zou een kleine vertraging zijn - het zou alleen draaien als een lus klaar is met uitvoeren. Potten zijn analoog, vandaar waarom “analogRead (pen)” is gebruikt. Dit retourneert waarden tussen nul (minimum) en 1023 (maximum). Arduino is in staat deze waarden te converteren naar iets nuttiger, maar ze zijn perfect voor dit gebruik.

De vertraging tussen het wisselen van LED's (of de snelheid van de scanner) wordt ingesteld in milliseconden (1/1000 seconde), dus de maximale tijd is iets meer dan 1 seconde.

Geavanceerde scanner

Nu dat je de basis kent, laten we eens naar iets complexers kijken. Deze scanner zal de LED's in paren aansteken, beginnend vanaf de buitenkant en inwerkend. Het zal dan dit omkeren en van binnen naar buiten paren gaan. Hier is de code:

const int leds [] = 1,2,3,4,5,6,7,8; // Led-pins const int totalLeds = 8; const int halfLeds = 4; int tijd = 50; // Default speed void setup () // Initialiseer alle outputs voor (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 binnen paren uit tijd = analoog Lees (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); vertragingstijd); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); vertragingstijd); 

Deze code is iets complexer. Merk op hoe beide lussen van nul naar “halfLeds - 1” (3). Dit maakt een betere scanner. Als beide lussen van 4 - 0 en 0 - 4 gingen, dan zouden dezelfde LED's twee keer in dezelfde reeks knipperen - dit zou niet zo goed uitkomen.

U zou nu een werkende Knight Rider LED-scanner moeten hebben! Het zou gemakkelijk zijn om dit aan te passen om meer of grotere LED's te gebruiken, of om uw eigen patroon te implementeren. Dit circuit kan heel eenvoudig worden overgezet naar een Raspberry Pi (nieuw in Pi? Start hier Raspberry Pi: de onofficiële zelfstudie Raspberry Pi: de onofficiële zelfstudie Of je nu een Pi-eigenaar bent die meer wil leren of een potentiële eigenaar van dit tegoed -kaartformaat apparaat, dit is geen gids die je wilt missen. Lees meer) of ESP8266 Maak kennis met de Arduino-moordenaar: ESP8266 Maak kennis met de Arduino-moordenaar: ESP8266 Wat als ik je al zei dat er een Arduino-compatibel dev-bord is met ingebouwde Wifi voor minder dan $ 10? Welnu, dat is er. Lees verder .

Bouw je een replica KITT? Ik zou graag alle dingen van Knight Rider in de comments zien.

Ontdek meer over: Arduino, elektronica.