Modifications

Sauter à la navigation Sauter à la recherche
4 077 octets ajoutés ,  3 octobre 2016 à 12:27
aucun résumé de modification
Ligne 4 : Ligne 4 :  
'''Explorer''' est un programme assez simple. Il se déplace en ligne droite jusqu'à ce qu'il rencontre un obstacle, moment où il tourne sur lui-même puis redémarre en marche avant.
 
'''Explorer''' est un programme assez simple. Il se déplace en ligne droite jusqu'à ce qu'il rencontre un obstacle, moment où il tourne sur lui-même puis redémarre en marche avant.
   −
{{traduction}}
+
[[Fichier:Hack-MotorSkin-01.jpg|480px]]
 +
 
 +
{{ambox-stop|text=Ce programme nécessite un motor-skin + senseur ultrason (et régulateur de tension).}}
    
''' MOVIE '''
 
''' MOVIE '''
Ligne 15 : Ligne 17 :     
= Copier =
 
= Copier =
Pour copier le script sur la carte, brancher votre pyboard et copier le fichier {{fname|xxxx}} depuis les sources disponibles dans notre dépôt GitHub.
+
Pour copier le script sur la carte, brancher votre pyboard et copier le fichier {{fname|explorer.py}} depuis les sources disponibles (ou l'archive) dans [[Hack-MotorSkin-Installer|notre dépôt GitHub (voir notes d'installation)]].
    
[[Fichier:Hack-MotorSkin-Demo1-00.jpg|800px]]
 
[[Fichier:Hack-MotorSkin-Demo1-00.jpg|800px]]
Ligne 24 : Ligne 26 :  
Vous pouvez tester très facilement le script à l'aide d'une connexion REPL.
 
Vous pouvez tester très facilement le script à l'aide d'une connexion REPL.
   −
Saisissez simplement le code suivant en ligne de commande:
+
Saisissez simplement le code suivant en ligne de commande pour charger et exécuter le code disponible dans {{fname|explorer.py}}
 +
 
 +
<syntaxhighlight lang="python">
 +
from explorer import *
 +
