Hack-micropython-Robot2Wheel-Code
Bibliothèque r2wheel et hbridge
Le code permettant de faire fonctionner cette plateforme est disponible sur GitHub dans le projet PyBoard-a-Roulette.
Pour les détails, vous pouvez explorer le dépôt ici: https://github.com/mchobby/pyboard-a-roulette
HBridge & DualHBridge
Le fonctionnement de la plateforme robotique repose sur deux classes de base (bibliothèque hbridge.py):
- La classe HBridge pour le contrôle d'un simple pont-H (donc un moteur dans les deux sens)
- Cette première classe permet de contrôler la marche avant forward(), arrière backward() et l'arrêt halt() d'un moteur.
- Elle permet également de configurer un signal PWM pour contrôler la vitesse d'un moteur entre 0 et 100% (de cycle utile)
- La classe DualHBridge pour le contrôle des deux pont-H du L293D (donc deux moteur dans les deux sens)
- Cette seconde classe prend le contrôle de deux moteurs pour faire avancer forward(), reculer backward() et arrêter halt() les deux moteurs en une seule fois.
- Comme pour HBridge, il est possible de préciser la vitesse des moteurs (entre 0 et 100%). Si une seule vitesse est précisée alors deux moteurs sont utilise la même vitesse.
- Cerise sur le gâteau, cette classe permet de gérer la dérive de la plateforme en ralentissant volontairement l'un ou l'autre des moteurs d'un certain pourcentage. Voyez DualHBridge.__init__()
Robot2Wheel
La plateforme Robotique 2 Wheel utilise la classe Robot2Wheel (bibliothèque r2wheel.py.
Robot2Wheel étend la classe DualHBridge et offre des fonctionnalités supplémentaires bien pratique:
- Utilise la définition des broches tel que décrit dans le plan de raccordement
- Permet d'inverser la commande de marche-avant/marche-arrière du moteur 1 / moteur 2 au moment de la création de l'objet avec reverse_mot1 = True / reverse_mot2 = True.
Il n'est donc pas nécessaire de modifier votre câblage moteur si l'un des moteurs devait tourner à l'envers lors de l'exécution de forward() - L'option fix_rotate = True lors de la création de l'objet permet également d'inverser moteur 1 et moteur 2 sur la plateforme sans devoir démonter votre plateforme.
Bigrement pratique si votre robot tourne à gauche lorsque vous lui demandez de tourner à droite avec turn( Robot2Wheel.RIGHT_ROTATE ).
Les méthodes héritées de la classe DualHBridge restent disponibles:
- forward( speed = 100, speed_2 = None )
Passe les deux moteurs en marche avant (100% de régime). Spécifier une valeur pour speed entre 0 et 100 pour modifier la vitesse des deux moteurs. Spécifier speed_2 pour avoir une vitesse différente pour le deuxième moteur. - backward( speed = 100, speed_2 = None )
Passe les deux moteurs en marche arrière (100% de régime). Spécifier une valeur pour speed entre 0 et 100 pour modifier la vitesse des deux moteurs. Spécifier speed_2 pour avoir une vitesse différente pour le deuxième moteur. - halt( self )
Arrête mes deux moteurs.
Robot2Wheel offre une méthode complémentaire pour permettre au robot de tourner (la façon de tourner est spécifique au nombre de roue du robot ;-) ).
- turn( direction, speed=100 )
Indique de quel côté et speed indique la vitesse moteur (0-100%) à laquelle la doit tourner.
Voici les différentes valeurs pour direction:- DualHBridge.RIGHT_ROTATE - Rotation à droite, sur place.
- DualHBridge.LEFT_ROTATE - Rotation à gauche, sur place.
- DualHBridge.RIGHT_BEND - Rotation en négociant un tournant sur la droite. Speed indique de combien il faut ralentir le moteur (0-100%) droit pour entamer le virage.
- DualHBridge.LEFT_BEND - Rotation en négociant un tournant sur la gauche. Speed indique de combien il faut ralentir le moteur (0-100%) gauche pour entamer le virage.
Installer
Vous pouvez télécharger la bibliothèque et les codes d'exemple directement depuis le dépôt GitHub du PyBoard-a-roulette
Copiez les fichiers hbridge.py et r2wheel.py dans le répertoire racine de votre PyBoard.
Maintenant que hbridge.py et r2wheel.py sont installés sur votre PyBoard, nous allons pouvoir passer à la suite.
Tester
- Assurez-vous d'avoir suivit les instructions de montages proposées ici.
- Placez vos piles dans le bloc pile pour disposer de puissance moteur.
- N'alimentez pas le votre PyBoard via le bloc pile (le switch).
- Assurez-vous d'avoir branché votre PyBoard sur votre ordinateur (et installé les fichiers hbridge.py et r2wheel.py ).
- Démarrer une session REPL avec votre PyBoard pour tester notre montage.
Tester les pont-H
Avant de nous lancer dans les choses vraiment intéressante, nous allons commencer par commander directement nos pont-H avec la classe HBridge.
Souvenez-vous, nous avons branché l'un de nos pont-H sur les sorties X6 et X5 (input 1 et 2). Nous utilisons aussi la broche X3 pour le contrôle de l'entrée Enable du pont-H (pour moduler la vitesse).
Petit rappel avec le schéma des broches, si nous utilisons la sortie X3, nous devons choisir le Timer et Channel approprié pour pouvoir créer un signal PWM.
>>> from hbridge import HBridge >>> MOT1_PINS = ( pyb.Pin.board.X6, pyb.Pin.board.X5 ) >>> MOT1_PWM = {'pin' : pyb.Pin.board.X3, 'timer' : 2, 'channel' : 3 }
Voila, nous avons défini nos broches de commandes dans le tuple MOT1_PINS et les informations de la broche PWM dans MOT1_PWM pour le contrôle de la vitesse.
Nous allons pouvoir créer l'objet Pont-H pour le commander.
>>> h = HBridge( MOT1_PINS, MOT1_PWM )
Nous allons pouvoir tester les méthodes de base:
- forward() pour la marche avant
- backward() pour la marche arrière
- halt() pour tout arrêter.
Laissez un peu de temps entre chacune des commandes pour pouvoir constater les effets sur votre mobile.
>>> h.forward() >>> h.backward() >>> h.halt()
Vous pouvez maintenant tester votre deuxieme pont-H avec les commandes suivantes:
>>> MOT2_PINS = ( pyb.Pin.board.X7, pyb.Pin.board.X8 ) >>> MOT2_PWM = {'pin' : pyb.Pin.board.X4, 'timer' : 5, 'channel' : 4 } >>> h2 = HBridge( MOT2_PINS, MOT2_PWM ) >>> h2.forward() >>> h2.backward() >>> h2.halt()
Contrôle de vitesse
Le contrôle de la vitesse est relativement simple. Nous utilisons une signal PWM (par exemple, la broche X4 sur le deuxième pont-H).
Comme le signal PWM est branché sur la broche enable du pont-h, le pont-H sera activé/désactivé en même temps que le signal PWM.
Crédit: AdaFruit Industries www.adafruit.com
En modulant le cycle utile entre 0 et 100% du signal PWM, on module aussi puissance délivré au moteur par le pont-H :-)
Nous allons donc revoir notre programme de commande du deuxième pont-h pour contrôler la vitesse moteur.
>>> from hbridge import HBridge >>> from pyb import delay >>> MOT2_PINS = ( pyb.Pin.board.X7, pyb.Pin.board.X8 ) >>> MOT2_PWM = {'pin' : pyb.Pin.board.X4, 'timer' : 5, 'channel' : 4 } >>> h2 = HBridge( MOT2_PINS, MOT2_PWM ) >>> for speed in range( 0, 100, 10 ): >>> h2.backward( 100-speed ) >>> delay( 1000 ) >>> h2.halt()
L'instruction for speed in range( 0, 100, 10 ) permet de faire varier la vitesse entre 0 et 100 par pas de 10.
Ensuite l'instruction h2.backward( 100-speed ) active la marche arrière et passant graduellement de la vitesse maximale à la vitesse minimale.
En dessous d'un certain pourcentage de cycle utile (un valeur de la variable speed), la puissance envoyé au moteur ne insuffisante et ce dernier ne tournera pas... par contre, vous entendrez le bourdonnement du signal PWM dans le bobinage. Un truc pratique est de démarrer à puissance suffisante pour vaincre l'inertie et les force de friction avant de passer en PWM à plus faible pourcentage. |
Tester la plateforme avec Robot2Wheel
Nous allons maintenant utiliser la classe Robot2Wheel pour contrôler le Robot deux roues avec les raccordements mentionnés dans ce tutoriel, les broches à utiliser étant déjà mentionnées dans la classe.
Allons y:
>>> from r2wheel import Robot2Wheel >>> r2 = Robot2Wheel() >>> r2.forward( 80 ) >>> r2.halt()
Dans cet exemple, nous avons demandé à la plateforme d'avancer à la vitesse de 80% avec r2.forward(80) .
Moteur tourne à l'envers
Si vous avez l'un ou l'autre de vos moteurs qui ne dans le mauvais sens... c'est que celui-ci est branché à l'envers sur le pont-H.
Solution:
- Inverser le raccordement sur le moteur pour qu'il tourne dans le bon sens
- Faire la même chose mais de façon logicielle.
Vous pouvez inverser la commande de l'un OU l'autre OU des deux pont-H durant la création de l'objet Robot2Wheel... voici les différentes syntaxes à votre disposition.
r2 = Robot2Wheel( reverse_mot2 = True ) r2 = Robot2Wheel( reverse_mot1 = True ) r2 = Robot2Wheel( reverse_mot1 = True, reverse_mot2 = True )
Dans le cadre de mes tests, j'ai utilisé r2 = Robot2Wheel( reverse_mot2 = True ) pour corriger la rotation de l'un de mes moteurs.
Tourner à droite
Pour tourner à droite, il y a la méthode turn(), cette méthode peut prendre plusieurs paramètres.
Nous allons commencer simplement, nous allons faire tourner la plateforme 2 roues sur place... en faisant tourner un moteur dans un sens et l'autre dans l'autre sens.
>>> r = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur >>> r.turn( Robot2Wheel.RIGHT_ROTATE ) >>> r.halt()
Vous pouvez également indiquer une vitesse moteur durant la rotation.
>>> r.turn( Robot2Wheel.RIGHT_ROTATE, speed=60 )
Il tourne à l'envers
Vous avez demandé au robot de tourner à droite... et il tourne à gauche?!?!?
C'est parce que les deux moteurs sont montés à l'envers.
Il y a plusieurs options pour corriger cela:
- Démonter les deux moteurs pour placer le moteur de gauche à droite (et vice-versa).
- Echanger les raccordements des deux moteurs sur les pont-H (passer un moteur d'un pont-h à l'autre, et vice-versa).
- Corriger
Projet original réalisé par Meurisse D. pour MC Hobby SPRL
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.