105.06.2015Übung 10 - MdMT
Methoden der MedizintechnikÜbung zur Vorlesung
[email protected]@ovgu.de
Folge 10 – Smarter mit LEGO Objektorientierte Motoransteuerung
205.06.2015Übung 10 - MdMT
• Heute eine komplett mathefreie Übung.
Motivation
305.06.2015Übung 10 - MdMT
Verbesserte Ansteuerung des Motors Problem beim bisherigen Vorgehen (Übung 9, Aufgabe 1):
• Es ruckelt, da man die Dauer der Motorbewegung in MATLAB nur erraten kann.
Lösung: Motor „objektorientiert“ ansteuern
Vorteil: Sehr genaue Kontrolle über den Motor zu jeder Zeit
Nachteil: Mehr Schreibarbeit / das Programm wird länger
405.06.2015Übung 10 - MdMT
Einfache Ansteuerung LEGO-Motor% Bisher:
NXC_MotorControl(MOTOR_A,50,100,'false','Brake','true');
% ... Programm läuft sofort weiter (bevor Motor fertig ist)
505.06.2015Übung 10 - MdMT
Neu: Genauere Ansteuerung des LEGO-Motors
% "Voreinstellung" des Motors nach ProgrammstartmotorA = NXTMotor('A', 'Power', 100); % Motor A mit 100% LeistungmotorA.SpeedRegulation = false;motorA.TachoLimit = 60;motorA.ActionAtTachoLimit = 'Coast'; motorA.SmoothStart = false;
% ... irgendetwas anderes tun ... Motor steht noch still!
% Jetzt erst Start der vorkonfigurierten BewegungmotorA.SendToNXT();pause(0.1);
% ... irgendetwas anderes tun ...
% Änderung der Geschwindigkeit und% Motor hiermit (neu)startenmotorA.Power = 50;motorA.SendToNXT();pause(0.1);
605.06.2015Übung 10 - MdMT
Jetzt möglich: Auf den Motor „warten“ - DAS Mittel gegen Ruckeln und Piepsen% "Voreinstellung" des Motors nach ProgrammstartmotorA = NXTMotor('A', 'Power', 100); % Motor A mit 100% LeistungmotorA.SpeedRegulation = false;motorA.TachoLimit = 90;motorA.ActionAtTachoLimit = 'Coast'; motorA.SmoothStart = false;
% ... irgendetwas anderes tun ...
% Start der Vorkonfigurierten Bewegung!motorA.SendToNXT();pause(0.1);
% Auf Abschluss der Bewegung wartenmotorA.WaitFor(5,h); %(Max. Wartezeit in Sek., NXT-Handle)
% Änderung der Geschwindigkeit und % Motor nahtlos weiterlaufen lassenmotorA.Power = 100;motorA.SendToNXT();pause(0.1);
705.06.2015Übung 10 - MdMT
Noch besser: Motor endlos laufen lassen + dabei Geschwindigkeit ändern% "Voreinstellung" des Motors nach ProgrammstartmotorA = NXTMotor('A', 'Power', 100); % Motor A mit 100% LeistungmotorA.SpeedRegulation = false;motorA.TachoLimit = 0; % Motor dreht endlos und kann dabei % weiter auf Befehle reagieren – ohne % zu piepsenmotorA.ActionAtTachoLimit = 'Coast'; motorA.SmoothStart = false;
% Start der Vorkonfigurierten Bewegung!motorA.SendToNXT();pause(0.1);
% ... irgendetwas anderes tun, Motor läuft derweil weiter ...
% Änderung der Geschwindigkeit (hier: Stoppen des Motors)motorA.Power = 0;motorA.SendToNXT();pause(0.1);
805.06.2015Übung 10 - MdMT
Bitte berühren: Auslesen des TastsensorOpenSwitch(SENSOR_1);
% ... Schleifenstart u.a.
% „Messung“ des Zustandesschalter1IstGeradeGedrueckt = GetSwitch(SENSOR_1);
% ... Anders tun ...if (schalter1IstGeradeGedrueckt) %... Noch etwas anderes tun ... disp(1);else disp(2);end
% ... Schleifenende ...
CloseSensor(SENSOR_1);
905.06.2015Übung 10 - MdMT
Baue aus einem bzw. zwei Tastsensoren eine Fernsteuerung für einen LEGO-Motor.
Aufgabe 1Solange Taster 1 gedrückt gehalten wird, dreht sich der Motor linksherum mit 50% Leistung – mit Taster 2 entsprechend andersherum und 50% Leistung. Werden beide gleichzeitig gedrückt gehalten, dreht er linksherum mit 100% Leistung. Beim Loslassen stoppt er sofort. Verwende die erweiterte Art der Motoransteuerung (siehe diese Folien).
Aufgabe 2Wird Taster 1 angetippt, startet der Motor. Wird er nochmals angetippt, stoppt er wieder. Verwende die erweiterte Art der Motoransteuerung (siehe diese Folien).
Aufgaben - Proportionalsteuerung