Modifications

Sauter à la navigation Sauter à la recherche
Ligne 9 : Ligne 9 :  
# Si un obstacle est détecté à moins de 20cm:
 
# Si un obstacle est détecté à moins de 20cm:
 
## Arrêter la plateforme
 
## Arrêter la plateforme
## Faire tourner la plateforme
+
## Faire tourner la plateforme (sur la droite pendant 2.5 seconde).
 
}}
 
}}
   Ligne 47 : Ligne 47 :     
Il suffit de placer la main devant le senseur pour que le mobile entame une rotation.
 
Il suffit de placer la main devant le senseur pour que le mobile entame une rotation.
 +
 +
== Faire mieux ==
 +
L'idéal serait de rendre le robot totalement autonome en plaçant le code directement dans le fichier {{fname|main.py}} .
 +
 +
Mais il faut aussi qu'il soit plus pratique. En effet, le robot se mettrait en marche dès qu'il serait sous tension.
 +
 +
L'idéal serait de pouvoir le démarrer en pressant sur le bouton "User" (disponible sur la carte)... et de pouvoir l'arrêter en pressant une autre fois sur ce même bouton.
 +
 +
Nous allons également utiliser la LED bleue {{fname|LED(4)}} pour indiquer l'activation du Robot.
 +
 +
