• Herzlich willkommen!

    Das Team von »Doctor Brick« heißt Euch herzlich willkommen und wünscht Euch viel Spaß hier!
    »Doctor Brick« ist eine anerkannte Community (RLOC) für erwachsene LEGO Enthusiasten, auch AFOLs (= Adult Fans Of LEGO) genannt.
    Wir können uns hier über alle Belange des LEGO Hobbys austauschen wie z.B. Set- und Teilefragen, Vorstellung und Rezensionen von Legobauten.
    Bitte beachtet die Nutzungsbedingungen und den Verhaltensleitfaden.

[WIP] Der alte Mann auf seinen Kanälen

DerAlteMannUndDerStein

Brückenleger
Ehren-Doctor
Registriert
4 Nov. 2021
Beiträge
2.594
Ort
Renningen, Baden-Württemberg
Falls da Fragen kommen: immer her damit.
Hallo Werner,

hier kommt meine erste pyBricks-Frage (ohne Gewähr, dass da noch weitere kommen).

Ich treibe meine Spur-1-Ludmilla mit vier PU-Motoren an, die mit einem zentralen Technic-Hub verbunden werden.
Alle vier Motoren sollen in der Lok genau dasselbe machen.

Wie fasse ich die vier Motor-Objekte in pyBricks als ein Objekt zusammen.
Mit dem neuen Objekt "Motoren" möchte ich dann das Programm schreiben.

Viele Grüße
Martin

1724087497355.jpeg
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.969
Wie fasse ich die vier Motor-Objekte in pyBricks als ein Objekt zusammen.
Hallo, das weiß leider auch nicht, kann kein python :facepalm:.
Du müsstest eine Klasse "Motoren" bilden, die die 4 Motoren als Instanzen hat.
In der Klasse muss auch die Klasse "Motor" bekannt sein.
So in etwa:

Python:
class Motoren():
    def __init__(self,port):
        self.port = port
 
motor1 = Motoren(Port.A)
motor2 = Motoren(Port.B)
motor3 = Motoren(Port.C)
motor4 = Motoren(Port.D)

Und benutzt dann eine Klassenvariable v,die Du extern änderst.
Vielleicht weiß ja jemand wie das geht.

Ich mache es umständlich, geht aber auch:

Python:
from pybricks.pupdevices import  Motor
from pybricks.parameters import Port
from pybricks.tools import wait

# Routine zum Fahren
def drive(v):
    for i in range(1,3):
        motor[i].run(v)
        if v == 0:
            motor[i].stop

# Setzen der Paramter
def SetLimits(s,a,t):
    for i in range(1,3):
        motor[i].control.limits(s,a,t)

# definieren der Motoren

motor = [0,0,0]
motor[1] = Motor(Port.A)
motor[2] = Motor(Port.B)

SetLimits(1310,300,100)

while True:
  
    drive(1200)
    wait (2000)
    drive(0)
    wait(2000)

Evtl musst Du die Lastregelung noch anpassen, damit die Motoren nicht "gegeneinander" arbeiten.
 
Zuletzt bearbeitet:

s4scha

Mitglied
Registriert
23 Aug. 2021
Beiträge
141
Python Know-how könnte ich beisteuern, nur die pybricks Library habe ich mangels Equipment noch nie benutzt (rofl)

Ich müsste erstmal wissen, welche Funktionen von der Klasse Motor alle relevant sind. Grundsätzlich sollte das nämlich kein Thema sein, eine Aktion auf allen vier Motoren gleichzeitig zu setzen.

Sind run, stop und limits die Funktionen, die man brauchen würde, damit die Lok alles kann, was man so braucht?
 

grawuli

Urgestein
Registriert
2 Mai 2018
Beiträge
1.625
Ort
Minga
Hallo Martin,

ich hab mal was erstellt:

Python:
# Lokomotive mit maximal 4 Motoren an einem Technic-Hub steuern
# (c) 2024, MBr aka grawuli


# Edit > Code vom Autor entfernt

Bei Fragen einfach melden.

Edit: Programm ist hier zu finden
 
Zuletzt bearbeitet:

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.969
Ich müsste erstmal wissen, welche Funktionen von der Klasse Motor alle relevant sind.
Warum ?
Wenn man weiß wie drei gehen kann man die weitere selbst dranfummeln :giggle:

