[1/50] Le premier défi : Halloween ! Tremblez…
B0ooouuuH !!! Ahah ! Quoi de mieux pour attaquer un défi que la semaine d’Halloween ? Histoire de se mettre en jambes ! Ce premier défi n’a pas été de tout repos, je vous l’admets (surtout pour mon imprimante 3D) ! Découvrons ensemble ce premier des 50 défis à venir !   Objectif du défi […]
Defi Halloween

B0ooouuuH !!! Ahah ! Quoi de mieux pour attaquer un défi que la semaine d’Halloween ? Histoire de se mettre en jambes ! Ce premier défi n’a pas été de tout repos, je vous l’admets (surtout pour mon imprimante 3D) ! Découvrons ensemble ce premier des 50 défis à venir !

 

Objectif du défi d’Halloween

L’objectif pour moi était de créer un objet fun pour cette semaine de la peur ! Et cela en une semaine chrono ! Pour se faire, j’ai commencé par établir un « cahier de charges » de mon objet pour établir ses fonctions :
– Objet faisant référence à Halloween
– Objet permettant de surprendre quelqu’un lorsque la personne passe à proximité
– Un effet « waouh » serait un plus !

Partant de ces prérequis, j’ai prévu de mettre en scène une citrouille imprimée en 3D. J’avais prévu d’intégrer :
– Un capteur PIR pour détecter le mouvement d’une personne
– Un bandeau LED RGB à l’intérieur de la citrouille pour les jeux de lumières
– Un moteur avec une masse inertielle pour faire office de vibreur
– Cerise sur le gâteau : Un générateur de fumée ou de vapeur pour faire un effet « waouh » des plus accomplis

Et le tout en photographiant, schématisant et filmant au maximum mes opérations ! (et je ne parle pas du montage vidéo à l’arrache, ainsi que l’article à rédiger !).

 

Vidéo

Comme prévu, la vidéo de présentation de l’objet :

 

Impression des principales pièces en 3D

Pour imprimer la citrouille en 3D, c’était tout trouvé. J’ai sélectionné la « citrouille en kit » Jack O’Lantern dont le design est de thjelmfelt. J’ai adoré cette citrouille à assembler et à personnaliser. De plus, elle me permettait d’intégrer de l’électronique facilement, car les faces avant et arrière de la citrouille sont amovibles !

La belle citrouille d'Halloween !

La belle citrouille d’Halloween !

Ensuite, pour le ce qui est du socle, j’ai choisi de découper et personnaliser Tunk The Trunk réalisé par Davision3d sous MeshMixer. Je n’ai gardé que le bas de Tunk. Une fois le fichier .STL découpé et rempli sous MeshMixer, j’ai utilisé le logiciel 3DBuilder de Microsoft pour découper la zone d’intégration du futur capteur infrarouge. Je voulais d’abord le placer dans l’œil de la citrouille, mais ça ne rendait pas top… Du coup, le socle avait son utilité ! Et oui… je me suis rendu sur 3DBuilder (le logiciel vraiment « de base », le « paint » de la modélisation 3D) pour faire cette modification, car Fusion 360 n’arrivait pas à gérer la multitude de polygones de l’objet (-1 pour toi Fusion !).

Découpe du tronc de Trunk avec Autodesk MeshMixer.

Découpe du tronc de Trunk avec Autodesk MeshMixer.

 

Découpe pour l'insert du capteur PIR.

Découpe pour l’insert du capteur PIR.

 

Le tout a été imprimé avec du filament ArianePlast (noir pour le socle, orange pour la citrouille et vert pomme pour la tige), à 210°C sur ma Dagoma DiscoEasy 200. Pour les connaisseurs, mon imprimante est munie d’un heatbreak PTFE.

 

L’échec : Créer un effet « fumée » avec de la vapeur d’eau

