Modifications

Sauter à la navigation Sauter à la recherche
4 093 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)]].
 
  −
{{traduction}}
     −
''' IMAGE '''
+
[[Fichier:Hack-MotorSkin-Demo1-00.jpg|800px]]
    
N'oubliez pas d'éjecter le lecteur de la carte MicroPython avant de débrancher votre PyBoard de votre PC.
 
N'oubliez pas d'éjecter le lecteur de la carte MicroPython avant de débrancher votre PyBoard de votre PC.
Ligne 26 : 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">
 
<syntaxhighlight lang="python">
TODO!!!!!!!!!!
+
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">
 +
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