Moba Tool

Hallo zusammen,

ich beschäftige mich etwas mit den Moba Tools und möchte gerne Weichen damit über dcc befehle steuern. Später dann evtl auch Beleuchtung und was sonst noch alles so geht.

Gibt es eine Schritt für Schritt Anleitung?

Was man benötigt, wie man es zusammenbaut usw.

Über Hilfe würde ich mich freuen.

Gruß Det :wink:

Detsimbo:
Hallo zusammen,

ich beschäftige mich etwas mit den Moba Tools und möchte gerne Weichen damit über dcc befehle steuern. Später dann evtl auch Beleuchtung und was sonst noch alles so geht.

Gibt es eine Schritt für Schritt Anleitung?

Was man benötigt, wie man es zusammenbaut usw.

Über Hilfe würde ich mich freuen.

Gruß Det :wink:

Dein Angaben sind etwas dürftig.

Was sind "Moba Tools" ?
Was sind "dcc befehle" ?

Wofür brauchst du eine "Schritt für Schritt Anleitung" ?

HotSystems:
Was sind "Moba Tools" ?
Was sind "dcc befehle" ?

Ich rate mal: Aus Stummis Modellbahnforum Arduino MobaTools: V0.9 mit dem einfachen DCC Weichendecoder.

Genau diese... Sorry ich dachte ich wäre hier richtig?!

Im Stummi hab ich mich schon durchgelesen aber schlauer werde ich nicht wirklich.

Anleitung was ich brauche wie ich es baue

Detsimbo:
Genau diese... Sorry ich dachte ich wäre hier richtig?!

Im Stummi hab ich mich schon durchgelesen aber schlauer werde ich nicht wirklich.

Anleitung was ich brauche wie ich es baue

Was Arduino betrifft, bist du richtig.
Aber Moba Tools kennt nicht jeder. Da musst du weiter auf Hilfe hoffen.

Detsimbo:
Anleitung was ich brauche wie ich es baue


Quelle

Was brauchst Du mehr?

Detsimbo:
Genau diese... Sorry ich dachte ich wäre hier richtig?!

Im Stummi hab ich mich schon durchgelesen aber schlauer werde ich nicht wirklich.

Anleitung was ich brauche wie ich es baue

Der oben verlinkte Thread in Stummiforum zeigt auch eher die Entwicklungsgeschichte der MobaTools als das es ein Tutorial für die Anwendung wäre. Wobei da schon ein paar Beispiele dabei sind. Hast Du da schon etwas zum Laufen bekommen?

Letztendlich sind die MobaTools nur eine Bibliothek für einige bei der Modellbahn oft vorkommende Aufgaben: Servos für Weichen und Signalantriebe, Stepper für z.B. Schrankenantriebe. Und das weiche Auf/Abblenden von Led's, dass man für Lichtsignale und die Wechselblinker an Bahnübergängen braucht. Das Programmieren der zugehörigen Logik nehmen dir die MobaTools nicht ab, die Aufrufe sind aber dokumentiert.

Von DCC weis die Lib nichts, da braucht man eine andere Bibliothek. Sehr gut geht das zusammen mit der nmradcc Lib.

Was planst Du denn als ersten Einsatz der Lib? Einen Weichendecoder? Haben die Weichen den üblichen Doppelspulenantrieb, oder willst Du Servo's verwenden? Davon hängt ja auch die Beschaltung an den Ausgangsports des Arduino ab. Die Schaltung des DCC-Eingang hat dir agmue ja schon gepostet.

Ein Beispielschaltbild für einen kompletten Weichendecoder mit Servos und Polarisierungsrelais findest Du auch hier (ganz am Ende). Mit der Schaltung kannst Du auch im EEPROM gespeicherte CV-Werte über die DCC-Zentrale lesen und schreiben.

Für den Einstieg wäre aber der von agmue erwähnte ganz einfache Servo-weichendecoder erstmal sicher besser. Ausser der DCC Eingangsbeschaltung brauchst Du da eigentlich nichts. Die Steuerleitungen der Servos kannst Du direkt an die entsprechenden Ports des Arduino anschließen.

@MicroBahner: Kann ich davon ausgehen, Du bist auch der MicroBahner bei stummiforum? Darf ich die Grafik zeigen?

agmue:
@MicroBahner: Kann ich davon ausgehen, Du bist auch der MicroBahner bei stummiforum? Darf ich die Grafik zeigen?

Ja, bin ich und Du darfst :slight_smile: ( obwohl sie nicht mehr ganz aktuell ist, aber sie tut was sie soll. Man kann aber ein paar Bauteile einsparen :wink: )

MicroBahner:
Ja, bin ich und Du darfst :slight_smile:

Danke und ich ziehe meinen Hut :sunglasses:

Hast Du eine bessere Grafik zum Tauschen?

erstmal vielen dank für die schnelle Antwort, ich bin begeistert. Also ich habe noch nichts getestet bzw. aufgebaut da ich mich erstmal in die Materie einlesen wollte.

Also ich möchte die weichen mit servos steuern ohne Schnickschnack, einfach nur Servos hin und her und das ganze wenn möglich über die Digitalzentrale ansteuern.

Das ich dazu einen Optokoppler benötige habe ich soweit verstanden und auch wie ich diesen "zusammenbastel"

Was mir nicht ganz klar ist wie muss ich die servos anschliessen.

16 x 3 kabel ??? 48 Pins hat der Arduino garnicht.

sorry wenn ich mich etwas leihenhaft ausdrücke.

