Freitag, 20. Dezember 2019

Arduino UNO R3 / ATtiny - Sketch für Faller 120120 Stellwerk

Faller H0 120120 - Stellwerk "Mittelstadt"

In meinem Post zum Faller Stellwerk 120120 Klick hier! habe ich das beleuchtete Stellpult gezeigt. Es werden diverse Weichenstellungen und Fahrstrassen simultan angezeigt. Die Steuerung der LED´s übernimmt ein ATtiny84, den ich mit dem Arduino UNO R3 programmiert habe. Eine Anleitung dazu habe ich hier gepostet: ATtiny 84 mit dem Arduino UNO R3 programmieren.

ATtiny84 Ports vs. SMD LED´s!


Die Schaltung habe ich auf eine Streifenrasterplatine aufgebaut. Zu sehen sind auf der Platinenoberseite der ATtiny84A, ein Spannungsregler 12V für die direkte Ansteuerung der SMD LED - Aussenlampe und der Spannungsregler 5V für die Spannungsversorgung des ATtiny84A und die daran angeschlossenen SMD LED´s. Auf der Platinenunterseite (nicht im Bild) befinden sich die benötigten SMD Widerstände. Damit die Ausleuchtung nicht so hell ist habe ich für die SMD LED´s 0604 Orange je 1kOhm und für die 0604 Warmweiß je 4,7kOhm verwendet.


Die Funktion zeige ich als kleines Video auf YouTube:


Nachfolgend veröffentliche ich den Sketch, gültig für den ATtiny 84A, programmiert mit dem Arduino UNO R3.
Anmerkung: Port 6 ist für die dimmbare Innenbeleuchtung (SMD LED´s)!

// ATtiny84 Stellwerk/Tableau
// Programming by https://meine-modelleisenbahn-digitalisiert.blogspot.com
// © 2019
//
// An dieser Stelle noch der Hinweis:
// der Nachbau geschieht auf eigene Gefahr.
// Ich übernehme keine Haftung für eventuell entstandene Schäden!
//

const byte InnenLED = 6; //LED für Innenbeleuchtung

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

int Stellwerkphasen[24][8] = {
  {1, 0, 0, 0, 0, 0, 1, 0}, // state 1   5000
  {1, 0, 1, 0, 0, 0, 1, 0}, // state 2   2000
  {1, 0, 1, 1, 0, 0, 1, 0}, // state 3   6000
  {0, 1, 1, 1, 0, 0, 1, 0}, // state 4   4000
  {0, 1, 1, 1, 1, 0, 1, 0}, // state 5   2000
  {0, 1, 1, 1, 1, 1, 1, 0}, // state 6   6000
  {0, 1, 1, 1, 1, 1, 0, 1}, // state 7   4000
  {0, 1, 0, 1, 1, 1, 0, 1}, // state 8   3000
  {0, 1, 0, 0, 1, 1, 0, 1}, // state 9   5000
  {0, 1, 0, 0, 1, 1, 1, 0}, // state 10  5000
  {0, 1, 0, 0, 0, 1, 1, 0}, // state 11  2500
  {0, 1, 0, 0, 0, 0, 1, 0}, // state 12  6000
  {0, 1, 0, 0, 0, 0, 0, 1}, // state 13  5000
  {0, 1, 0, 1, 0, 0, 0, 1}, // state 14  2000
  {0, 1, 1, 1, 0, 0, 0, 1}, // state 15  5000
  {1, 0, 1, 1, 0, 0, 0, 1}, // state 16  6000
  {1, 0, 1, 0, 0, 0, 0, 1}, // state 17  2000
  {1, 0, 0, 0, 0, 0, 0, 1}, // state 18  6000
  {0, 1, 0, 0, 0, 0, 0, 1}, // state 19  3000
  {0, 1, 0, 0, 1, 0, 0, 1}, // state 20  2500
  {0, 1, 0, 0, 1, 1, 0, 1}, // state 21  2500
  {0, 1, 0, 0, 1, 1, 1, 0}, // state 22  3000
  {0, 1, 0, 0, 0, 1, 1, 0}, // state 23  2000
  {0, 1, 0, 0, 0, 0, 1, 0}  // state 24  2000
};

int wartezeiten[24] = {5000, 2000, 6000, 4000, 2000, 6000, 4000, 3000, 5000, 5000, 2500, 6000, 5000, 2000, 5000, 6000, 2000, 6000, 3000, 2500, 2500, 3000, 2000, 2000};

int myState = 0;

void setup() {

pinMode(InnenLED, OUTPUT); //LED am Ausgang PB6 deklariert

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

void zeigeStellwerkphase() {
  for (int i = 0; i < 24; i++) {
    digitalWrite(ledPins[i], Stellwerkphasen[myState][i]);
  }
  delay(wartezeiten[myState]);
}

void loop() {

analogWrite(InnenLED, 100); //gedimmte Innenbeleuchtung

  zeigeStellwerkphase();
  myState++;
  if (myState >= 24) myState = 0;
}

An dieser Stelle noch der Hinweis:
der Nachbau geschieht auf eigene Gefahr.
Ich übernehme keine Haftung für eventuell entstandene Schäden!


Keine Kommentare:

Kommentar veröffentlichen