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

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 119 : Ligne 119 :
 
   |label=LED rouge (ou DEL)
 
   |label=LED rouge (ou DEL)
 
   |label2=x1
 
   |label2=x1
   |img=ARDX-LED-Rouge.png
+
   |img=ARDX-LED.png
 
   |pl=66
 
   |pl=66
 
}}
 
}}

Version du 4 octobre 2015 à 20:16


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.

Ce que nous faisons

Nous allons apprendre à utiliser les LEDs déjà disponibles sur la carte PyBoard.

Ensuite, nous allons apprendre à brancher une LED externe sur la PyBoard et apprendre à controler.

Les LEDs de la carte

Votre PyBoard est déjà équipée de 4 LEDs.

PyBoard-LEDs.jpg

Activer les LEDs et concepts de base

L'une des choses les plus faciles à faire sur une carte PyBoard est est d'allumer les LEDs qui sont montés sur la carte. Connectez la carte, et connectez vous sur la carte en REPL comme décrit dans le tutoriel précédent. Nous allons commencer par allumer une LED dans l’interpréteur en tapant la commande suivante:

>>> myled = pyb.LED(1)
>>> myled.on()
>>> myled.off()

Ces commandes allume (on) et éteint (off) la LED.

Tout cela est très bien mais nous aimerions que ce processus soit automatisé. Ouvrez le fichier main.py sur la carte PyBoard avec votre éditeur de texte favorit. Ecrivez (ou copiez/collez) les lignes suivantes dans le fichier. Si vous débutez en Python, assurez-vous de bien préserver l'indentation dans les différentes lignes, cela est vraiment très important!

led = pyb.LED(2)
while True:
    led.toggle()
    pyb.delay(1000)

Lorsque vous sauvez le fichier, la LED rouge sur la carte doit s'allumer pendant environ une seconde. Pour exécuter le script, faite une réinitialisation logicielle (soft reset) en pressant (CTRL-D). La carte PyBoard va redémarrer et vous devriez voir la LED rouge clignoter continuellement. Ca marche? génial, vous venez de réaliser la première étape vous permettant de réaliser votre futur armée de petits robots! Lorsque vous serez lassé de voir la LED clignoter alors pressez la combinaison CTRL-C dans votre terminal pour interrompre l'exécution.

Que fait donc ce code? Pour commencer, nous avons besoin de faire le point sur la terminologie. Python est un langage orienté objet, donc presque tout les éléments en Python son des classe et lorsque vous créer une instance de classe, vous obtenez un objet. La classe représente la définition, l'objet instancié (depuis un classe) un "objet" manipulable. Une méthode (aussi appelée fonction membre) est utilisé pour interagir avec l'objet, ce qui permet de le contrôler.

La première ligne e code crée un objet appelé "led", instance de la classe LED. Lorsque l'objet est crée, celui-ci prend un seul paramètre dont la valeur varie entre 1 et 4, valeurs correspondants aux 4 LEDs disponibles sur la carte.

La classe pyb.LED dispose de 3 membres importants que nous allons utiliser:

  • on() pour allumer la LED,
  • off() pour éteindre la LED,
  • toggle() pour inverser l'état de la LED.

L'autre fonction que nous allons utiliser est pyb.delay() qui attend un temps/délai définit exprimé en milliseconde.

