neopixel
Deutsch   English   Français   

8. NEOPIXEL

 

 

QUE SONT LES NEOPIXELS ?

 

Dans un avenir proche, les sources lumineuses seront presque exclusivement constituées de LED. Une LED est une diode semi-conductrice qui transforme le courant électrique qui la traverse en lumière avec un rendement élevé. Selon le matériau utilisé, il est possible de produire différentes couleurs. Si l'on combine une LED rouge, une LED verte et une LED bleue dans un même boîtier, on obtient une LED RVB qui permet de produire toutes les autres couleurs par synthèse additive des couleurs. Ce principe est également utilisé dans les téléviseurs couleur.

Les LED RVB sont parfois associées à un circuit électronique (contrôleur) dans un même boîtier et connectées les unes à la suite des autres en cascade. Avec seulement trois fils de connexion, il est néanmoins possible d'attribuer une couleur différente à chaque LED. Habituellement, les LED sont montées sur un ruban LED (LED strip). Il existe également des anneaux ou des dispositions rectangulaires (matrices).

Dans ce qui suit, tu utiliseras soit un ruban LED, soit un anneau LED, soit une matrice LED comportant au moins 12 LED. Celles-ci doivent être du type WS2812B. Fournisseurs : magasins d'électronique, boutiques en ligne (Adafruit, Seeed, Pi-Shop, eBay, AliExpress, etc.).

 

 

PROGRAMMER EN S'AMUSANT

 

Un système d'éclairage commandé par un microcontrôleur comme le micro:bit est extrêmement flexible et polyvalent. Le résultat visuel dépend entièrement de ton imagination et de ta créativité lors de l'écriture du programme de commande. Dans cette fiche d'activités, tu découvriras quelques techniques fondamentales que tu pourras ensuite appliquer à tes propres projets. Comme tu le constateras, programmer des systèmes d'éclairage est particulièrement amusant, car les effets de chaque ligne de programme sont immédiatement visibles.

 

 

BRANCHEMENT

 

Pour réaliser des expériences simples, tu peux connecter le ruban LED, l'anneau ou la matrice au micro:bit à l'aide de trois fils.

Tu utilises pour cela les broches GND, 3.3V et P0. Veille à ne pas confondre les connexions et à ce que les pinces n'entrent pas en contact avec les pistes conductrices voisines.

Les couleurs habituelles des fils sont :
GND: noir
3.3V (VCC): rouge
Line de données (DIN): une autre couleur

 
Attention : Si tu utilises un dispositif comportant plus de 20 à 30 LED, tu dois l'alimenter avec une source d'alimentation externe de 5 V, par exemple une batterie externe (PowerBank)..

 

 

EXERCICE 1 : ATTRIBUER UNE COULEUR À UN PIXEL

 

La commande des NeoPixels s'effectue à l'aide d'un protocole série. Les trois valeurs de couleur du premier pixel sont transmises successivement, puis celles du deuxième pixel, et ainsi de suite. Le premier pixel récupère les valeurs qui lui sont destinées et transmet le reste du flux de données au pixel suivant. Avec MicroPython, la programmation est très simple : tu crées un « objet » NeoPixel en indiquant la broche utilisée pour la transmission des données (habituellement pin0) et le nombre de NeoPixels de ton dispositif.

Par exemple, pour 24 LED :
np = NeoPixel(pin0, 24)
(np est un nom de variable choisi librement.)

Une liste contenant 24 tuples est alors créée en mémoire. Elle permet de stocker les couleurs RVB des 24 LED, sous forme de valeurs (R, V, B), chacune comprise entre 0 et 255.

Tu peux accéder aux différentes valeurs à l'aide d'un indice de liste. Par exemple, pour attribuer à la première LED une couleur rouge d'intensité 30 :
np[0] = (30, 0, 0)
Ou pour attribuer à la deuxième LED une couleur verte :
np[1] = (0, 30, 0)
Cependant, cette affectation ne fait qu'enregistrer les valeurs des couleurs dans la liste. Pour que les couleurs soient effectivement visibles, tu dois transmettre les informations de la liste aux LED en appelant :
np.show()

Le programme se présente donc ainsi :

Programme:

from microbit import *
from neopixel import *

nbLeds = 24
np = NeoPixel(pin0, nbLeds)
np[0] = (30, 0, 0)
np[1] = (0, 30, 0)
np.show()
► copy to clipboard
 

Comme tu peux le constater, tu dois importer non seulement le module microbit, mais aussi le module neopixel. Si tu oublies l'instruction np.show(), tu ne verras aucun changement de couleur, car les LED ne reçoivent le flux de données qu'au moment de cet appel.

 

 

EXERCICE 2 : FAIRE DÉFILER UN PIXEL

 

Tu n'as besoin que de très peu de connaissances en programmation pour résoudre les exercices suivants. Dans ce premier exercice, essaie de faire défiler indéfiniment un seul pixel rouge du début jusqu'à la fin du ruban LED. Utilise pour cela un temps d'attente approprié entre les changements de position du pixel (par exemple 100 ms). Tu peux expérimenter avec différentes couleurs et différents temps d'attente.

Remarque :
Pour éteindre un seul pixel, tu utilises np[i] = (0, 0, 0).Tu peux également éteindre tous les pixels simultanément avec :

 

 

 

EXERCICE 3 : UN VER LUMINEUX MULTICOLORE QUI S'ALLONGE

 

Il est amusant de créer un « ver » constitué de pixels de la même couleur. Au départ, toutes les LED sont éteintes. Les pixels doivent ensuite s'allumer successivement dans la couleur souhaitée, jusqu'à ce que tous les pixels soient allumés. Cette opération doit se répéter indéfiniment avec différentes couleurs.

Pour cela, le plus simple est d'écrire une fonction wurm(color) qui crée le ver lumineux, puis de l'appeler successivement et indéfiniment avec les couleurs rouge, vert, bleu, jaune, cyan et blanc.

 

Tu peux également renoncer à éteindre le ver précédent, de sorte que toutes les LED restent toujours allumées.

 

 

 

EXERCICE 4 : FAIRE VARIER SIMULTANÉMENT LA LUMINOSITÉ DE TOUTES LES LED

 

For many color games, you want all LEDs to light up together. Write a program that makes all LEDs light up and darken again in small steps with a fixed color. The program should run endlessly and the largest color component should not exceed 30.


Play with different colors that can also change continuously.

 

 

 

EXERCICE 5 : SIMULER LE SCINTILLEMENT D'UNE BOUGIE

 

Reprends le programme précédent, mais choisis aléatoirement les composantes de couleur lorsque la luminosité augmente et diminue. Si la valeur maximale actuelle des composantes de couleur est k, utilise la couleur suivante :

color = int(random() * k, int(random() * k,         int(random() * k)

Pour cela, tu dois importer le module random :
from random import *

 

 

 

EXERCICE 6 : RÉALISER TES PROPRES IDÉES

 

Invente un jeu de lumière selon tes propres idées.