LeJOS Moteurs
Transcription
LeJOS Moteurs
Contrôle de moteurs LEJOS La classe de Motor Une instance pour chaque port Motor.A Motor.B Motor.C Cette classe vous laisse contrôler les moteurs et aller chercher des données des moteurs. Programme 1 - Mouvement Classe Nom de la méthode Notes Motor forward () Moteur tourne en avant backward () Moteur tourne en reculons changeDirection () Tourne du sens inverse stop () Arrêter le moteur Button waitForPress () Attendre qu’un bouton soit appuyé LCD drawString (String str, int x, int y) Écrit du texte sur l’écran Programme 1 - Mouvement Le programme devrait: 1.Faire tourner moteur A en avance. 2.Écrire “AVANCE” sur l’écran 3.Attendre qu’un bouton soit appuyé. 4.Faire tourner moteur A en reculons. 5.Écrire “RECULE” sur l’écran. 6.Attendre qu’un bouton soit appuyé. 7. Arrêter le moteur. Programme 1 (Solution) import lejos.nxt.*; // requis pour tous programmes sur NXT /** *Moteur avance et recule quand bouton appuyé. */ public class BasicMotorTest *; // nom du programme { public static void main(String[] args) *; //requis pour tous programmes { Motor.A.forward(); LCD.drawString("FORWARD", 0, 0); Button.waitForPress(); Motor.A.backward(); // pourrait utiliser Motor.A.reverseDirection au lieu LCD.drawString("BACKWARD", 0, 1); Button.waitForPress(); Motor.A.stop(); } } Programme 3 - Rotation NXT peut déterminer à exactement quel angle est tourné le moteur Classe Nom de la méthode Notes Motor rotate(angle) Fait une rotation avec un certain angle rotateTo(angle) Fait une rotation jusqu’{ un certain angle rotateTo(angle,true) setSpeed(int speed) Programme 3 - Rotation Le programme devrait: 1.Faire tourner moteur A une rotation complète. 2.Attendre qu’un bouton soit appuyé 3.Rotation { l’angle 0 (zéro) 4.Attendre qu’un bouton soit appuyé 5.Change la vitesse à 720 6.Répéter les étapes de 1 à 6 Programme 3 (Solution) import lejos.nxt.*; public class RotationTest { public static void main(String args[]) { Motor.A.rotate(720); Button.waitForPress(); Motor.A.rotateTo(0); Button.waitForPress(); Motor.A.setSpeed(800); Motor.A.rotate(720); Button.waitForPress(); Motor.A.rotateTo(0); Button.waitForPress(); } } Programme 4 – Interruption de Rotation Le programme suivant arrête le moteur quand on pousse un bouton. Classe Nom de la méthode Notes Motor rotate(angle,immediateReturn) Retour immediate si le paramètre immediateReturn est true rotateTo(angle,immediateReturn) Button (boolean)isRotating() Retourne false quand le moteur a arrêté à l’angle spécifié int readButtons() Retourne le ID du bouton appuyé. Programme 4 - Interruption Le programme devrait: 1.Commence une rotation de 720 degrés. 2.Pendant que le moteur tourne, affiche le tacho sur l’écran (ligne 1) 3.Arrête le moteur quand un bouton est appuyé 4.Attendre qu’un bouton soit appuyé Programme 4 (Solution) import lejos.nxt.*; public class RotInterrupt { public static void main(String[] args) { Motor.A.rotate(720,true); while(Motor.A.isRotating()) { LCD.drawInt(Motor.A.getTachoCount(),4, 0, row); if(Button.readButtons()>0) Motor.A.stop(); } Button.waitForPress(); } } Autres méthodes pour moteurs Méthode Description boolean isMoving(); Utile pour voir si le moteur a arrêté de tourner boolean isRotating() Pour voir si le moteur est entrain de tourner int getLimitAngle() Retourne l’angle { laquelle le moteur va tourner boolean isRegulating() Pour voir si la règlementation est allumé int getSpeed() Retourne la vitesse que le moteur devrait tourner int getActualSpeed() Retourne la vitesse actuel int getPower() Retourne le pouvoir du moteur (entre 0 et 100) setPower(int aPower) Pour contrôller pouvoir du moteur (entre 0 et 100) *N’utilisez pas si règlementation allumé intgetMode() 1-Forward 2-Backward 3-Stop 4-Float boolean isForward() boolean isBackward() boolean isStopped() boolean isFloating() resetTachoCount() Reset du compteur de tacho et de l’origine lock() Applique de l’energie pour garder le moteur fixe. Bon pour des projets où on doit lever un poids. La classe de DifferentialPilot Plusieurs robots comprennent deux moteurs DifferentialPilot contrôle les moteurs pour naviguer le robot La commande DifferentialPilot(float wheelDiameter, float trackWidth, Motor leftMotor, Motor rightMotor, boolean reverse) Paramètres Diamètre des roues (utilisé pour calcule distance voyagée) Distance entre le centre de chaque roue Les ports à lesquels les moteurs sont branchés (A, B, C) Si mètrent les moteurs en marche avance ou recule (true ou false) Exemple DifferentialPilot monPilot = new DifferentialPilot (2.25f, 4.5f, Motor.A, Motor.C) Les sous-commandes de Pilot Commande Description Utilisation void setSpeed (int speed) Fixer la vitesse en degrés/sec. myPilot.setSpeed (1000) void Forward() Robot avance myPilot.Forward void Backward() Robot recule myPilot.Backward void Stop() Robot arrête myPilot.Stop void Travel(float distance) Voyage une certaine distance (même unité de mesure utilisé pour création du Pilot) myPilot.Travel (10f) void Travel(float distance, boolean immediateReturn) immediateReturn retourne au progamme avant que le voyage soit complété myPilot.Travel (10f, true) int getTravelDistance() Retourne la distance voyagée depuis dernier resetTachoCount() Int Distance Distance = myPilot.getTravelDistance void Rotate(intDegrees) Robot tourne nombre de degrés Positif (gauche), négatif (droit) (doit avoir mesure précis pour wheelDiameter et trackWidth) myPilot.Rotate(45) Pratique Ce robot arrête s’il frappe un objet avant de compléter son trajet: import lejos.nxt.*; import lejos.robotics.navigation.*; public class TravelTest { public static void main(String[] args) { DifferentialPilot monPilot=new DifferentialPilot(Pilot(2.25f, 4.5f, Motor.A, Motor.C); TouchSensor bump = new TouchSensor(SensorPort.S1); public void go() { monPilot.travel(20, true); while (monPilot.isMoving()) { if (bump.isPressed()) monPilot.stop(); } LCD.drawString(" "+monPilot.getTravelDistance()); Button.waitForAnyPress(); } } Programme 6 Programmez un robot pour voyager en forme de carreau en utilisant les méthodes de Travel() et Rotate() Programme 6 (Solution) import lejos.nxt.*; import lejos.navigation.Pilot; public static void main(String[] args) { Pilot myPilot = new Pilot (2.25f, 5.5f, Motor.A, Motor.C); int length = 20; for (int i = 0; i<4 ; i++) { pilot.travel(length); pilot.rotate(90); } }