5 minute(s) de lecture

LedDroid C’est bientôt l’heure de décorer les sapins de Noël alors il faut que ça clignote ! Dans ce tutoriel vous pourrez commander une bande de leds adressables avec un Raspberry pi. Les bandes de leds adressables permettent de commander chaque led indépendamment des autres car chaque led est associée à un micro-contrôleur. Les animations qu’on peut imaginer sont alors infinies: poursuites, vas-et-viens, fermetures, ouvertures, stroboscope, vagues etc … dans des millions de configurations colorimétriques différentes: c’est INFINI.

Choix du matériel

J’ai opté pour une bande de leds Neopixel chez Adafruit car ils ont développé les bibliothèques python qui permettent de les commander très facilement avec quelques lignes de code sur un Raspberry pi: c’est idéal pour mon projet. Il faut du matériel spécifique pour pouvoir les alimenter et les commander: Une alimentation 5v dédiée est nécessaire (ne surtout pas utiliser l’alim 5v du Raspi car elle ne tiendrait pas le choc: les LEDs en grande quantité consomment trop pour le raspi). Il faut une alim 5v 2A si vous prenez une bande d’1 ou 2m, et jusqu’à 5v 10A pour des bandes plus longues pouvant atteindre 5m.

Pour envoyer les signaux de commande à la bande de leds, il faut un signal 5v sachant que les ports GPIO du Raspberry pi sont en 3,3V ça ne va pas le faire: il faut donc un circuit intégré que l’on appelle un “level shifter” 3v->5v qui va convertir les signaux 3v du rapsi en 5v: c’est le rôle d’un 74AHCT125.

J’ai opté pour un boiter de commande avec quelques boutons poussoirs: 1 pour sélectionner une animation, un pour lancer/arrêter une animation, et un autre pour éteindre le Raspberry pi. Le numéro de l’animation choisie s’affiche sur un afficheur leds 7 segments. Tous les composants seront soudés sur une carte au format HAT qui s’enfiche directement sur le port GPIO du raspi.

Nous aurons donc besoin comme matériel: LedDroid

  • Un Raspberry pi 3 avec Raspbian installé sur un SD card 16Go
  • 1 afficheur 7 segments à annode commune (attention à ne pas prendre un modèle à cathode commune il ne fonctionnerait pas sur ce circuit), et prévoir 2 rangées de connecteurs femelle dupont 5 pins qui seront soudées sur le circuit pour éviter de souder l’afficheur 7 segments (personnellement j’achète des rangées de 20 qui sont sécables).
  • 1 74HC595N et son support 16 pins à souder: il va commander l’afficher 7 segment.
  • 1 level shifter 74AHCT125, et son support 14 pins à souder: il va convertir les signaux 3v du raspi en 5v pour la bande de leds.
  • 3 boutons poussoirs type no 6mm
  • résistances: 9220 ohms, 610k ohms
  • condensateurs: 2 * 100nF céramique (ils serviront de condensateur de découplage pour les 2 circuits intégrés du montage) + 1 * 470uF pour stabiliser la tension supplémentaire 5v.
  • 1 led 5mm rouge: elle sert à repérer les boutons poussoirs lorsque le circuit est positionné dans un endroit sombre
  • 1 petit interrupteur à glissière ON-ON 3 broches 2,54mm: il permet d’allumer ou d’éteindre la led rouge.
  • 1 bornier 3 broches pas 2,54mm, compatible 10A: on y branchera la bande de leds 3 fils (1 masse, 1 VCC 5v, et au milieu le fil de commande)
  • 1 bornier 2 broches pas 2,54mm, compatible 10A: pour y brancher l’alimentation externe 5v
  • 1 connecteur 2*20pin femelle pas 2,54mm : c’est le connecteur vers le Raspberry pi.
  • 1 bande de leds adressable neopixel, j’ai poté pour celles sur fond noir.
  • 1 alimentation 5V externe, minimum 2A jusqu’à 10A.
  • il faudra prévoir des branchements et raccords pour relier la bande de leds et l’alim 5v aux borniers.
  • Enfin le circuit imprimé à faire fabriquer à partir des fichiers GERBER fournis sur ma page Github.

Circuit électronique

LedDroid Sur la gauche on trouve les 3 boutons poussoirs de commande et la leds avec son interrupteur. En haut à gauche c’est un circuit classique de commande d’un afficheur 7 segments à l’aide d’un convertisseur série parallèle 8bits (74HC595N). Enfin en bas à droite on trouve le connecteur d’alimentation 5v externe, et le connecteur bande de leds 3 fils dont le fil de commande est relié à un level shifter 3v->5v qui reçoit ses ordres du port GPIO18 du Raspberry pi. La soudure des composants sur la carte est simple: il y a des marqueurs et indications directement sur la carte recto et verso.

Circuit Imprimé

Configuration du système

Télécharger le programme ledDroid.py sur ma page Github. et déposez-le dans /home/pi/ (ou n’importe où ailleurs mais adaptez ce qui suit).

Pour pouvoir commander la bande de leds, il faut installer la bibliothèque python fournie par Adafruit en suivant ce guide très simple. Moi j’ai exécuté un simple:

pip3 install adafruit-circuitpython-neopixel

Une fois la bibliothèque installée, il faut exécuter le programme python avec des droits admin: donc toujours ajouter “sudo” sinon vous aurez un beau message d’erreur.

exemple d’exécution en ligne de commande:

sudo python3 /home/pi/ledDroid.py 

Si vous souhaitez que le programme démarre automatiquement au démarrage du Raspberry pi, c’est simple sous Raspbian:

  • sudo nano /etc/rc.local pour ouvrir le fichier de configuration de démarrage automatique
  • juste avant la ligne “exit 0” ajouter sudo python3 /home/pi/ledDroid.py & , en supposant que le programme python est déposé dans /home/pi. le petit caractère “&” en fin de ligne est très important: il signifie d’exécuter le pgm en tâche de fond.
  • CTRL-O pour enregistrer, et CTRL-X pour sortir.
  • pour tester: sudo /etc/rc.local et le programme doit se lancer: si vous voyez un “1” apparaître sur l’afficheur 7 segments, c’est bon signe. Appuyez sur le bouton “Confirm” et l’animation n°1 va s’exécuter. Appuyez sur “Off” et le Raspberry va s’éteindre.

Au prochain démarrage: le programme s’exécute tout seul.

Le programme a été développé en python 3 orienté objet, vous pourrez l’adapter facilement pour créer vos propres animations:

  • La classe SevenDisplay permet de gérer l’affichage sur l’afficheur 7 segments, sous la forme d’un thread. Elle affiche notamment le n° de l’animation choisie entre 1 et 9 et affiche un serpentin animé lors d’une animation en cours.
  • La classe RubanLeds gère les animations sur le ruban de leds, sous forme d’un thread aussi. Il y a plusieurs méthodes qui permettent de créer des poursuites, des ouvertures/fermetures, des animations arc-en-ciel de toutes les couleurs, des stroboscopes etc … C’est ici que vous pouvez adapter/créer vos propres animations.
  • La classe Application gère la gestion des boutons poussoirs et du port GPIO.

Amusez-vous bien, et que vos sapins soient illuminés !