Sind run, stop und limits die Funktionen, die man brauchen würde, damit die Lok alles kann, was man so braucht?
Yes! Für den Anfang, das muss aber Martin schreiben/wissen.
Ich nutze die drei in meinen Programmen für Loks. ("limits" heisst "control.limits", und es gibt auch noch "DCMotor" u.v.a.m, ist aber hier nicht relevant.

Idee: noch einfacher und universeller wäre
wäre z.B.
ports = "A,B,C,D"

def drive(v):
for p in ports:
Motor(port.x).run v

Dann könnt die Definition einzelner ganz Instanzen entfallen.

Oder eben, elegant, eine Klasse "Motoren", mit 4 Instanzen, und dann für jede Instanz der Klasse den Befehl ausführen, da fehlt mir die Idee wie man das schreibt und wäre für Beispiele echt dankbar. Testen kann ich ab morgen früh wieder. Mit HW :clap:
 
Zuletzt bearbeitet:

DerAlteMannUndDerStein

Brückenleger
Ehren-Doctor
Registriert
4 Nov. 2021
Beiträge
2.594
Ort
Renningen, Baden-Württemberg
Vielen Dank für Eure tatkräftig Unterstützung.

Ich habe mittlerweile einen ziemlich schlanken Sourcecode beieinander, der viel von Euren Ideen enthält und funktioniert.
Python:
from pybricks.hubs import TechnicHub
from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait

#Zusammenfassen der vier Motoren zur Klasse MultiMotor
class MultiMotor:
    def __init__(self, port1, port2, port3, port4):
        # Initialisiere die vier Motoren
        self.motor1 = Motor(port1)
        self.motor2 = Motor(port2)
        self.motor3 = Motor(port3)
        self.motor4 = Motor(port4)
    
    def run(self, speed):
        # Lasse alle Motoren mit der gleichen Geschwindigkeit laufen
        self.motor1.run(speed)
        self.motor2.run(speed)
        self.motor3.run(speed)
        self.motor4.run(speed)
    
    def stop(self):
        # Stoppe alle Motoren
        self.motor1.stop()
        self.motor2.stop()
        self.motor3.stop()
        self.motor4.stop()
Die Testanwendung ist dann nur noch ein 5-Zeiler
Python:
# Beispiel zur Verwendung
hub = TechnicHub()
multi_motor = MultiMotor(Port.A, Port.B, Port.C, Port.D)

# Alle Motoren auf 500 Geschwindigkeit laufen lassen
multi_motor.run(500)
wait (10000)

# Alle Motoren stoppen
multi_motor.stop()

#Weitere Schritte:
# 1. Kleines Demovideo
# 2. Dieses Programm erweitern
# 3. Motoren verbinden und auf Gleis testen
Nochmals vielen Dank an Euch. Mal sehen, ob die 5 Codezeilen auch so kräftig sind, dass sie später meine Spur-1-Ludmilla antreiben können ;-)

Ich habe gesehen, dass Programmieren dem alten Mann ziemlich gut tut. Dieses Hobby habe ich ja beruflich mehrere Jahrzehnte betrieben. Allerdings sind die meisten Programme dabei noch in good-old-FORTRAN geschrieben. Meinen ersten Programmierkurs habe ich 1977 im Rechenzentrum der Uni Stuttgart belegt. Damals noch mit Lochkarten.

Programmieren ist für mich also immer auch eine Zeitreise.

Viele Grüße
Martin
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.969
ob die 5 Codezeilen auch so kräftig sind,
"hub" brauchst Du nicht ;-)
Bleiben vier.

Und in "def run" etc. wäre ein "for each" schick. Aber das ist natürlich Geschmackssache , aber es ginge dann auch z.B. für nur 2 Motoren.
Also die Ports in einer Liste [ ] an multi_motor übergeben, die merken und dann immer abarbeiten.
 

DerAlteMannUndDerStein

Brückenleger
Ehren-Doctor
Registriert
4 Nov. 2021
Beiträge
2.594
Ort
Renningen, Baden-Württemberg
Und in "def run" etc. wäre ein "for each" schick
Danke Werner!
Das liest sich bereits schick!

Mit dem Hub hab ich noch was vor. Aber für das Rumpfprogramm habe ich jetzt einen 4-Zeiler und die wait- und stop-Zeile könnte ich auch noch rausschmeißen. Finde ich ganz gut und kompakt so.

Da war früher in meiner Fortranwelt ziemlich viel noch nicht möglich. Naja ich bin ja auch schon älter und habe bereits an Stonehenge mitgearbeitet. Wobei sich diese Steine nie so richtig durchgesetzt haben. Aber das ist eine andere Geschichte...

Ich freue mich auf jeden Fall sehr, dass Du und die anderen mich wieder mit pyBricks motiviert haben. Programmieren haben übrigens die Schwaben, Sachsen und Schotten (bekannt als triple-S) erfunden. Man kann während des Programmieren nämlich viel Geld sparen...

