Modifications

Sauter à la navigation Sauter à la recherche
5 240 octets ajoutés ,  20 août 2016 à 10:47
aucun résumé de modification
Ligne 1 : Ligne 1 :  
{{Hack-MotorSkin-NAV}}
 
{{Hack-MotorSkin-NAV}}
  −
{{traduction}}
      
== Préambule ==
 
== Préambule ==
Ligne 178 : Ligne 176 :     
== Boutons utilisateurs ==
 
== Boutons utilisateurs ==
x
+
Motor-Skin dispose de 4 boutons poussoirs (SW1 à SW4) que vous pouvez utiliser pour réaliser une interface utilisateur.
 +
 
 +
[[Fichier:Hack-MotorSkin-Tester-20.jpg|320px]]
 +
 
 +
Vous pouvez très facilement tester l'état d'un bouton à l'aide de la fonction {{fname|button_pressed(button_nr)}} où button_nr est le numéro de bouton de 1 à 4.
 +
 
 +
La fonction retourne True si le bouton est pressé et False si le bouton n'est pas pressé.
 +
 
 +
<syntaxhighlight lang="python">
 +
from r2wheel import Robot2Wheel
 +
r2 = Robot2Wheel()
 +
# Tester le bouton 1
 +
print( r2.button_pressed(1) )
 +
</syntaxhighlight>
 +
 
 +
N'hésitez pas saisir plusieurs fois la dernière ligne en pressant et/ou relâchant le bouton 1.
 +
 
 +
Voici un tout petit bout de code qui permet de tester facilement les 4 boutons. Il affiche le nom du bouton enfoncé.
 +
 
 +
Pressez {{fname|Ctrl+C}} pour arrêter le script.
 +
 
 +
<syntaxhighlight lang="python">
 +
while True:                                                               
 +
    for i in range(1,5): # de 1 à 4                                               
 +
        if r2.button_pressed( i ):                                         
 +
            print( 'bouton SW%i active' % i )                             
 +
            delay( 100 )
 +
</syntaxhighlight>
    
= Corriger la dérive =
 
= Corriger la dérive =
x
+
{{ambox|text=Ce point n'est pertinent que si vous avez besoin de parcourir des distances relativement importantes en ligne droite.}}
 +
== Qu'est-ce que la dérive ==
 +
Deux moteurs d'un même fabricant et d'un même modèle ne sont {{underline|jamais totalement}} identiques.
 +
 
 +
La raison? d'infimes différences provoqués par les processus de fabrication, les jeux (différents d'un moteur à l'autre) mais aussi l'alignement des moteurs sur votre plateforme robotique. Dans le même ordre d'idée, un pneu plus usé que l'autre aura un diamètre légèrement inférieur... et parcourra une distance légèrement inférieur à chaque tour de roue. Les moteurs sont donc identiques mais pas tout à fait!
 +
 
 +
Dans la vie réelle, les deux moteurs ne tournent pas exactement à la même vitesse... il y en a toujours un qui est un poil plus lent. De même, les deux roues n'étant pas rigoureusement identiques, elles ne parcourent pas exactement la même distance à chaque tour de roue. Même si cette distance est inférieur à 1/10mm, au bout de 500 tours, cela fait quand même une différence de 50mm (5 cm)... par rapport à l'autre moteur.
 +
 
 +
Voila, vous venez de découvrir la cause de la dérive... et comme vous pouvez le constater, son effet ne se fait ressentir que sur des distances relativement importante.
 +
 
 +
[[Fichier:RB-2-WHEEL-MOVE-Derive.jpg|900px]]
 +
 
 +
== Comment corriger la dérive ==
 +
{{underline|'''La solution consiste'''}} à ralentir le moteur "''trop rapide''" (celui qui parcours trop de distance). C'est pour cela que nous avons besoin du contrôle PWM, afin de pour pouvoir contrôler la dérive.
 +
 
 +
{{underline|'''En pratique'''}}, vous mentionnerez une valeur entre -10 et +10 pour la dérive (en fait, vous pouvez mentionner une valeur de -100 à +100 mais cela à peu de sens).
 +
 
 +
La valeur numérique absolue (rien que les chiffres) indique le pourcentage dont il faut ralentir le moteur trop rapide... le "+" agit sur l'un des moteurs... tandis que le "-" (valeur négative) agira sur le moteur opposé.
 +
 
 +
Lorsque vous commanderez les moteurs, par exemple avec {{fname|forward()}}, l'un des moteurs sera à la vitesse maximale (ou celle spécifiée) et l'autre sera légèrement ralenti avec la valeur de la dérive.
 +
 +
Il vous faudra donc procéder par essai/erreur, en ajustant la valeur de la dérive jusqu'à ce que votre plateforme parcours une ligne droite comme attendu.
 +
 
 +
Voici deux exemples avec correction de la dérive, l'un appliquée sur un moteur... et l'autre sur l'autre moteur:
 +
 
 +
<syntaxhighlight lang="python">
 +
robot = Robot2Wheel( derivative_fix = 5 )
 +
robot.forward()
 +
delay( 5000 )
 +
robot.halt()
 +
</syntaxhighlight>
 +
 
 +
<syntaxhighlight lang="python">
 +
robot = Robot2Wheel( derivative_fix = -3 )
 +
robot.forward()
 +
delay( 5000 )
 +
robot.halt()
 +
</syntaxhighlight>
 +
 
 +
== D'autres options ==
 +
Une autre façon de contrôler la dérive est d'utiliser une centrale inertielle (IMU)... et donc de savoir si l'on s'écarte de la trajectoire voulue... et de la corriger au besoin en agissant vous même sur la vitesse des moteurs :-)
    
= Dépannage =
 
= Dépannage =
Ligne 219 : Ligne 284 :     
Après cela, la plateforme tournera dans le bon sens.
 
Après cela, la plateforme tournera dans le bon sens.
 +
 +
== distance() retourne toujours 10000! ==
 +
'''La méthode distance() ne semble pas fonctionner correctement. J'ai toujours la valeur 10000!'''
 +
 +
La méthode {{fname|Ultrasonic.distance_in_cm()}} (et donc distance()) est équipée d'un mécanisme de timeout qui retourne la valeur 10000 (100m) au bout de 0.33 seconde.
 +
 +
0.33 sec est le temps nécessaire au son pour parcourir une distance de 100m.
 +
 +
Cela évite à votre programme de rester bloqué sur la lecture de la distance dans le cas où l'écho ne reviendrait jamais (ou ne partirait jamais)... c'est du vécu.
 +
 +
Vérifiez les éléments suivants:
 +
* Vos piles soient branchées. Pas d'alimentation = Pas de senseur ultrason
 +
* Votre régulateur 5V produise bien du 5 Volts<br />Vous avez des pastilles 5V et GND disponibles juste derrière le senseur ultrason.
 +
* Vous ne mesurez pas la distance sur une surface absorbante<br />Certaines surfaces absorbent les ondes sonores et dans ce cas, il n'y a pas d'écho.
    
{{Hack-MotorSkin-TRAILER}}
 
{{Hack-MotorSkin-TRAILER}}
30 894

modifications

Menu de navigation