Inhaltsverzeichnis

puls_efn.jpg Wir leben Modellbahn. puls.jpg

Steuerung der Schranken am Bahnübergang

Auf der Vereinsanlage befinden sich seit Neuestem 2 Bahnübergänge mit automatischen Schranken. Ein Bahnübergang (Wurzener Str.) war schon seit langem mit einer REED-Kontakt/Relais Schaltung versehen, die einigemaßen ihren Dienst versah. Im Fahrbetrieb kam es jedoch immer wieder mal vor, das die Schranke bei einem herannahenden Zug nicht herunterging, mal eine Schranke nicht synchron zur anderen war oder es kam auch vor, das die Schranke unten blieb. Diese Zustände mag man sich im realen Leben gar nicht vorstellen. Wir hätten einen hohen Verschleiß von Naunhofern- und Klingaern-Bürgern zu verzeichnen!!!
Problem Bahnübergang
Das sich nun auch noch der zweite Bahnübergang (Großsteinberger Str.) harmonisch und automatisiert in die Landschaft integrieren sollte haben wir einige Überlegungen zum Funktionsupdate angestellt. Hier unsere technischen und organisatorischen Randbedingungen:


Anforderungen

Im unten zu sehenden Gleisplan sind die verbauten REED-Kontakte zu sehen.
Gleisplan

Verbaute REED-Kontakte

A N Gleis1 N B
C N Gleis2 N D

Realisierung

Die Realisierung erfolgt über Standardbauteile, die im folgenden gelistet sind.

Arduino NANO Board V3Mikrocontrollerbord
AZDelivery Relais 5VRelais
Lochrasterplatinen + AnschlußklemmenLochrasterplatten
USB-Netzteil zur Spannungsversorgung der ProgrammlogikNetzteile
BASCOM Compiler Software zur ProgrammierungBascom Compiler
fertige PlatinePlatine
Programm in Bascom
basic
'*********************************************
'* Filename    : EFN Schrankensteuerung      *
'* Revision    : 2.0                         *
'* Controller  : Arduino NANO V3.0           *
'* Stand       : Juli/2021                   *
'*********************************************
$regfile = "m328pdef.dat" 'Arduino Nano V3.0
$crystal = 16000000       '16 MHz                                  '
$baud = 19200             'COM4
$loadersize = &H800 'Bootloader nicht ueberschreiben
 
$hwstack = 40
$swstack = 20
$framesize = 20
 
'*********************************************
'Ausgänge
Config PORTB.5=Output 'On-Board LED
LED_ON_BOARD alias PORTB.5
LED_ON_BOARD=0
Reset LED_ON_BOARD
 
Config PORTD.6=Output
LED alias PORTD.6
LED=0
Reset LED
 
Config PORTD.7=Output
RELAIS alias PORTD.7
RELAIS=0
Reset RELAIS
 
'*********************************************
'Eingänge konfigurieren als Taster
Config PinB.0 = Input
Config PinB.1 = Input
Config PinB.2 = Input
Config PinB.3 = Input
Config PinB.4 = Input
 
'Pull up einschalten
PORTB.0=1
PORTB.1=1
PORTB.2=1
PORTB.3=1
PORTB.4=1
 
'*********************************************
'Variablen
KeyN alias PINB.4
KeyFA alias PINB.3
KeyFB alias PINB.2
KeyFC alias PINB.1
KeyFD alias PINB.0
 
Dim bitKeyN As Bit  '=1 wenn gedrückt
Dim bitKeyFA As Bit '=1
Dim bitKeyFB As Bit '=1
Dim bitKeyFC As Bit '=1
Dim bitKeyFD As Bit '=1
 
Dim SCHRANKE as String * 4
Dim B, B_OLD, G1, G2, A1, A2, C1, C2 as bit
Dim I, ZAEHLER, Z, FAZ, FBZ, FCZ, FDZ, NZ, SZ as integer
SZ=0
Const VZ_ALLE=-3
Const VZ_A=-5
Const VZ_B=0
Const VZ_C=0
Const VZ_D=0
 
'*********************************************
'Konfiguriere INT1 für Tastenerkennung mit Dioden
Config INT1=FALLING  'PIND.3=INT1
On Int1 TASTEN       'INT1 Interrupt-Routine
Enable INT1          'INT1 einschalten
Enable Interrupts    'Interrupts erlauben
 