Viele Grüße
Martin
 

s4scha

Mitglied
Registriert
23 Aug. 2021
Beiträge
141
@DerAlteMannUndDerStein So in der Art hatte ich das gestern Abend auch schon vor dem inneren Auge. Ich wusste nur nicht, ob run und stop dann schon alle Funktionen sind, die man braucht. Die Klasse Motor exportiert ja so einige Methoden und auf die Schnelle bin ich aus der Doku nicht dahintergekommen, welche Funktionen man wirklich für den einfachen Fahrbetrieb braucht.
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.969
Hallo @DerAlteMannUndDerStein , @s4scha , @grawuli
Ich habe das Thema "Python" mal verlagert, da die eigentliche Frage ja hier beantwortet ist
 

DerAlteMannUndDerStein

Brückenleger
Ehren-Doctor
Registriert
4 Nov. 2021
Beiträge
2.594
Ort
Renningen, Baden-Württemberg
Liebe Freunde des Maßstabs,

aktuell baue ich in Stud.io eine größere Variante des Neuen Rathauses von Hannover. Das kleinere Modell steht bei mir im Wohnzimmer. Vermutlich muss ich den "Höhenrausch" bald beenden. Für die Größe fehlt mir Platz, Geld und auch Stauraum im Auto. Wenn ich tatsächlich zum Realbau komme, plane ich, dass man die Kuppel nach vorne herausfahren kann. Dann sieht der Betrachter auch die Innenkonstruktion der Kuppel, die ich für ziemlich sehenswert erachte. Irgendwann muss ich mal persönlich nach Hannover. Da hilft alles nichts.
2024-09-15 18_59_24-Instagram-V11.pptx - PowerPoint.png

Viele Grüße
Martin
 

DerAlteMannUndDerStein

Brückenleger
Ehren-Doctor
Registriert
4 Nov. 2021
Beiträge
2.594
Ort
Renningen, Baden-Württemberg
Liebe Freunde des Maßstabs,

nach 5 kleinen Modellen kommt heute das erste "größere" der PRR Q2 an die Reihe. Der Vorschlag zu der ziemlich interessanten Lok kam aus meiner Community. Im Gegensatz zum Big Boy ist die Q2 legotechnisch noch nicht so sehr erforscht worden.2024-09-17 12_15_29-Instagram-V11.pptx - PowerPoint.png
Mit dem Maßstab 1:52 möchte ich mich nicht allzu lange aufhalten. Es wartet auch eine Ausgabe, die ich auf "echte" Legoschienen stellen kann.

Viele Grüße
Martin
 

DerAlteMannUndDerStein

Brückenleger
Ehren-Doctor
Registriert
4 Nov. 2021
Beiträge
2.594
Ort
Renningen, Baden-Württemberg
Liebe Freunde des Maßstabs,

aktuell erhalte ich auf meinen social media Kanälen deutlich mehr Kommentare zum Rathaus in Hannover als zur Q2 aus den USA. Die Leute setzen sich mit dem Rathaus aktiv auseinander. Die Lok wird nur "konsumiert".2024-09-18 08_29_52-Instagram-V11.pptx - PowerPoint.png
Aktuell verbinde ich beim Rathaus die Außen- mit der Innenwelt. Glücklicherweise gibt es viele YouTube-Videos vom Innenraum. Das macht es mir deutlich einfacher. Das Rathaus habe ich noch nie in echt gesehen. Dennoch kenne ich mich schon recht gut aus.

Viele Grüße
Martin
 

ellermaniac

Nebenbahner
Registriert
24 Mai 2019
Beiträge
2.801
Ort
Osnabrück
ich bin zu einem Märklin-Spur1-Treffen eingeladen. Dort darf ich auch meine Ludmilla ein paar Runden fahren lassen. Damit man gut von der Lego- in die Märklin-Welt kommt, habe ich den #DamudsAdapter entworfen. Die Lücke im Gleisverlauf liegt zu 100% auf der Märklin-Seite. Diese Modellbauer dürfen auch Sägen verwenden. Das heißt, das Schließen der Lücke ist nicht mein Job.

Moin Martin,

habe gerade die Aufgabe, für eine Spur 0 Geisterwagen eine Antriebseinheit zu entwickeln.

Kannst du mir sagen, auf welche Breite ich den Abstand der Räder optimalerweise anlege? Also wie viele Noppen müssen zwischen die Räder, um auf die 32 mm Spur zu passen.

Und was ist mit den Lego-Radsätzen? Sind die Spurkränze zu hoch für Standard Spur 0 Gleise?

Gruß,
Christoph
 
Oben