Kranwagen von Märklin

Der Märklin Spur 1 Kranwagen 54991 ist ab Werk digital steuerbar. Doch was mich zunehmend gestört hat war die Bedienung mittels Fahrregler und Funktionstasten der Digitalzentrale. Richtig unabhängig konnte man die Antriebe nicht steuern und das ein- und ausschalten der jeweiligen Antriebe ist einfach bedienunfreundlich. Ich habe mir überlegt wie man wohl den Kran mit einer handelsüblichen Fernsteuerung aus dem Modellbau Bereich steuern könnte, wie ich sie ja bereits zur Verfügung habe. Und mein Ergebnis sieht wie folgt aus:

Zunächst wird der Kran geöffnet. Er ist komplett verschraubt wie es damals üblich für die Maxi-Serie von Märklin war. Hier sieht man die drei Getriebemotoren von Bertsch.

Das ist die Platine zum Steuern der Motore und Funktionen, die ab Werk im Kran verbaut war:

Was mich an den Motoren von Bertsch stört ist die Tatsache, dass nicht alle Ritzel aus Metall sind. Es gibt auch Kunststoffzahnräder und das ist dann die Sollbruchstelle. Außerdem haben die Seilwinden eine Rutschkupplung. Somit konnte mein Kran einfach keine all zu schweren Lasten heben. Ich habe mich daher entschieden im Rahmen des Umbaus sowohl für den Haken als auch den Ausleger neue Motore zu verbauen. Die Wahl viel dann auf zwei Stück Micro-Getriebemotoren von Sol Expert (Daten: G 150, 12 V, 1:150, 15 - 180 U/min), erhältlich z.B. bei Conrad unter der Bestell-Nr. 1289385.

Auf die Welle des Motors habe ich ein Messingrohr geschoben, im Bereich des Flanschanschlusses etwas aufgefräst und mit Lötzinn versehen, so dass das Rohr ohne Rutschen auf dem Flansch hält. Für den Motor muss im Rahmen des Krans eine größere Öffnung gefräst werden.

Anschließend habe ich den Motor einfach mit Zwei-Komponenten-Kleber befestigt.

Das Anschlusskabel habe ich an der Welle vorbeigeführt und auch mit Kleber befestigt.

Für die Führung des Seils etwas nach rechts damit es nicht am Drehpunktzapfen schleift, habe ich einen Führungsdraht gebogen und am Boden festgeklebt.

Genauso bin ich dann auch für den Antrieb der Seilrolle vorgegangen. Ursprünglich wollte ich den Antrieb lassen, aber durch die Rutschkupplung hatte der Antrieb auch kaum Kraft.

Ganz wichtig: Für die Steuerung muss man die Motore von Bertsch entstören. Ich habe dazu zwei Stück 10 nF Kondensatoren zwischen Anschlusspunkt und Motorgehäuse und einen 0,1 µF Kondensator zwischen die Anschlusspunkte gelötet. Ansonsten funkt der Motor in die Steuerung und es gibt wilde Bewegungen. Hier sieht man noch den alten Antrieb für den Ausleger. Wichtig ist aber dass der Antrieb für das Drehen entstört wird. Für die Kondensatoren zum Gehäuse genügt einfach der Anpressdruck wenn ein Bein an den Anschlusspin des Motors gelötet wird. Am Gehäuse besser nicht löten! Durch die Hitze die erforderlich ist können sonst die Kunststoffzahnräder schmelzen.

Nun folgt der spannende Part: Die Elektronik. Zunächst wird der Empfänger verbaut. Hier kommt ein Spektrum AR 600 Empfänger zum Einsatz. Er wird an die Seite von unten auf ein Holzbrett geklebt, das ich passend zurecht gesägt habe und die Komponenten aufnimmt.

Auf der Oberseite des Bretts kommen nun folgende Bauteile zum Einsatz (von oben nach unten): Arduino Mikrokontroller, zwei Motorregler L293D, Spannungsregler von ebay.

Die beiden Motorregler steuern über den Arduino die drei Motoren an. Ein Regler kann zwei Motore ansteuern, daher sind zwei Stück erforderlich. Der Spannungsregler generiert aus der Gleisspannung nach dem Gleichrichter die 5 V Systemspannung für den Empfänger und den Arduino.

