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);
}
}

Documents pareils