Advertentie
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 misschien heb je er al veel:
- 1 x Arduino UNO of vergelijkbaar
- 1 x broodplank
- 8 x rode leds
- 8 x 220 ohm weerstanden
- 1 x 10k ohm potentiometer
- Man-man haak draden aan
Als je een Arduino starterkit 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 hebt meer nodig dan alleen de daadwerkelijke Arduino om er iets uit te bouwen en daadwerkelijk aan de slag te gaan. Arduino "starterkits" zijn ... Lees verder waarschijnlijk heb je al deze onderdelen (wat kun je maken met een starterkit? 5 unieke Arduino-projecten voor beginners die u kunt maken met slechts een starterkit Lees verder ).
Bijna elke Arduino werkt, op voorwaarde dat hij acht beschikbare pinnen heeft (nog nooit een Arduino gebruikt?
Begin hier Aan de slag met Arduino: een beginnershandleidingArduino is een open-source prototypeplatform voor elektronica, gebaseerd op flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder ). Jij kunt gebruik een Shift Register Arduino Programming - Spelen met schuifregisters (ook bekend als nog meer LED's)Vandaag probeer ik je een beetje te leren over Shift Registers. Dit is een vrij belangrijk onderdeel van Arduino-programmering, vooral omdat ze het aantal uitgangen dat je kunt gebruiken uitbreiden, in ruil voor ... Lees verder om de leds aan te sturen, hoewel dit voor dit project niet nodig is, aangezien de Arduino genoeg pinnen heeft.Bouw plan
Dit is een heel eenvoudig project. Hoewel het complex lijkt door het grote aantal draden, is elk afzonderlijk 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 linkerpen (kijkend naar de voorkant, met de pennen onderaan) van de potentiometer met aarde. Verbind de tegenoverliggende buitenste pin met + 5v. Als het niet goed werkt, draai deze pinnen dan om. Verbind de middelste pin met Arduino analoog in 2.
Verbind de anode (lange poot) van elke LED met digitale pinnen één tot en met acht. Verbind de kathodes (korte poot) met Arduino-aarde.
De code
Maak een nieuwe schets en sla deze op als "knightRider". Hier is de code:
const int leds [] = {1,2,3,4,5,6,7,8}; // Led pinnen. const int totalLeds = 8; int tijd = 50; // Default speed void setup () {// Initialiseer alle uitgangen voor (int i = 0; ik <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Scan van rechts naar links tijd = analogRead (2); digitalWrite (leds [i], HIGH); vertragingstijd); digitalWrite (leds [i - 1], HIGH); vertragingstijd); digitalWrite (leds [i], LOW); } }
Laten we het opsplitsen. Elke LED-pin is opgeslagen in een array:
const int leds [] = {1,2,3,4,5,6,7,8};
Een array is in wezen een verzameling gerelateerde items. Deze elementen zijn 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 "const" verwijdert), hoewel het wel wordt aanbevolen.
Elementen van een array zijn toegankelijk met behulp van vierkante haken ("[]") en een geheel getal dat een index wordt genoemd. Indexen beginnen bij nul, dus 'leds [2]' retourneert het derde element in de array - pin 3. Arrays maken code sneller te schrijven en gemakkelijker te lezen, ze zorgen ervoor dat de computer het harde werk doet!
Een for-lus wordt gebruikt om elke pin als output in te stellen:
voor (int i = 0; ik <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); }
Deze code bevindt zich in de functie "setup ()", aangezien deze slechts één keer hoeft te worden uitgevoerd aan het begin van het programma. Voor lussen zijn erg handig. Hiermee kunt u steeds dezelfde code uitvoeren, telkens met een andere waarde. Ze zijn perfect voor het werken met arrays. Een geheel getal "i" wordt gedeclareerd en alleen code binnen de lus heeft toegang tot deze variabele (dit staat bekend als "scope"). 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 variabele "totalLeds", "breekt" de lus (stopt).
De waarde van i wordt gebruikt om toegang te krijgen tot de "leds" -array. Deze lus heeft toegang tot elk element in de array en configureert het als een uitvoer. U kunt acht keer handmatig "pinMode (pin, OUTPUT)" typen, maar waarom zou u acht regels schrijven als u er drie kunt schrijven?
Hoewel sommige programmeertalen je kunnen vertellen hoeveel elementen er in een array zitten (meestal met syntaxis zoals array.length), maakt Arduino het niet zo eenvoudig (het vergt wat meer wiskunde). Aangezien het aantal elementen in de array al bekend is, is dit geen probleem.
Binnen de hoofdlus (leegte lus ()) zijn twee verder voor lussen. De eerste zet de LED's AAN en vervolgens UIT van 1 - 8. De tweede lus zet de LED's AAN en vervolgens UIT van 8 - 1. Merk op hoe de huidige pin is ingesteld en dat de huidige pin plus één ook is ingeschakeld. Dit zorgt ervoor dat er altijd twee LED's tegelijk branden, waardoor de scanner er realistischer uitziet.
Aan het begin van elke lus wordt de waarde van de pot gelezen in de "tijd" variabele:
tijd = analogRead (2);
Dit wordt tweemaal gedaan, eenmaal binnen elke lus. Dit moet constant worden gecontroleerd en bijgewerkt. Als dit buiten de lussen was, zou het nog steeds werken, maar er zou een kleine vertraging zijn - het zou pas worden uitgevoerd als een lus is voltooid. Potten zijn analoog, vandaar dat "analogRead (pin)" wordt gebruikt. Dit retourneert waarden tussen nul (minimum) en 1023 (maximum). Arduino is in staat om deze waarden om te zetten in iets nuttigers, maar ze zijn perfect voor dit gebruik.
De vertraging tussen het veranderen 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 u de basis kent, gaan we naar iets complexers kijken. Deze scanner zal de LED's in paren aansteken, beginnend van buiten en werkend. Het zal dit dan omkeren en van binnen naar buiten paren gaan. Hier is de code:
const int leds [] = {1,2,3,4,5,6,7,8}; // Led pinnen. const int totalLeds = 8; const int halfLeds = 4; int tijd = 50; // Default speed void setup () {// Initialiseer alle uitgangen voor (int i = 0; ik <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Scannen binnen paren uit tijd = analogRead (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" gaan (3). Dit maakt een betere scanner. Als beide lussen van 4 - 0 en 0 - 4 gingen, zouden dezelfde LED's tweemaal in dezelfde volgorde knipperen - dit zou er niet erg goed uitzien.
Je zou nu een werkende Knight Rider LED-scanner moeten hebben! U kunt dit eenvoudig aanpassen om meer of grotere LED's te gebruiken of uw eigen patroon implementeren. Dit circuit is heel gemakkelijk over te dragen naar een Raspberry Pi (nieuw bij Pi? Begin hier Raspberry Pi: The Unofficial TutorialOf je nu een huidige Pi-eigenaar bent die meer wil leren of een potentiële eigenaar van dit apparaat op creditcardformaat, dit is geen gids die je wilt missen. Lees verder ) of ESP8266 Maak kennis met de Arduino Killer: ESP8266Wat als ik je vertel dat er een Arduino-compatibel dev-bord is met ingebouwde Wi-Fi voor minder dan $ 10? Nou, dat is er. Lees verder .
Bouwt u een replica KITT? Ik zou graag alles over Knight Rider in de reacties willen zien.
Joe is afgestudeerd in computerwetenschappen aan de universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, kan hij vaak foto's of video's maken.