• Hallo TT-Modellbahner, schön, dass du zu uns gefunden hast.
    Um alle Funktionen nutzen zu können, empfehlen wir dir, dich anzumelden. Denn vieles, was das Board zu bieten hat, ist ausschließlich angemeldeten Nutzern vorbehalten. Du benötigst nur eine gültige E-Mail-Adresse und schon kannst du dich registrieren.
    Deine Mailadresse wird für nichts Anderes verwendet als zur Kommunikation zwischen uns.
    Die Crew des TT-Boardes

Analog automatisch abbremsen und anfahren - mit Arduino

Man muss nur mal in den Tiefen der UNO-Trickkiste nachsehen - es gibt doch einen schnellen Weg, die PWM-Frequenz des in Frage kommenden UNO-Ausgangs auf 'BTTB'-gerechte Werte einzustellen. Mit ~123Hz kann man sie zum Schleichen bekommen. Das eröffnet die Möglichkeit, per Steckjumper/Steuersignal passende 31kHz; 3,9kHz; 980Hz oder eben auch die 123Hz einzustellen.

Ich hatte das hier gefunden. Aber ich denke du meinst was anderes.
 
Der Code in dem Forum ist eigentlich viel zu kompliziert- denn es kommt bei der Modellbahn nicht auf die exakte Frequenz an- ob 100 oder 123 Hz, ist egal. Es reicht, den Vorteiler von Timer2 anders einzustellen. Das ist eine Codezeile.
Ich werde jetzt einfach noch drei digitale Ein/und Ausgänge dazudefinieren. Damit kann man in den Block den zugbezogenen Code für den Motor einspeichern und weiterreichen. So lässt sich ein Gemischtbetrieb von z. B. 3-polern und Faulhi's problemlos abwickeln.
Edit: Schreibfehler Timer2 ist korrekt.
 
Zuletzt bearbeitet:
Nein, das verstehst Du falsch. Man muss schon je nach Motor per Hand vor dem Einfahren in die Blockkette mitteilen, welche Frequenz angewandt werden soll. Das schiebt sich dann aber automatisch mit dem Zug durch die Blocks durch. Übrigens kann man die Kommunikation zwischen solchen UNOs auch über die Pins0 und 1 machen und damit alles Mögliche weiterreichen. Die sind als serielle Ports konfiguriert zum Datenaustausch. Man könnte jetzt rumspinnen mit Barcode-Leser oder RFID, anhand deren Daten sich dann etwas einstellt. Aber das überschreitet das hier behandelte Thema.
 
Wenn die Blocks sich dann aber aufteilen, durch Weichen etc., wird es bestimmt schwierig mit dem weiterreichen, oder? Man müsste dann ja an den richtigen Uno bzw. Nano das weiter reichen.

Genauso könnten von verschiedenen Blöcken, in den Block, Züge einfahren. Dann müsste man auch sicher stellen, dass das Signal vom richtigen UNO kommt.

Wird das nicht ein bissl zu komplex?

Bzw. ist es nicht einfacher erst einmal eine "Einfache" Version zu erstellen, die diejenigen nutzen können die nur einen Typ von Motoren haben. So würden einfach 3 verschiedene Software's reichen, die man je nach Motortype seinen Arduinos einmalig aufspielt.


Eine erweiterte Version könnte dann ja ein nächstes Projekt werden. Diese würde dann auch noch mehr Verkabelung bedeuten, richtig?
 
Wenn man die Weiterreichung der Zustandsmeldung an den Fahrweg koppelt, ist das nicht schwierig. Aber sicher, je mehr Adern im Kabel, desto aufwändiger. Ein einfaches dreiadriges Kabel reicht aber: Rx, Tx, GND. Man findet in der Referenz alles zum Programmieren einer seriellen Verbindung von UNO zu UNO. Und das Abschreiben von ein paar Codezeilen ist wahrhaftig keine Arbeit, oder?
 
Nein, Software ist schnell kopiert.

Du schreibst, bei dem System werden die Loks eingegeben, und danach wird die Information von Block zu Block weiter gereicht. Was passiert wenn man einen Zug von Hand entfernt? Was passiert wenn man einen Zug austauscht? Was passiert im Rangierbetrieb?

Gerade bei uns zu Hause werden öfters Züge von den Gleisen genommen und andere Aufgestellt. Dann müsste man jedesmal dem Arduino, wo der Zug aufgestellt wird, sagen was für ein Zug (bzw. was für ein Motor) es ist. Wie willst du das über mitteln? Per Tastendruck? Dann ist das einbinden von Zügen nur an einem bestimmten Block möglich, oder?

