Un client de Curiouser m’a demandé de créer une attraction originale pour le salon Geekopolis, à base de wearable computing. Je ne disposais pour se faire que d’un Flora (un micro-board de programmation Arduino dédié au wearable), 4 leds et un accéléromètre (et 5 soirées de libre).
Après plusieurs idées plus ou moins géniales (data gloves, baguette magique, etc.), notre choix se fixa sur la recréation d’un marteau de Thor « intelligent » pouvant changer de couleur en l’agitant. Le défi : réussir à faire clignoter Mjöllnir en bleu foncé. Car vous ne le savez peut-être pas, jeunes incultes éduqués par les films grand public Marvel, mais Mjöllnir, prononcez « Miaule-nir », du vieux norrois Mjǫllnir, désigne l’éclair ou une arme foudroyante de couleur blanche.
L’idée étant trouvée, la principale contrainte concerna la solidité du marteau. L’objet étant destiné à subir la manipulation forcenée de cosplayers plus ou moins maladroits durant les 2 jours du salon. Mais le défi était lancé, Mjolnir allait revoir le jour.
La fabrication de Mjolnir
Tel un dvergr (nain) de Svartalfheim, me voilà donc à tirer des plans pour trouver la façon dont je vais fabriquer mon marteau. Impossible de refaire exactement le marteau de Thor dont le petit manche caractéristique vient d’une blague faite par Loki au nain qui était en train de le forger. Mais pour moi, il me fallait un marteau beaucoup plus gros pour attirer les foules (hum).
J’ai alors avisé chez moi deux plaques en mousse ayant servi à transporter une tour de PC. J’ai décidé d’en faire le corps de l’objet en y appliquant quelques coups de cutter sur les coins pour simuler des coups de biseau sur un vieux bloc de pierre ou métal.
Une fois les plaques collées, il m’a fallu les renforcer (et leur donner un peu de poids). La mousse expansive est idéale. Ca colle, et ça déborde de partout. Conseil : essayez de ne pas en mettre pas sur les doigts.
Et puis, l’obligation de couper tous les morceaux qui dépassent.Ca ressemble à rien ? C’est normal, ça va venir.
Restait un problème : comment supprimer l’aspect et la texture spongieuse de la mousse ? La solution me vint de ce tutorial vidéo ci-dessous venu de Hackaday où Caleb Kraft utilise de la colle blanche pour durcir la mousse.
Idée de génie que j’ai reprise pour finalement peindre l’objet à mi chemin entre le métal et la pierre.
Le gros manche de Mjolnir
Pour faire le manche, j’ai acheté un manche de pioche (9 €) que j’ai découpé à la bonne taille.
Je l’ai ensuite gravé au couteau (j’aime graver au couteau le soir en regardant une série TV sur Arte, je me suis un autre homme) et verni pour lui donner ce côté rude et luisant qui fait une grande part du succès du marteau auprès du public féminin.
J’ai également percé le manche pour y faire passer une dragonne. Mjolnir a forcément une dragonne.
Le montage final
L’étape finale a consisté à percer le marteau pour y faire rentrer le manche, et à ajouter une vis de sécurité (traversant le marteau et le manche) maintenue par deux écrous pour faire tenir le tout.
J’ai également ajouté un couvercle de boite à café au dessus pour faire comme dans le comics.
J’y ai ajouté enfin une lanière de cuir assez épaisse pour faire une dragonne et une autre lanière, plus fine, pour faire le tour du manche, le tout clouté avec des punaises.
La partie électronique
Flora est une petite carte Arduino très simple à programmer. Il m’a suffit de brancher le tout, de tester, d’écrire le programme Arduino (voir ci-dessous), et hop, direction la soudure. Le tout ne m’a pas pris plus de 2h (et ça m’aurait pris moins si je n’avais pas soudé un fil à l’envers.
J’ai décidé de faire un côté marteau « électronique » et un côté marteau naturel pour que le public puisse poser sur les photos. Et voilà le résultat final :
Au salon, le marteau a déclenché la joie des petits et des grands. Vous pouvez d’ailleurs voir Babozor (le « barbu » de la Grotte du barbu – un site indispensable de maker dont j’ai déjà parlé sur ce blog) l’essayer avec la violence contenue qui le caractérise. La marteau a tenu bon. Il pouvait tenir deux jours.
Et même de vrais vikings l’ont essayé :
En bref, une belle expérience qui m’a donné encore plus envie de fabriquer des choses avec mes petites mains. Il reste juste le problème du temps…
Le résumé du matériel :
- 4 Neopixels
- 1 Flora (d’Adafruit)
- 1 accéléromètre Flora
- un manche de pioche
- une bombe de mousse expansive
- une bombe de peinture metal/pierre
- un pot de colle blanche
- un peu de vernis, un couvercle en plastique, un couteau, un cutter, de la colle forte, etc.
- une vis et 2 écrous
- des lanières de buir
- 5 soirées
Le code Arduino pour Flora :
#include <Wire.h> #include <Adafruit_LSM303.h> #include <Adafruit_NeoPixel.h> #define PIN 6 Adafruit_LSM303 lsm; Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ800); // config nombre de neopixel, et numéro de PIN //déclaration des variables utilisées int coordX, coordY, coordZ; int coordX0, coordY0, coordZ0; int ecartX, ecartY, ecartZ; void setup() { // initialisation de pixel strip.begin(); strip.show(); // j'éteins les pixels au démarrage // affichage sur le moniteur serie (pour le debug) Serial.begin(9600); // initialisation de l'accelerometre - est-il reconnu ? if (!lsm.begin()) { Serial.println("Aie... Le LSM303 ne peut pas s'initialiser. Vérifier la connectique !"); while (1); } Serial.println("--- GO GO GO ---------------------------------"); // baisser la luminosité des neopixel (max 255 - j'aime pas quand ça éblouit) strip.setBrightness(64); strip.show(); // faire clignoter les leds 3 fois sequenceIni(); } void loop() { // lecture de l'accelerometre lsm.read(); coordX = lireData("x"); coordY = lireData("y"); coordZ = lireData("z"); // afficheCoord(coordX, coordY, coordZ, 1); //affichage série pour debug // test différence avec position avant // afficheCoord(coordX0, coordY0, coordZ0, 0); // affichage série pour debug ecartX = coordX0 - coordX; //Serial.print("ECART: "); Serial.println(ecartX); // affichage série pour debug // comportement des LED en fonction de l'écart if (ecartX < 700) { afficheCouleur(255, 0, 0); strip.show(); } else if (ecartX < 1400) { afficheCouleur(255, 255, 0); strip.show(); } else if (ecartX < 2300) { afficheCouleur(0, 255, 0); strip.show(); } else if (ecartX < 3300) { afficheCouleur(0, 255, 255); strip.show(); } else if (ecartX > 4000) { afficheCouleur(0, 0, 255); clignote(0, 0, 255); strip.show(); } coordX0 = coordX; coordY0 = coordY; coordZ0 = coordZ; delay(560); } // fonction de lecture de données de l'accelerometre int lireData(String axe) { //retourne la donnnée de coordonnée de l'axe if (axe=="x") { return lsm.accelData.x; } else { if (axe=="y") { return lsm.accelData.y; } else { return lsm.accelData.z; } } } // fonction d'affichage de couleur sur les 4 leds void afficheCouleur(int r, int v, int b) { for (int i=0; i<4; i++) { // strip.setPixelColor (i, strip.Color(r, v, b)); } } // fonction d'affichage de coordonnées sur le moniteur série void afficheCoord(int x, int y, int z, int type) { if (type==0) { Serial.print("X0: "); Serial.print(x); Serial.print(" "); Serial.print("Y0: "); Serial.print(y); Serial.print(" "); Serial.print("Z0: "); Serial.println(z); Serial.print(" "); } else { Serial.print("X: "); Serial.print(x); Serial.print(" "); Serial.print("Y: "); Serial.print(y); Serial.print(" "); Serial.print("Z: "); Serial.println(z); Serial.print(" "); } } // séquence d'initialisation du marteau : ça clignote 3 fois void sequenceIni(void) { for (int i=0; i<3; i++){ afficheCouleur(188, 188, 188); strip.show(); delay(1000); afficheCouleur(188, 188, 188); strip.show(); delay(500); } } // fonction de clignotement (j'aurai du l'utiliser plus haut) void clignote(int r, int v, int b) { for (int i=0; i<3; i++){ afficheCouleur(r, v, b); strip.show(); delay(1000); afficheCouleur(0, 0, 0); strip.show(); delay(500); } }