Arduino Programmierung für Anfänger: Die Ampel Controller

Letzte Woche lernten wir etwas über die grundlegende Struktur eines Arduino-Programms und sahen uns das "blinkende" Beispiel genauer an. Hoffentlich haben Sie die Gelegenheit genutzt, mit Code zu experimentieren und die Timings anzupassen.

Letzte Woche lernten wir etwas über die grundlegende Struktur eines Arduino-Programms und sahen uns das "blinkende" Beispiel genauer an.  Hoffentlich haben Sie die Gelegenheit genutzt, mit Code zu experimentieren und die Timings anzupassen.
Werbung

Die Ampel ist ein lustiges kleines Projekt, das in weniger als einer Stunde abgeschlossen werden kann. Erfahren Sie, wie Sie Ihre eigenen erstellen - mit einem Arduino - und wie Sie die Schaltung für ein erweitertes Modell modifizieren.

Machen Sie sich keine Sorgen, wenn Sie noch nie zuvor ein Arduino verwendet haben. Wir haben einen Leitfaden für Anfänger. Erste Schritte mit Arduino: Ein Anfängerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Arduino ist eine Open-Source-Prototyping-Plattform für Elektronik. um Hardware und Software zu verwenden. Es richtet sich an Künstler, Designer, Bastler und alle, die interaktive Objekte oder Umgebungen erstellen möchten. Weiterlesen .

Hinweis : Dies ist das Neueste in einer Reihe von Lernprogrammen für Anfänger auf Arduino, der Open-Source-Plattform für die Entwicklung elektronischer Prototypen. Hier ist eine Liste der vorherigen Artikel in der Serie:

  • Was ist Arduino und was können Sie damit tun Was ist Arduino und was können Sie damit tun? Was ist Arduino und was können Sie damit machen? Der Arduino ist ein bemerkenswertes kleines elektronisches Gerät, aber wenn Sie noch nie zuvor eines verwendet haben, was genau sind sie und was können Sie mit einem tun? Weiterlesen
  • Was ist ein Arduino Starter Kit & was enthält es? Was ist in einem Arduino Starter Kit 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
  • Weitere coole Komponenten für den Kauf mit Ihrem Starterkit 8 Mehr coole Komponenten für Ihre Arduino-Projekte 8 Coolere Komponenten für Ihre Arduino-Projekte Sie denken also darüber nach, ein Arduino-Starterkit zu kaufen, fragen sich aber, ob einige grundlegende LEDs und Widerstände vorhanden sind genug, um Sie für das Wochenende beschäftigt zu halten? Wahrscheinlich nicht. Hier sind noch 8 ... Lesen Sie mehr
  • Erste Schritte mit Ihrem Arduino Starter Kit - Installieren von Treibern und Einrichten von Board & Port Erste Schritte mit Ihrem Arduino Starter Kit - Installieren von Treibern und Einrichten von Board & Port Erste Schritte mit Ihrem Arduino Starter Kit - Installieren von Treibern und Einrichten des Boards & Port Also, du hast dir ein Arduino-Starter-Kit gekauft und vielleicht noch ein paar andere coole Komponenten - was nun? Wie fängst du eigentlich an, dieses Arduino-Ding zu programmieren? Wie richte ich es ein ... Lesen Sie mehr
  • Ein genauerer Blick auf die Struktur einer Arduino-App und des Beispiel-Blink-Programms

Was du brauchst

Abgesehen von dem grundlegenden Arduino benötigen Sie:

  • Rote, gelbe und grüne LEDs.
  • Ein Steckbrett.
  • 6 x 220? Widerstände.
  • Verbindungskabel.
  • 1 x Druckschalter.
  • 1 x 10k? Widerstand

Fast jeder Arduino wird geeignet sein, vorausgesetzt es hat genug Pins. Stellen Sie sicher, dass Sie unseren Kaufleitfaden lesen Arduino Buying Guide: Welcher Rat sollte Sie bekommen? Arduino Einkaufsführer: Welches Board sollten Sie bekommen? Es gibt so viele verschiedene Arten von Arduino Boards da draußen, es wäre dir vergeben, wenn du verwirrt bist. Was sollten Sie für Ihr Projekt kaufen? Lassen Sie uns helfen, mit diesem Arduino Einkaufsführer! Lesen Sie mehr, wenn Sie nicht sicher sind, welches Modell Sie benötigen. Sie haben wahrscheinlich diese Teile in Ihrem Starter-Kit. Was ist in Ihrem Arduino Starter Kit? [Arduino Beginners] Was ist in deinem Arduino Starter Kit? [Arduino Beginners] Angesichts einer Kiste voller elektronischer Komponenten ist es einfach, überwältigt zu werden. Hier finden Sie eine Anleitung zu genau dem, was Sie in Ihrem Kit finden. Lesen Sie mehr bereits.

Ein einfaches Beispiel

