Modifications

Sauter à la navigation Sauter à la recherche
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'''.
 
  −
By connecting an RC receiver and running this example program, you can turn your Zumo into a radio-controlled vehicle. With the [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|Zumo Shield Arduino Libraries]] installed, the sketch file can be opened in Arduino by selecting '''File > Examples > ZumoExamples > RCControl'''.
      
{{POLImage|Pololu-Zumo-Shield-Arduino-RC-Zumo-00.jpg|250px|Un robot Zumo branché avec un récepteur RC pour créer un véhicule contrôlé à distance}}  
 
{{POLImage|Pololu-Zumo-Shield-Arduino-RC-Zumo-00.jpg|250px|Un robot Zumo branché avec un récepteur RC pour créer un véhicule contrôlé à distance}}  
   −
An easy way to connect the receiver to the Zumo Shield is to solder two 1×3 male header strips {{polpl|966}} to the locations shown in the diagram below, then plug in a pair of standard servo cables <small>[https://www.pololu.com/category/112/servo-cables lien pololu]</small>between the receiver and the Zumo Shield. (If your receiver has a separate power source, you should only connect the signal and ground wires between it and the Zumo.)
+
Pour connecter facilement un récepteur sur le Shield Zumo, vous pouvez souder deux {{pl|76|connecteur/pinHeader mâle}} 1×3 broches {{polpl|966}} comme indiqué sur le diagramme ci-dessous. Ensuite, vous pouvez connecter une paire de câble servo <small>[https://www.pololu.com/category/112/servo-cables lien pololu]</small> entre le récepteur et les shield Zumo. (Si votre récepteur RC dispose d'une source d'alimentation séparée alors vous devriez uniquement connecter la masse et le source du signal vers votre Zumo.)
    
{{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.}}
   −
This program uses Arduino’s [http://arduino.cc/en/Reference/PulseIn PulseIn library] to read the signals from the receiver. 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}}
29 917

modifications

Menu de navigation