Entschuldige, wenn ich da so viel Frage. Ich stelle mir das alles zu Umständlich vor. Kann aber auch daran liegen das ich das so nicht kenne. Und am Ende ist das alles nur eine Gewöhnungssache.

Bzw. wenn man nur eine Art von Zügen auf der Heimanlage hat, spielt das ja keine große Rolle. Auf Treffen, wo auch andere Züge über Module fahren, ist das natürlich von Vorteil, wenn die ganze Anlage damit ausgestattet ist. Wenn die Module davor und danach das aber nicht unterstüzen, dann müsste man jeden Zug, der in das damit ausgestattete Modul Einfährt erneut einlesen.

Aber ich kenne mich auch Null mit Treffen und Modulen aus. Kenne diese Treffen nur als Zuschauer und bastel bisher nur an der Heimanlage.
 
Ich betrachte das hier als eine Fingerübung mit dem Nebeneffekt, dass für einen automatischen Ablauf ( wie bei Vorführanlagen ) nicht der im Digitalbetrieb nötige, m. E. erhebliche Aufwand für sanftes Anfahren/Bremsen getrieben werden muss, falls man nicht ABC-fähige Decoder hat. Übrigens bleibt da auch immer noch die lokspezifische Anhalte/Beschleunigungszeit, die dann auch nur mit dem BM2 kompensiert werden kann und dann auch nur mit Decodern, die das Signal auch verstehen. Außerdem ist es im Analogbetrieb viel einfacher, lokunabhängige Brems/Anfahrwege einzustellen sowie eine defekte Lok mal eben schnell auszutauschen. Was ich hier beschreibe, habe ich so mit einem ATmega und Komponenten dazu auf einer entsprechenden Platine vor einigen Jahren für das kleine Museum der TCDD in Istanbul/Sirkeci-Bahnhof gebaut. Da steuert das den gesamten Ablauf einer kleinen Vorführanlage - weil mich das abrupte Losfahren/Anhalten störte und auch immer wieder zu Betriebsstörungen führte. Der Museumsbedienstete kann zwar mal einen Draht wieder anlöten und eine kaputte Lok gegen eine andere austauschen - aber davon abgesehen muss die 'schwarze Kiste' einfach nur ein- und auszuschalten sein und den Rest von alleine machen. Da scheidet jede Art von Digitalbetrieb ( ganz zu schweigen von den Kosten ) von vornherein aus.
Wenn man nicht, wie ich mal so vor mich hin gesponnen habe, lokspezifische Daten von Block zu Block austauscht, sondern nur die Info, ob der Block besetzt ist oder nicht, dann kann man auch problemlos Züge entfernen oder einsetzen.
Und wie Jan schon richtig bemerkte - beim Modulbetrieb braucht man so etwas nun garnicht. Wer da nicht vor einem 'Halt' zeigenden Signal bremst, wird die Folgen ganz schnell an seiner Geldbörse merken. Für das Bier, das er bezahlen muss :)
 
Das meinte ich. Wenn man die Lokdaten weiterschickt, darf man keinen Zug entfernen bzw. austauschen, ohne das man die Loks neu eingeben muss.


Etwas anderes, wo ich mich frage ob es funktioniert. Bleiben die Loks in den Blocks stehen, wenn ich irgendeine Lok in Gegenrichtung rangiere? Oder fahren dann alle in Gegenrichtung an?
 
Wir fahren hier analog und da kommt es darauf an, was ich in einem bestimmten Gleisabschnitt verschaltet habe. Will ich bei haltzeigendem Signal in Gegenrichtung durchfahren, werden doch alle Abschnitte über die Dioden mit Fahrspannung versorgt - das zeigt das Schaltbild deutlich! Andernfalls muss mit bekannter Z-Schaltung dem Abschnitt, in dem vom Signal wegrangiert werden soll, ein eigener Fahrtrafo zugeschaltet werden. Das sind bekannte Aufgaben aus dem Analogbetrieb und lassen sich an anderer Stelle im Internet nachlesen.
 
Nach dem neuesten Schaltplan bräuchte man eigentlich kein Relais mehr oder? Zumindest wenn das Signal nur über LEDs verfügt. Der Halteabschnitt wird ja nicht mehr zusätzlich vom Relais gesteuert.

Wenn man die Versorgungsspannung der Arduinos abschaltet, sollten die Loks in den Blocks stehen bleiben, richtig? Dann könnte man über einen Umschalter zum aktivieren des Rangierbetriebs die Spannung der Arduinos entfernen, oder?

Auf die Potis könnte man auch verzichten, wenn man die Werte Softwaremäsig vorgibt, richtig? Dann bräuchte man natürlich immer ein Laptop/PC zum einstellen.