</syntaxhighlight>
 +
 
 +
{{ambox|text=N'oubliez pas de presser le bouton utilisateur 1 (SW1) pour démarrer le corps du programme.}}
 +
 
 +
{{ambox-stop|text=L'invite REPL n'est pas disponible pendant que le programme fonctionne.}}
 +
 
 +
[[Fichier:explorer-press-to-start.jpg|640px]]
   −
{{traduction}}
+
Vous pouvez simplement interrompre l'exécution du programme en pressant {{fname|CTRL+C}}
    
= Démarrer au boot =
 
= Démarrer au boot =
Pour démarrer automatiquement le script au démarrage de votre pyboard.
+
Il est possible de démarrer automatiquement le programme au démarrage de votre pyboard.
 +
 
 +
Vous avez deux options:
 +
* Charger automatiquement {{fname|explorer.py}} au démarrage de la PyBoard. '''Méthode recommandée et décrite ci-dessous'''.
 +
* Copiez le contenu de {{fname|explorer.py}} dans {{fname|main.py}} .
    
Saisissez la ligne suivante dans votre fichier {{fname|main.py}}
 
Saisissez la ligne suivante dans votre fichier {{fname|main.py}}
   −
{{traduction}}
+
<syntaxhighlight lang="python">
 +
from explorer import *
 +
</syntaxhighlight>
 +
 
 +
[[Fichier:Hack-MotorSkin-Demo1-05.jpg]]
 +
 
 +
Puis '''éjectez votre PyBoard''' et pressez le '''bouton Reset''' (également disponible sur le Motor-Skin).
 +
 
 +
Le programme '''explorer''' démarrera automatiquement durant la séquence d'initialisation (boot) de la PyBoard.
 +
 
 +
Il ne vous restera plus qu'à presser le bouton SW1 pour l'activer.
    
= Inspectons le code =
 
= Inspectons le code =
   −
{{traduction}}
+
Voici le code avec quelques commentaires pour vous aider à comprendre son fonctionnement
 +
 
 +
La toute première partie importe les élément nécessaire et surtout la classe {{fname|Robot2Wheel}} qui permet de contrôler la plateforme 2 roues (via le MotorSkin).
 +
 
 +
<syntaxhighlight lang="python">
 +
from pyb import delay, LED
 +
from r2wheel import Robot2Wheel                                           
 +
 
 +
r2 = Robot2Wheel()
 +
l = LED(4)  # LED Bleue
 +
</syntaxhighlight>
 +
 
 +
Ensuite, nous déclarons une variable {{fname|MIN_DISTANCE}} indiquant la distance minimale en dessous de laquelle il faut tourner pour éviter l'objet.
 +
<syntaxhighlight lang="python">
 +
MIN_DISTANCE = 20
 +
</syntaxhighlight>
 +
 
 +
Ensuite vient la déclaration de la fonction {{fname|drive_robot()}} qui pilote le robot.
 +
 
 +
Son seul travail est de faire avancer le robot s'il est à l'arrêt et qu'il n'y a rien devant.
 +
 
 +
Un petit test récurrent {{fname|if r2.distance() < MIN_DISTANCE:}} permet détecter un obstacle. Auquel cas, il fait pivoter le robot puis le met à l'arrêt.
 +
 
 +
Cette tâche est répétée indéfiniment... pour autant que le bouton utilisateur SW1 n'est pas pressé. 
    
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
TODO!!!!!!!!!!
+
def drive_robot():
 +
    r2.forward()
 +
    # Tant que pas bouton User SW1 --> Continuer
 +
    while not( r2.button_pressed(1) ):
 +
        # Si inferieur a la distance de securite --> tourner
 +
        if r2.distance() < MIN_DISTANCE:
 +
            r2.halt()
 +
            delay(100)
 +
            # reculer pendant 1/3 seconde à vitesse réduite
 +
            r2.backward( 50 )
 +
            delay( 300 )
 +
 
 +
            # tourner à droite pendant 1/3 de seconde
 +
            r2.right()
 +
            delay( 300 )
 +
 
 +
            # Passer à l'arrêt
 +
            r2.halt()
 +
            delay(100)
 +
 
 +
        # rien devant --> Marche avant
 +
        if (r2.state == Robot2Wheel.HALTED) and (r2.distance() > MIN_DISTANCE):
 +
            r2.forward()
 +
    r2.halt()
 +
</syntaxhighlight>
 +
 
 +
La dernière partie est le corps principal. Il est exécuté automatiquement au chargement du module.
 +
 
 +
Cette partie du code:
 +
* Eteint la LED utilisateur
 +
* Attend que l'utilisateur presse sur le bouton SW1
 +
** Allume la LED utilisateur
 +
** Passe le relais à la fonction {{fname|drive_robot()}}<br />'''Cette dernière fonction n'arrête que lorsque l'utilisateur re-presse sur le bouton SW1''' (voir explication ci-dessus)
 +
** Eteint la LED utilisateur
 +
** Fait une pause de 0.3 seconde
 +
 
 +
<syntaxhighlight lang="python">
 +
# Routine principale
 +
l.off()
 +
while True:
 +
    if r2.button_pressed(1):
 +
        # Deparasitage logiciel
 +
        delay( 10 )
 +
        if r2.button_pressed(1) == True:
 +
          # Signaler le démarrage
 +
          l.on()
 +
          delay( 2000 )
 +
          # Piloter le robot
 +
          drive_robot()
 +
          l.off()
 +
          delay( 2000 )
 +
 
 +
    delay( 300 ) # ne rien faire
 
</syntaxhighlight>
 
</syntaxhighlight>
    
{{Hack-MotorSkin-TRAILER}}
 
{{Hack-MotorSkin-TRAILER}}
29 917

modifications

Menu de navigation