template-blog-feature-image-lumina

Tutoriel Arduino – Création d’une lampe DIY « LUMINA »

This entry was posted in Education & robotique on by Laurent Verdier.

Ce tutoriel de projet basé Arduino a été réalisé par un amateur et s’adresse principalement à d’autres amateurs du genre, ou à toute personne ayant un peu de curiosité pour ce type de montages électroniques.

L’auteur en appelle par avance à la bienveillance des vénérables experts qui voudraient creuser un peu dans le code ou dans la conception mécanique (code arduino et fichiers STL disponibles en fin d’article).

LUMINA est une lampe imprimée en 3D , abritant une chaîne de LED RGB dont on peut faire varier la couleur et l’intensité. Elle propose plusieurs modes , permettant de l’utiliser comme lampe d’ambiance ou comme jeu. L’interaction se fait au moyen des 6 capteurs ultrason encastrés dans le socle, qui permettront de naviguer entre les différents modes, et d’activer les LED.

De quel matériel aurez-vous besoin ?

  • 1 x carte Arduino Uno Rev3
  • 1 x câble USB type B
  • 1 x buzzer piézoélectrique passif (optionnel)
  • 1 x  résistance 220 Ohms
  • 1 x plaque de prototypage 400 points
  • Des câbles jumper M/M et M/F
    (tous composants disponibles notamment dans le Starter Kit Officiel Arduino)
  • 6 x capteurs ultrason HC-SR04
  • 7 x LED grove RGB V2
  • 2 x sachets de 5 câbles Grove 5 cm
  • Un peu moins de 300 g de filament (130g pour la caisse, 65g pour la plaque et 75g pour le couvercle). Dans mon cas, du filament Chromatik couleur ivoire.
  • Des vis M2 6mm et écrous M2 , ou du scotch double-face
  • Recommandé : 1 x sachet de 5 câbles Grove/jumper mâle
  • Optionnel : 1 x chargeur mural (adaptateur USB 5V ou transformateur entre 7 et 12V pour l’alimentation par le jack, par exemple celui-ci). A défaut, brancher le câble USB sur un port d’ordinateur.

Les logiciels et librairies à télécharger

L’assemblage de votre lampe LUMINA

Placez la carte Arduino dans la caisse, le plus près possible de la paroi intérieure. Fixez ensuite la breadboard au moyen du scotch double-face de sa face inférieure, de manière à empêcher l’Arduino de bouger.

tutoriel-arduino-assemblage-lumina-1

Procédez ensuite aux branchements des capteurs à ultrason et du buzzer en suivant le schéma Fritzing . Lors de l’intégration dans la caisse, le sonar 1 doit être placé au-dessus des connecteurs USB et jack de l’Arduino.

tutoriel-arduino-assemblage-lumina-20
Schéma Fritzing

Fixez les modules LED grove à la face inférieure de la plaque intermédiaire. Si vous préférez l’utilisation de scotch double-face au vissage, basez-vous tout de même sur la position des passages de vis, de manière à orienter les LED correctement.

Connectez le “IN” de la LED centrale (numéro 7) au “OUT” de l’une des LED périphériques. Connectez ensuite, de proche en proche, les LED périphériques. Pour cela, utilisez les câbles 5 cm Grove. Vous pouvez décoller les fils les uns des autres, pour plus de souplesse.

tutoriel-arduino-assemblage-lumina-4

Le “IN” de la dernière LED (numéro 1) devra être connecté au moyen d’un câble mixte Grove – jumper mâle, d’une part à l’Arduino (signal), d’autre part à la breadboard (5V et masse).

Refermez la caisse avec la plaque intermédiaire, en prenant soin de positionner la LED 1 (celle qui est connectée directement à l’Arduino) au-dessus du sonar 1, soit au-dessus des connecteurs de l’Arduino.

tutoriel-arduino-assemblage-lumina-5

Avant de refermer le tout, je vous recommande de tester le bon fonctionnement de la lampe en téléversant le programme dans l’Arduino (le programme est disponible en bas de page , dans les ressources).

OPTIONNEL : vissez la plaque dans la caisse (par exemple si vous prévoyez de faire manipuler la lampe par des enfants).
Attention toutefois, les capteurs ultrason peuvent être enfoncés dans la caisse, par simple pression, ce qui risque d’altérer leur fonctionnement. Si vous souhaitez visser la plaque, prévoyez un moyen de fixer les capteurs. Un tel système est en cours de réflexion en vue d’une implémentation dans la structure même de la boîte.

tutoriel-arduino-assemblage-lumina-8

Positionnez le couvercle. Normalement, toutes les pièces doivent tenir en place une fois emboîtées. Vous pouvez alors brancher la lampe en USB ou par le jack et commencer à utiliser LUMINA !

tutoriel-arduino-assemblage-lumina-10

Utilisation de votre lampe LUMINA

A ce jour, LUMINA propose 4 modes d’utilisation, et un mode de sélection :

Mode 1 : variation manuelle