Voici un second code nommé {{fname|r2-uson-final.py}} que vous pouvez copier/coller dans votre fichier {{fname|main.py}} .
 +
 +
{{download-box|Télécharger le script r2-uson-final.py|https://raw.githubusercontent.com/mchobby/pyboard-a-roulette/master/02-ultrason/r2-uson-final.py}}
 +
 +
<nowiki>##
 +
# Commande d'une plateforme robotique 2 roues avec détecteur UltraSon HC-SR04.
 +
#    Tourne sur la droite quand il détecte un objet à moins de 20 cm. Sinon avance en ligne droite.
 +
# Presser le bouton "user" pour démarrer / arrêter le robot. La LED bleue s'allume pendant que le programme est actif.
 +
#
 +
# Control a 2 wheel robotic plateform with a L293D H Bridge and MicroPython PyBoard
 +
#    Turn right when detecting an object within the 20 cm. Otherwise move forward.
 +
# Press the "User" button to start/stop the software. Le blue LED is lit when the software is driving the robot.
 +
#
 +
#  http://shop.mchobby.be/product.php?id_product=741
 +
#  http://shop.mchobby.be/product.php?id_product=155
 +
#  http://shop.mchobby.be/product.php?id_product=570
 +
#  http://shop.mchobby.be/product.php?id_product=561
 +
#
 +
# Voir Tutoriel - See our french tutorial
 +
#  http://wiki.mchobby.be/index.php?title=Hack-micropython-Robot2Wheel-HC-SR04
 +
#
 +
# Copyright 2016 - Dominique Meurisse for MC Hobby SPRL <info (at) mchobby (dot) be>
 +
#
 +
#
 +
# This program is free software: you can redistribute it and/or modify
 +
# it under the terms of the GNU General Public License as published by
 +
# the Free Software Foundation, either version 3 of the License, or
 +
# (at your option) any later version.
 +
#
 +
# This program is distributed in the hope that it will be useful,
 +
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 +
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +
# GNU General Public License for more details.
 +
#
 +
# You should have received a copy of the GNU General Public License
 +
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 +
#
 +
##
 +
 +
from pyb import delay, LED, Switch
 +
from r2wheel import Robot2Wheel                                           
 +
from ultrasonic import Ultrasonic
 +
 +
# Broche pour déclencher le senseur
 +
TRIGGER_PIN = pyb.Pin.board.Y5
 +
# Broche pour attendre le retour d'echo
 +
ECHO_PIN = pyb.Pin.board.Y6
 +
 +
r2 = Robot2Wheel( reverse_mot2 = True )
 +
u = Ultrasonic( TRIGGER_PIN, ECHO_PIN )
 +
l = LED(4)  # LED Bleue
 +
btn = Switch() # Button utilisateur (User)
 +
 +
MIN_DISTANCE = 20 # Minimum distance
 +
 +
def drive_robot():
 +
    r2.forward()
 +
    # Tant que pas bouton User --> Continuer
 +
    while btn() == False:
 +
        #DEBUG: print( 'Running' )
 +
        if u.distance_in_cm() < MIN_DISTANCE:
 +
            r2.halt()
 +
            delay(100)
 +
            r2.right()
 +
            delay( 2500 )
 +
            r2.halt()
 +
            delay(100)
 +
        # Si rien devant --> Marche avant
 +
        if (r2.state == Robot2Wheel.HALTED) and (u.distance_in_cm() > MIN_DISTANCE):
 +
            r2.forward()
 +
    r2.halt()
 +
 +
# Routine principale
 +
l.off()
 +
while True:
 +
    #DEBUG: print( 'Wait' )
 +
    if btn() == True:
 +
        # Deparasitage logiciel
 +
        delay( 10 )
 +
        if btn() == True:
 +
          # Signaler le démarrage
 +
          l.on()
 +
          delay( 2000 )
 +
          # Piloter le robot
 +
          drive_robot()
 +
          l.off()
 +
          delay( 2000 )
 +
    delay( 300 ) # ne rien faire </nowiki>
 +
 +
== Cela ne marche pas ==
 +
Vous éprouvez des difficultés pour faire fonctionner le programme... voici quelques pistes pour vous aider.
 +
=== Tester les différents éléments ===
 +
Avez-vous exécuté les différents points présenté dans [[Hack-micropython-Robot2Wheel-HC-SR04#Pr.C3.A9requis|les prérequis de ce tutoriel]]?
 +
 +
Cela vous permet de maîtriser votre matériel et son fonctionnement. Cela permet également de s'assurer qu'il fonctionne correctement.
 +
 +
=== Il ne se déplace pas normalement ===
 +
Il y a plusieurs paramètres permettant de corriger le fonctionnement des moteurs de la plateforme robotique. En effet, suivant vos raccordement, la plateforme pourrait tourner à droite au lieu de la gauche, avancer au lieu de reculer, ou tourner au lieu d'avancer.
 +
 +
Dans notre programme d'exemple, nous avons utiliser {{fname|1=reverse_mot2 = True}} lors que l'appel {{fname|1=r2 = Robot2Wheel( reverse_mot2 = True )}} . Vous pourriez avoir besoin d'utiliser un autre paramètrage.
 +
 +
Cela est expliqué plus en détail dans notre tutoriel [[hack-micropython-Robot2Wheel|Robot 2 roues]]
 +
 +
=== Activer les commentaires de debug ===
 +
Le programme contient deux commentaire vous permettant de suivre plus facilement son fonctionnement [[MicroPython-Hack-Outil#pyboard.py|en téléversant le programme sur la PyBoard depuis votre PC}} en mode REPL à l'aide de {{fname|pyboard.py}}.
 +
 +
Vous trouverez donc les lignes suivantes dans le programme:
 +
<nowiki>#DEBUG: print( 'Running' )
 +
#DEBUG: print( 'Wait' )</nowiki>
 +
 +
Que vous pouvez transformer en:
 +
<nowiki>print( 'Running' )
 +
print( 'Wait' )</nowiki>
 +
 +
* '''Wait''' indique que le programme attend que vous pressiez le bouton utilisateur pour démarrer. Ce message Apparaît toutes les 1/3 de seconde.
 +
* '''Running''' indique que le robot est en court de fonctionnement.... et ce dernier est affiché continuellement
 +
 +
=== Un seul message 'Running'! ===
 +
Si vous ne voyez qu'un seul message '''Running''' (voir point précédent) puis que le programme semble planté... c'est qu'en fait il attend désespérément l'écho du senseur HC-SR04. Cela peut prendre jusqu'à 20 secondes.
 +
 +
Nous avons surtout constaté ce problème parce que '''nous n'arrivions pas à arrêter le robot en pressant sur le bouton utilisateur'''.
 +
 +
De fait, le régulateur de tension 5V n'était pas branché et, par conséquent, le senseur HC-SR04 ne pouvait pas répondre aux demandes de mesure de distance. Arf!
 +
 +
=== Tourne de trop ===
 +
Tourner sur place pendant 2.5s (2500ms) permet de faire plusieurs tours... si vos piles sont bien chargées. Oui, votre pyboard-a-roulette peut tourner aussi vite qu'un valseur ;-)
 +
 +
<nowiki>            r2.right()
 +
            delay( 2500 )</nowiki>
 +
 +
Pour que cela tourne moins, il suffit de diminuer ce temps de rotation une valeur plus raisonnable... pour tourner moins longtemps.
 +
 +
<nowiki>            r2.right()
 +
            delay( 800 )</nowiki>
 +
 +
Vous pouvez également opter pour une rotation à vitesse réduite
 +
 +
<nowiki>            r2.right() # Commencer à 100% pour vaincre l'inertie
 +
            delay( 20 )
 +
            r2.right( speed=40 ) # 40% de cycle utile du signal PWM (40% de vitesse)
 +
            delay( 800 )</nowiki>
 +
 +
 +
 +
Une autre option serait d'utiliser un magnétomètre (pour faire une rotation par rapport au nord) ou une centrale inertielle (IMU).
    
{{Hack-micropython-Robot2Wheel-TRAILER}}
 
{{Hack-micropython-Robot2Wheel-TRAILER}}
29 918

modifications

Menu de navigation