NXT Motor

Die LEGO Mindstorms Bausätze liefern drei Gleichstrom-Servomotoren mit. Servomotoren können im Gegensatz zu einfachen Motoren nicht nur in der Geschwindigkeit eingestellt werden, sondern es können noch zusätzliche Daten ausgelesen und manipuliert werden.

Die Motoren können an 3 unterschiedlichen Motoranschlüssen angebracht werden. Diese sind durchgehend mit den Werten von 0 bis 2 nummeriert. Besser ist aber, wenn Sie die vordefinierten Funktionen dafür nutzen: "MOTOR_A", "MOTOR_B", "MOTOR_C". 

 

Motorstatus auslesen

Die verschiedenen Motoreigenschaften können mit dem folgenden Befehl "motorStatus = motorA.ReadFromNXT(nxtHandle)" ausgelesen werden (motorA ist ein Motorobjekt, siehe unten):

  • Port
    Der Anschluss des aktuellen Motors mit einem Wert zwischen 0 und 2.

  • Power
    Eine relative Geschwindigkeit zwischen -100 und 100, mit der der Motor dreht (Achtung: abhängig vom Batterieladestand). Bei 100% Geschwindigkeit schafft der Motor eine Umdrehung von ungefähr 850 Grad pro Sekunde.

  • IsRunning
    Ein boolscher Wert, der angibt, ob der Motor gerade aktiv ist.

  • SpeedRegulation
    Ein boolscher Wert, der wahr ist, wenn mehrere Motoren synchronisiert werden (mehrere Motoren siehe unten).

  • TachoLimit
    Anzahl der geplanten Umdrehungen in Grad (360 Grad sind eine Umdrehung).

  • TachoCount
    Anzahl der bereits durchgeführten Umdrehungen in Grad seit dem letzten Start (360 Grad sind eine Umdrehung).

  • Position
    Anzahl der bereits durchgeführten Umdrehungen in Grad seit letztem Reset (siehe unten).

 

Motorobjekt instanziieren

Um einen Motor zu starten, muss vorab ein Motorobjekt instanziiert werden. Dieses beinhaltet die Startwerte für den Motor und dient auch für den Zugriff auf den Motor. Folgende Motorwerte können beim Erstellen oder anschließend angegeben werden:

motorA = NXTMotor();
motorA.Port = MOTOR_A;
motorA.Power = 10;
motorA.TachoLimit = 42;

Oder in der Kurzschreibweise:

motorA = NXTMotor('A', 'Power', 10, 'TachoLimit', 42);

 

Motor starten und anhalten

Um einen Motor zu starten, müssen die Kennwerte eines Motor-Objekt an den NXT-Brick übermittelt werden. Dazu müssen Sie folgenden Befehl angeben:

motorA.SendToNXT(nxtHandle);

Wenn Sie ein "TachoLimit" angegeben haben, läuft der Motor bis das TachoLimit erreicht wird und hält dann an, anderfalls läuft er "unendlich" lang. Um auf die Beendigung eines Motorlaufs zu warten, existiert der Befehl "WaitFor". WaitFor bleibt solange in der Zeile stehen, bis der Motor sein TachoLimit erreicht hat:

motorA.WaitFor(nxtHandle);
motorA.WaitFor(3, nxtHandle); % Wartet maximal 3 Sekunden

Hinweis: Wenn Sie WaitFor für einen Motor mit einem TachoLimit von 0 Grad aufrufen, wird lediglich eine Warnung ausgeben und das Programm sofort fortgesetzt!

Um einen Motor wieder zu stoppen, geben Sie folgenden Befehl ein:

motorA.Stop(nxtHandle); % Bremse nach dem Halt nicht angezogen lassen
motorA.Stop('Off', nxtHandle); % Bremse nach dem Halt nicht angezogen lassen
motorA.Stop('On', nxtHandle);  % Bremse nach dem Halt angezogen lassen (Motor bleibt unter Strom!)

 

Mehrere Motoren

Sie können abweichend auch bis zu 2 Motoren gleichzeitig starten, wenn diese mit den gleichen Parametern konfiguriert werden. Geben Sie dazu abweichend zu den oben gelernten Parametern für den Port-Parameter 2 Werte an, z.B.

motorBC = NXTMotor('BC', 'Power', 10, 'TachoLimit', 360);

oder 

motorBC = NXTMotor();
motorBC.Port = [MOTOR_B MOTOR_C];

 

Zähler für die Motorumdrehung zurücksetzen

Bei jedem Start wird der "TachoCount"-Zähler für den Motor zurückgesetzt. Um die Gesamtzählung zurücksetzen zu lassen, geben Sie den Befehl "motorA.ResetPosition(nxtHandle)" ein.