Car un défi n’est pas fait que de réussites, laissez-moi vous partager l’échec cuisant que j’ai eu avec l’effet fumée que je recherchais. J’ai eu l’idée de récupérer ce qu’on appelle un « Mist Maker » ou alors plus communément « un brumisateur à ultrason ». On retrouve cet élément dans les fontaines zen ou les diffuseurs d’huiles essentielles (t’as vu l’originalité ?).

Il s’agit en fait d’une lamelle céramique qui est soumise électroniquement à une vibration très rapide. C’est tellement rapide que la vitesse est dites « ultrason » car elle atteint 3 fois la vitesse du son. Lorsqu’une certaine quantité d’eau se trouve au-dessous de la lamelle (pas trop, sinon l’effet n’est plus garanti), cette eau s’atomise sous l’effet des vibrations. C’est à dire que les molécules d’eau vont vibrer tellement fort qu’elles vont se séparer et même chauffer. Il y a donc création de vapeur d’eau. Sous l’effet vibratoire et d’atomisation, la vapeur monte au-dessus de l’eau. Si le contenant retient les grosses projections et ne laisse passer que la vapeur, celle-ci se déverse hors du contenant. D’où la modélisation d’un contenant spécifique à imprimer en 3D (je n’avais pas de verre suffisamment grand pour contenir le brumisateur, et suffisamment petit pour rentrer dans la citrouille).

Design sous Fusion360 pour le contenant d'eau avec le Mist Maker.

Design sous Fusion360 pour le contenant d’eau avec le Mist Maker.

Jusque-là, mes tests avec le Mist Maker fonctionnaient à la perfection (désolé, pas de photos ou vidéos à l’appui ici !). Cependant, une fois l’objet dans le contenant imprimé en 3D, ce dernier s’est mis à produire de moins en moins de vapeur, la lamelle vibrait de moins en moins vite… Jusqu’à ne plus produire de vapeur…

Le Mist Maker serti dans le contenant.

Le Mist Maker serti dans le contenant.

Du coup j’ai décidé de m’arrêter là pour cette partie (j’avais déjà consacré 2 journées sur ce point !). Je me suis donc concentré sur le reste de l’électronique.

 

Partie électronique : tests et programmation d’Halloween !

Pour la partie électronique, j’ai réalisé ce simple schéma sur Fritzing (je dédierai un sujet à ce magnifique logiciel de vulgarisation électronique !) :

Le circuit électronique de notre système !

Le circuit électronique de notre système !

Et comme par hasard, on utilise un capteur de présence infrarouge (PIR), ainsi que des transistors Darlington TIP120 ! (Genre, j’ai prévu le coup !). Le tout relié à un Arduino Mini Pro 5V 16MHz. Afin d’en apprendre plus sur les TIP120 et les PIR, je vous redirige vers ces articles :
– Comment détecter un mouvement grâce à l’infrarouge (PIR) ?
– Comment contrôler de la puissance facilement (TIP120) ?

Comme quoi, je n’écris pas mes articles au hasard sur ce blog ! 😀

Pour le bandeau LED, il s’agit d’un bandeau 5V, ce qui me permet de me passer d’alimentation 12V ou d’un convertisseur de tension. On retrouve 4 pins sur le bandeau LED :
– Le +5V représenté par « + »
– L’intensité de vert représenté par « G » (Green)
– L’intensité de rouge représenté par « R » (Red)
– L’intensité de bleu représenté par « B » (Blue)

Le +5V est commun aux trois couleurs. L’intensité de chaque couleur est donc pilotée par les masses respectives que l’on relient au collecteur des TIP120 respectifs. La couleur des LEDs RGB du bandeau est donc définie par une composition de 3 couleurs, donc 3 tensions, entre 0 et 5V. Ce 0-5V est piloté via l’Arduino sur 8 bits, entre 0 et 255.
Exemples :
– Rouge Pur : 0 sur vert, 255 sur rouge, 0 sur bleu.
– Blanc : 255 sur vert, 255 sur rouge, 0 sur bleu.
– Blanc moins lumineux : 100 sur vert, 100 sur rouge, 0 sur bleu.
– Jaune Pur, éclatant : 255 sur vert, 255 sur rouge, 0 sur bleu.
– Bandeau LED éteint : 0 partout.

