Hallo zusammen,
nachdem ich an anderer Stelle bei der Anlagenvorstellung meiner Modellbahn Gletschmodell schon angedeutet hatte, daß ich die Signalanlage meines Bahnübergangs mit dem Kleincomputer Raspberry Pi realisiert habe, möchte ich euch nun hier nähere technische Infos dazu mitteilen.
Aus technischer Neugier wollte ich dabei einen für mich neuen Weg gehen und den mir bislang nicht näher bekannten Kleincomputer Raspberry Pi 2 verwenden (die Version 3 gab es damals noch nicht). Als erstes hatte ich mir ein umfassendes Handbuch (ISBN 978-3-8362-3795-6) dazu gekauft sowie ein Breadboard und habe kleine Testschaltungen mit LEDs und Tastern aufgebaut. Als Betriebssystem habe ich mich für Raspbian, einem Linux Derivat speziell für den RasPi, entschieden. Als Programmiersprache kommt Python zum Einsatz.
Der RasPi sollte dabei sowohl die optische als auch die akustische Steuerung übernehmen. Es gab dabei 2 Ampeln mit jeweils einer gelben und einer roten LED anzusteuern und während die LEDs in Betrieb waren, sollte auch die Warnglocke über eine Lautsprecher ertönen. Die Auslösung der Signale erfolgt von beiden Seiten über Reflex-Optokoppler TFK 240 (Ersatz für CNY70), die zwischen Schiene und Zahnstange platziert wurden (siehe unten).
Nach dem Einbau zeigte sich, dass eine Auslösung nur dann erfolgte, wenn unter der Lok bzw. Wagen eine reflektierende Metallfläche war. Somit platzierte ich an der Unterseite der Loks und einigen Wagen jeweils ein Stück Doppelklebeband mit Alufolie.
Hier das Python Script, das ich geschrieben habe. Experten werden sicherlich noch viele Optimierungsmöglichkeiten sehen, aber als Anfänger war ich zufrieden, dass alles wie geplant funktioniert.
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Steuerung für Signalisierung Bahnuebergang der Modellbahn Gletschmodell
#2 Optokoppler als Melder, sowie 2 Ampeln mit Gelb/Rotlicht sowie akustische Signale per mp3 File. Des weiteren ueber Taster weitere Geraeusche abspielbar.
import RPi.GPIO as GPIO
import time
import subprocess
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
rot1=12
rot2=15
gelb2=11
gelb1=13
Melder1=16
Melder2=18
T1=29; global T1_an; T1_an=False
T2=31
T_Shutdown=40
GPIO.setup(gelb1, GPIO.OUT, initial=True);#True=bleibt aus
GPIO.setup(gelb2, GPIO.OUT, initial=True);
GPIO.setup(rot1, GPIO.OUT, initial=True);
GPIO.setup(rot2, GPIO.OUT, initial=True)
GPIO.setup(Melder1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(Melder2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(T1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(T2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(T_Shutdown, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Interrupts definieren:
def Ampel(channel):
if GPIO.input(Melder1)==GPIO.LOW or GPIO.input(Melder2)==GPIO.LOW:
print("Melder aktiv")
subprocess.Popen(["omxplayer","--loop","/home/pi/BUGlocke_lang.mp3"], stdin=subprocess.PIPE)
for i in range(3):
GPIO.output (gelb1, 0)
GPIO.output (gelb2, 0)
time.sleep(0.5)
GPIO.output (gelb1, 1)
GPIO.output (gelb2, 1)
time.sleep(0.5)
print("Blinklicht aus und Rotlicht mind. 8s an")
GPIO.output (rot1, 0)
GPIO.output (rot2, 0)
time.sleep(8)
while GPIO.input(Melder1)==GPIO.LOW or GPIO.input(Melder2)==GPIO.LOW:
print("Melder noch aktiv")
print("Melder beide aus. Restwartezeit laeuft...")
time.sleep(5)
print("Rotlicht aus")
GPIO.output (rot1, 1)
GPIO.output (rot2, 1)
time.sleep(0.5)
os.system('killall omxplayer.bin')
def Shutdown(channel):
os.system('sudo shutdown -h now')
def T1(channel):
print("Taster 1 gedrueckt")
subprocess.Popen(["omxplayer","/home/pi/Kuhglocken.mp3"], stdin=subprocess.PIPE)
def T2(channel):
print("Taster 2 gedrueckt")
subprocess.Popen(["omxplayer","/home/pi/Lokpfiff.mp3"], stdin=subprocess.PIPE)
GPIO.add_event_detect(16, GPIO.BOTH, callback=Ampel)
GPIO.add_event_detect(18, GPIO.BOTH, callback=Ampel)
GPIO.add_event_detect(40, GPIO.FALLING, callback=Shutdown,bouncetime=200)
GPIO.add_event_detect(29, GPIO.FALLING, callback=T1,bouncetime=2000)
GPIO.add_event_detect(31, GPIO.FALLING, callback=T2,bouncetime=2000)
for i in range (4):
GPIO.output (gelb1, 0)
GPIO.output (gelb2, 0)
GPIO.output (rot1, 0)
GPIO.output (rot2, 0)
time.sleep(0.1)
GPIO.output (gelb1, 1)
GPIO.output (gelb2, 1)
GPIO.output (rot1, 1)
GPIO.output (rot2, 1)
time.sleep(0.3)
try:
while True:
print("Schleife faengt an")
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
Da wegen der Warnglocke sowieso ein Lautsprecher eingebaut wurde, kam mir die Idee, diesen auch für andere Geräusche zu nutzen. Somit baute ich weitere Taster ein, mit denen ich z.B. Geräusche während der Zugfahrt wie Kuhglockengeläut, Bachgeplätscher und Geräusche der Dampfloks und Schienenstösse auslösen kann. Ein dritter Taster dient zum Herunterfahren des Betriebssystems vor dem Abschalten des Stroms der Anlage.
Die entsprechenden Vorwiderstände habe ich auf einer Zusatzplatine untergebracht, die Huckepack auf den RasPi geschraubt wurde. Die verschiedenen Anschlussleitungen wurden steckbar gestaltet.
Über die eingebaute HDMI Schnittstelle lässt sich theoretisch ein Monitor anschliessen und mit den 4 vorhandenen USB Schnittstellen des RasPi lassen sich z.B. Tastatur und Maus direkt anschliessen. Über einen WLAN Adapter kann dann auch ein Zugriff ins WWW erfolgen, was aber hier nicht geplant war. Der WLAN Adapter wurde jedoch genutzt, um statt dem Anschluss von Tastatur und Maus den RasPi von meinem heimischen PC aus per WLAN anzusprechen. Dies erfolgt von meinem Windows PC aus über das Programm Putty. Damit kann man über ein Terminal Python Scripts erstellen und ändern sowie weitere Tätigkeiten ferngesteuert durchführen, ohne dass der RasPi an der Unterseite der Modellbahn zugänglich sein muss. Das Python Programm wird nun automatisch beim Hochfahren des RasPi, d.h. Einschalten des Stroms für die Modellbahn gestartet.
Zurückschauend kann ich sagen, dass die Nutzung eines RasPi 2 für diesen Zweck ideal ist. Man könnte natürlich einwerfen, dass der kreditkartengrosse PC absolut unterfordert ist, aber wer weiss, welche Ideen irgendwann noch dazu kommen und für 35€ ist der Preis auch noch sehr human. Alles weitere fand sich in der Elektroniker-Bastelkiste.
Bei meiner nächsten Modellbahn wird ein RasPi 3 samt einem Touchscreen weitere Aufgaben bekommen. Entsprechende Tests sind schon gestartet. Zu gegebener Zeit werde ich darüber berichten.
Optische und akustische Eindrücke des Bahnübergangs finden sich in meinem schon bekannten Youtube Filmchen hier.