Cube led avec Arduino : Construisez un jeu en 3D à base d'Arduino
*Un projet de notre partenaire Elettronica IN - Italie
Nous vous proposons ici un projet qui vous enchantera par ses jeux de lumière, encore plus fascinants dans l'obscurité, basé précisément sur ces diodes électroluminescentes ; plus exactement, une matrice de leds monochromatiques en trois dimensions, disposées dans l'espace pour former un cube.
Il s'agit de quelque chose de spectaculaire et de simple à la fois, à la portée des plus jeunes et de ceux qui s'initient à l'électronique pour la première fois. Ajoutez à cela le fait qu'il n'est pas nécessaire de réaliser un circuit imprimé pour sa réalisation, puisque les connexions de la structure cubique sont réalisées en soudant les pattes des leds entre elles, et que les connexions des bornes à l'unité de contrôle peuvent être réalisées à l'aide d'une carte de prototypage matricielle.
Le cube à leds
La structure du cube se compose de quatre niveaux (couches) de diodes électroluminescentes soudées ensemble, après avoir convenablement plié leurs pattes et les avoir disposées selon la bonne polarité. Chaque niveau est composé de 4 rangées, elles-mêmes composées de 4 leds, avec un total de 16 leds par couche ; le cube est donc composé de 64 leds au total. Le tout est géré par une carte Arduino Nano grâce à des connexions réalisées à l'aide de fils qui amènent l'alimentation et sont soudés à une carte perforée matricielle. Le micrologiciel détermine quelles leds du cube s'allumeront et lesquelles ne s'allumeront pas, créant ainsi des effets de lumière par un pilotage en multiplex.
Notre projet a donc besoin des éléments suivants :
- Carte Arduino Nano ;
- 64 leds monochromes de la couleur souhaitée ;
- Carte perforée matricielle pour maintenir la structure de leds.
Nous chargerons dans la carte Arduino un micrologiciel écrit spécialement pour l'occasion, et que nous avons mis à votre disposition au bas de cette page.
Sur le plan électrique, le schéma de connexion est illustré à la Figure 1, qui indique la correspondance entre les lignes de l'Arduino Nano et les rangées de leds. Plus précisément, la rangée et le nombre de leds sont indiqués entre parenthèses : par exemple, (1, 2) signifie que la broche correspondante de l'Arduino doit être connectée à la première led de la rangée 1 ; c'est pourquoi, dans le diagramme, les paires de nombres semblables sont indiquées par Y, X.
Par contre, les couches de 16 leds correspondent chacune à Z et doivent être connectées aux broches A0 (A), A1 (B), A2 (C) et A3 (D). La désignation Z est plus qu'appropriée car les couches sont disposées verticalement, donc précisément sur l'axe Z, tandis que X et Y sont la largeur et la profondeur du cube, définies par colonne.
Ces branchements sont plus faciles à comprendre si l'on examine la Figure 2, qui montre la disposition dans l'espace des diodes électroluminescentes et clarifie les connexions entre les paires de nombres présentées dans la Figure 1.
Chaque connexion aux E/S de l'Arduino alimente une anode des leds, tandis que les cathodes sont reliées entre les diodes de chaque niveau et vont vers les lignes A, B, C, D, qui seront commutées à un niveau logique bas.
En ce qui concerne le matériel, chaque colonne de notre cube est connectée à une broche E/S sur la carte, de sorte que chaque broche se retrouve avec 4 leds qui y sont connectées. Mais comme notre Arduino Nano n'a que 14 broches numériques, nous devons convertir 2 broches analogiques en broches numériques, de manière à obtenir 16 broches numériques (13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, A5, A4) qui nous permettront ainsi d'allumer ou d'éteindre la colonne choisie.
Nous avons appliqué la même procédure aux 4 niveaux, auxquels nous avons connecté 4 broches (A3, A2, A1 et A0) : chaque broche contrôle un niveau, de sorte qu'en combinant l'allumage du niveau avec l'allumage de la colonne, nous pourrons indiquer à l'Arduino les leds qui doivent être allumées et celles qui doivent être laissées éteintes.
Grâce à cette astuce, nous pourrons réaliser ce projet avec seulement 20 broches E/S, ce qui aurait été impossible si nous avions connecté une led à chaque broche, car dans ce cas nous aurions eu besoin de 64 broches, et bien évidemment, celles d'un petit Arduino Nano auraient été insuffisantes.
En résumé, pour contrôler indépendamment chaque led, nous divisons le cube en niveaux (horizontaux) et en colonnes (verticales). Chaque led placée au même niveau ( étage) aura la cathode (-) en commun avec les autres leds du même niveau alors que, au contraire, chaque led placée dans la même colonne aura l'anode (+) en commun avec les autres led de la même colonne.
Au total, il y aura 4 broches à contrôler, qui serviront à sélectionner le niveau à alimenter, et 16 anodes qui alimenteront les différentes colonnes. Lorsque nous devrons allumer une led particulière, nous devrons nous assurer que son niveau est amené au zéro logique et que la colonne à laquelle elle appartient est active, c'est-à-dire amenée au niveau logique « 1 » .
Réalisation pratique
Arrivés à ce stade, nous pouvons expliquer comment réaliser notre cube lumineux à leds, pour lequel vous aurez besoin, outre les 64 diodes électroluminescentes (dans notre cas, nous avons choisi des leds rondes de 5 mm de diamètre) et l'Arduino Nano, de fil de cuivre rigide de 0,5 à 0,8 mm² et d'un câble souple pour les connexions avec le cube et entre les leds qui le composent.
Nous vous recommandons également d'utiliser un carré de carton (ou Mdf ou d'Isorel de faible épaisseur, par exemple 3 mm) de 13×13 cm qui servira de matrice ou de gabarit, dont vous aurez besoin pour construire les niveaux de votre cube ; en gros, vous marquerez ce carton de quatre lignes verticales et d'autant de lignes horizontales, puis vous ferez quatre points équidistants pour chaque ligne, de sorte qu'à la fin il y aura 16 points, chacun équidistant de son voisin.
Vous percerez ensuite le carton avec la pointe du stylo, juste assez pour y placer une led à l'envers, ce qui donne la Figure 3 ; puis pour réaliser les niveaux qui formeront ensuite le cube, chacun étant composé de 16 leds (dans une matrice 4×4) qui seront disposées à égale distance les unes des autres, percez le carton aux intersections entre les rangées pour maintenir la bonne distance à l'intérieur de la structure.
Dans notre cas, la distance (l'espacement) entre chaque led et la suivante est de 3 cm : une distance qui nous semble optimale pour obtenir un affichage compact et fonctionnel des animations crées par le cube dans l'obscurité.
Prenez donc le carré de carton perforé et insérez autant de leds dans les 16 trous, à l'envers (c'est-à-dire avec la « tête » dans les trous), après quoi vous pouvez plier les pattes et commencer à souder les composants ensemble dans un même niveau ; ce gabarit permet non seulement de fixer une distance précise entre les leds, mais aussi de maintenir les diodes électroluminescentes en place pour faciliter la soudure.
Pliez ensuite les cathodes à angle droit et étamez-les ensemble : pour cela, pliez-les de manière à ce que la cathode d'une led puisse toucher celle de la suivante et y être étamée.
Si les pattes ne sont pas assez longues, reliez les cathodes de chaque ligne avec un morceau de fil de cuivre rigide, puis, transversalement, reliez les lignes de chaque niveau avec le fil utilisé jusqu'à ce que le maillage soit terminé.
Par contre, les anodes doivent être pliées en escalier, c'est-à-dire une fois à un angle droit puis à un angle de 90° à une distance d'environ 3 mm, juste assez pour qu'elles puissent passer sur le côté de la tête des leds en-dessous.
Elles doivent ensuite être reliées (avec un fil de cuivre rigide, si leur longueur n'est pas suffisante) à celles de la couche suivante.
Lorsque vous avez terminé un niveau, retirez-le du gabarit en carton et câblez-en un autre de la même façon ; une fois que vous aurez reproduit ces niveaux de la même façon, vous devrez les relier verticalement, par les anodes, pour créer une sorte de cage qui soutiendra la structure, en la rendant solide et en lui donnant la forme d'un cube.
Il y aura une connexion verticale pour chaque colonne de leds et une pour chacune des 16 leds de chaque niveau ; en fait, il y a 16 colonnes en tout (la première led de chaque niveau devra correspondre à celle du niveau inférieur et ainsi de suite).
Pour fixer le tout et le connecter, il est conseillé d'utiliser un carte perforée matricielle de bonnes dimensions : au moins 10×10 cm ; dans les trous, insérer les extrémités des colonnes du cube, 16 en tout, en les étamant dans les pastilles correspondantes, puis les connecter avec des morceaux de fil de cuivre isolés aux pastilles de la carte Arduino Nano, selon ce qui a déjà été expliqué et en se référant aux indications de la Figure 1 et de la Figure 2.
Une vue plus détaillée de l'assemblage et des connexions est proposée dans le schéma de câblage de la Figure 4.
Lorsque le travail est terminé, vous obtiendrez quelque chose comme ce qui est montré dans les photos du prototype dans cet article. Comme vous le voyez, des diodes à haute luminosité dans un boîtier transparent ont été utilisées ; si vous souhaitez obtenir une émission lumineuse plus uniforme, bien que moins intense, vous pouvez utiliser des leds conventionnelles (qui émettent généralement à un angle de 120 à 140 degrés) avec un boîtier coloré : par exemple, les leds vertes proposées dans la figure 2, toujours d'un diamètre de 5 mm.
N'oubliez pas que l'ensemble du circuit fonctionne avec une alimentation provenant de la connexion micro-USB de la carte Arduino Nano, que vous connecterez à un ordinateur ou, une fois le programme téléchargé, à une alimentation dotée d'une connexion micro-USB, capable de délivrer au moins 500 milliampères.
Micrologiciel
Le code que nous avons créé se base sur le principe de fonctionnement déjà énoncé, c'est-à-dire en considérant qu'Arduino doit contrôler quatre broches qui serviront à sélectionner le niveau à alimenter et 16 anodes qui alimenteront les différentes colonnes. Lorsque nous devrons allumer une led particulière de la matrice tridimensionnelle qui constitue le cube, nous devrons nous assurer que son niveau (c'est-à-dire celui sur lequel elle se trouve physiquement et électriquement...) est alimentée (c'est-à-dire que ses cathodes sont mises à la masse à partir de la ligne Arduino Nano entre A, B, C, D) et que sa colonne est active ; ce faisant, nous allumerons une led à la fois pour chaque niveau.
La première chose que nous avons faite a été de déclarer les broches (en fait, dans le listing, nous avons écrit les broches d'E/S dont nous aurons besoin dans ce projet). La déclaration des broches dans le code est utilisée pour configurer une broche particulière sur l'Arduino ,et détermine si elle doit être une broche d'ENTREE ou de SORTIE.
Dans ce cas, les broches déclarées ont été divisées en colonnes (Columns) et en niveaux (Layers), qui sont respectivement des sorties actives à un niveau logique haut et à un niveau logique bas (Listing 1).
4x4x4 LED Cube
Connection Setup:
Columns
[(x,y)-Pin]
(1,1)-13
(1,2)-12
(1,3)-11
(1,4)-10
(2,1)-9
(2,2)-8
(2,3)-7
(2,4)-6
(3,1)-5
(3-2)-4
(3-3)-3
(3,4)-2
(4,1)-1
(4,2)-0
(4,3)-A5
(4,4)-A4
Layers
[layer-Pin]
a-A0
b-A1
c-A2
d-A3
*/
//initializing and declaring led columns
int column[16]={13,12,11,10,9,8,7,6,5,4,3,2,1,0,A5,A4};
//initializing and declaring led layers
int layer[4]={A3,A2,A1,A0};
int time = 250;
Vient ensuite la configuration, dans laquelle les paramètres du micrologiciel sont définis, et la boucle for, qui est la base de l'affichage des effets lumineux car elle définit l'alternance des niveaux logiques sur les broches de la carte Arduino, afin de contrôler les leds en multiplex. Enfin, dans le sketch se trouve la boucle, qui contient toutes les routines concernant les jeux de lumière prévus (voir Listing 2).
{
Serial.println(“sono nel loop”);
turnEverythingOff();//turn all off
flickerOn();
turnEverythingOn();//turn all on
delay(time);
turnOnAndOffAllByLayerUpAndDownNotTimed();
layerstompUpAndDown();
turnOnAndOffAllByColumnSideways();
delay(time);
aroundEdgeDown();
turnEverythingOff();
randomflicker();
randomRain();
diagonalRectangle();
goThroughAllLedsOneAtATime();
propeller();
spiralInAndOut();
flickerOff();
turnEverythingOff();
delay(2000);
}
Dans cette boucle se trouvent les fonctions individuelles correspondant aux jeux de lumière, dont nous présentons dans le Listing 3 l'effet lumineux Propeller (animation), dont l'effet visuel est d'allumer les leds des niveaux de manière séquentielle, de sorte qu'une lumière rotative apparaisse comme le mouvement d'une hélice.
void propeller()
{
turnEverythingOff();
int x = 90;
for(int y = 4; y>0; y--)
{
for(int i = 0; i<6; i++)
{
//turn on layer
digitalWrite(layer[y-1], 1);
//a1
turnColumnsOff();
digitalWrite(column[0], 0);
digitalWrite(column[5], 0);
digitalWrite(column[10], 0);
digitalWrite(column[15], 0);
delay(x);
//b1
turnColumnsOff();
digitalWrite(column[4], 0);
digitalWrite(column[5], 0);
digitalWrite(column[10], 0);
digitalWrite(column[11], 0);
delay(x);
//c1
turnColumnsOff();
digitalWrite(column[6], 0);
digitalWrite(column[7], 0);
digitalWrite(column[8], 0);
digitalWrite(column[9], 0);
delay(x);
//d1
turnColumnsOff();
digitalWrite(column[3], 0);
digitalWrite(column[6], 0);
digitalWrite(column[9], 0);
digitalWrite(column[12], 0);
delay(x);
//d2
turnColumnsOff();
digitalWrite(column[2], 0);
digitalWrite(column[6], 0);
digitalWrite(column[9], 0);
digitalWrite(column[13], 0);
delay(x);
//d3
turnColumnsOff();
digitalWrite(column[1], 0);
digitalWrite(column[5], 0);
digitalWrite(column[10], 0);
digitalWrite(column[14], 0);
delay(x);
}
}
//d4
turnColumnsOff();
digitalWrite(column[0], 0);
digitalWrite(column[5], 0);
digitalWrite(column[10], 0);
digitalWrite(column[15], 0);
delay(x);
}
Il est clair que les fonctions contenues dans la boucle sont propres à chacun des effets lumineux.
La liste des fonctions, ou animations, réalisées par le cube à leds est la suivante :
- turnEverythingOff(); Tout éteindre
- flickerOn(); Clignotement
- turnEverythingOn(); Tout allumer
- turnOnAndOffAllByLayerUpAndDownNotTi; Éteindre et allumer par niveaux en montée/descente
- layerstompUpAndDown(); Bascule entre niveaux montée/decente
- turnOnAndOffAllByColumnSideways(); Tout éteindre/allumer par colonnes latérales
- aroundEdgeDown(); Le long du bord vers le bas
- randomflicker(); Clignotement aléatoire
- randomRain(); Pluie aléatoire
- diagonalRectangle(); Rectangle diagonal
- goThroughAllLedsOneAtATime(); Allumer toutes les leds une fois
- propeller(); Hélice
- spiralInAndOut(); Entrée et sortie spirale
- flickerOff(); Arrêt du clignotement
A la fin de la boucle, l'instruction delay(2000) fixe un délai de 2 secondes avant l'exécution d'une nouvelle séquence.
Bien sûr, pour installer le sketch dans Arduino, vous devez connecter la carte Arduino Nano (qu'elle soit déjà montée dans le circuit du cube ou pas n'a pas d'importance...) puis démarrer l'IDE, puis dans le menu Outils > Carte, choisir la carte Arduino Nano et ouvrir (Fichier > Ouvrir) le sketch, puis commencer à le charger dans l'Arduino en cliquant sur le bouton Téléverser.
Conclusion
L'avantage de ce projet est que vous pouvez le configurer à votre guise, en ajoutant de nouveaux effets lumineux, bien que pour ce faire, vous devez avoir une certaine connaissance du langage de programmation « C » appliqué à Arduino ; cependant, ne vous inquiétez pas trop parce que même en cherchant ici et là sur internet, vous trouverez de nombreux projets similaires concernant les leds et même au-delà, avec les difficultés matérielles correspondantes.
Pour configurer le sketch, afin d'adapter le nôtre pour contrôler plus de diodes électroluminescentes, il suffit de copier et coller le code sur le programme de la carte (pour les inexpérimentés), puis de changer la déclaration des broches dans le code ou de modifier les connexions des niveaux et des colonnes sur l'Arduino.
Ceci étant dit, il ne vous reste plus qu'à vous souhaiter un travail agréable et à vous amuser avec votre cube lumineux.
Traduction : Laurent RAUBER