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.