Lass uns klein anfangen. Eine einfache, einfache Ampel ist ein guter Ausgangspunkt. Hier ist die Schaltung:

arduino_traffic_light

Verbinden Sie die Anode (langes Bein) jeder LED mit den digitalen Pins acht, neun und zehn (über einen 220? -Widerstand). Schließen Sie die Kathoden (kurzes Bein) an Arduino-Masse an.

Ich habe Fritzing benutzt, um diese Diagramme zu zeichnen. Es ist nicht nur einfach zu bedienen, es ist kostenlos!

Der Code

Beginnen Sie mit der Definition von Variablen, damit wir die Lichter nach Namen und nicht nach einer Zahl adressieren können. Starten Sie ein neues Arduino-Projekt und beginnen Sie mit diesen Zeilen:

int red = 10; int yellow = 9; int green = 8; 

Als nächstes fügen wir die Setup-Funktion hinzu, wo wir die roten, gelben und grünen LEDs als Ausgänge konfigurieren. Da Sie Variablen zur Darstellung der Pin-Nummern erstellt haben, können Sie nun auf die Pins anhand des Namens verweisen.

 void setup(){ pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); } 

Das war einfach. Jetzt für den schwierigen Teil - die eigentliche Logik einer Ampel. Erstellen Sie eine separate Funktion zum Ändern der Lichter (Sie werden später sehen, warum).