Warum ein Arduino? Nun ja, ich habe erst nach fertigen Fahrregler aus dem RC Modellbau Bereich geschaut. Doch die meisten sind nur für kleinere Spannungen wie 7,2 V oder 9,6 V. Da ich mit der Gleisspannung arbeite wollte ich einen Regler haben der mit 18 V auskommt. Außerdem waren die ganzen Regler total überdimensioniert von der Leistung. Und dann ist man mal locker bei 30 bis 40 Euro für einen Regler. Und daher habe ich mir meine drei Fahrregler selbst programmiert was gar nicht so schwer war. Im Endeffekt zählt der Arduino die Impulse vom Empfänger, multipliziert sie mit einem Faktor so dass bei Vollausschlag des Knüppels der Fernsteuerung die 255 erreicht wird, dieser Wert wird dann als analogwrite auf den Motorsteuerungsausgang geschrieben. Und damit wird dann die Drehzahl reguliert. Es ist wirklich ziemlich simpel und ich stelle euch gleich hier den Programmcode zur Verfügung:

int PinKanalA = 2; // Eingang Kanal A = linker Knüppel rechts/links
int PinKanalB = 3; // Eingang Kanal B = linker Knüppel rauf/runter
int PinKanalC = 4; // Eingang Kanal C = rechter Knüppel rechts/links
int PinKanalD = 5; // Eingang Kanal D = rechter Knüppel rauf/runter
int PinKanalE = 6; // Eingang Kanal E = Schalter oben
int PinKanalF = 7; // Eingang Kanal F = Schalter unten 

int Haken_Motor = 9;     // Anschluss "Geschwindigkeit" am Motorregler
int Haken_auf = A0;      // Anschluss "Drehrichtung" am Motorregler
int Haken_ab = A1;       // Anschluss "Drehrichtung" am Motorregler
int Haken_Speed = 0;

int Ausleger_Motor = 10; // Anschluss "Geschwindigkeit" am Motorregler
int Ausleger_auf = A2;   // Anschluss "Drehrichtung" am Motorregler
int Ausleger_ab = A3;    // Anschluss "Drehrichtung" am Motorregler
int Ausleger_Speed = 0;

int Drehen_Motor = 11;   // Anschluss "Geschwindigkeit" am Motorregler
int Drehen_links = A4;   // Anschluss "Drehrichtung" am Motorregler
int Drehen_rechts = A5;  // Anschluss "Drehrichtung" am Motorregler
int Drehen_Speed = 0;

int Blinklicht = 13;

int PulsKanalA;
int PulsKanalB;
int PulsKanalC;
int PulsKanalD;
int PulsKanalE;
int PulsKanalF;

int PulsKanalA_Mitte;
int PulsKanalB_Mitte;
int PulsKanalC_Mitte;
int PulsKanalD_Mitte;
int PulsKanalE_Mitte;
int PulsKanalF_Mitte;

int PulsKanalA_Oben;
int PulsKanalA_Unten;
int PulsKanalB_Oben;
int PulsKanalB_Unten;
int PulsKanalC_Oben;
int PulsKanalC_Unten;
int PulsKanalD_Oben;
int PulsKanalD_Unten;

void setup()
{
  pinMode(PinKanalA, INPUT);
  pinMode(PinKanalB, INPUT);
  pinMode(PinKanalC, INPUT);
  pinMode(PinKanalD, INPUT);
  pinMode(PinKanalE, INPUT);
  pinMode(PinKanalF, INPUT);
  pinMode(Haken_Motor, OUTPUT);
  pinMode(Haken_auf, OUTPUT);
  pinMode(Haken_ab, OUTPUT);
  pinMode(Ausleger_Motor, OUTPUT);
  pinMode(Ausleger_auf, OUTPUT);
  pinMode(Ausleger_ab, OUTPUT);
  pinMode(Drehen_Motor, OUTPUT);
  pinMode(Drehen_links, OUTPUT);
  pinMode(Drehen_rechts, OUTPUT);
  pinMode(Blinklicht, OUTPUT);

  digitalWrite(Haken_Motor, LOW);
  digitalWrite(Haken_auf, LOW);
  digitalWrite(Haken_ab, LOW);
  digitalWrite(Ausleger_Motor, LOW);
  digitalWrite(Ausleger_auf, LOW);
  digitalWrite(Ausleger_ab, LOW);
  digitalWrite(Drehen_Motor, LOW);
  digitalWrite(Drehen_links, LOW);
  digitalWrite(Drehen_rechts, LOW);
  digitalWrite(Blinklicht, LOW);

  delay(2000);

  // Es werden die Neutralstellungen des Senders eingelesen.
  // Die Knüppel des Senders müssen sich zu diesem Zeitpunkt in Neutralstellung befinden und dürfen nicht bewegt werden!

  PulsKanalA_Mitte = pulseIn(PinKanalA, HIGH, 50000);
  PulsKanalB_Mitte = pulseIn(PinKanalB, HIGH, 50000);
  PulsKanalC_Mitte = pulseIn(PinKanalC, HIGH, 50000);
  PulsKanalD_Mitte = pulseIn(PinKanalD, HIGH, 50000);
  PulsKanalE_Mitte = 1500;
  PulsKanalF_Mitte = 1500;
  PulsKanalA_Oben = PulsKanalA_Mitte + 50;
  PulsKanalA_Unten = PulsKanalA_Mitte - 50;
  PulsKanalB_Oben = PulsKanalB_Mitte + 50;
  PulsKanalB_Unten = PulsKanalB_Mitte - 50;
  PulsKanalC_Oben = PulsKanalC_Mitte + 50;
  PulsKanalC_Unten = PulsKanalC_Mitte - 50;
  PulsKanalD_Oben = PulsKanalD_Mitte + 50;
  PulsKanalD_Unten = PulsKanalD_Mitte - 50;

  PulsKanalA = PulsKanalA_Mitte;
  PulsKanalB = PulsKanalB_Mitte;
  PulsKanalC = PulsKanalC_Mitte;
  PulsKanalD = PulsKanalD_Mitte;
  PulsKanalE = PulsKanalE_Mitte;
  PulsKanalF = PulsKanalF_Mitte;

  // Wenn die Positionen gespeichert sind blinkt die LED am Krandach für 3 Sekunden.
  // Der Kran ist danach betriebsbereit.

  digitalWrite(Blinklicht, HIGH);
  delay(3000);
  digitalWrite(Blinklicht, LOW);
}

