Ampel mit Arduino für Autos und Fußgänger

Eine Ampel mit Arduino bauen ist ganz einfach. Es gibt vier Ampelphasen: Grün – Gelb – Rot – Rot-Gelb.

Achtung! Neue Version hier: Ampelanlage mit Arduino

Ampel Schaltung

Arduino Schaltung Ampel Verkehrsampel

Code

int ampelRotPin = 12;
int ampelGelbPin = 11;
int ampelGruenPin = 10;

void setup() {
  pinMode(ampelRotPin, OUTPUT);
  pinMode(ampelGelbPin, OUTPUT);
  pinMode(ampelGruenPin, OUTPUT);
}

void loop() {
  // gruen
  digitalWrite(ampelRotPin, LOW);
  digitalWrite(ampelGelbPin, LOW);
  digitalWrite(ampelGruenPin, HIGH);
  digitalWrite(fgRotPin, HIGH);
  digitalWrite(fgGruenPin, LOW);
  delay(5000);
  // gelb
  digitalWrite(ampelRotPin, LOW);
  digitalWrite(ampelGelbPin, HIGH);
  digitalWrite(ampelGruenPin, LOW);
  digitalWrite(fgRotPin, HIGH);
  digitalWrite(fgGruenPin, LOW);
  delay(1000);
  // rot
  digitalWrite(ampelRotPin, HIGH);
  digitalWrite(ampelGelbPin, LOW);
  digitalWrite(ampelGruenPin, LOW);
  digitalWrite(fgRotPin, LOW);
  digitalWrite(fgGruenPin, HIGH);
  delay(5000);
  // rot-gelb
  digitalWrite(ampelRotPin, HIGH);
  digitalWrite(ampelGelbPin, HIGH);
  digitalWrite(ampelGruenPin, LOW);
  digitalWrite(fgRotPin, HIGH);
  digitalWrite(fgGruenPin, LOW);
  delay(1000);
}

Funktionsweise

Im Grunde ist das ein erweitertes blink() Beispiel. Als erstes deklarieren wir drei Pins als Outputs. Hier werden die LEDs (mit Vorwiderstand 220 Ohm) angeschlossen. Bei jeder Ampelphase schalten wir LEDs ein (HIGH) oder aus (LOW). Dazwischen warten wir einfach mit delay(wartezeit) eine gewisse Zeit ab.

Fußgängerampel

Jetzt erweitern wir die Schaltung durch einen Button und zwei weitere LEDs für die Fußgängerampel. Wird der Button gedrückt, schaltet sich unsere Ampelanlage auf Grün für die Fußgänger.

Ampel Schaltung mit Button

Arduino Ampel Schaltung mit Button für Fußgänger

Code

int ampelRotPin = 12;
int ampelGelbPin = 11;
int ampelGruenPin = 10;

int fgRotPin = 9;
int fgGruenPin = 8;

int fgButtonPin = 2;

void setup() {
  pinMode(ampelRotPin, OUTPUT);
  pinMode(ampelGelbPin, OUTPUT);
  pinMode(ampelGruenPin, OUTPUT);
  
  pinMode(fgRotPin, OUTPUT);
  pinMode(fgGruenPin, OUTPUT);
  pinMode(fgButtonPin, INPUT);
}

void loop() {
  // gruen
  digitalWrite(ampelRotPin, LOW);
  digitalWrite(ampelGelbPin, LOW);
  digitalWrite(ampelGruenPin, HIGH);
  digitalWrite(fgRotPin, HIGH);
  digitalWrite(fgGruenPin, LOW);

  if (digitalRead(fgButtonPin) == LOW) {
    // gelb
    digitalWrite(ampelRotPin, LOW);
    digitalWrite(ampelGelbPin, HIGH);
    digitalWrite(ampelGruenPin, LOW);
    digitalWrite(fgRotPin, HIGH);
    digitalWrite(fgGruenPin, LOW);
    delay(1000);
    // rot
    digitalWrite(ampelRotPin, HIGH);
    digitalWrite(ampelGelbPin, LOW);
    digitalWrite(ampelGruenPin, LOW);
    digitalWrite(fgRotPin, LOW);
    digitalWrite(fgGruenPin, HIGH);
    delay(5000);
    // rot-gelb
    digitalWrite(ampelRotPin, HIGH);
    digitalWrite(ampelGelbPin, HIGH);
    digitalWrite(ampelGruenPin, LOW);
    digitalWrite(fgRotPin, HIGH);
    digitalWrite(fgGruenPin, LOW);
    delay(1000);
  }
}

Funktionsweise

Wir erweitern den Code durch die Deklaration von zwei LEDs als Outputs und einem Button als Input. Die Ampelphasen bleiben gleich, werden jedoch durch die Ausgabe der Fußgänger LEDs erweitert. Die Ampel ist für die Autofahrer immer grün bis der Button gedrückt wird. Diese Prüfung lässt sich leicht mit der if-Abfrage realisieren. Die Funktion digitalRead(fgButtonPin) liefert immer HIGH solange bis der Button gedrückt wird. Ist der Button gedrückt, liefert die Funktion LOW. Mehr Informationen dazu im Kapitel Digital In.

Alle Grafiken mit Fritzing erstellt.

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 1

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Du willst noch tiefer in die Materie einsteigen? Dann präsentiere ich dir die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!