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}} |