Une fois que nous avons crée l'objet "led" (instance de la classe LED), la ligne while True: crée une boucle infinie qui change l'état de la led (via l'appel de toggle()) et attend une seconde (soit 1000 millisecondes).

Note: voyez aussi l'article "classe et instance d'objet" sur commentcamarche.net

Exercice 1

Essayez de changer le temps entre deux changement d'état de la LED.... et essayez d'allumer une autre LED.

Exercice 2

Connectez vous directement sur votre pyboard, créez un objet pyb.LED et allumer une LED en utilisant la méthode on().

C'est Disco sur votre PyBoard

Jusqu'à maintenant, nous avons uniquement utilisé une seule LED mais la pyboard dispose de 4 LEDs. Commençons par créer un objet pour chaque LED comme cela, il sera possible de toutes les commander séparément. Nous faisons cela en créant une liste de LEDs à l'aide d'une "list comprehension" (voyez cet exemple).

leds = [pyb.LED(i) for i in range(1,5)]

Vous recevrez un message d'erreur si vous appelez pyb.LED() avec un nombre autre que 1,2,3,4. nous allons ensuite utiliser une boucle infinie pour allumer et éteindre les LEDs en cycles.

n = 0
while True:
  n = (n + 1) % 4
  leds[n].toggle()
  pyb.delay(50)

Dans ce code, la variable n identifie la LED actuellement manipulée. A chaque itération de la boucle nous passons à la LED suivante (le signe % est l'opérateur "Modulus", retournant le reste de la division, aussi appelé reste de la division euclidienne). Cet opérateur permet de garder la valeur de n entre 0 et 3.

Ensuite, nous accédons à la Nième LED et nous modifions son état avec la méthode toggle. Si vous exécutez ce code, vous devriez voir toutes les LEDs s'allumer puis toutes les LEDs s'éteindre.

Un problème que vous pourriez rencontrer lorsque vous arrêtez puis redémarrer le script, c'est que les LEDs restent dans l'état du précédent fonctionnement, ruinant ainsi votre chorégraphie Disco préparée avec tellement de soin. Nous pouvons facilement corriger ce problème en éteignant les LEDs lorsque nous initialisons le script ET en utilisant ensuite un bloc try/finally. Lorsque vous pressez CTRL-C, Micro Python génère une exception VCPInterrupt. Les exceptions signifie généralement que quelque-chose s'est mal déroulé. Vous pouvez utiliser une commande try: pour "attraper" l'exception. Dans ce cas, il s'agit de l'arrêt du script provoqué par l'utilisateur, nous n'avons pas besoin d'attraper l'erreur mais juste d'informer Micro Python de ce qui doit être fait lorsque l'on quitte le script. C'est ce que réalise le bloc finally et nous l'utilisons pour faire en sorte que toutes les LEDs soient éteinte. Le code complet est:

leds = [pyb.LED(i) for i in range(1,5)]
for l in leds:
    l.off()

n = 0
try:
   while True:
      n = (n + 1) % 4
      leds[n].toggle()
      pyb.delay(50)
finally:
    for l in leds:
        l.off()

La LED 4 est spéciale

La LED bleue est spéciale. En plus de pouvoir l'allumer et l'éteindre, vous pouvez controler sont intensité en utilisant la méthode intensity(). Cette méthode accepte un nombre entre 0 et 255 qui détermine sa luminosité. Le script suivant fait en sorte d'allumer la LED bleue graduellement puis l’éteint pour recommencer.

led = pyb.LED(4)
intensity = 0
while True:
    intensity = (intensity + 1) % 255
    led.intensity(intensity)
    pyb.delay(20)

Vous pouvez appeler intensity() sur les autres LEDs mais elles peuvent uniquement être éteinte ou allumée. La valeur 0 permet de les éteindre... tout autre valeur (jusqu'à 255) l'allumera.

Brancher une LED

Introduction

Faire clignoter une LED c'est comme créer un programme "Bonjour le monde" (l'équivalent du célèbre "Hello World" en anglais). C'est une chouette façon de débuter votre voyage dans le monde du matériel embarqué.

Pour cet exemple, vous aurez besoin d'un Micro Python Pyboard, un Breadboard, une LED et une résistance (nous allons calculer sa valeur un peut plus loin) et un câble USB.

Matériel Nécessaire

ARDX-R1K.png

Résistance de 1 KOhms (vert-bleu-brun)
x1

ARDX-LED.png

LED rouge (ou DEL)
x1

 

Brancher

Connectez tous les éléments ensembles comme présenté sur l'image. La LED est connectée sur la broche X5 du PyBoard. La broche positive (la PLUS longue broche) est connectée sur X5' par l'intermédiaire d'une résistance de 1K Ohms (Brun Noir Rouge) . La broche négative de la LED (la MOINS longue) est connecté sur la masse (gnd/ground).

Notez l'astuce mnémotechnique, le (+) PLUS de la LED est la broche la PLUS longue et le (-) MOINS de la LED est la broche la MOINS longue.

MicroPython-Hack-LED-01.jpg

Vous pourriez également placer la résistance entre la masse et la broche (-) de la LED. Cela n'a pas vraiment d'importance. Seul le sens de raccordement de la LED est important.

Valeur de la résistance

Mais qu'elle résistance faut il mettre en place?

Voici comment nous allons la trouver:

Conformément à la loi d'Ohm : Tension = Courant x Résistance

Par conséquent, pour calculer la résistance, la formule devient

Résistance = Tension / Courant

Dans notre cas, la tension de sortie du Core est de 3.3V. Ces 3.3V est distribuée entre la résistance et la LED. 3.3V = Urésistance + Uled. Comme la chute de tension dans une LED est d'environ 2.0V (Uled). la chute de tension aux bornes de la résistance est donc de 3.3V - Uled.

La tension sur la résistance est donc de:

Urésistance = 3.3V - 2.0V = 1.3V

Le courant nécessaire pour allumer une LED varie entre 2mA et 20mA. Plus le courant est important et plus la LED sera lumineuse.

Il est généralement souhaitable de limiter le courant qui passe dans la LED (à sa limite la plus basse) pour prolonger sa durée de vie.

Nous allons choisir de contrôler cette LED avec un courant de 5mA (soit 0.005 Ampère). Et comme le courant qui traverse la LED traverse également la résistance...

Revenons à notre loi d'Ohms

Résistance = Tension / Courant = Urésistance / Irésitance

Résistance = 1.3V / 5mA = 1.3 / 0.005 = 260 Ohms

Note:
Etant donné qu'il y a une grande variation de valeur pour les chutes de tension dans LEDs (le forward voltage drop) dépendant du type, de la taille, couleur, fabriquant, etc. Vous pourriez utiliser successivement des valeurs entre 220 Ohms et 1K Ohms.

Dans l'image nous utilisons une résistance de 1K Ohms (Brun Noir Rouge)

Le programme

Voici une version du programme pour commander cette LED externe.

p = pyb.Pin( 'X5', pyb.Pin.OUT_PP )
p.high()
p.low()

La première ligne pyb.Pin( 'X5', pyb.Pin.OUT_PP ) permet d'obtenir une référence p sur la broche X5 tout en configurant celle-ci comme une sortie OUT (de type PP: Push Pull).

Ensuite, la ligne p.high() active la sortie (et allume donc la LED).

La ligne p.low() désactive la sortie, ce qui a pour conséquence d'éteindre la LED qui y est branchée.

Plus d'information

Nous aurons l'occasion de revenir plus en détails sur la commande des broches dans un autre tutoriel. En attendant, vous trouverez d'autres informations dans la documentation de Micro Python



Source: Turning on LEDs and basic Python concepts é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.