Hast du dir jemals gewünscht, du hättest dein eigenes Knight Industries Two Thousand (KITT) Auto - weißt du, von Knight Rider? Machen Sie Ihren Traum einen Schritt näher an der Realität, indem Sie einen LED-Scanner bauen! Hier ist das Endergebnis:
Was du brauchst
Es gibt nicht viele Teile für dieses Projekt, und Sie haben vielleicht schon viele davon:
- 1 x Arduino UNO oder ähnlich
- 1 x Steckbrett
- 8 x rote LEDs
- 8 x 220 Ohm Widerstände
- 1 x 10k Ohm Potentiometer
- Männlich zu männlich Haken 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 Explains] Ich habe die Arduino-Open-Source-Hardware bereits hier auf MakeUseOf eingeführt, aber Sie werden mehr als nur das eigentliche Arduino benötigen, um etwas daraus zu bauen und tatsächlich anzufangen. Arduino "Starter Kits" sind ... Lesen Sie mehr es ist wahrscheinlich, dass Sie alle diese Teile haben (was können Sie mit einem Starterkit machen? 5 Einzigartige Arduino-Projekte für Anfänger, die Sie mit nur einem Starter-Kit machen können 5 Einzigartige Arduino-Projekte für Anfänger Kann mit nur einem Starter Kit Lesen Sie mehr).
Fast jeder Arduino funktioniert, sofern er über acht verfügbare Pins verfügt (noch nie zuvor ein Arduino verwendet wurde?) Erste Schritte mit Arduino: Ein Anfängerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Arduino ist eine Open-Source-Prototyping-Plattform für Elektronik, die auf flexiblen Modellen basiert, leicht zu bedienende Hard- und Software, die für Künstler, Designer, Hobbyisten und alle, die interaktive Objekte oder Umgebungen erstellen möchten, gedacht ist. Sie könnten ein Shift-Register verwenden Arduino-Programmierung - Mit Shift-Registern spielen (auch noch mehr LEDs) Arduino-Programmierung - Mit Shift-Registern spielen (auch noch mehr LEDs) Heute werde ich versuchen, Sie ein wenig über Schieberegister zu unterrichten. Dies sind ein ziemlich wichtiger Teil der Arduino-Programmierung, im Grunde, weil sie die Anzahl der Ausgänge, die Sie verwenden können, im Austausch für ... Lesen Sie mehr, um die LEDs zu steuern, obwohl dies nicht für dieses Projekt benötigt wird, da der Arduino genug Pins hat .
Bauplan
Dies ist ein sehr einfaches Projekt. Während es aus der großen Anzahl von Drähten komplex aussieht, ist jedes einzelne Teil sehr einfach. Jede Leuchtdiode (LED) ist mit ihrem eigenen Arduino-Pin verbunden. Dies bedeutet, dass jede LED einzeln ein- und ausgeschaltet werden kann. Ein Potentiometer ist mit den Arduino-Analog-Pins verbunden, mit denen die Geschwindigkeit des Scanners eingestellt wird.
Die Rennbahn
Verbinden Sie den äußeren linken Stift (mit Blick auf die Vorderseite, mit den Stiften an der Unterseite) des Potentiometers mit Masse. Verbinden Sie den gegenüberliegenden äußeren Stift mit + 5V. Wenn es nicht korrekt funktioniert, kehren Sie diese Stifte um. Verbinden Sie den mittleren Pin mit Arduino Analog in 2.
Verbinden Sie die Anode (langes Bein) jeder LED mit den digitalen Pins eins bis acht. Schließen Sie die Kathoden (kurzes Bein) an Arduino-Masse an.
Der Code
Erstelle eine neue Skizze und speichere 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; // 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); } }
Lass es uns kaputt machen. Jeder LED-Pin ist in einem Array gespeichert:
const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8};
Ein Array ist im Wesentlichen eine Sammlung von verwandten Elementen. Diese Elemente sind als Konstante ("const") definiert, was bedeutet, dass sie später nicht mehr geändert werden können. Sie müssen keine Konstante verwenden (der Code funktioniert perfekt, wenn Sie "const" entfernen), obwohl dies empfohlen wird.
Auf Elemente eines Arrays wird mit eckigen Klammern ("[]") und einer Ganzzahl namens Index zugegriffen. Indizes beginnen bei Null, so dass "leds [2]" das dritte Element im Array - Pin 3 - zurückgibt. Arrays machen Code schneller zu schreiben und einfacher zu lesen, sie machen den Computer die harte Arbeit!
Eine for-Schleife wird verwendet, um jeden Pin als Ausgabe einzurichten:
for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); }
Dieser Code befindet sich innerhalb der Funktion "setup ()", da er nur einmal beim Start des Programms ausgeführt werden muss. For-Schleifen sind sehr nützlich. Sie ermöglichen es Ihnen, den gleichen Code immer wieder mit einem anderen Wert auszuführen. Sie sind perfekt für die Arbeit mit Arrays. Eine ganze Zahl "i" wird deklariert, und nur Code innerhalb der Schleife kann auf diese Variable zugreifen (dies wird als "Geltungsbereich" bezeichnet). Der Wert von i beginnt bei Null, und für jede Iteration der Schleife wird i um eins erhöht. Sobald der Wert von i kleiner oder gleich der Variablen "totalLeds" ist, "bricht" die Schleife (stoppt).
Der Wert von i wird verwendet, um auf das "leds" -Array zuzugreifen. Diese Schleife greift auf jedes Element im Array zu und konfiguriert es als Ausgabe. Sie könnten achtmal "pinMode (pin, OUTPUT)" manuell eingeben, aber warum schreiben Sie acht Zeilen, 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 beinhaltet etwas mehr Mathematik). Da die Anzahl der Elemente im Array bereits bekannt ist, ist dies kein Problem.
Innerhalb der Hauptschleife ( Leere Schleife () ) sind zwei weitere für Schleifen. Die erste setzt die LEDs auf EIN und dann auf AUS von 1 - 8. Die zweite Schleife setzt die LEDs auf EIN und dann auf AUS von 8 - 1. Beachten Sie, wie der aktuelle Pin eingeschaltet ist und der aktuelle Pin plus eins ebenfalls eingeschaltet ist. Dies sorgt dafür, dass immer zwei LEDs gleichzeitig leuchten und der Scanner dadurch realistischer aussieht.
Zu Beginn jeder Schleife wird der Wert des Pots in die Variable "time" eingelesen:
time = analogRead(2);
Dies geschieht zweimal innerhalb jeder Schleife. Dies muss ständig überprüft und aktualisiert werden. Wenn dies außerhalb der Schleifen war, würde es immer noch funktionieren, allerdings würde es eine kleine Verzögerung geben - es würde nur laufen, wenn eine Schleife fertig ausgeführt ist. Töpfe sind analog, weshalb "analogRead (pin)" verwendet wird. Dies gibt Werte zwischen Null (Minimum) und 1023 (Maximum) zurück. Arduino kann diese Werte in etwas Nützlicheres umwandeln, 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 Sekunde) eingestellt, sodass die maximale Zeit etwas über 1 Sekunde beträgt.
Erweiterter Scanner
Jetzt, da Sie die Grundlagen kennen, schauen wir uns etwas Komplizierteres an. Dieser Scanner wird die LEDs paarweise von außen beleuchten und einarbeiten. Sie wird dann umgekehrt und von innen nach außen geführt. 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; // 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); } }
Dieser Code ist etwas komplexer. Beachten Sie, wie beide Loops von Null bis "HalfLeds - 1" (3) gehen. Dies macht einen besseren Scanner. Wenn beide Schleifen von 4 - 0 und 0 - 4 gingen, würden die gleichen LEDs zweimal in der gleichen Reihenfolge blinken - das würde nicht sehr gut aussehen.
Sie sollten jetzt einen funktionierenden 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 zu Pi? Starten Sie hier Raspberry Pi: Das inoffizielle Tutorial Raspberry Pi: Das inoffizielle Tutorial Ob Sie ein aktueller Pi-Besitzer sind, der mehr oder einen potenziellen Besitzer dieses Kredits erfahren möchte - Kartengröße Gerät, das ist kein Leitfaden, den Sie verpassen möchten. Lesen Sie mehr) oder ESP8266 Treffen Sie den Arduino Killer: ESP8266 Lernen Sie den Arduino Killer: ESP8266 Was ist, wenn ich Ihnen ein Arduino-kompatibles Dev-Board mit eingebaut sagte Wi-Fi für weniger als 10 $? Nun, da ist es. Weiterlesen .
Bauen Sie ein Replikat KITT? Ich würde gerne alle Dinge Knight Rider in den Kommentaren sehen.