Ampelanlage mit Arduino

Ob für die Modellbahn, LEGO oder den Schulunterricht, eine funktionierende Ampelanlage ist einfach super! Sie kann mit unter sehr komplex werden. Hier zeige ich dir, wie du die Ampelanlage einer einfachen Kreuzung mit Fußgängerampel mit Arduino aufbauen kannst.

Bauteile

  • LEDs (Dieses 500 LED-Set hab ich benutzt).
  • 10 Widerstände 220 Ohm

Schaltplan

Ampel Schaltplan

Natürlich können auch die anderen Ampeln der Anlage einfach parallel betrieben werden. Dazu bitte auch den Hinweis weiter unten beachten.

Hintergrund

Welche Ampelphasen gibt es denn bei so einer Ampel? Sehen wir uns die Kreuzung mal genauer an. 

Genau wie die Animation könnte man auch die Ampelanlage als Bild betrachten. Die einzelnen Lampen sind die Pixel und die sind entweder an oder aus (Bitmap). Und wie bei einer Animation ist jeder Zustand ein Frame, sozusagen ein Standbild. Welche Bilder sind das denn genau?

Links sind also die Bilder, rechts ist bereits ein Array-Code. Es ist ein Zweidimensionales Array. Wir können es genau so verwenden und müssen nur bestimmen, welcher »State« (oder Frame) gezeigt werden soll. 

Ampelphasen Kreuzung

Um nicht so viel Code schreiben zu müssen, legen wir eine extra Methode an:

void zeigeAmpelphase() {
  for (int i = 0; i < 10; i++) {
    digitalWrite(ledPins[i], ampelphasen[myState][i]);
  }
  delay(wartezeiten[myState]);
}

Die For-Schleife sorgt dafür, dass jede LED des Arrays ausgewertet wird. 

Da nicht jede Ampelphase gleich lang angezeigt wird, gibt es ein weiteres Array mit den Wartezeiten der jeweiligen Ampelphase. Diese wird ebenfalls in der zeigeAmpelphase()-Methode ausgewertet. 

Code

Der gesamte Code sieht so aus:

int ledPins[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};

int ampelphasen[10][10] = {
  {1, 0, 0, 0, 1, 0, 0, 1, 1, 0},  // state 0
  {1, 0, 0, 1, 0, 0, 0, 1, 1, 0},  // state 1
  {1, 0, 0, 1, 0, 0, 1, 0, 1, 0},  // state 2
  {1, 0, 0, 1, 0, 1, 0, 0, 1, 0},  // state 3
  {1, 1, 0, 1, 0, 1, 0, 0, 1, 0},  // state 4
  {0, 0, 1, 1, 0, 1, 0, 0, 0, 1},  // state 5
  {0, 0, 1, 1, 0, 1, 0, 0, 1, 0},  // state 6
  {0, 1, 0, 1, 0, 1, 0, 0, 1, 0},  // state 7
  {1, 0, 0, 1, 0, 1, 0, 0, 1, 0},  // state 8
  {1, 0, 0, 1, 0, 1, 1, 0, 1, 0}   // state 9
};

int wartezeiten[10] = {5000, 2000, 500, 2000, 500, 5000, 2000, 500, 2000, 500};

int myState = 0;

void setup() {
  for (int i = 0; i < 10; i++) {     
    pinMode(ledPins[i], OUTPUT);
  }
}

void zeigeAmpelphase() {
  for (int i = 0; i < 10; i++) {
    digitalWrite(ledPins[i], ampelphasen[myState][i]);
  }
  delay(wartezeiten[myState]);
}

void loop() {
  zeigeAmpelphase();
  myState++;
  if (myState >= 10) myState = 0;
}

Hinweis: Ein digitaler Kanal des Arduino-Boards kann bis zu 60 mA liefern. Alle Pins zusammen sind für maximal 200 mA ausgelegt. Bei 5mm Signal-LEDs beträgt der Strom bei einem Vorwiderstand von 220 Ohm 12 – 15 mA. Es können also pro digitalen Pin 4 LEDs gleichzeitig betrieben werden und nicht mehr als 13 LEDs gleichzeitig leuchten. Ansonsten musst du eine Verstärkerschaltung einbauen.

3 thoughts on “Ampelanlage mit Arduino

  1. Hallo, habe die Schaltung mit dem Arduinio aufgebaut und sie funktioniert wunderbar.
    Nun möchte ich allerdings die Schaltung auf meiner Modellbahnanlage einsetzen und versuche, den Code auf einen ATTiny 4313 aufzuspielen. Es funktioniert aber nicht. Die LED`s leuchten teilweise nur konstant. Was mache ich falsch ? Oder kann man den Code nicht auf einen 4313 übertragen? Für kurze Info wäre ich dankbar.

    1. Hallo Wilfried, vielen Dank für Deine Frage. Klingt ja spannend. Ich würde mich über ein paar Fotos der Modellbahn-Ampel freuen 😉 Das Programm sollte eigentlich auch auf dem ATTiny 4313 laufen. Da passieren jetzt keine besonders verrückten Sachen im Code. Hast Du mal einen anderen ATTiny probiert? Funktioniert ein normales blink()-Programm wie erwartet?

      Liebe Grüße

      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.