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 :

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.

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.

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 champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.