Ligne 1 : |
Ligne 1 : |
| {{Pololu-Zumo-Shield-Arduino-NAV}} | | {{Pololu-Zumo-Shield-Arduino-NAV}} |
− |
| |
− | {{traduction}}
| |
| | | |
| En connectant un récepteur RC (Radio Commande) et en exécutant ce programme d'exemple, vous pouvez transformer un Zumo en véhicule télécommandé. Si vous avez installé [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|la bibliothèque Shield Zumo pour Arduino]] alors vous trouverez le croquis/sketch Arduino via le point de menu '''Fichier > Exemples > ZumoExamples > RCControl'''. | | En connectant un récepteur RC (Radio Commande) et en exécutant ce programme d'exemple, vous pouvez transformer un Zumo en véhicule télécommandé. Si vous avez installé [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|la bibliothèque Shield Zumo pour Arduino]] alors vous trouverez le croquis/sketch Arduino via le point de menu '''Fichier > Exemples > ZumoExamples > RCControl'''. |
Ligne 11 : |
Ligne 9 : |
| {{POLImage|Pololu-Zumo-Shield-Arduino-RC-Zumo-01.png|600px|Diagramme de connexion du récepteur RC sur le shield Zumo.}} | | {{POLImage|Pololu-Zumo-Shield-Arduino-RC-Zumo-01.png|600px|Diagramme de connexion du récepteur RC sur le shield Zumo.}} |
| | | |
− | Ce programme utilise la [http://arduino.cc/en/Reference/PulseIn bibliothèque PulseIn] d'Arduino pour lire le signal en provenance du récepteur. By default, it assumes the throttle and steering channels are connected as the diagram shows on pins 4 and 5, respectively. The signals from the two channels are mixed to determine the left and right motor speeds, allowing for more intuitive control. | + | Ce programme utilise la [http://arduino.cc/en/Reference/PulseIn bibliothèque PulseIn] d'Arduino pour lire le signal en provenance du récepteur. Par défault, l'exemple par du principe que les canaux accélérateur (''throttle'') et direction (''steering'') sont connecté respectivement sur les broches 4 et 5 (comme sur le diagramme). Le signal des deux canaux est analysé pour déterminer la vitesse du moteur droit et moteur gauche (ce qui permet un contrôle plus intuitif). |
| + | |
| + | == Code == |
| + | Voici une copie de l'exemple avec traduction des commentaires pour vous aider à mieux comprendre le fonctionnement du croquis/sketch |
| + | |
| + | Nous recommandons de toujours charger l'exemple depuis les codes d'exemples de la bibliothèque Zumo. |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | #include <ZumoMotors.h> |
| + | |
| + | #define THROTTLE_PIN 4 // Canal accélération (throttle) du récepteur RC |
| + | #define STEERING_PIN 5 // Canal de direction (steering) du récepteur RC |
| + | #define LED_PIN 13 // broche de la LED utilisateur |
| + | |
| + | #define MAX_SPEED 400 // Vitesse max moteur |
| + | #define PULSE_WIDTH_DEADBAND 25 // Différence de largeur d'impulsion depuis 1500 us (microseconds) à ignorer (pour compenser l'offset/décalage de la position centrale) |
| + | #define PULSE_WIDTH_RANGE 350 // Différence de largeur d'impulsion depuis 1500 us qui doit être considéré comme l'amplitude totale de l'entrée (valeur max) |
| + | // Par exemple une valeur de 350 signifie l'utilisation d'une largeur d'impulsion (pulse width) <= 1150 us OU >= 1850 us |
| + | // est considérée comme ayant atteint l'amplitude maximale de l'entrée (de la manette de contrôle) |
| + | |
| + | |
| + | void setup() |
| + | { |
| + | pinMode(LED_PIN, OUTPUT); |
| + | |
| + | // Décommenter une ou deux ligne pour corriger la direction du moteur (si nécessaire) |
| + | //motors.flipLeftMotor(true); |
| + | //motors.flipRightMotor(true); |
| + | } |
| + | |
| + | void loop() |
| + | { |
| + | // accélération : Attend que l'entrée passe à HIGH puis démarre le compteur de temps. |
| + | // le comtpeur de temps est stoppé dès que le signal passe à LOW |
| + | int throttle = pulseIn(THROTTLE_PIN, HIGH); |
| + | // direction |
| + | int steering = pulseIn(STEERING_PIN, HIGH); |
| + | |
| + | int left_speed, right_speed; |
| + | |
| + | if (throttle > 0 && steering > 0) |
| + | { |
| + | // Les deux signaux RC sont correctes; allumer la LED |
| + | digitalWrite(LED_PIN, HIGH); |
| + | |
| + | // Le signal RC encode l'information sur un signal ayant une largeur d'impulsion "centrale" de 1500 us (microseconds); |
| + | // Soustraire 1500 pour obtenir une valeur centrée sur 0 |
| + | throttle -= 1500; |
| + | steering -= 1500; |
| + | |
| + | // Appliquer la zone morte (deadband) où toute variation du signal est ignoré |
| + | if (abs(throttle) <= PULSE_WIDTH_DEADBAND) |
| + | throttle = 0; |
| + | if (abs(steering) <= PULSE_WIDTH_DEADBAND) |
| + | steering = 0; |
| + | |
| + | // Combiner les valeurs d'accélération (throttle) et de direction (steering) pour |
| + | // obtenir la vitesse du moteur gauche et du moteur droit |
| + | left_speed = ((long)throttle * MAX_SPEED / PULSE_WIDTH_RANGE) - ((long)steering * MAX_SPEED / PULSE_WIDTH_RANGE); |
| + | right_speed = ((long)throttle * MAX_SPEED / PULSE_WIDTH_RANGE) + ((long)steering * MAX_SPEED / PULSE_WIDTH_RANGE); |
| + | |
| + | // Limiter les vitesses (borner) à des vitesses max |
| + | left_speed = min(max(left_speed, -MAX_SPEED), MAX_SPEED); |
| + | right_speed = min(max(right_speed, -MAX_SPEED), MAX_SPEED); |
| + | } |
| + | else |
| + | { |
| + | // Au moins un des signaux RC n'est pas correct; Eteindre la la LED et stopper les moteurs |
| + | digitalWrite(LED_PIN, LOW); |
| + | |
| + | left_speed = 0; |
| + | right_speed = 0; |
| + | } |
| + | |
| + | // Appliquer les vitesses sur les moteurs |
| + | ZumoMotors::setSpeeds(left_speed, right_speed); |
| + | } |
| + | </syntaxhighlight> |
| | | |
| {{Pololu-Zumo-Shield-Arduino-TRAILER}} | | {{Pololu-Zumo-Shield-Arduino-TRAILER}} |