Der TL072 dient zur Frequenz Beeinflussung? Wenn man die Frequenz Software mäßig einstellt, kann man auf dem TL072 verzichten, richtig?

Freue mich auf dem Programm Code. Habe zwar inzwischen viel gelesen. Aber alles nur Theorie. Der Arduino wird erst nächste Woche geliefert. Freue mich schon aufs experimentieren.
 
@Andre1980
Den mit dem TL072 aufgebauten Oszillator braucht man nicht, da sich Timer2 ohne nachteilige Auswirkungen auf das übrige System umprogrammieren lässt. Die Potis dienen der Einstellung von Zeit und Kriechspannung pro Block -weglassen ist unsinnig, denn man kriegt das schneller mit dem Schraubenzieher als mit dem PC hin. Die zweite Varainte ist da, wasi ich in Istanbul gemacht habe. Der GBM ist allerdings etwas anders ausgeführt worden, nämlich als 'Bauart Heizer' Natürlich lässt sich der, wenn man eine 6kHz-Rechteckspannung überlagert, auch in Analoganlagen benutzen. Mir kam es darauf an, dass die Rückmeldung keinesfalls durch Kurzschlüsse zerstört werden durfte, was bei Dioden-GBMs passieren kann.
 
Ausgelöst durch die 'Talent'-Diskussion fällt mir ein, dass ich den noch freien Analogeingang auch so verprogrammieren könnte:
Es wird noch eine GBM-Kombination drangeschaltet und ein im festen Verhältnis zur Bremsstreckenlänge stehender Abschnitt daran angeschlossen. Sagen wir -dessen Länge ist 1/4 der Bremsstrecke. Der Ablauf ist dann so, dass unabhängig von der angelegten Spannung die Zeit gemessen wird, die die Lok ( oder das erste in den Absschnitt einlaufende Fahrzweug mit Widerstand/Beleuchtung ( wg. Wendezug ) braucht, um diesen zu durchfahren. Dann wird die Rampe für die Bremsstrecke ausgerechnet und so der Zug auf 0 abgebremst. Das dürfte ziemlich für alle Motoren den gleichen Haltepunkt ergeben oder zumindest eine akzeptable Toleranz von ein paar wenigen cm.
Das habe ich vor Jahrzehnten mal mit OpAmp-Rechenschaltungen aufgebaut und es funktionierte sehr gut.
 
Wie würdest du die Stromversorgung der Arduinos realisieren?

Wieviel mA verbraucht so ein Arduino wenn er so verbaut wird?

Für den Nano
Der Arduino Nano kann entweder über eine Mini B-USB Verbindung, über ein externes 6-20V Netzteil (Pin 30) oder einer regulierten externen 5V Versorgung (Pin 27) mit Strom versorgt werden.

Ich habe noch ein nicht mehr benutztes Laptopnetzteil 19V 4,3A rumliegen. Das sollte doch funktionieren wenn ich damit direkt an Pin 30 gehe. Oder ist es dann eher ratsam vorher die Spannung etwas herunter zu regeln?

Die 4,3A sollten ja für sehr viele Arduinos reichen.


Edit: Beim Stöbern im Netz gefunden. Die meisten China Clone verwenden andere Spannungsregler als die Orginalen Arduinos. Die China Clone vertragen meist nicht mehr als 12V. Schade eigentlich.
 
Zuletzt bearbeitet:
9V-Steckernetzteile gibt's doch wie Sand am Meer. Mit einem kann man problemlos 2..3 der UNOs versorgen. Höher als 9V sollte man nicht nehmen, da sonst der Linearregler zu warm wird. Wozu denn um Himmelswillen 19V?
 
Die 19V liegen nur rum :D

Wenn man dann aber 14 Blöcke mit der Bremsregelung hat, bräuchte man 5-7 Stecknetzteile und dementsprechend auch 5-7 Steckdosen. Daher kam mir die Idee das über ein Kreis zu versorgen.

Und ich habe in den "Weiten" unserer Wohnung nur ein 9V Stecknetzteil gefunden, und bei dem ist auch noch der Stecker andersherum gepolt o_O

Der Nano kommt dann auch nicht zurecht mit dem Stecker, aber das ist das kleinste Problem. Stecker ab und an Vin.
 
Hallo Andre1980,
Steckernetzteile 9V/2A bekommst Du für knapp 10€, 12V/2A für unter 6€, alles versandkostenfrei.

Viele Grüße Wolfgang
 
Hallo Andre1980,
Steckernetzteile 9V/2A bekommst Du für knapp 10€, 12V/2A für unter 6€, alles versandkostenfrei.

Viele Grüße Wolfgang
Ja, bei Amazon wird man vor Auswahl regelrecht erschlagen. Bei einigen Rezesionen steht auch „... weiser Lichtball beim Einstecken...“ oder „... liefert nach einigen Gebrauch 30v. Angeschlossenes Gerät kaputt...“ Da bekommt man schon Bauschmerzen und weis das billig nicht immer gut ist.

Die Frage ist, reichen 2A für 14 Arduinos? Das weis man wahrscheinlich erst wenn man die Schaltung ausmisst wenn sie fertig ist. Auch werden die Arduinos nicht immer gleich viel Strom brauchen, wenn sie sozusagen auf einen Zug warten, werden sie wahrscheinlich wenig brauchen. Aber man sollte auch den einschaltzustand beachten, wenn man die Anlage einschaltet, beginnen ja alle Arduinos gleichzeitig zu werkeln.

Ich habe halt null Ahnung was so ein Arduino verbraucht, weis aber das es abhängig davon ist, was er macht.
 
Hallo André,
leider ist auf den Preis als Qualitätsmerkmal auch kein Verlaß mehr, auch nicht auf die Herstellermarke.
Europäische Produkthersteller kaufen auch oft Steckernetzteile für Ihre Geräte in China zu.
Deutsche Händler verkaufen oft chinesische Produkte gegen Preisaufschlag und Versandkosten.
Ich glaube schon fast, das sich solche Geräte preiswert nur noch in China herstellen lassen.

Viele Grüße Wolfgang
 
Einigermaßen sicher, was die Zuverlässigkeit betrifft, kann man nur noch mit alten Trafonetzteilen vom Flohmarkt sein. Sie werden dort haufenweise angeboten. Wo keine Elektronik drin ist, knallt auch nichts durch. Steckerschaltnetzteile kommen praktisch alle aus Fernost.
Stichwort Stromverbrauch -mein Testaufbau benötigt knapp 100mA Versorgungsstrom.
 
...
Stichwort Stromverbrauch -mein Testaufbau benötigt knapp 100mA Versorgungsstrom.
Nur wenn sich etwas im Block tut? Oder immer?

Pausiert sich der Arduino wenn es nichts zu tun gibt?

Ich hatte mal was gelesen von nicht benötigten Funktionen abschalten mit dem Sketch.

Für 14 Blöcke bin ich dann aber mit 2A auf der sicheren Seite.


Ich hab auch noch ein Universaltrafo rumliegen wo man wo man am Ausgang mit verschiedenen Abfasspunkten die Wechselspannung einstellen kann. Diese dann Gleichrichten. Sollte der sichere Weg sein.

Ein Überspannungsschutz vor dem Arduino bzw. nach dem Stecknetzteil wäre wahrscheinlich auch ne gute Investition, wenn man ein Stecknetzteil dafür her nimmt.

Danke für die Info mit den 100mA.
 
So, und hier ist der Code für das GRAFCET-Diagramm. Es ist für ein Signal mit stromlosem ( aber überwachtem ) Halteabschnitt.
Achtung: Ich habe gerade festgestellt, dass der Codefile NICHT dem compilierten Programm entspricht und ihn deshalb gelöscht.
Der korrigierte File kommt so schnell wie möglich nach.
Irgendwie ist es mir gelungen, eine noch nicht lauffähige Version abzuspeichern und den compilierten File zu löschen.:baseball:
 
Zuletzt bearbeitet:
Cool, danke. Ich bin selber noch dabei, eine Ampel zu basteln die ohne Delay arbeitet. Also noch voll am lernen ^^.

Kompilieren lässt sich das File aber ^^. Ich hoffe es macht nicht soviel arbeit es wieder zu richten.

Ein paar fragen habe ich aber schon mal.

bitRead
, bitSet, bitClear, kannte ich bisher nicht. Aber ne schöne art, sich für mehrere "Merkoptionen", nur eine kleine Variable zu nutzen.

Code:
int Block_Besetzt = 4; // Meldeausgang, 0 = BESETZT, 1 = FREI
int Stelleingang = 5; // Stelleingang für Signal, 0 = ROT, 1 = GRÜN
int Signal = 7; // Stellausgang für Relais, 0 = ROT, 1 = GRÜN
Da die Variablen nur 0 oder 1, bzw. HIGH oder LOW sein werden, könnte man auch andere Variablentypen als Integer nehmen und somit weniger Speicher verbrauchen, oder?

Code:
int Zeit_analog = 3; // Eingang Zeiteinstellung 0..1023 für max. 10,23 sec!
Damit stellt man die Bremszeit/Anfahrtszeit ein richtig? Also der zweite Poti.
 
Zurück
Oben