Il y a aussi le moteur que j’ai récupéré sur un vieux contrôleur de lecteur CD pilotable également en 5V, contrôlé par l’Arduino via un TIP120 (sans oublier la diode de roue libre). En fixant un simple fil sur l’arbre du moteur, on fait augmenter son inertie et se dernier crée des vibrations.

Bandeau leds et mini-moteur dans la citrouille !

Bandeau leds et mini-moteur dans la citrouille !

Pour la programmation et les tests, j’ai tout d’abord utilisé la breadboard (ou « plaque à trous » en bon français) :

Test et programmation sur breadboard !

Test et programmation sur breadboard !

Pour la programmation, je voulais quelque chose d’assez aléatoire. J’ai donc programmé rapidement une séquence qui fait appel à des temps d’activités lumineuses et sonores et des temps d’inactivités. Chaque temps d’activité (état haut) et temps d’inactivité (état bas) devra être répartie de manière aléatoire également. J’ai également intégré la communication série pour bien voir ce qu’il se passe à l’écran.

Code Halloween !
int LedG = 3;
int LedR = 5;
int LedB = 6;
int Moteur = 9;
int Presence = 10;
int EtatPresencePrecedent = 0;

int NombreEtat = 0;
int NombreBas = 0;

void setup() {
pinMode(LedG, OUTPUT);
pinMode(LedR, OUTPUT);
pinMode(LedB, OUTPUT);
pinMode(Moteur, OUTPUT);
pinMode(Presence, INPUT);

Serial.begin(9600);
}

void etatHaut() {
analogWrite(LedG, random(255));
analogWrite(LedR, random(255));
analogWrite(LedB, random(255));
analogWrite(Moteur, random(150,255));
delay(random(200,2000));
}

void etatBas(){
analogWrite(LedG, 0);
analogWrite(LedR, 0);
analogWrite(LedB, 0);
analogWrite(Moteur, 0);
delay(random(200,2000));
}

void SequencePeur(){
NombreEtat = random(20,50);
NombreBas = random(1,10);
Serial.println("Nombre d'etat total:");
Serial.println(NombreEtat);
Serial.println("Nombre d'etat bas :");
Serial.println(NombreBas);

int Repartition = NombreEtat / NombreBas;

Serial.println("Repartition d'etat bas :");
Serial.println(Repartition);

for (int i=0; i <= NombreEtat; i++){

if(i % Repartition == 0)
{
Serial.println("Etat Bas");
etatBas();
}
else
{
Serial.println("Etat Haut");
etatHaut();
}

}

}

void loop() {

int EtatPresence = digitalRead(Presence);

if (EtatPresence != EtatPresencePrecedent) {
if (EtatPresence == HIGH) {
Serial.println("Sequence Peur On !");
SequencePeur();
Serial.println("Sequence Peur Off !");
}

} else {
analogWrite(LedG, 0);
analogWrite(LedR, 0);
analogWrite(LedB, 0);
analogWrite(Moteur, 0);
}
delay(50);

EtatPresencePrecedent = EtatPresence;
}

Soudures et assemblage de l’objet d’Halloween

Pas grand-chose à dire ici, le résultat est visible sur cette série de photos. Je me suis rendus compte que je n’aurai jamais eu la place pour ajouter un contenant d’eau pour faire de la vapeur. J’aurai toujours pu agencer moins de leds sur les côtés de la citrouille. Mais après j’aurai également dû isoler l’ensemble du circuit pour qu’il ne prenne pas l’eau.

L'Arduino au dos de la citrouille !

L’Arduino au dos de la citrouille !

 

Montage électronique de la citrouille. 3 fils partent sous l'objet pour aller au socle. Il s'agit des fils pour le PIR.

Montage électronique de la citrouille. 3 fils partent sous l’objet pour aller au socle. Il s’agit des fils pour le PIR.

Conclusion

