Une diode électroluminescente est un composé électronique qui émet de la lumière lorsqu'il est parcouru par un courant électrique. L'une des particularités de ce composant est qu'il ne peut être parcouru que dans un seul sens si l'on permute le sens du courant il est bloqué (aucune intensité ne parcourt le composant) et la diode (LED) reste éteinte. Nous verrons comment exploiter cette particularité en contrôlant par un programme l'alimentation de LEDs.
Nous allons utiliser un certain nombre de programmes écrits par des développeurs pour nous permettre d'interagir avec les broches d'une Raspberry Pi, ces programmes sont regroupés dans des librairies stockées sur le disque de la machine et prêtes à l'emploi, il suffit de solliciter leur utilisation pour accéder aux programmes qu'elles contiennent. On utilise pour cela l'instruction :
import nom_de_la_bibliothèque as nom_que_nous_utiliserons_dans_le_programme
Ces commandes doivent systématiquement figurer en tête de chaque programme que nous allons écrire. Lors de la phase d'apprentissage elles ne doivent être utilisées qu'une seule fois pour le programme considéré. La redéclaration de la broche entraîne un conflit qui place la broche dans un état "hors service". La situation est réversible soit en utilisant la commande led.dir(mraa.DIR_IN)
si le conflit est faible soit en ouvrant un terminal depuis la page de garde "Cahier de programmes" et en utilisant la commande mraa-gpio set 11 0
qui réinitialise complètement la broche.
Nous allons utiliser le montage encadré ci-dessous et connecter deux broches de la Raspberry Pi. L'identification des broche est une question de type "troll" dans la mesure où il y a plusieurs façons d'identifier ces broches dont toutes ont des avantages et des inconvénients. Nous utiliserons ici le numéro de la broche en commençant en haut à gauche (les connecteurs USB et RJ45 étant considérés en bas) en descendant et en augmentant de droite à gauche.
Connecter la patte longue de la LED à la broche 13 en y intercalant une résistance de 100 à 300 ohms et le fil noir à la broche 6 (GROUND). Pour allumer la LED, il faut commencer par
import mraa
led = mraa.Gpio(13)
Les broches peuvent fonctionner dans le sens in pour recevoir des données ou dans le sens out pour envoyer un signal ou un courant.
status = led.dir(mraa.DIR_OUT)
#print ('Return status : {0:1d}'.format(status))
Pour allumer la LED on met la sortie au niveau 1 avec la commande write
status = led.write(1)
#print ('Return status : {0:1d}'.format(status))
On éteint ou on ré-éteint la LED en mettant la sortie au niveau 0 avec la commande write
status = led.write(0)
#print ('Return status : {0:1d}'.format(status))
Il est possible de contrôler la durée d'allumage ou d'extinction de la LED ce qui conduit à la logique de clignotement. Pour y parvenir il est nécessaire de disposer de fonctions temporelles fournies par la bibliothèque time. On importe time ensuite on choisit la durée d'allumage et d'extinction en secondes: Exécuter le programme ci-dessous puis commenter chaque étape Importer la bibliothèque time Allumer la LED pendant ? secondes Eteindre la LED pendant ? secondes ......
import time
led.write(1)
time.sleep(1)
led.write(0)
time.sleep(1)
led.write(1)
time.sleep(1)
led.write(0)
0
Brancher une LED verte sur la broche 35 (GPIO 19) et la faire clignoter 10 fois en un seul programme
# Taper le code ici
Comme on l'a vu ci dessus il suffit d'imposer le temps d'allumage et d'extinction pour un obtenir un clignotement, cependant c'est très fastidieux de répéter plusieurs fois la même séquence d'instructions. La programmation fournit un outil qui décrit une répétition de commandes et permet en quelques lignes de répéter un grand nombre d'instructions identiques. Le programme ci-dessous utilise la variable i qui :
range("valeur initiale","valeur finale","pas")
Le clignotement se compose d'une phase d'allumage pendant 0.15 s et une phase d'extinction de 0.25 s.
for i in range(0,20,1) :
led.write(1)
time.sleep(0.15)
led.write(0)
time.sleep(0.25)
Modifier la valeur initiale, la valeur finale et le pas pour modifier le clignotement.
for i in range(-,-,-) :
led.write(1)
time.sleep(-.-)
led.write(0)
time.sleep(-.-)
On peut modifier la commande qui est répétée en ajoutant des tests qui permettent de fixer le moment ou le type de clignotement change. Ici on change tous les 10 clignotements.
for i in range(0,30,1) :
if (i < 10) :
led.write(1)
time.sleep(1)
led.write(0)
time.sleep(1)
elif (i >= 10 and i < 20) :
led.write(1)
time.sleep(0.2)
led.write(0)
time.sleep(0.2)
else :
led.write(1)
time.sleep(0.05)
led.write(0)
time.sleep(0.05)
Décrivez un mode de clignotement composé de plusieurs phases sur le modèle ci-dessus et écrivez le programme correspondant dans le bloc ci-dessous.
for i in range(-,-,-) :
if (- < -) :
led.write(1)
time.sleep(-.-)
led.write(0)
time.sleep(-.-)
elif ():
else :