Club robotique de Sophia-Antipolis

Accueil > Découverte > Pédagogie et robotique > Coups de pouce > Plateforme horizontale dynamique

Plateforme horizontale dynamique

mercredi 24 novembre 2010, par Julien H.

Mise à jour en avril 2011

Un robot qui roule, c’est chouette. Un robot qui grimpe, c’est encore mieux. Mais quand il s’agit de grimper et de conserver une plateforme horizontale au-dessus du robot, voilà un parfait sujet de projet.

C’est ce que Astro, élève de Terminale S option Sciences de l’Ingénieur (SI), a décidé de faire comme PPE (Projet Personnel Encadré). Nous lui apportons notre expérience en simplifiant sa mécanique : avec deux servomoteurs à 90° l’un de l’autre, on peut corriger l’assiette de la plateforme.

 Principe du montage}

Pour être plus explicite, un petit schéma sous Sketch’up est plus parlant :

PNG - 83.6 ko

L’électronique est simple :
- un accéléromètre électronique (puces MEMS) mesure la rotation dans chaque direction X et Y
- une carte programmée lit régulièrement ces valeurs et filtre les valeurs
- deux servomoteurs sont pilotés par le programme pour corriger l’erreur entre la valeur lue et la valeur de départ

Vu de dessous, on voit l’accéléromètre, qui doit être le plus possible centré avec les axes de rotation des servomoteurs.

PNG - 55 ko

 Composants et coût

La liste préalable

- 21 euros pour la carte programmable Arduino
- 4 euros pour le câble USB
- 20 euros pour la carte à accéléromètres (deux axes nécessaires)
- 20 euros pour les deux servomoteurs
- 6 euros de câbles simples
- 9 euros de fournitures de bricolage pour faire la plateforme

Soit un total de 80 euros !

 Photos du montage

Pour la réalisation, l’équipe a choisi un CUBLOC et des servomoteurs de EasyRobotics.

JPEG - 292 ko
JPEG - 232.7 ko

 Code source

Astro nous a donné des nouvelles du projet, et partage avec nous le code source en Basic du microcontrôleur CUBLOC 220 (qui est en fait un AVR ATmega128). Il utilise 5 pattes : 3 en entrée sur un convertisseur analogique/numérique, et 2 en sortie pour les servomoteurs.

  • Déclaration du micro-contrôleur utilisé (pour le compilateur) :
Const Device = CB220
  • Déclaration des constantes :
Const minY As Single=2000
Const maxY As Single=4000                      

Const minX As Single=3700                               '-30degres
Const maxX As Single=5000                               '+30degres
  • Déclaration des variables :
Dim mes_x As Integer
Dim mes_y As Integer
Dim mes_z As Integer

Dim acc_x As Single
Dim acc_y As Single
Dim acc_z As Single

Dim dx As Integer
Dim dy As Integer
Dim dz As Integer
       
Dim angle_x As Single
Dim angle_y As Single
Dim angle_z As Single

Dim pas As Single
Dim angle1 As Single
Dim angle2 As Single
Dim commande As Single
  • Configuration des pattes en PWM (0 et 1 sur P5 et P6) :
'Configure les port P5 et P6 en sortie
Low 5                                                          
Low 6
  • Ouverture de la boucle infinie :
Do
  • Lecture des 3 accéléromètres :
        mes_x=Adin(0)
        mes_y=Adin(1)
        mes_z=Adin(2)
  • Normalisation des mesures (enlever la moyenne lue à l’horizontale et mettre sur une échelle commune entre -PI et PI :
        acc_x=(mes_x-337.0)/167.0
        acc_y=(mes_y-345.0)/160.0
        acc_z=(mes_z-337.0)/167.0
  • Conversion en deux angles (voir le modèle 3D ci-dessus) :
 
        angle1=Atan acc_x/(Sqr(acc_y*acc_y+acc_z*acc_z))
        angle2=Atan acc_y/(Sqr(acc_x*acc_x+acc_z*acc_z))
  • Conversion en degrés et affichage pour vérifier les valeurs lors des tests :
        angle1=angle1/3.14257*180
        angle2=angle2/3.14257*180
          
           Debug "angle1 = ", Float angle1,Cr
           Debug "angle2 = ", Float angle2,Cr
  • Commande du servomoteur en X en fonction de l’angle (dès que la variation dépasse 2 degrés) :
        If (angle1>2) Or (angle1<-2) Then
                pas=-20.0
                commande=angle1*pas+4350
                dx=commande
                Pwm 0, dx, 32768        
        Else
                dx=4350
                Pwm 0, dx, 32768
        Endif
  • Idem pour le servomoteur en Y :
        If (angle2>2) Or (angle2<-2) Then
                pas=20.0
                commande=angle2*pas+3000
       dy=commande
       Pwm 1, dy, 32768    
        Else
       dy=3000
       Pwm 1, dy, 32768
   Endif
  • Fin de la boucle, avec un retour à la ligne (Cr = Carriage return) dans le debug et une pause de 200 ms :
        Debug  Cr
        Delay 200
       
Loop

Et ça reprend à "Do" en haut.

Voilà, bravo Astro et bon courage pour la suite.

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document