Wenn Sie mit der Programmierung beginnen, ist der Code selbst sehr rudimentär - er stellt die kleinsten logischen Details fest, die das größte Problem darstellen. Der Schlüssel, ein guter Programmierer zu sein, besteht darin, in der Lage zu sein, jeden Prozess zu betrachten und in seine grundlegenden Schritte zu zerlegen. Hier ist der Rest des Codes:

 void loop(){ changeLights(); delay(15000); } void changeLights(){ // green off, yellow on for 3 seconds digitalWrite(green, LOW); digitalWrite(yellow, HIGH); delay(3000); // turn off yellow, then turn red on for 5 seconds digitalWrite(yellow, LOW); digitalWrite(red, HIGH); delay(5000); // red and yellow on for 2 seconds (red is already on though) digitalWrite(yellow, HIGH); delay(2000); // turn off red and yellow, then turn on green digitalWrite(yellow, LOW); digitalWrite(red, LOW); digitalWrite(green, HIGH); delay(3000); } 

Erledigt! Jetzt laden und ausführen (stellen Sie sicher, dass Sie in den Menüs Tools > Port und Tools > Board die richtige Karte und den richtigen Port auswählen). Du solltest eine funktionierende Ampel haben, die sich alle 15 Sekunden ändert, so (beschleunigt):

Ein Fußgängerübergang

Nun, da Sie die Grundlagen kennen, verbessern wir sie. Fügen Sie eine Drucktaste für Fußgänger hinzu, um das Licht zu ändern, wann immer sie möchten:

arduino_traffic_light_with_button

Beachten Sie, dass die Ampel genau dem vorherigen Beispiel entspricht. Verbinden Sie die Taste mit dem digitalen Pin 12. Sie werden bemerken, dass der Switch eine hochohmige 10k hat? Widerstand daran befestigt, und Sie wundern sich vielleicht warum. Dies wird als Pull-Down-Widerstand bezeichnet. Es ist ein schwieriges Konzept, das man zuerst begreifen muss, aber ertragen Sie mit mir.

Ein Schalter lässt entweder den Strom fließen oder nicht. Dies scheint einfach genug zu sein, aber in einer Logikschaltung sollte der Strom immer in einem hohen oder niedrigen Zustand fließen (erinnern Sie sich - 1 oder 0, hoch oder niedrig). Sie könnten annehmen, dass ein Druckknopfschalter, der nicht wirklich gedrückt wird, als ein niedriger Zustand definiert wird, aber in Wirklichkeit wird er als "schwebend" bezeichnet, da überhaupt kein Strom gezogen wird.

In diesem schwebenden Zustand ist es möglich, dass ein falsches Lesen auftritt, wenn es mit elektrischen Interferenzen schwankt. Mit anderen Worten, ein schwebender Schalter gibt weder einen zuverlässigen Hoch- noch Niedrigzustands-Lesewert. Ein Pull-Down-Widerstand hält bei geschlossenem Schalter eine geringe Stromstärke aufrecht und gewährleistet dadurch einen genauen Low-State-Wert. In anderen Logikschaltungen können Sie stattdessen einen Pull-up-Widerstand finden - dies funktioniert nach dem gleichen Prinzip, aber umgekehrt, um sicherzustellen, dass das jeweilige Logikgatter standardmäßig hoch ist.

Jetzt, im Loop-Teil des Codes, anstatt die Lichter alle 15 Sekunden zu ändern, werden wir stattdessen den Status des Drucktastenschalters lesen und nur die Lichter ändern, wenn er aktiviert ist.

Der Code

Beginnen Sie mit dem Hinzufügen einer neuen Variablen zum Start des Programms:

 int button = 12; // switch is on pin 12 

Fügen Sie nun in der Setup-Funktion eine neue Zeile hinzu, um den Switch als Eingabe zu deklarieren. Ich habe auch eine einzige Linie hinzugefügt, um die Ampeln in der grünen Bühne zu starten. Ohne diese Anfangseinstellung wären sie ausgeschaltet, bis zum ersten Mal eine changelights () mit einer Funktion ausgelöst wurde.

 pinMode(button, INPUT); digitalWrite(green, HIGH); 

Ändern Sie stattdessen die gesamte Schleifenfunktion wie folgt:

 void loop() { if (digitalRead(button) == HIGH){ delay(15); // software debounce if (digitalRead(button) == HIGH) { // if the switch is HIGH, ie. pushed down - change the lights! changeLights(); delay(15000); // wait for 15 seconds } } } 

Das sollte es tun. Sie wundern sich vielleicht, warum die Taste zweimal gedrückt wird ( digitalRead (Taste) ), getrennt durch eine kleine Verzögerung. Dies wird als Entprellen bezeichnet. Ähnlich wie der Pull-Down-Widerstand für die Taste benötigt wird, stoppt diese einfache Überprüfung, dass der Code eine geringfügige Störung als Knopfdruck erkennt. Sie müssen das nicht tun (und es würde wahrscheinlich ohne es gut funktionieren), aber es ist eine gute Übung.

Wenn Sie innerhalb der if- Anweisung 15 Sekunden lang warten, können sich die Ampeln für mindestens diese Dauer nicht ändern. Sobald 15 Sekunden vergangen sind, startet die Schleife neu. Bei jedem Neustart der Schleife, lesen Sie den Zustand der Schaltfläche erneut, aber wenn sie nicht gedrückt wird, wird die if- Anweisung nie aktiviert, die Lichter ändern sich nie und es startet einfach wieder neu.

So sieht das aus (beschleunigt):

Eine Kreuzung

Lass uns ein fortgeschritteneres Modell ausprobieren. Anstelle eines Fußgängerübergangs ändern Sie Ihre Schaltung, um zwei Ampeln zu haben:

arduino_dual_traffic_light

Verbinden Sie die zweite Ampel mit den digitalen Pins 11, 12 und 13.

Der Code

Weisen Sie zunächst wie im ersten Beispiel Ihre neuen Ampel-Pins den Variablen zu und konfigurieren Sie sie als Ausgänge:

 // light one int red1 = 10; int yellow1 = 9; int green1 = 8; // light two int red2 = 13; int yellow2 = 12; int green2 = 11; void setup(){ // light one pinMode(red1, OUTPUT); pinMode(yellow1, OUTPUT); pinMode(green1, OUTPUT); // light two pinMode(red2, OUTPUT); pinMode(yellow2, OUTPUT); pinMode(green2, OUTPUT); } 

Aktualisieren Sie nun Ihre Schleife, um den Code aus dem ersten Beispiel zu verwenden (anstelle des Fußgängerübergangs):

 void loop(){ changeLights(); delay(15000); } 

Auch hier werden alle Arbeiten in der changeLights () - Funktion ausgeführt. Statt rot > rot & gelb > grün wechselt dieser Code die Ampeln. Wenn einer auf grün steht, ist der andere rot. Hier ist der Code:

 void changeLights(){ // turn both yellows on digitalWrite(green1, LOW); digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); delay(5000); // turn both yellows off, and opposite green and red digitalWrite(yellow1, LOW); digitalWrite(red1, HIGH); digitalWrite(yellow2, LOW); digitalWrite(red2, LOW); digitalWrite(green2, HIGH); delay(5000); // both yellows on again digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); digitalWrite(green2, LOW); delay(3000); // turn both yellows off, and opposite green and red digitalWrite(green1, HIGH); digitalWrite(yellow1, LOW); digitalWrite(red1, LOW); digitalWrite(yellow2, LOW); digitalWrite(red2, HIGH); delay(5000); } 

So sieht das aus (beschleunigt):

Das ist es für diese Zeit, also hoffe ich, dass Sie viel gelernt haben und Spaß beim Schreiben hatten. Sie haben Ihre Hände schmutzig gemacht mit ein paar LEDs und Widerständen, sowie einen Schalter mit einem Pull-Down-Widerstand hinzugefügt - hoffentlich haben Sie verstanden, warum wir einen brauchen. Spielen Sie mit dem Code herum, passen Sie ihn an und vor allem Spaß. Wenn Sie Ergänzungen oder Änderungen vornehmen, lassen Sie uns das in den Kommentaren wissen.

Bildquelle: androsvector über Shutterstock.com

In this article