Différences entre versions de « MicroPython-Hack-accelerometre »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 46 : Ligne 46 :
 
[[Fichier:MicroPython-Hack-accelerometre-niveau.jpg]]<small><br/>Sous licence GPL via Wikimedia Commons - [http://commons.wikimedia.org/wiki/File:Water_level_1.jpg#mediaviewer/File:Water_level_1.jpg Water_level.jpg]</small>
 
[[Fichier:MicroPython-Hack-accelerometre-niveau.jpg]]<small><br/>Sous licence GPL via Wikimedia Commons - [http://commons.wikimedia.org/wiki/File:Water_level_1.jpg#mediaviewer/File:Water_level_1.jpg Water_level.jpg]</small>
  
The example above is only sensitive to the angle in the x direction but if we use the y() value and more LEDs we can turn the pyboard into a spirit level.
+
L'exemple ci-dessus est uniquement sensible aux angles sur la direction X mais si l'on utilise aussi la valeur de y() et plus de LEDs nous pouvons transformer la carte PyBoard en niveau.
  
 
  <nowiki>xlights = (pyb.LED(2), pyb.LED(3))
 
  <nowiki>xlights = (pyb.LED(2), pyb.LED(3))
Ligne 79 : Ligne 79 :
 
     pyb.delay(100)</nowiki>
 
     pyb.delay(100)</nowiki>
  
We start by creating a tuple of LED objects for the x and y directions. Tuples are immutable objects in python which means they can’t be modified once they are created. We then proceed as before but turn on a different LED for positive and negative x values. We then do the same for the y direction. This isn’t particularly sophisticated but it does the job. Run this on your pyboard and you should see different LEDs turning on depending on how you tilt the board.
+
Nous commençons par créer un tuple d'objets LED pour les directions/axes x et y. Les Tuples sont des objets immuables en Python ce qui signifie qu'ils ne peuvent plus être modifiés une fois qu'ils sont créés.
 +
 
 +
Ensuite, nous faisons fonctionner le programme comme notre exemple précédent de façon à allumer les LEDs pour les valeurs positives et négatives sur l'axe X. Nous faisons de même avec la direction Y. Ce n'est pas un script très sophistiqué mais cela fait bien son job. Exécutez ce programme sur votre pyboard et vous devriez voir les différentes LEDs s'allumées et s'éteindres en rapport avec l'orientation de la carte.
  
 
{{MicroPython-Hack-Accelerometre-TRAILER}}
 
{{MicroPython-Hack-Accelerometre-TRAILER}}

Version du 16 mars 2015 à 20:01


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

Here you will learn how to read the accelerometer and signal using LEDs states like tilt left and tilt right.

Qu'est ce qu'un accéléromètre

Un accéléromètre mesure "l'accélération". Rien de pertinent de prime abord mais étant donné que notre planète Terre dispose également d'une accélération gravitationnelle (de 1G), il est possible de détecter l'orientation du breakout/d'une carte par rapport à la terre avec ce senseur. Un accéléromètre 3 axes peut, par exemple, être utilisé pour détecter l'orientation d'un écran de téléphone (voir cet article sur Wikipedia) ou l'orientation de votre robot dans l'espace (est-il debout sur ses pieds ou couché sur son dos ou encore tête vers le bas?)

Cela semblera plus évident après la lecture de la méthode de calibration de l'accéléromètre (cfr notre tutoriel sur le breakout accéléromètre ADXL335 d'AdaFruit pour Arduino).

Utiliser l'accéléromètre

La carte PyBoard dispose d'un accéléromètre qui peut être utilisé pour détecter l'angle de la carte (par rapport au centre de la terre) ou les mouvements de la carte. L'accéléromètre contient différents senseurs pour chaque axes/directions x, y, z. Il faut créer un objet pyb.Accel() pour obtenir les valeurs produites par l'accéléromètre, en appelant la méthode x() vous obtiendrez alors la valeur sur l'axe X.

>>> accel = pyb.Accel()
>>> accel.x()
7

Cela retourne un entier signé avec une valeur entre -30 et 30. Notez que les mesures sont très sensibles aux "bruits", cela signifie que même si la carte reste parfaitement stable, il y a des variations entre les mesures successives. A cause de cela, vous ne devriez pas utiliser la valeur exacte retournée par le senseur mais plutôt vous assurer qu'elle se trouve dans une certaine gamme de valeur.

Nous allons commencer par utiliser l'accéléromètre pour allumer une lampe si la carte est à plat.

accel = pyb.Accel()
light = pyb.LED(3)
SENSITIVITY = 3 # sensibilité

while True:
    x = accel.x()
    if abs(x) > SENSITIVITY:
        light.on() # allumer
    else:
        light.off() # éteindre

    pyb.delay(100)

Nous créons des objets LED et Accel, puis nous obtenons la valeur de l'axe X. Si la magnitude de x est plus grand qu'une certaine valeur SENSITIVITY alors la LED s'allume sinon elle s’éteint. La boucle introduit un petit délai avec pyb.delay() de 1/10 seconde pour éviter à LED de flasher ennuyeusement lorsque la valeur de x est proche de la valeur de SENSITIVITY. Essayez ce code sur votre PyBoard puis basculez votre carte de gauche à droite pour voir la LED s'allumer (et s'éteindre).

Exercice

Changez le script ci-dessus pour rendre la LED plus brillante lorsque vous basculez la carte.

truc & astuce: vous aurez besoin de changer "l'échelle de la valeur" lue sur l'axe pour qu'elle correspondre à la gamme 0-225 accepté par la fonction intensity() de la LED(4).

Réaliser un Niveau

MicroPython-Hack-accelerometre-niveau.jpg
Sous licence GPL via Wikimedia Commons - Water_level.jpg

L'exemple ci-dessus est uniquement sensible aux angles sur la direction X mais si l'on utilise aussi la valeur de y() et plus de LEDs nous pouvons transformer la carte PyBoard en niveau.

xlights = (pyb.LED(2), pyb.LED(3))
ylights = (pyb.LED(1), pyb.LED(4))

accel = pyb.Accel()
SENSITIVITY = 3

while True:
    x = accel.x()
    if x > SENSITIVITY:
        xlights[0].on()
        xlights[1].off()
    elif x < -SENSITIVITY:
        xlights[1].on()
        xlights[0].off()
    else:
        xlights[0].off()
        xlights[1].off()

    y = accel.y()
    if y > SENSITIVITY:
        ylights[0].on()
        ylights[1].off()
    elif y < -SENSITIVITY:
        ylights[1].on()
        ylights[0].off()
    else:
        ylights[0].off()
        ylights[1].off()

    pyb.delay(100)

Nous commençons par créer un tuple d'objets LED pour les directions/axes x et y. Les Tuples sont des objets immuables en Python ce qui signifie qu'ils ne peuvent plus être modifiés une fois qu'ils sont créés.

Ensuite, nous faisons fonctionner le programme comme notre exemple précédent de façon à allumer les LEDs pour les valeurs positives et négatives sur l'axe X. Nous faisons de même avec la direction Y. Ce n'est pas un script très sophistiqué mais cela fait bien son job. Exécutez ce programme sur votre pyboard et vous devriez voir les différentes LEDs s'allumées et s'éteindres en rapport avec l'orientation de la carte.



Source: The accelerometer écrit par/written by Damien P.George

Traduit par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org

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.