Le casse tête de la partie électronique d’un cube à LED pensé pour Arduino

Le cube à LED est l’un des projets DIY les plus exotiques que vous puissiez réaliser : la complexité de sa construction est exponentielle selon le nombre de LED de côté que vous souhaitez utiliser et leur type, monochrome ou RGB.

Un cube comportant 3 diodes électroluminescentes se compose de 9 LED par face, soit 27 au total. Pour un cube de 8 de côté, on arrive à 512 LED. Pour une résolution de 32×32 par face, c’est près de 32768 LED.

Le choix de la « résolution » (nombre de pixels) est important ! Si par exemple un cube de 4 LED de côté est simple à réaliser, il me semble dépourvu d’intérêt : la sensation de 3D au sein du cube y sera très faible.

Problématique

Sans parler du test individuel de chaque LED avant soudure, du nombre de câbles ou du simple nombre de points de soudure à réaliser, un cube est un casse tête à commander. Si chaque LED monochrome devait être adressée individuellement, il faudrait trouver un microcontrolleur disposant d’autant d’entrées/sorties.

Voici mon problème : en tant que développeur, je veux simplifier au maximum le montage électronique. Je compte me reposer sur la plus grande carte Arduino Mega qui dispose de seulement 54 I/O numériques et 16 analogiques reconfigurables.

Le Charlieplexing (?)

L’astuce la plus répandue pour diminuer le nombre de GPIO nécessaires s’appelle le multiplexage :
– à l’instant T1, le premier étage du cube est pilotable, dans une matrice de LED en 2D
– à l’instant T2, tout le premier étage s’éteint et le second étage devient pilotable
– ainsi de suite jusqu’à l’instant T8 où la boucle recommence au premier étage de LED

Si le nombre de cycles de parcours entre les étages est assez rapide, un effet de persistance rétinienne permettra d’avoir la sensation que les LED de chaque étage ne s’éteignent pas mais brillent en fait un peu moins qu’en étant allumées 100% du temps.

Et de cette manière, pour un cube de 7 LED de côté, seules 49 LED doivent être pilotées en lieu et place des 343 LED du cube complet. Futé non ? Explorons maintenant toutes les options possibles.

Solution 1 : les cubes vendus montés

L3D
C’est une option vraiment tentante quand on a passé des semaines à se documenter sur le sujet. Je le déconseille pour trois raisons :
– c’est cher, de 355$ pour le L3D Cube à 1200$ pour l’Hypnocube
– c’est trop fragile pour être livré sans crainte comme l’Hypnocube, ou trop solide pour être observé à 360° (le L3D cube ne se regarde que d’une face et légèrement de côté)
– ça n’est pas prévu pour être hacké, comprendre dépourvu d’interface de programmation standardisée

Solution 2 : les kits vendus avec PCB à souder soit même

Cube DIY
Attention, je ne dis pas que c’est infaisable et que ce n’est peut être pas l’option la plus intelligente : je dis qu’elle est hors de ma portée car mes connaissances en électronique sont très, très faibles, et que je ne souhaite pas progresser. L’électronique m’amuse mais ce n’est pas ma priorité : c’est le développement.

Pour moi ces kits ont un inconvénient majeur : ils nous font recréer une carte type Arduino… mais bien plus bas niveau, en C « vanilla », sans avoir accès aux contributions de la communauté Arduino telles que Nanpy.

Solution 3 : réaliser soit même un PCB de pilotage de LED

Cube driver DIY
Un cube de 8 LED de côté nécessite 64 I/O pour les anodes, plus 8 I/O pour les cathodes, soit 73 pins. Nous avons vu que la limite maximum de la plateforme Arduino est de 70 GPIO. Un cube de 8 LED de côté impose de recourir à des composants électroniques de multiplexage, ce qui implique là aussi de bonnes connaissances et impactera la difficulté de programmation du cube.

Les tutos mis en ligne sur le site Instructables vous offriront tout le loisir de comparer les nombreuses manières différentes de parvenir à un cube fonctionnel par cette voie.

