Anzeige

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. Anzeige

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.

Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book an!

Darin findest du die beliebtesten Arduino-Projekte von StartHardware. Jedes Projekt umfasst Schaltplan, Bauteile, Beschreibung und Code. Für Einsteiger gibt es ein Arduino-Schnellstart-Kapitel und einen kompakten Programmierkurs. Zusätzlich findest du Zwischenkapitel mit Expertenwissen zu den Komponenten, die verwendet werden. Alle Code-Beispiele gibt es natürlich als Download.

Weitere Informationen findest du auf der Produktseite. Klicke jetzt auf den Button, um Details anzusehen.


Welches Projekt würdest du gern auf dieser Seite finden? Worüber soll ich schreiben? *


Stefan Hermann

Ich bin Stefan und arbeite seit 2007 mit Arduino. Als Designer und Produktmanager setze ich das Board in erster Linie zum Bau von Prototypen ein. Hier teile ich meine Faszination und Erfahrung mit dir!