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'''.
 
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}}
29 917

modifications

Menu de navigation