stop adc
stop AC
 
declare sub anzeige
declare sub erkennen
declare sub var_reset
 
var_reset
 
'*********************************************
do
  Incr ZAEHLER
  if ZAEHLER=100 then
    var_reset
  endif
  anzeige
  erkennen
  Toggle LED_ON_BOARD
  wait 1
loop
end
 
'*********************************************
sub erkennen () {
 
if bitKeyN=1 then
  ZAEHLER=-20
  bitKeyN=0
  incr NZ
end if
 
if bitkeyFA=1 then
  if B=1 and C1=1 then
    ZAEHLER=VZ_ALLE+VZ_A
  else
    ZAEHLER=ZAEHLER
  end if
  G1=1
  A1=1
  bitKeyFA=0
  incr FAZ
end if
 
if bitKeyFB=1 then
  if B=1 and A1=1 then
    ZAEHLER=VZ_ALLE+VZ_B
  else
    ZAEHLER=ZAEHLER
  end if
  G1=1
  C1=1
  bitKeyFB=0
  incr FBZ
end if
 
if bitkeyFC=1 then
  if B=1 and C2=1 then
    ZAEHLER=VZ_ALLE+VZ_C
  else
    ZAEHLER=ZAEHLER
  end if
  G2=1
  A2=1
  bitKeyFC=0
  incr FCZ
end if
 
if bitKeyFD=1 then
  if B=1 and A2=1 then
    ZAEHLER=VZ_ALLE+VZ_D
  else
    ZAEHLER=ZAEHLER
  end if
  G2=1
  C2=1
  bitKeyFD=0
  incr FDZ
end if
end sub
 
'*********************************************
sub anzeige
'print "Schrankensteuerung"
 
B_OLD=B
if ZAEHLER < 0 then
  SCHRANKE="ZU"
  B=1
  RELAIS=1
  LED=1
else
  SCHRANKE="AUF"
  B=0
  RELAIS=0
  LED=0
end if
 
'Flanke von "zu" nach "auf" loescht gesetzte Variablen
if B_OLD > B then
  Z=0
  G1=0
  G2=0
  A1=0
  A2=0
  C1=0
  C2=0
  incr SZ 'Schrankenzähler + 1
end if
 
'Anzahl der Zuege
if G1=1 and G2=1 then
  Z=2
elseif G1=0 and G2=0 then
  Z=0
else
  Z=1
end if
 
print "Gleis1   : ";G1
print "Gleis2   : ";G2
print "Zuege    : ";Z
print "Schranke : ";SCHRANKE
print "Zaehler  : ";ZAEHLER
print
print "A: ";FAZ;" B: ";FBZ;" C: ";FCZ;" D: ";FDZ;" N: ";NZ
print "Schliesssungen: ";SZ
print
end sub
 
'*********************************************
sub var_reset
SCHRANKE="AUF"
LED=0
RELAIS=0
B=0
G1=0
G2=0
A1=0
A2=0
C1=0
C2=0
Z=0
ZAEHLER=0
bitKeyFA=0
bitKeyFB=0
bitKeyFC=0
bitKeyFD=0
bitKeyN=0
for I=1 to 8 '4*blinken
  toggle LED_ON_BOARD
  waitms 100
next
end sub
 
'*********************************************
TASTEN:
'Interrupt on INT1
  bitKeyN = Not KeyN
  bitKeyFA = Not KeyFA
  bitKeyFB = Not KeyFB
  bitKeyFC = Not KeyFC
  bitKeyFD = Not KeyFD
Return

Programmbeschreibung V2.0


Profilvergleich H0-Bettungsgleise

Bildlicher Vergleich Trix/Märklin-C-Gleis und Roco Vergleich


Begrifflichkeiten Leistung, Strom, Spannung

„da ist kein Strom drauf“besser —> „da ist keine Spannung drauf“
im Kraftwerk wird Spannung produziertman sagt immer es wird Strom erzeugt, der Strom entsteht doch erst wenn Leistung verbraucht wird
wieso haben wir einen Stromverbauch?der Strom fliesst doch zurück zum Kraftwerk, ist es nicht ein Leistungsverbauch?