void loop()
{
  PulsKanalA = pulseIn(PinKanalA, HIGH, 50000);
  PulsKanalB = pulseIn(PinKanalB, HIGH, 50000);
  PulsKanalC = pulseIn(PinKanalC, HIGH, 50000);
  PulsKanalD = pulseIn(PinKanalD, HIGH, 50000);
  PulsKanalE = pulseIn(PinKanalE, HIGH, 50000);
  PulsKanalF = pulseIn(PinKanalF, HIGH, 50000);

  if (PulsKanalA == 0)
  {
    PulsKanalA = 1500;
  }
  if (PulsKanalB == 0)
  {
    PulsKanalB = 1500;
  }
  if (PulsKanalC == 0)
  {
    PulsKanalC = 1500;
  }
  if (PulsKanalD == 0)
  {
    PulsKanalD = 1500;
  }
  if (PulsKanalE == 0)
  {
    PulsKanalE = 1500;
  }
  if (PulsKanalF == 0)
  {
    PulsKanalE = 1500;
  }

  // Kran links drehen (Kanal A, linker Knüppel nach links)
  if (PulsKanalA > PulsKanalA_Oben)
  {
    Drehen_Speed = (PulsKanalA-PulsKanalA_Oben)*10/13;
    if (Drehen_Speed > 255)
    {
      Drehen_Speed = 255;
    }
    digitalWrite(Drehen_links, HIGH);
    digitalWrite(Drehen_rechts, LOW);
    analogWrite(Drehen_Motor, Drehen_Speed);
  }

  // Kran rechts drehen (Kanal A, linker Knüppel nach rechts)
  if (PulsKanalA < PulsKanalA_Unten)
  {
    Drehen_Speed = (PulsKanalA_Unten-PulsKanalA)*10/13;
    if (Drehen_Speed > 255)
    {
      Drehen_Speed = 255;
    }
    digitalWrite(Drehen_links, LOW);
    digitalWrite(Drehen_rechts, HIGH);
    analogWrite(Drehen_Motor, Drehen_Speed);
  }

  // Kran Stand (Kanal A, linker Knüppel neutral)
  if (PulsKanalA < PulsKanalA_Oben && PulsKanalA > PulsKanalA_Unten)
  {
    Drehen_Speed = 0;
    digitalWrite(Drehen_links, LOW);
    digitalWrite(Drehen_rechts, LOW);
    analogWrite(Drehen_Motor, Drehen_Speed);
  }

  // Aueleger heben (Kanal C, rechter Knüppel nach links)
  if (PulsKanalC > PulsKanalC_Oben)
  {
    Ausleger_Speed = (PulsKanalC-PulsKanalC_Oben)*10/13;
    if (Ausleger_Speed > 255)
    {
      Ausleger_Speed = 255;
    }
    digitalWrite(Ausleger_auf, HIGH);
    digitalWrite(Ausleger_ab, LOW);
    analogWrite(Ausleger_Motor, Ausleger_Speed);
  }

  // Aueleger senken (Kanal C, rechter Knüppel nach rechts)
  if (PulsKanalC < PulsKanalC_Unten)
  {
    Ausleger_Speed = (PulsKanalC_Unten-PulsKanalC)*10/13;
    if (Ausleger_Speed > 255)
    {
      Ausleger_Speed = 255;
    }
    digitalWrite(Ausleger_auf, LOW);
    digitalWrite(Ausleger_ab, HIGH);
    analogWrite(Ausleger_Motor, Ausleger_Speed);
  }

  // Aueleger Stand (Kanal C, rechter Knüppel neutral)
  if (PulsKanalC < PulsKanalC_Oben && PulsKanalC > PulsKanalC_Unten)
  {
    Ausleger_Speed = 0;
    digitalWrite(Ausleger_auf, LOW);
    digitalWrite(Ausleger_ab, LOW);
    analogWrite(Ausleger_Motor, Ausleger_Speed);
  }

  // Haken heben (Kanal D, rechter Knüppel rauf)
  if (PulsKanalD > PulsKanalD_Oben)
  {
    Haken_Speed = (PulsKanalD-PulsKanalD_Oben)*10/13;
    if (Haken_Speed > 255)
    {
      Haken_Speed = 255;
    }
    digitalWrite(Haken_auf, HIGH);
    digitalWrite(Haken_ab, LOW);
    analogWrite(Haken_Motor, Haken_Speed);
  }

  // Haken senken (Kanal D, rechter Knüppel runter)
  if (PulsKanalD < PulsKanalD_Unten)
  {
    Haken_Speed = (PulsKanalD_Unten-PulsKanalD)*10/13;
    if (Haken_Speed > 255)
    {
      Haken_Speed = 255;
    }
    digitalWrite(Haken_auf, LOW);
    digitalWrite(Haken_ab, HIGH);
    analogWrite(Haken_Motor, Haken_Speed);
  }

  // Haken Stand (Kanal D, rechter Knüppel neutral)
  if (PulsKanalD < PulsKanalD_Oben && PulsKanalD > PulsKanalD_Unten)
  {
    Haken_Speed = 0;
    digitalWrite(Haken_auf, LOW);
    digitalWrite(Haken_ab, LOW);
    analogWrite(Haken_Motor, Haken_Speed);
  }

  // Blinklicht an (Kanal E, Schalter oben)
  if (PulsKanalE > 1500)
  {
  digitalWrite(Blinklicht, HIGH);
  }

  // Blinklicht aus (Kanal E, Schalter oben)
  if (PulsKanalE < 1500)
  {
  digitalWrite(Blinklicht, LOW);
  }
}

