Modellbau Baustellen-Ampelsteuerung

Hardware

SchaltungNeben einem Digispark braucht man für die Umsetzung einer Baustellen-Ampel nur noch LED's in rot, gelb und grün sowie passende Vorwiderstände. Die Verbindung mit dem Digispark ist denkbar einfach wie man im nebenstehenden Bild erkennen kann.

Die Größe der Vorwiderstände hängt von den Daten der verwendeten LED's ab. Hierzu muss man zwei Werte der LED kennen: die sog. Durchlass-Spannung und den Strom der durch die LED fließt. Wenn man diese beiden Werte kennt, kann man nach der folgenden Formel einfach den benötigten Vorwiderstand ausrechnen:

 RV = VCC - ULED

ILED
  • RV: Vorwiderstand in Ohm
  • VCC: Versorgungsspannung der Schaltung (bei Verwendung des Digispark 5 V)
  • ULED: Durchlass-Spannung der LED
  • ILED: durch die LED fließender Strom

Bitte beachten Sie beim Nachbau der Schaltung, dass die Werte für die Durchlass-Spannung und den fließenden Strom je nach Farbe der LED (und der sonstigen Bauart) variieren. Bei Verwendung von 3mm Standard-LED's können sich z. B. die folgenden Werte ergeben (Bauteil-Wert ist auf die nächst höhere handelsübliche Größe aufgerundet):

Farbe VCC ILED RV Bauteil-Wert
Rot 1,6 V 15 mA 227 Ohm 270 Ohm
Gelb 2,2 V 20 mA 150 Ohm 150 Ohm
Grün 2,1 V 30 mA 96 Ohm 100 Ohm

 Bitte beachten Sie ferner, dass der Digispark nur in der Lage ist, rund 40 mA pro Ausgang zur Verfügung zu stellen. Wenn Sie also mehr als eine LED pro Ausgang anschließen möchten, müssen Sie zum Schalten der dann höheren Ströme z. B. einen Transistor verwenden.

Zusätzlich muss die Schaltung noch mit Spannung versorgt werden. Hierzu kann direkt die im Modellbau übliche Gleichspannung von 12 V verwendet werden. Hierzu den Minus-Pol der Spannungsquelle mit dem GND-Anschluss des Digispark und den Plus-Pol mit seinem VIN-Eingang verbinden. Wenn keine 12 V zur Verfügung stehen sollten, kann auch eine andere Versorgungsspannung im Bereich von 7 bis 35 Volt verwendet werden. Wichtig ist nur, dass es sich dabei um eine Gleichspannungs-Quelle handeln muss.

Ein komplettes Hardware-System um auch komplexerer Aufgaben umzusetzen, haben wir in unserem Artikel Modellbau Licht-Steuerung beschrieben. Auch diese Steuerung beruht im Kern natürlich wieder auf einem Digispark, um Ihnen die Anpassung an Ihre eignen Bedürfnisse so leicht wie möglich zu machen. Die benötigten Komponenten für Ihre individuelle Steuerung finden Sie natürlich auch in Online-Shop.

 

Software

// per DEFINE-Anweisung die Dauer der einzelnen Ampel-Phasen festlegen
// bei DEFINE-Anweisungen darauf achten, dass diese NICHT mit einem
// Semikolon abgeschlossen werden dürfen!!!
#define RotPhase 10000    // 10 Sekunden Rot
#define GelbPhase 1000    // 1 Sekunde
#define GruenPhase 15000  // 15 Sekunden Grün

// Setup-Routine: wird einmalig beim Start der Anwendung aufgerufen
void setup() {               
  // Alle Pins des Mikrocontrollers als Ausgang konfigurieren
  // Mit dem DDRD Register können alle PINs eines Ports
  // auf einmal gesetzt werden
  DDRB = 0b00111111;
}

// Hauptprogramm: diese Schleife wird kontinuierlich durchlaufen
void loop() {
  // In diesem Beispiel verwenden wir zum Setzen der PINs nicht
  // die digitalWrite Methode sondern zeigen, wie alle PINs
  // auf einmal mit setzen können, indem das entsprechende
  // Bit-Muster direkt in das Port-Register geschrieben wird
  // das Bit ganz rechts im Muster steht für P0, das zweite
  // von rechts für P1 unsw.

  // Ampel 1 = Rot, Ampel 2 = Rot
  // Warten, bis Baustelle wieder frei ist
  PORTB = 0b00001001;
  delay(RotPhase);
 
  // Ampel 1 = Rot + Gelb, Ampel 2 = Rot
  PORTB = 0b00001011;
  delay(GelbPhase);
 
  // Ampel 1 = Grün, Ampel 2 = Rot
  PORTB = 0b00001100;
  delay(GruenPhase);
 
  // Ampel 1 = Gelb, Ampel 2 = Rot
  PORTB = 0b00001010;
  delay(GelbPhase);
 
  // Ampel 1 = Rot, Ampel 2 = Rot
  // Warten, bis Baustelle wieder frei ist
  PORTB = 0b00001001;
  delay(RotPhase);
 
  // Ampel 1 = Rot, Ampel 2 = Rot + Gelb
  PORTB = 0b00011001;
  delay(GelbPhase);
 
  // Ampel 1 = Rot, Ampel 2 = Grün
  PORTB = 0b00100001;
  delay(GruenPhase);
 
  // Ampel 1 = Rot, Ampel 2 = Gelb  
  PORTB = 0b00010001;
  delay(GelbPhase);
}

Im Gegensatz zum einfachen Blink-Beispiel aus dem Beitrag "erste Schritt mit dem Digispark", verwenden wir in diesem Skript eine kompaktere Schreibweise zum konfigurieren der PINs als Ausgänge bzw. zum setzen PIN-Zustände (durch direkten Zugriff auf PORTB). Dadurch wird der Programm-Code insgesamt kompakter aber ggf. auch etwas schwerer zu lesen. Welche Methode Sie für Ihre Programmierung verwenden ist natürlich vollkommen Ihnen überlassen.