Cours:MiniQ v2

De troyesGEII
Révision datée du 24 décembre 2015 à 12:29 par SergeMoutou (discussion | contributions) (Travail à faire : Exercice 1 (arduino))
Aller à : navigation, rechercher

Le robot MiniQ est vendu maintenant en version 2. C'est cette nouvelle version qui va nous intéresser dans ce chapitre.

Programmation avec arduino

Le robot miniQ est architecturé autour d'un processeur ATMega32U4. C'est le processeur qui équipe les cartes Leonardo et il est d'ailleurs complètement compatible. Il faut donc changer de board qui est par défaut "Arduino UNO" qui est essentiellement utilisé pour les TPs.

Le processeur 32U4 est capable de gérer une liaison série USB sans l'aide d'un circuit spécialisé (FTDI par exemple). L'inconvénient de ce processeur est que sa partie matérielle consacrée aux périphériques n'est pas complètement compatible avec celle du UNO (ATMega328). La bonne nouvelle c'est que l'environnement Arduino est capable de gommer ces différences.

Le schéma peut être trouvé sur cette page commerciale avec des exemples de code et des exercices en anglais.

En résumé :

  • La carte Arduino équivalente est la : Arduino Leonardo
  • Le programmateur d'origine est : AVR ISP
  • Le port série est en général /dev/ACMO sous Linux

Utilisation de analogWrite() pour la MLI

Commande d'un moteur à l'aide d'un timer

On rappelle que pour faire varier la vitesse d'un moteur il suffit de faire varier sa tension de commande. En général ceci est réalisé avec un signal MLI (signal à rapport cyclique variable). Le rapport cyclique varie entre 0 et 1, mais les registres de commandes sont sur 8 bits et donc permettent une correspondance :

  • rapport cyclique = 0 alors commande = 0
  • rapport cyclique = 0,5 alors commande = 128
  • rapport cyclique = 1 alors commande = 255

Tout ceci se fait dans le monde Arduino avec une commande "analogWrite()"

La variable précédente permettra de commander le moteur gauche. Vous devez être capable à ce stade de le faire tourner plus ou moins vite avec l'incrémentation/décrémentation de la section précédente dans un sens fixé par vous même.

Indications :

  • Il y a deux sorties de commandes du moteur gauche (il faudra donc les positionner en sortie) :
    • broche 5 Arduino (PC6) pour la commande rapport cyclique variable
    • broche 12 Arduino (PD6) pour le sens de rotation
  • On vous donne le code source ci-dessous :
    • Le premier paramètre est ce qui ira dans la broche 12 : 0 pour marche en avant et 1 pour marche arrière
    • Le deuxième le rapport cyclique qui ira sur la broche 5
void MotorG(unsigned char M1_DIR,unsigned char M1_EN)//control the motor
{
  //////////M1-->left motor////////////////////////
  if(M1_DIR==0)//en avant
    digitalWrite(12,0);
  else
    digitalWrite(12,1);
  if(M1_EN==0)
    analogWrite(5,LOW);
 else
    analogWrite(5,M1_EN);
}

Indications : On complète la commande du moteur gauche par celle du moteur droit.

  • Il y a deux sorties de commandes du moteur droit (il faudra donc les positionner en sortie) :
    • broche 6 Arduino (PD7) pour la commande rapport cyclique variable
    • broche 7 Arduino (PE6) pour le sens de rotation
  • On vous donne le code source ci-dessous :
    • Le premier paramètre est ce qui ira dans la broche 7 : 0 pour marche en avant et 1 pour marche arrière
    • Le deuxième le rapport cyclique qui ira sur la broche 6
  • La commande Mi_EN (pour i=1 et i=2) qui choisit le rapport cyclique ne doit pas dépasser 75 !
void MotorD(unsigned char M2_DIR,unsigned char M2_EN)//control the motor
{
  //////////M2-->right motor////////////////////////
  if(M2_DIR==0)//en avant
    digitalWrite(7,0);
  else
    digitalWrite(7,1);
  if(M2_EN==0)
    analogWrite(6,LOW);
 else
    analogWrite(6,M2_EN);
}

Travail à faire : Exercice 1 (arduino)

Vous devez réaliser une commande du robot pour qu'il réalise un huit (deux cercles connectés par un point). Vous choisirez le rayon de vos cercles en jouant sur les rapports cycliques. Puis vous jouerez sur les temporisations pour gérer tout cela. Bien entendu, le fait qu'il n'y ait pas d'information de retour sur l'endroit où vous êtes complique un peu la mise au point.

Vous pouvez chercher à innover sur les trajectoires. Des étudiants, par exemple, ont mis deux obstacles et cherché à réaliser un créneau entre ces deux obstacles. Faites-vous plaisir. Il vous faut à tout prix comprendre comment on va en ligne droite et comment on tourne.

Suivre une source de lumière par Conversion Analogique Numérique

Le travail demandé dans cette section utilise encore la conversion analogique numérique. La différence est que maintenant c'est la position d'une source de lumière qui va faire changer les valeurs analogiques.

Étalonnage des capteurs

Détecteurs de lumière sur MiniQ version 2

Vous disposez de deux capteurs de lumière monté comme dans le schéma ci-contre. Utilisez une liaison série pour trouver les zones pour :

  • lumière au centre
  • lumière légèrement à droite
  • lumière très à droite
  • lumière légèrement à gauche
  • lumière très à gauche

Travail à faire exercice 2 : Réalisation d'un suivi de lumière

On vous demande de réaliser un programme capable de suivre parfaitement rotation de la source de lumière qui a servi au calibrage. Pour cela le robot devra tourner sur place.