Pour moi le défi est accompli ! A une petite exception près… Cependant, je me suis vite rendu compte que générer de la vapeur aurait demandé un remplissage d’eau toutes les 10 minutes (vu que la vapeur n’est pas récupérée). Dans ce cas, il m’aurait fallu crée une fontaine Halloween ! En tout cas, ce défi m’a bien plus et j’ai été bluffé par la qualité des modèles 3D trouvé sur le net ! Pour ce qui est de la partie électronique, programmation, assemblage et tests, tout a fonctionné du premier coup !

Je reste un fan inconditionné des gifs ! Bouhouhouuuu !!!!

Je reste un fan inconditionné des gifs ! Bouhouhouuuu !!!!

 

RDV la semaine prochaine pour le prochain objet !

 

Benoît Jellimann.

4 Commentaires

  1. Dudu

    Tiens met des « flammes » dans ta citrouille.
    Super sympa en tous cas.

    // This #include statement was automatically added by the Particle IDE.
    #include
    #include « Particle.h »

    SYSTEM_MODE(AUTOMATIC);

    // IMPORTANT: Set pixel COUNT, PIN and TYPE
    #define PIXEL_PIN D2
    #define PIXEL_COUNT 24
    #define PIXEL_TYPE WS2812B
    #define BRIGHTNESS 192

    Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

    void setup()
    {
    strip.begin();
    strip.show(); // Initialize all pixels to ‘off’
    strip.setBrightness(BRIGHTNESS);
    }

    uint32_t fire_color = strip.Color ( 80, 35, 00);
    uint32_t off_color = strip.Color ( 0, 0, 0);

    void Clear()
    {
    for(uint16_t i=0; i<strip.numPixels (); i++)
    strip.setPixelColor(i, off_color);
    }

    ///
    /// Set all colors
    ///
    void Draw()
    {
    Clear();

    for(int i=0;i> 16),
    g1 = (uint8_t)(color1 >> 8),
    b1 = (uint8_t)(color1 >> 0);

    r2 = (uint8_t)(color2 >> 16),
    g2 = (uint8_t)(color2 >> 8),
    b2 = (uint8_t)(color2 >> 0);

    return strip.Color(constrain(r1+r2, 0, 255), constrain(g1+g2, 0, 255), constrain(b1+b2, 0, 255));
    }

    ///
    /// Color blending
    ///
    uint32_t Substract(uint32_t color1, uint32_t color2)
    {
    uint8_t r1,g1,b1;
    uint8_t r2,g2,b2;
    uint8_t r3,g3,b3;
    int16_t r,g,b;

    r1 = (uint8_t)(color1 >> 16),
    g1 = (uint8_t)(color1 >> 8),
    b1 = (uint8_t)(color1 >> 0);

    r2 = (uint8_t)(color2 >> 16),
    g2 = (uint8_t)(color2 >> 8),
    b2 = (uint8_t)(color2 >> 0);

    r=(int16_t)r1-(int16_t)r2;
    g=(int16_t)g1-(int16_t)g2;
    b=(int16_t)b1-(int16_t)b2;
    if(r<0) r=0;
    if(g<0) g=0;
    if(b<0) b=0;

    return strip.Color(r, g, b);
    }

    //fire(strip);

    // Main loop

    void loop()
    {
    Draw();
    delay(random(100,300));
    }

    Réponse
  2. Tom Stark

    Super article ! Dommage pour l’effet « wahou » avec la fumée 🙂
    Reste plus qu’à investir dans une petite table à UV et un bain de perchlorure… Et faudra encore que je t’apprennes à faire des encore plus belles soudures (surtout si tu te filmes en train de les faire ;-))

    Réponse
    • Benoît Jellimann

      Ouai, un peu dommage pour la fumée… Pas eu le temps de corriger le tir ! Mais je garde espoir ! Je la ferai cette brume un jour ! Tout comme mes propres PCB j’espère ! 😛

      Réponse

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Pin It on Pinterest

Shares
Share This