Neben dem Arduino sitzt noch eine Buchse. Hier wird der Schalter angesteckt um den Kran ein- und auszuschalten. Da der Kran sonst sofort eingeschaltet wäre, wenn er am Gleis steht. Er darf aber nur eingeschaltet sein, wenn auch der Sender eingeschaltet ist.

An der Seite des Gehäuses wird ein kleiner Schalter eingebaut. Hier kann der Kran eingeschaltet werden.

Den Schalter habe ich wiederum mit Zwei-Komponenten-Kleber eingeklebt.

Da der Haken von Märklin etwas zu leicht war, habe ich mir einen schwereren Haken gekauft. Der Haken von Märklin hatte den Nachteil, dass beim Senken des Hakens dieser immer mit der Hand nach unten gezogen werden musste, weil die Schwerkraft nicht genügte. Mit den neuen etwa drei mal so schweren Haken passiert das nicht mehr. Er ist zwar etwas überdimensioniert, aber er fällt wenigstens von selbst nach unten. Den Haken bekommt man bei Fechtner Modellbau.

Wichtig! Dem Haken liegt keine Seilrolle bei. Eine passende Seilrolle wäre z.B. "Seilrolle aus Metall mit Kugellager, 3 x 12 x 4 mm", erhältlich beim ebay Verkäufer "p-technische-entwicklungen" (Stand August 2023). Damit die Seilrolle mittig sitzt muss man links und rechts von ihr zwei kleine Messingrohre passend ablängen.

Nun habe ich mir noch etwas Zubehör bei Zapf Modell gekauft. Zum einen eine Holzkiste (Nr. 7001001), dann eine Kette (Nr. 900101) und vier Karabinerhaken (Nr. 900105). Die Holzkiste habe ich auf dem Kranschutzwagen angeklebt.

Dort drin sind zum einen die Anschlusskabel für den Kran. Wenn er auf den Stützen steht kann es nämlich passieren dass er keinen Kontakt zur Schiene hat. Daher kann ich die Krokodilklemmen ans Gleis klemmen und in die Miniatur-Steckverbindung an der Kupplung am Kran einstecken.

Zum anderen sind in der Kiste zwei Ketten für die Ladungsbefestigung, die ich mir aus der Kette und den Karabinerhaken gebastelt habe.

Ich habe den Kran mit einem angehängten Gewicht von 675 g getestet und die schwere Last hebt er ohne Probleme! Einfach klasse!

Anbei noch ein Video des Umbaus:

Weitere Bilder gibt es selbstverständlich in der Bildergalerie.