Trois capteurs ultrason vont permettre d’ augmenter par paliers la valeur des composantes rouge, verte et bleue, et les trois autres vont faire baisser ces mêmes valeurs . Le changement est appliqué uniformément à l’ensemble des LED. Un sous-programme permet de modifier la valeur du palier, de manière à accélérer les changements de couleur. Accessible en maintenant activés ensemble les sonars 2 et 5* .

Mode 2 : variation automatique

Les LED balaient ensemble le spectre des couleurs . Il s’agit de l’un des codes de démo de la librairie utilisée. Un sous-programme a été rajouté pour permettre une variation de la vitesse du balayage. Accessible en maintenant activés ensemble les sonars 2 et 5* .

Mode 3 : piano lumineux

Chaque sonar est associé à la LED située au-dessus de lui, elle-même associée à une couleur. Activer un sonar allume la LED correspondante dans sa couleur. Lorsque le sonar n’est plus activé, la LED baisse progressivement d’intensité jusqu’à s’éteindre.

Plusieurs LED peuvent être allumées en même temps. La LED du sommet s’allume en blanc et à son intensité alignée sur celle de la dernière LED activée. Chaque sonar est également associé à une note de musique, jouée par le buzzer aussi longtemps que la LED est activée. Un sous-programme permet de faire varier la durée la vitesse du dégradé à partir du moment où le sonar est relâché (entre environ 0 et 5 secondes). Accessible en maintenant activés ensemble les sonars 2 et 5* .

Mode 4 : Simon, le célèbre jeu

La lampe joue une séquence de LED accompagnée de notes, que le joueur doit reproduire en activant les sonars correspondants. Le jeu commence avec une séquence de 3, incrémentée à chaque réussite, jusqu’à une séquence de 10. Une réussite déclenche une petite animation en vert, et fait passer au niveau suivant. Une réussite au niveau 10 fait quitter le jeu. Un échec déclenche une petite animation rouge et fait rejouer la séquence en cours. Le troisième échec expulse le joueur du jeu. Le joueur est soumis à un timer pour jouer sa séquence. A la fin du timer, le joueur est éliminé. Dans tous ces cas de figure, la lampe repasse en Mode 2 – variation automatique.

Ce mode est accessible depuis tous les modes sauf Simon, en maintenant activés les sonars 1 et 4* . Les LED 1 à 4* s’allument en blanc et varient d’intensité. Activer de manière prolongée un de ces sonars va enclencher le mode correspondant. Les LED 5 et 6* envoient le joueur en mode de variation automatique. Idem lorsque le timer arrive à terme.

*numéro selon photos et schéma Fritzing, et non pas selon le code.

Genèse du projet LUMINA

L’envie de réaliser cette lampe m’est venue en voyant les vidéos de présentation des kits Bare Conductive (notamment les lampes commandées par capteur capacitif). Je possédais déjà une imprimante 3D, et j’avais remarqué que des impressions suffisamment fines pouvaient donner des effets de transparence sympa, adaptés pour mon usage.

Il me manquait les connaissances en électronique, mais la perspective de pouvoir réaliser un objet complet, grâce à l’impression 3D, m’a convaincu de m’y mettre !

Le choix des plates-formes

La carte électronique

Comme je venais de démarrer la programmation en Arduino, je disposais de la fameuse Uno R3 du débutant . Il était tout naturel de rentabiliser à la fois le matériel et les apprentissages, en basant le projet sur cette carte.

Cela dit, il serait possible d’utiliser n’importe quelle autre carte de la famille Arduino , voire n’importe quel autre microcontrôleur ( Raspberry Pi , pour ceux qui aiment coder en Python , par exemple).

Attention toutefois à ceux qui voudraient reproduire le projet avec une micro:bit : même s’il est possible d’avoir accès à suffisamment de broches grâce à un breakout, la carte délivre une tension de 3.3V, trop faible pour alimenter les différents capteurs.

Les capteurs

Les capteurs capacitifs en peinture conductrice m’auraient bien plu, mais ils nécessitent d’être assez grands pour être efficaces. L’objet final ne devant pas être trop gros, il me fallait une solution plus compacte. Les capteurs à ultrasons HC-SR04 offrent le double avantage d’être peu coûteux et d’avoir une large plage de détection. Pour le même usage, on aurait pu aussi bien prendre des capteurs infrarouges, tels que ceux du constructeur Pololu.

Les LED

J’ai un temps hésité avec des LED RGB Neopixel, mais les LED chaînables Grove offrent l’ avantage non négligeable de se connecter très simplement, sans soudure . Leur platine comporte des perçages permettant une fixation facile à la structure. En revanche, les deux références disposent de librairies Arduino toutes prêtes .

L’imprimante 3D

