15 Dez

Arduino Tutorial: Alternative Ampel

Dieser Post beinhaltet ein Tutorial für eine sehr einfache Alternative Ampel mit Arduino. Alternativ deshalb, weil sie nicht einfach nur die Farben rot, gelb und grün nacheinander anzeigt. Stattdessen werden „echte“ Ampelphasen durchlaufen: nach rot erst rot-gelb, dann grün, dann gelb, dann wieder rot. Allerdings schneller als im Straßenverkehr. 😉

Arduino Tutorial: Alternative Ampel

 

Per Default ist diese Arduino-Ampel rot. Wenn der Knopf gedrückt wurde, dauert es drei Sekunden, bis die rot-gelbe Ampelphase beginnt. Eine Sekunde später endet diese, stattdessen startet die grüne Ampelphase. Auf  vier Sekunden grün folgen zwei Sekunden gelb. Schließlich wird die Ampel wieder rot. Sobald der Knopf gedrückt wird, durchläuft die Ampel die Phasen erneut.

 

Arduino-Ampel: Aufbau im Detail

Fritzing-Grafik: Alternative Ampel

Alternative Ampel – dargestellt mit Fritzing

Benötigt werden:

  • 3 LEDs: Je eine rote, gelbe und grüne. Ampel eben. 😉
  • 1 Pushbutton
  • 3 Widerstände, je 220 Ω
  • 1 Widerstand 10 kΩ
  • Arduino Uno, Breadboard und Kabel

GND wird mit der blauen Lochreihe verbunden.
Die drei LEDs werden als Ampel eingesteckt. Jede bekommt einen 220Ω-Widerstand, der die Kathode (Minus, GND, kurzes Beinchen) mit der blauen Lochreihe verbindet.
Von oben nach unten werden nun die Anoden (Plus, langes Beinchen) jeweils mit einem PIN verbunden: Anode rot mit Pin 12, Anode gelb mit Pin 11, Anode grün mit Pin 10.
Der Pushbutton bekommt an einer Seite eine Verbindung zum 5V-Pin vom Board. Die andere Seite wird mit Pin 9 verbunden, außerdem mittels 10 kΩ-Widerstand mit der blauen Lochreihe.

 

Der Code zur Ampel

Ich habe möglichst viel kommentiert. Um ehrlich zu sein: So viele Kommentare in so wenig Code hab ich, glaube ich, seit meinem Informatik-LK nicht mehr gemacht. Aber als Tutorial soll es schließlich auch für Anfänger geeignet und komplett nachvollziehbar sein… 😉

 

// Alternative Arduino-Ampel
// Aufbau unter http://fraunerd.de/tutorial-alternative-arduino-ampel

const int Pushbutton = 9; //Pushbutton an Pin 9
const int redLED = 12; //Pin für rote LED ist 12
const int yellowLED = 11; //Pin für gelbe LED ist 11
const int greenLED = 10; //Pin für grüne LED ist 10

void setup() {
 pinMode(Pushbutton,INPUT); //Pushbutton-Pin als Input initialisiert 
 pinMode(redLED,OUTPUT); //redLED-Pin als Output initialisiert
 pinMode(yellowLED,OUTPUT); //yellowLED-Pin als Output initialisiert
 pinMode(greenLED,OUTPUT); //greenLED-Pin als Output initialisiert
 
 //Ausgangsstatus: Ampel ist auf rot
 digitalWrite(redLED,HIGH);
}

void loop() {
 //Auslesen des Pushbutton-Pins
 if (digitalRead(Pushbutton) == HIGH)
 {
 //3 Sekunden = 3000 ms warten, gelbe LED einschalten
 delay(3000);
 digitalWrite(yellowLED,HIGH);
 //1 Sekunde warten, gelbe und rote LED ausschalten
 delay(1000);
 digitalWrite(redLED,LOW);
 digitalWrite(yellowLED,LOW);
 //grüne LED einschalten, 4 Sekunden warten, ausschalten
 digitalWrite(greenLED,HIGH);
 delay(4000);
 digitalWrite(greenLED,LOW);
 //gelbe LED einschalten, 2 Sekunden warten, ausschalten
 digitalWrite(yellowLED,HIGH);
 delay(2000);
 //gelbe LED ausschalten, rote LED einschalten
 digitalWrite(yellowLED,LOW);
 digitalWrite(redLED,HIGH);
 }
 }