Hack-MotorSkin-Demo1

De MCHobby - Wiki
Révision datée du 3 octobre 2016 à 12:27 par Admin (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Introduction

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.

Hack-MotorSkin-01.jpg

MOVIE

Vous pouvez également accéder directement à la vidéo ici sur YouTube LIEN

Utilisation:

  • Le programme attend la pression sur le bouton utilisateur 1 (SW1) pour démarrer.
    Une fois actif, le programme allume la LED utilisateur 4 (LED Bleue) de la carte PyBoard.
  • Re-pressez ce même bouton pour arrêter ce programme.
    La LED utilisateur de la carte PyBoard s'éteint.

Copier

Pour copier le script sur la carte, brancher votre pyboard et copier le fichier explorer.py depuis les sources disponibles (ou l'archive) dans notre dépôt GitHub (voir notes d'installation).

Hack-MotorSkin-Demo1-00.jpg

N'oubliez pas d'éjecter le lecteur de la carte MicroPython avant de débrancher votre PyBoard de votre PC.

Tester

Vous pouvez tester très facilement le script à l'aide d'une connexion REPL.

Saisissez simplement le code suivant en ligne de commande pour charger et exécuter le code disponible dans explorer.py

from explorer import *

Explorer-press-to-start.jpg

Vous pouvez simplement interrompre l'exécution du programme en pressant CTRL+C

Démarrer au boot

Il est possible de démarrer automatiquement le programme au démarrage de votre pyboard.

Vous avez deux options:

  • Charger automatiquement explorer.py au démarrage de la PyBoard. Méthode recommandée et décrite ci-dessous.
  • Copiez le contenu de explorer.py dans main.py .

Saisissez la ligne suivante dans votre fichier main.py

from explorer import *

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

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 Robot2Wheel qui permet de contrôler la plateforme 2 roues (via le MotorSkin).

from pyb import delay, LED
from r2wheel import Robot2Wheel                                             

r2 = Robot2Wheel() 
l = LED(4)   # LED Bleue

Ensuite, nous déclarons une variable MIN_DISTANCE indiquant la distance minimale en dessous de laquelle il faut tourner pour éviter l'objet.

MIN_DISTANCE = 20

Ensuite vient la déclaration de la fonction 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 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é.

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()

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 drive_robot()
      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
# 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



Créé par Meurisse D. pour MCHobby.be - Created by Meurisse D. for MCHobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.