Machen Sie mit Arduino einen LED-Scanner von Knight Rider
Haben Sie sich schon immer gewünscht, Sie hätten Ihr eigenes Knight Industries Two Thousand (KITT) Auto - wissen Sie, von Knight Rider? Machen Sie Ihrem Traum einen Schritt näher an der Realität, indem Sie einen LED-Scanner bauen! Hier ist das Endergebnis:
Was du brauchst
Für dieses Projekt werden nicht viele Teile benötigt, und möglicherweise haben Sie bereits viele davon:
- 1 x Arduino UNO oder ähnlich
- 1 x Brotschneidebrett
- 8 x rote LEDs
- 8 x 220 Ohm Widerstände
- 1 x 10k Ohm Potentiometer
- Männlich zu männlich anschließen Drähte
Wenn Sie ein Arduino-Starterkit haben Was ist in einem Arduino-Starterkit enthalten? [MakeUseOf erklärt] Was ist in einem Arduino Starter Kit enthalten? [MakeUseOf erklärt] Ich habe die Arduino-Open-Source-Hardware hier bereits auf MakeUseOf vorgestellt, aber Sie benötigen mehr als nur den eigentlichen Arduino, um etwas daraus zu bauen und tatsächlich loszulegen. Arduino "Starter-Kits" sind… Lesen Sie mehr, Sie haben wahrscheinlich all diese Teile (Was können Sie mit einem Starter-Kit machen?) 5 einzigartige Arduino-Projekte für Anfänger, die Sie mit einem Starter-Kit erstellen können 5 einzigartige Arduino-Projekte für Anfänger, die Sie erstellen können Mit nur einem Starter-Kit Lesen Sie weiter).
Fast jedes Arduino funktioniert mit acht verfügbaren Pins (noch nie ein Arduino verwendet? Erste Schritte mit Arduino: Einsteigerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch) Arduino ist eine Open Source-Prototyping-Plattform für elektronische Prototypen, die auf flexiblen basiert Die benutzerfreundliche Hardware und Software ist für Künstler, Designer, Bastler und alle gedacht, die interaktive Objekte oder Umgebungen erstellen möchten. Sie könnten ein Schieberegister verwenden. Arduino-Programmierung - Mit Schieberegistern spielen (a.k.a sogar noch mehr LEDs) Arduino-Programmierung - Mit Schieberegistern spielen (a.k.a noch mehr LEDs) Heute werde ich versuchen, Sie etwas über Schieberegister zu lernen. Dies ist ein ziemlich wichtiger Teil der Arduino-Programmierung, im Wesentlichen, weil sie die Anzahl der Ausgänge, die Sie verwenden können, im Tausch gegen… Lesen Sie mehr, um die LEDs zu steuern, obwohl dies für dieses Projekt nicht erforderlich ist, da der Arduino über genügend Pins verfügt.
Plan erstellen
Dies ist ein sehr einfaches Projekt. Obwohl es aufgrund der großen Anzahl von Drähten komplex aussehen kann, ist jedes einzelne Teil sehr einfach. Jede Leuchtdiode (LED) ist mit einem eigenen Arduino-Pin verbunden. Dies bedeutet, dass jede LED einzeln ein- und ausgeschaltet werden kann. An das Arduino-Analog-In-Pins ist ein Potentiometer angeschlossen, über das die Geschwindigkeit des Scanners eingestellt werden kann.
Die Rennbahn
Verbinden Sie den äußeren linken Stift (mit den Stiften nach unten) des Potentiometers mit Masse. Verbinden Sie den gegenüberliegenden äußeren Pin mit + 5V. Wenn es nicht richtig funktioniert, vertauschen Sie diese Pins. Verbinden Sie den mittleren Pin mit Arduino Analog in 2.
Verbinden Sie die Anode (langes Bein) jeder LED mit den digitalen Pins 1 bis 8. Verbinden Sie die Kathoden (kurzes Bein) mit der Arduino-Erde.
Der Code
Erstellen Sie eine neue Skizze und speichern Sie sie als “RitterRider”. Hier ist der Code:
const int leds [] = 1,2,3,4,5,6,7,8; // Led-Pins const int totalLeds = 8; int time = 50; // Standardgeschwindigkeit void setup () // Initialisierung aller Ausgänge für (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 von rechts nach links time = analogRead (2); DigitalWrite (LEDs [i], HIGH); Verzögerungszeit); DigitalWrite (LEDs [i - 1], HIGH); Verzögerungszeit); DigitalWrite (LEDs [i], LOW);
Lass es uns brechen. Jeder LED-Pin wird in einem Array gespeichert:
const int leds [] = 1,2,3,4,5,6,7,8;
Ein Array ist im Wesentlichen eine Sammlung verwandter Elemente. Diese Elemente sind als konstant definiert (“const”), was bedeutet, dass sie später nicht mehr geändert werden können. Sie müssen keine Konstante verwenden (der Code funktioniert einwandfrei, wenn Sie ihn entfernen.) “const”), obwohl es empfohlen wird.
Auf Elemente eines Arrays kann mit eckigen Klammern (“[]”) und eine ganze Zahl, die als Index bezeichnet wird. Indizes beginnen bei Null, also “LEDs [2]” würde das dritte Element im Array zurückgeben - Pin 3. Arrays machen den Code schneller schreibbar und einfacher lesbar. Der Computer erledigt die harte Arbeit!
Eine for-Schleife wird verwendet, um jeden Pin als Ausgang festzulegen:
für (int i = 0; i <= totalLeds; ++i) pinMode(leds[i], OUTPUT);
Dieser Code befindet sich im “Konfiguration()” Funktion, da sie nur einmal beim Start des Programms ausgeführt werden muss. Für Schleifen sind sehr nützlich. Sie ermöglichen es Ihnen, denselben Code immer wieder mit einem anderen Wert auszuführen. Sie sind perfekt für die Arbeit mit Arrays. Eine ganze Zahl “ich” ist deklariert, und nur Code innerhalb der Schleife kann auf diese Variable zugreifen (dies ist bekannt als “Umfang”). Der Wert von i beginnt bei null und für jede Wiederholung der Schleife wird i um eins erhöht. Sobald der Wert von i kleiner oder gleich dem ist “totalLeds” Variable, die Schleife “geht kaputt” (stoppt).
Der Wert von i wird für den Zugriff auf die verwendet “leds” Array. Diese Schleife greift auf jedes Element im Array zu und konfiguriert es als Ausgabe. Sie könnten manuell eingeben “pinMode (pin, OUTPUT)” acht mal, aber warum acht Zeilen schreiben, wenn Sie drei schreiben können?
Während einige Programmiersprachen Ihnen sagen können, wie viele Elemente sich in einem Array befinden (normalerweise mit einer Syntax wie array.length), macht es Arduino nicht so einfach (es erfordert etwas mehr Mathematik). Da die Anzahl der Elemente im Array bereits bekannt ist, ist dies kein Problem.
In der Hauptschleife (Leere Schleife ()) sind zwei weitere für Schleifen. Beim ersten werden die LEDs von 1 - 8 EIN und dann AUS geschaltet. Die zweite Schleife schaltet die LEDs von 8 - 1 EIN und dann AUS. Beachten Sie, wie der aktuelle Pin eingeschaltet ist und der aktuelle Pin plus eins ebenfalls. Dadurch wird sichergestellt, dass immer zwei LEDs gleichzeitig eingeschaltet sind, wodurch der Scanner realistischer wirkt.
Zu Beginn jeder Schleife wird der Wert des Pots in die eingelesen “Zeit” Variable:
Zeit = analoges Lesen (2);
Dies wird zweimal in jeder Schleife ausgeführt. Dies muss ständig überprüft und aktualisiert werden. Wenn dies außerhalb der Schleifen wäre, würde es immer noch funktionieren, es würde jedoch eine kleine Verzögerung geben - es würde nur laufen, wenn die Ausführung einer Schleife abgeschlossen ist. Töpfe sind analog, also warum “analogRead (Pin)” wird eingesetzt. Dies gibt Werte zwischen null (Minimum) und 1023 (Maximum) zurück. Arduino ist in der Lage, diese Werte in etwas Nützlicheres umzuwandeln, sie sind jedoch perfekt für diesen Anwendungsfall.
Die Verzögerung zwischen dem Wechseln der LEDs (oder der Geschwindigkeit des Scanners) wird in Millisekunden (1/1000 Sekunden) eingestellt, sodass die maximale Zeit etwas mehr als 1 Sekunde beträgt.
Erweiterter Scanner
Nun, da Sie die Grundlagen kennen, schauen wir uns etwas komplexeres an. Dieser Scanner beleuchtet die LEDs paarweise von außen und arbeitet ein. Er wird dann umgekehrt und wechselt von innen nach außen. Hier ist der Code:
const int leds [] = 1,2,3,4,5,6,7,8; // Led-Pins const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Standardgeschwindigkeit void setup () // Initialisierung aller Ausgänge für (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) // Innerhalb der Paare scannen Zeit = analogRead (2); DigitalWrite (LEDs [i], HIGH); DigitalWrite (LEDs [(totalLeds - i) - 1], HIGH); Verzögerungszeit); DigitalWrite (LEDs [i], LOW); DigitalWrite (LEDs [(totalLeds - i) - 1], LOW); Verzögerungszeit);
Dieser Code ist etwas komplexer. Beachten Sie, wie beide Schleifen von Null auf gehen “halfLeds - 1” (3). Dies macht einen besseren Scanner. Wenn beide Schleifen von 4 - 0 und 0 - 4 gingen, blinken die gleichen LEDs zweimal in derselben Reihenfolge - dies würde nicht sehr gut aussehen.
Sie sollten jetzt einen funktionsfähigen Knight Rider LED-Scanner besitzen! Es wäre einfach, dies zu ändern, um mehr oder größere LEDs zu verwenden, oder ein eigenes Muster zu implementieren. Diese Schaltung ist sehr einfach zu einem Raspberry Pi zu portieren (neu bei Pi? Starten Sie hier Raspberry Pi: Das inoffizielle Lernprogramm Raspberry Pi: Das inoffizielle Lernprogramm. Ob Sie ein aktiver Pi-Besitzer sind, der mehr erfahren möchte, oder ein potenzieller Besitzer dieses Kredits -Kartenformat, dies ist kein Leitfaden, den Sie nicht verpassen möchten. Weitere Informationen) oder ESP8266: Triff den Arduino-Killer: ESP8266: Triff den Arduino-Killer: ESP8266 Wi-Fi für weniger als $ 10? Nun, das gibt es. Weiterlesen .
Bauen Sie ein Replikat-KITT? Ich würde gerne alle Dinge, die Knight Rider in den Kommentaren sehen.
Mehr erfahren über: Arduino, Elektronik.