Modifications

Sauter à la navigation Sauter à la recherche
6 323 octets ajoutés ,  4 mai 2019 à 14:08
Ligne 1 : Ligne 1 :  
{{Rasp-Hack-L298-NAV}}
 
{{Rasp-Hack-L298-NAV}}
   −
== Le code ==
+
== Test ==
Voici le code au complet... que vous trouverez également dans ce fichier [ZumoL298.py] la base, ce code est développé pour utiliser un chassis Zumo avec un L298 et un Raspberry-Pi)
+
{{bloc-etroit|text=Le programme de test [http://df.mchobby.be/zumo/ZumoL298.py  ZumoL298.py] (voyez plus bas) reprend les quelques fonctions de tests suivantes:}}
 +
 
 +
<nowiki> Avant()
 +
time.sleep( 5 )
 +
TournerDroite()
 +
time.sleep( 3 )
 +
Avant()
 +
time.sleep( 5 )
 +
TournerGauche()
 +
time.sleep( 3 )
 +
Arriere()
 +
time.sleep( 5 )
 +
Stop()</nowiki>
 +
 
 +
{{bloc-etroit|text=faisant respectivement les opérations suivantes: passer en marche avant, faire attendre le programme 5 secondes (pendant que la marche avant se poursuit), Touner à droite pendant 3 secondes, repasser en marche pendant 5 secondes, tournez à gauchhe pendant 3 secondes, passer en marche arrière pendant 5 seconde puis s'arrêter.
 +
 
 +
Ce qui produit le résultat suivant:}}
 +
 
 +
{{#Widget:Iframe
 +
|url=https://www.youtube.com/embed/L4BjPqrsYWw
 +
|width=420
 +
|height=315
 +
|border=0
 +
}}<br /><small>''[http://www.youtube.com/watch?v=L4BjPqrsYWw&list=UU1dCoG7MnM0mrSCt14m0EwA&feature=share Cliquez ici pour accéder directement à la vidéo] (YouTube)''</small>
 +
 
 +
== Le code Complet ==
 +
Voici le code au complet... que vous trouverez également dans ce fichier [http://df.mchobby.be/zumo/ZumoL298.py ZumoL298.py].
 +
 
 +
A la base, ce code est développé pour piloter un {{pl|75|chassis Zumo}} avec un {{pl|447|L298}} et un {{pl|141|Raspberry-Pi}} mais fonctionne également parfaitement avec de nombreux autres plateformes robotiques (voyez la vidéo en fin de tuto)  
 
   
 
   
 
  <nowiki>#!/usr/bin/env python
 
  <nowiki>#!/usr/bin/env python
 
# -*- coding: latin-1 -*-
 
# -*- coding: latin-1 -*-
 +
 +
# ----------------------------------------------------------------------
 +
#  ZumoL298.py - Contrôle d'un Pont-H L298 avec Raspberry-Pi
 +
 +
#  Tutoriel complet:
 +
#    http://wiki.mchobby.be/index.php?title=Rasp-Hack-L298
 +
#
 +
#  Initialement conçu pour le chassis Zumo
 +
#    http://shop.mchobby.be/product.php?id_product=447
 +
#  Mais fonctionne parfaitement avec de nombreuses plateformes(cfr tuto)
 +
# ----------------------------------------------------------------------
 +
#  Ecrit par Meurisse D. pour MCHobby.be ( shop.mchobby.be )
 +
#  Licence: CC-BY-SA  - MCHobby.be vente de kit et composant
 +
# ----------------------------------------------------------------------
    
import RPi.GPIO as GPIO
 
import RPi.GPIO as GPIO
Ligne 113 : Ligne 155 :  
def Stop():
 
def Stop():
 
""" Arret """
 
""" Arret """
print "Arret"
+
print( "Arret" )
 
Desactiver()
 
Desactiver()
 
MarcheMotorA( SENS_ARRET )
 
MarcheMotorA( SENS_ARRET )
Ligne 143 : Ligne 185 :     
Sudo étant nécessaire pour permettre au script d'accéder librement au GPIO du Pi.
 
Sudo étant nécessaire pour permettre au script d'accéder librement au GPIO du Pi.
 +
 +
== Comprendre le code ==
 +
Voici quelques explications permettant de comprendre le fonctionnement interne du code.
 +
Nous allons donc nous penchez sur le contenu de la fonction Avant().
 +
 +
=== Une astuce technique ===
 +
Avant de nous lancer dans le décorticage du code, nous allons nous attarder sur une petite astuce dont le but est d'économiser une broche du GPIO sur le Raspberry Pi.
 +
 +
Comme vous le noterez sur le montage, '''les broches ENA et ENB du pont-H sont raccordées sur la même broche GPIO'''.
 +
 +
[[Fichier:Rasp-Hack_L298-Wiring-00.jpg|900px]]
 +
 +
ENA et ENB (''EnableA et EnableB'') servent respectivement à activer le Pont-H du monteur 1 (MotorA) et du moteur 2 (MotorB).
 +
 +
Nous avons délibérément choisit de commander les deux en même temps...
 +
* soit ils sont activés et bougent tous les deux (GPIO 4=ENA=ENB='''HIGH''')
 +
* soit ils sont {{underline|désactivés}} et ne bougent pas (GPIO 4=ENA=ENB='''LOW''').
 +
 +
Notez que le sens de rotation (ou non rotation) d'un moteur activé dépend aussi de la configuration IN1,IN2 - IN3,IN4.
 +
 +
'''Inconvénient:'''
 +
* Il n'est pas possible de réaliser un virage avec une belle courbe (ce qui peut être obtenu en ralentissant un moteur par rapport à l'autre)
 +
 +
'''Avantages:'''
 +
* N'utilise qu'une broche du Raspberry-Pi pour activer les deux moteurs.
 +
* Permet de tourner sur place (ex: moteur droit en marche avant + moteur gauche en marche arrière puis activer les pont-H).<br />Pratique pour un système à chenille ;-) mais aussi fonctionnel avec un robot sur roue.
 +
* Permet de moduler la vitesses des deux moteurs en appliquant un signal PWM sur la broche GPIO 4.<br />Nécessite une modification de notre code d'exemple.
 +
 +
=== Fonction Avant() ===
 +
<nowiki>def Avant():
 +
""" Marche avant toute """
 +
print( "Marche Avant" )
 +
Desactiver()
 +
MarcheMotorA( SENS_AVANT )
 +
MarcheMotorB( SENS_AVANT )
 +
Activer()</nowiki>
 +
 +
La fonction Avant() effectue les tâches suivantes:
 +
# '''Desactiver()''' - Désactive les deux Pont-H (ENA=ENB=LOW), ce qui permet de modifier les signaux de commande IN1, IN2, IN3, IN4 en toute sérénité
 +
# '''MarcheMotorA( SENS_AVANT )''' - Active le sens de marche '''avant''' sur le premier moteur.
 +
# '''MarcheMotorB( SENS_AVANT )''' - Active le sens de marche '''avant''' sur le deuxième moteur.
 +
# '''Activer()''' - Réactive les pont-H (ENA=ENB=HIGH)... ce qui active la marche avant
 +
 +
=== Fonction MarcheMotorA( sens ) ===
 +
Le seul but de cette fonction est de configurer l'état des broches IN1 et IN2 pour contrôler le sens de rotation du premier moteur (MotorA). Il ne restera plus qu'a activer le pont-H du moteur A pour que celui-ci tourne.
 +
 +
Elle accepte 3 sens de rotation:
 +
* SENS_AVANT - pour la marche avant
 +
* SENS_ARRIERE - pour la marche arrière
 +
* SENS_ARRET - pour que le moteur ne bouge plus (même si le pont H est réactivé)
 +
 +
{{ambox|text=Voyez la section "[[Rasp-Hack-L298-FAQ|foire aux questions]]" si vous avez un moteur qui ne tourne pas dans le sens attendu ;-) }}
 +
 +
<nowiki>def MarcheMotorA( sens ):
 +
""" Controle le sens de Marche pour Moteur A """
 +
if( sens == SENS_AVANT ):
 +
GPIO.output( MOTORA_IN1, GPIO.HIGH )
 +
GPIO.output( MOTORA_IN2, GPIO.LOW )
 +
elif( sens == SENS_ARRIERE ):
 +
GPIO.output( MOTORA_IN1, GPIO.LOW )
 +
GPIO.output( MOTORA_IN2, GPIO.HIGH )
 +
elif( sens == SENS_ARRET ):
 +
GPIO.output( MOTORA_IN1, GPIO.LOW )
 +
GPIO.output( MOTORA_IN2, GPIO.LOW )</nowiki>
 +
 +
Pas bien compliqué en fin de compte.
 +
 +
=== Fonction Activer(), Desactiver ===
 +
Déjà mentionné plus haut, ces fonctions active et désactive les pont-H en manipulant le GPIO 4.
 +
 +
Le programme défini les constantes:
 +
<nowiki>MOTORA_ENABLE = 4 # GPIO 4 - Activation moteur A
 +
MOTORB_ENABLE = MOTORA_ENABLE # aussi utiliser GPIO 4 pour commander moteur B</nowiki>
 +
 +
A noter que les fonctions sont déjà prévue pour utiliser deux GPIO différents pour les signaux ENA et ENB du pont H, vous pourriez alors utiliser la définition suivante si vous en aviez besoin:
 +
<nowiki>MOTORA_ENABLE = 4 # GPIO 4 - Activation moteur A
 +
MOTORB_ENABLE = 22 # utiliser GPIO 22 pour commander le moteur B</nowiki>
 +
 +
<nowiki>def Desactiver():
 +
""" Désactivation des pont-H """
 +
GPIO.output( MOTORA_ENABLE, GPIO.LOW )
 +
if( MOTORB_ENABLE != MOTORA_ENABLE ):
 +
GPIO.output( MOTORB_ENABLE, GPIO.LOW )
 +
 +
def Activer():
 +
""" Activation des pont-H """
 +
GPIO.output( MOTORA_ENABLE, GPIO.HIGH )
 +
if( MOTORB_ENABLE != MOTORA_ENABLE ):
 +
GPIO.output( MOTORB_ENABLE, GPIO.HIGH )</nowiki>
 
{{Rasp-Hack-L298-TRAILER}}
 
{{Rasp-Hack-L298-TRAILER}}
29 917

modifications

Menu de navigation