Hack-micropython-Robot2Wheel-Code

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

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

Download-icon.pngTélécharger PyBoard-a-Roulette.zip

Copiez les fichiers hbridge.py et r2wheel.py dans le répertoire racine de votre PyBoard.

Hack-micropython-Robot2Wheel-Code-00.jpg

Maintenant que hbridge.py et r2wheel.py sont installés sur votre PyBoard, nous allons pouvoir passer à la suite.

Tester

  1. Assurez-vous d'avoir suivit les instructions de montages proposées ici.
  2. Placez vos piles dans le bloc pile pour disposer de puissance moteur.
  3. N'alimentez pas le votre PyBoard via le bloc pile (le switch).
  4. Assurez-vous d'avoir branché votre PyBoard sur votre ordinateur (et installé les fichiers hbridge.py et r2wheel.py ).
  5. 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.

Rasp-Hack-L293-PWM-01.jpg
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.




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.