Solution 4 : un shield Arduino ? un dérivé Arduino-compatible ?

Voxel Shield
À ma connaissance, le Voxel Shield est le seul projet Open Hardware qui a été documenté pour réaliser un cube 8x8x8, mais il n’est pas commercialisé. On trouve tout plein de shields pour réaliser des cubes plus petits, de 3 à 5 LED de côté, ce qui n’est pas suffisant à mon goût.

L’Arduino Mega et Due proposent 70 I/O au total, soit en 5V pour le premier, soit en 3.3V pour le second. Je n’ai pas pu trouver de shield ni de fork de ces cartes augmentant encore le nombre de GPIO.

Je sais qu’on peut relier deux Arduino en série via les pins D0 (RX) et D1 (TX), en I2C via les pins D4 et D5 ou en SPI via les pins de votre choix. J’avais donc pensé utiliser un second Arduino en tant qu’esclave du premier afin d’augmenter le nombre total de ses GPIO. Je n’ai pas trouvé de sketch ou de firmware tout pré-fait pour le faire alors que dit comme ça, ça semble trivial !

Solution 5 : faire au mieux avec l’Arduino Mega

Cube Mega
Finalement, parce que je souhaite passer au plus vite à la pratique sur le cube, j’ai choisi d’être limité par l’Arduino Mega : le plus grand cube possible est le 7x7x7, soit 343 LED. En manipulant 49 anodes et 7 cathodes, 56 I/O seront utilisés, 14 libres et l’Arduino Mega pourra être directement utilisé pour piloter logiciellement les LED.

Cette dernière option évite quasi tout le volet électronique de l’affaire en le réduisant à des résistances et des transistors.

Le prochain article décrira comment réaliser ce projet !

3 commentaires sur “Le casse tête de la partie électronique d’un cube à LED pensé pour Arduino

  1. Salut,

    Sinon, y’a ce style de produit,
    http://www.adafruit.com/products/815
    tu peux imaginer en avoir plusieurs en série.

    > When we saw this chip, we quickly realized what an excellent add-on this would be. Using only two pins, control 16 free-running
    > PWM outputs! You can even chain up 62 breakouts to control up to 992 PWM outputs (which we would really like to see since it
    > would be glorious)

  2. Salut ! Oui en effet je n’ai pas parlé des alternatives aux multiplexeurs, j’avais trouvé un tuto qui proposait d’utiliser un autre type de microcontrôleur, le Allegro Microsystems A6276EA LED Driver http://www.digikey.com/product-detail/en/A6276EA-T/A6276EA-T-ND/1972838 Ça reste hyper bas niveau à mon goût.

    On vient de me parler à l’instant d’un « I/O expander » (MCP23017 en I2C, et sa variante MCP230S17 en SPI) https://www.adafruit.com/products/732 ça permet d’adresser plus de pins, simultanément cette fois.

    Le driver que tu présentes est encore plus intéressant ! Très pratique de n’avoir qu’à connecter deux fils pour ajouter des GPIO. Avec ta solution, pas de composants additionnels à souder. Mais j’ai un doute sur la possibilité de juste piloter les I/O sans PWM ?

  3. Alors les solutions que tu montre sont en effet bas niveaux,
    loin de la programmation, elle le sont matériellement,
    Avec la carte d’extensions tu a le choix entre souder les fils directement
    ou utiliser des connecteurs, se qui rend déjà la solutions plus simple, limite plug&play

    Piloter un Servo reviens a faire du PWM. Dans ce cas, tu a une largeur de 1000Hz (cf. https://learn.adafruit.com/16-channel-pwm-servo-driver?view=all#setpwmfreq-freq)
    A savoir que a 120hz tu es assurais de ne rien voir.
    Avec 3 boads, tu peux meme ajouter quelque led.
    Et pourquoi pas utilise un RPi(python/wifi tout ça)

L'espace de discussion de cet article est désormais fermé.