es gibt ja SOWAS

Jeder Servo benötigt neben der Spannungsversorgung (bitte nicht über den Arduino!) genau ein Datenkabel, also einen digitalen Ausgang des Arduino.

Ein Servo per Arduino ansteuern

Acht Servos mit den Arduino-Pins (aus dem Beispiel):

const byte servoPins[]  =   {   3,   4,   5,   6,   7,   8,   9,  10};  // output-pin der Servos

agmue,

das habe ich hinbekommen aber ich möchte das ganze ja über die Digitalzentrale steuern :wink:

MicroBahner:
Ja, bin ich und Du darfst :slight_smile: ( obwohl sie nicht mehr ganz aktuell ist, aber sie tut was sie soll. Man kann aber ein paar Bauteile einsparen :wink: )

sparen klingt gut, was genau?

Detsimbo:
das habe ich hinbekommen aber ich möchte das ganze ja über die Digitalzentrale steuern :wink:

Das geht ja mit dem Beispiel, aus dem die Zeile von agmue ist.
Hier das ganze Beispiel:

#include <NmraDcc.h>
#include <MobaTools.h>

// Demo: ein ganz einfacher Dcc-Servodecoder //
//------------------------------------------ //
// die NmraDcc - Library gibt es unter https://github.com/mrrwa/NmraDcc/archive/master.zip

// anzupassende Konstante:
const byte isROCO = 4  ;    // wegen unterschiedlicher Weichenadressberechnung bei Roco (sonst = 0)
const byte weichenAdr[] =   {   6,   7,   3, 123,   8,  34,  77,  88};  // DCC-Weichenadressen 
const byte servoPins[]  =   {   3,   4,   5,   6,   7,   8,   9,  10};  // output-pin der Servos
const int geradePulse[] =   {1200,1200,1200,1200,1200,1200,1200,1200};  // Pulslänge geradeaus
const int abzweigPulse[]=   {1800,1800,1800,1800,1800,1800,1800,1800};  // Pulslänge abzweigend

const int speed = 8;
const byte autoOff = 1;
const byte ServoZahl = sizeof(weichenAdr);
static word StackPointer;
Servo8 weicheS[ServoZahl];
NmraDcc Dcc;
///////////////////////////////////////////////////////////////
void setup() {
    Dcc.init( MAN_ID_DIY, 15, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, 0 );
    Dcc.pin(0, 2, 1); // Dcc-Signal an Pin2 ( = Int0 );

    for ( byte i=0; i<ServoZahl; i++ ) {
        // Weichenservos initiieren
        weicheS[i].attach( servoPins[i], autoOff );
        weicheS[i].setSpeed( speed );
    }
}
////////////////////////////////////////////////////////////////
void loop() {
    Dcc.process(); // Hier werden die empfangenen Telegramme analysiert
    
}
//////////////////////////////////////////////////////////////
// Unterprogramme, die von der DCC Library aufgerufen werden:
// Die folgende Funktion wird von Dcc.process() aufgerufen, wenn ein Weichentelegramm empfangen wurde
void notifyDccAccState( uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State ){
    // Weichenadresse berechnen
    word wAddr = Addr+isROCO; // Roco zählt ab 0, alle anderen lassen die ersten 4 Weichenadressen frei
    // Testen ob eigene Weichenadresse
    for ( byte i = 0; i < ServoZahl; i++ ) {
        if (  wAddr == weichenAdr[i] ) {
            // ist eigene Adresse, Servo ansteuern
            if ( OutputAddr & 0x1 ) {
                weicheS[i].write( geradePulse[i] );
            } else {
                weicheS[i].write( abzweigPulse[i] );
            }
            break; // Schleifendurchlauf abbrechen, es kann nur eine Weiche sein
        }
    }
}

Detsimbo:
sparen klingt gut, was genau?

2 Widerstände und den Kondensator:

Geht auch mehr als 8 Servos? Mit den Drivern aus meinem Link? Wenn ja wie steuer ich diese an?

Die MobaTools erzeugen ihre Servoimpulse selber. Per Interrupt, ähnlich wie die Servo-Lib der Arduino IDE. Mit deinem Treiber kann die Lib nichts anfangen.
Es gehen aber auch mehr als 8 Servos, bis zu 16 sind möglich. Dann hagelt es aber ganz ordentlich Interrupts :wink: . Sollte aber funktionieren.

Detsimbo:
Geht auch mehr als 8 Servos?

Du kannst auch mehrere Arduinos verwenden, das verteilt die Interrupts.

agmue:
Du kannst auch mehrere Arduinos verwenden, das verteilt die Interrupts.

über schieberigister dann ??

ich bin überfordert :o

Detsimbo:
über schieberigister dann ??

Was willst Du da mit Schieberegistern? Du nimmst z.B. 2 Arduino Nano, verbindest die DCC-Eingänge (Pin2), sodass beide das gleiche DCC-Signal bekommen und hängst an jeden dann 8 Servos. Den Beispielcode lädst Du auf beide Arduinos, wobei Du nur die Zeile

const byte weichenAdr[] =   {   6,   7,   3, 123,   8,  34,  77,  88};  // DCC-Weichenadressen

mit den DCC-Adressen anpassen must, damit jedes Servo eine eindeutige DCC-Adresse bekommt.
That's it :wink:
Mit einem Nano-Klon dürfte das sogar billiger und flexibler sein als eine Variante mit dem von dir verlinkten Erweiterungsboard.