Pour ma part, j’utilise une Neva, de Dagoma. Un réglage de 0.2 mm (rapide) permet déjà d’obtenir un rendu très satisfaisant. Les parties fines ne présentent pas de jour entre les couches, les pièces s’emboîtent bien. J’utilise un filament couleur ivoire (celui qui me sert pour mes tests, de manière générale). Imprimé assez fin, il permet de bien diffuser la couleur des LED, tout en absorbant l’excès de brillance.
NB : dans ses dimensions de base, la boîte exploite au maximul la surface d’impression de la Neva. Attention à bien enlever immédiatement le petit pâté que dépose l’imprimante au démarrage, avant que la tête d’impression ne repasse dessus.

Les outils logiciel

Le programme est réalisé en environnement Arduino classique . Petite précision, pour les capteurs ultrason, j’ai utilisé la librairie NewPing. Les HC-SR04 sont tous connectés à la même broche pour le trigger, et cela causait des dysfonctionnements avec la librairie Ping “de base”. A noter que le logiciel MBlock du constructeur MakeBlock permet de programmer des cartes Arduino en langage visuel de type Scratch.

La modélisation des pièces a été faite avec Tinkercad , interface gratuite accessible en ligne , extrêmement simple à prendre en main . La modélisation se fait au moyen d’adjonctions et de soustractions de formes géométriques plus ou moins complexes. Il permet néanmoins de réaliser des conceptions très élaborées. Il existe de nombreux tutoriels vidéos en ligne.

Quelques conseils

En tant que débutant, la réalisation d’un premier projet électronique a quelque chose de grisant. En revanche, cela peut aussi être la source de frustration, face à des complications inattendues ou des bugs incompréhensibles. Voici quelques suggestions qui aideront je l’espère mes camarades novices à ne pas tomber dans le découragement.

Avoir une idée précise ce qu’on veut faire

Comme dans toute démarche de création, l’un des principaux dangers est de se perdre en cours de route, tellement les possibilités sont vastes. Il sera donc important, tout au long du projet, de garder clairement à l’esprit l’objectif final .

Commencer modestement

Rome ne s’est pas faite en un jour ! Si vous débutez, il faut commencer par accepter de ne pas faire tout de suite le méga-projet-de-la-mort-qui-tue. Mais rassurez-vous : vos amis sont certainement aussi novices que vous, et même un montage simple à base de détection d’obstacle et de clignotements de LED pourra leur tirer des exclamations d’émerveillement sur vos nouveaux talents de programmeur ! Et rien ne vous empêchera de complexifier progressivement votre montage.

Trouver un nom de code à son projet

Parce que c’est cool. Bon, LUMINA ne va peut-être pas remporter la palme de l’originalité, mais si vous menez plusieurs projets de front, avoir un petit nom pour chacun vous aidera à vous y retrouver .

Investir dans un crayon et du papier

A chaque fois que j’ai voulu me lancer directement dans un bout de code au détour d’une idée, j’y ai passé deux heures, là où il n’y avait vraiment pas besoin de chercher loin. Donc avant de se jeter sur son clavier, on respire à fond, on taille son crayon, on affûte sa gomme, et… on réfléchit. “Ce qui se conçoit bien s’énonce clairement, et les mots pour le dire arrivent aisément.” Cette maxime de Nicolas Boileau s’applique aussi à la programmation ! Vous verrez, vous gagnerez du temps !

Aller à la pêche aux informations

C’est sûr que quand on travaille avec des geeks, il est assez facile d’obtenir des explications sur des points obscurs. Mais pour ceux qui n’ont pas la chance d’en fréquenter, pas de panique ! Internet regorge de mines d’or, sous des formes différentes. Tout d’abord, les sites officiels des plates-formes que vous utilisez vous dépanneront souvent, qu’il s’agisse d’Arduino, Rasberry Pi, Python, Micro:bit… Pour des indications de base sur le fonctionnement d’Arduino, le tutoriel d’Openclassroom pour débutant est extrêmement bien fait. Et de manière générale, un simple google avec quelques mots clés bien choisis vous sortira de la panade.

Réviser les bases

Nombre d’erreurs dans la programmation viennent d’une bête erreur de syntaxe qu’on ne voit pas, alors même qu’on a lu, relu et re-relu son code ligne par ligne. Un grand classique : la notation “if a = 0”, là où il faudrait écrire “if a==0” . De quoi devenir fou. En cas de bug, très important, donc, de bien vérifier même les fonctions et les notations les plus élémentaires.

Se conformer aux conventions de programmation

Parce que vous ne serez peut-être pas le seul à lire votre code, ou tout simplement parce que vous aurez parfois besoin d’y revenir après plusieurs semaines : suivez les bonnes pratiques en terme de présentation (indentation mon amour) et de commentaire ! Là encore vous gagnerez du temps et du confort.

S’amuser !

Si vous vous intéressez à ce tuto, c’est probablement en tant que programmeur amateur. L’apprentissage du code est passionnant, mais peut aussi avoir ses aspects rébarbatifs et contraignants. Pour ne pas vous décourager, assurez-vous toujours de faire quelque chose qui vous plaît !

Ressources du Tutoriel Arduino – Création d’une lampe DIY « LUMINA »