Chaque mois d’octobre, la même poignée de réalisations refait surface sur Hackster, Instructables et le hackathon Halloween d’element14 : un crâne avec une mâchoire à servo qui hurle quand quelqu’un passe devant, une paire d’yeux sur écrans ronds qui vous suivent, un tableau qui réagit quand on s’en approche, une citrouille pleine de NeoPixels et un bol de bonbons qui ne donne des sucreries que si vous tendez la main.
Nous en avons reconstruit sept comme exemples dans la galerie Velxio, un par famille de cartes, en utilisant des pièces Arduino et les modules de nos partenaires Seeed Studio, DFRobot, M5Stack et Pimoroni. Chacun s’ouvre dans l’éditeur avec le circuit déjà câblé et le sketch déjà écrit. Appuyez sur Run et il se compile et démarre dans le navigateur, vous pouvez donc régler le timing, les couleurs et les seuils avant de couper le moindre fil.
| Projet | Carte | Pièces principales | L’ouvrir |
|---|---|---|---|
| Crâne à effet de sursaut | Arduino Uno | PIR, servo, 2 LED, buzzer | halloween-uno-jump-scare-skull |
| Distributeur de bonbons | Arduino Uno | HC-SR04, servo, OLED SSD1306, buzzer | halloween-uno-candy-dispenser |
| L’œil qui vous suit | Seeed XIAO ESP32-S3 | Seeed Round Display (GC9A01 + tactile) | halloween-round-display-eye |
| Citrouille Grove | Seeed XIAO ESP32-S3 | Grove RGB LED Ring, capteur de lumière, PIR, buzzer passif | halloween-grove-pumpkin-ring |
| Portrait hanté | ESP32 DevKit | Radar mmWave DFRobot C4001, 2 LED, buzzer | halloween-c4001-haunted-portrait |
| Détecteur de fantômes | M5Stack Core | LCD, boutons et haut-parleur intégrés | halloween-m5stack-ghost-detector |
| Citrouille à matrice LED | Pimoroni Stellar Unicorn | Matrice RGB 16x16, boutons | halloween-stellar-unicorn-pumpkin |
Une recherche de halloween sur la page des exemples
les liste tous les sept.
La photo en tête de cinq des sections est une illustration de l’allure que pourrait avoir l’accessoire terminé, générée par IA. Toutes les autres images de cet article sont une capture de l’exemple en cours d’exécution dans Velxio.
Comment en ouvrir et en exécuter un
- Cliquez sur le lien du projet dans le tableau. L’éditeur s’ouvre avec la carte, les pièces, les fils et le sketch en place.
- Appuyez sur le bouton Run vert dans la barre d’outils. Le sketch se compile sur nos serveurs (la première compilation d’une carte peut prendre une minute) puis s’exécute dans votre navigateur.
- Ouvrez le Serial Monitor en bas. Chaque sketch affiche ce qu’il fait, vous pouvez donc voir les accessoires réagir même sans le son.
- Cliquez sur un capteur du canevas pendant que la simulation tourne pour ouvrir son panneau. C’est là que se trouvent les curseurs de distance, de lumière et de présence.
1. Crâne à effet de sursaut (Arduino Uno)

Illustration de l’accessoire terminé, générée par IA. Le circuit ci-dessous est celui qui s’exécute dans Velxio.
L’accessoire de porche classique. Un capteur de mouvement PIR sur D2 surveille la porte. Quand quelqu’un passe devant, deux yeux à LED rouges sur D5 et D6 s’allument à pleine intensité, un servo sur D9 fait claquer la mâchoire quatre fois et un buzzer sur D8 hurle avec une sirène qui glisse de 1,8 kHz jusqu’à un grognement. Entre les visiteurs, les yeux couvrent comme des braises, et un temps de recharge de quatre secondes empêche le crâne d’effrayer deux fois de suite la même personne.

Pour l’essayer, cliquez sur le capteur PIR du canevas. La sortie passe à HIGH pendant trois secondes, ce que fait un vrai HC-SR501 avec son potentiomètre de délai tourné à fond.
Toute la frayeur tient dans une courte fonction. Notez que tone() sur l’Uno utilise
le Timer2 et que la bibliothèque Servo utilise le Timer1, donc le hurlement et la mâchoire ne se
disputent jamais un timer :
void scare() {
eyes(255);
for (int i = 0; i < 4; i++) { // the jaw chatters four times
jaw.write(JAW_OPEN);
if (i == 0) scream(); else delay(160);
jaw.write(JAW_CLOSED);
delay(140);
}
eyes(40);
lastScare = millis();
}
2. Distributeur de bonbons d’Halloween (Arduino Uno)

Illustration de l’accessoire terminé, générée par IA. Le circuit ci-dessous est celui qui s’exécute dans Velxio.
Un bol de bonbons sans contact. Un capteur à ultrasons HC-SR04 pointe vers le haut depuis sous la goulotte et cherche une main à moins de 10 cm. Quand il en trouve une, un servo ouvre la trappe, laisse tomber un bonbon et la referme, le buzzer joue un court jingle et un OLED SSD1306 décompte ce qu’il reste, avec une petite citrouille dessinée dans le coin. Quand le stock est épuisé, l’écran affiche TRICK et le buzzer se moque de vous à la place.

Cliquez sur le HC-SR04 et faites glisser son curseur de distance sous 10 cm pour tendre une main. Le sketch attend ensuite que la main soit retirée, donc un geste donne un bonbon et personne ne vide le bol en laissant une main en place.
3. L’œil qui vous suit (Seeed Round Display pour XIAO)

Illustration d’une paire d’yeux terminée, générée par IA. L’exemple dans Velxio fait tourner un seul écran ; une paire, c’est deux de ces écrans.
Les yeux sur écrans TFT ronds étaient partout au hackathon Halloween d’element14 de l’année dernière, des crânes imprimés en 3D aux accessoires déclenchés par radar. Celui-ci utilise le Seeed Round Display pour XIAO avec un XIAO ESP32-S3 monté à l’arrière. Le GC9A01 de 1,28 pouce affiche un globe oculaire injecté de sang avec un iris orange.

Appuyez sur le verre et la pupille poursuit votre pointeur. Continuez d’appuyer et elle se rétrécit en fente de chat. Relâchez et elle se remet à jeter des regards autour de la pièce d’elle-même et à cligner des yeux toutes les quelques secondes.
Le contrôleur tactile est le CHSC6X du shield, lu de la même manière que le lit le pilote de Seeed lui-même : un front descendant sur D7 signale qu’un doigt est posé et une lecture I2C de cinq octets à 0x2E renvoie la position. Chaque image est dessinée dans un sprite hors écran et poussée vers le verre d’un seul coup, donc le panneau n’affiche jamais un œil à moitié peint. Seul le carré de 174 pixels que l’iris peut atteindre est redessiné ; le bord avec ses veines est peint une fois, et de nouveau après chaque clignement :
static void drawEye() {
frame.fillScreen(TFT_BLACK);
drawSclera(frame, BX, BY); // the part of the sclera inside the box
... // iris, streaks, pupil, glint, eyelids
frame.pushSprite(BX, BY);
}
Les broches sont celles du shield lui-même, donc le même sketch tourne sur la pile réelle.
Pour une paire d’yeux, construisez-en deux : un crâne ou une citrouille sculptée accueille deux Round Displays dans ses orbites, chacun avec son propre XIAO exécutant ce sketch. Ils jettent des regards et clignent des yeux indépendamment, ce qui paraît plus vivant que deux yeux en parfaite synchronisation.
4. Une citrouille Grove qui s’éveille au crépuscule (Seeed XIAO ESP32-S3)

Illustration de l’accessoire terminé, générée par IA. Le circuit ci-dessous est celui qui s’exécute dans Velxio.
Quatre modules Grove sur un XIAO ESP32-S3 forment un insert pour une citrouille sculptée. Le Grove Light Sensor maintient l’anneau de 42 LED Ultimate RGB LED Ring éteint à la lumière du jour. Une fois la nuit tombée, l’anneau scintille en orange et en jaune comme une bougie, chaque LED avec sa propre flamme. Quand le Grove PIR détecte quelqu’un, la citrouille est possédée : un vortex vert et violet tourne autour de l’anneau et le Grove Passive Buzzer joue quelques mesures d’une mélodie sinistre.

Pour l’essayer, cliquez sur le capteur de lumière et faites glisser son curseur vers le bas pour simuler la nuit, puis cliquez sur le PIR et déclenchez-le.

Sur du matériel réel, alimentez l’anneau depuis le pad 5 V du XIAO (l’exemple est câblé ainsi) et gardez la luminosité basse : 42 LED WS2813 en blanc à pleine puissance consomment bien plus qu’un port USB n’aime en fournir.
5. Portrait hanté (radar mmWave DFRobot C4001)

Illustration de l’accessoire terminé, générée par IA. Le circuit ci-dessous est celui qui s’exécute dans Velxio.
Le tableau dont les yeux suivent la pièce est un vieux truc de fête foraine, et un radar en fait un meilleur tour. Le DFRobot C4001 (SEN0610) est un capteur mmWave 24 GHz qui mesure la distance d’une personne, et son signal traverse directement une toile et un cadre en bois. Caché derrière le tableau, rien ne le trahit.
L’esquisse met le radar en mode vitesse, où il rapporte à la fois la distance et la présence. Plus vous vous approchez, plus les deux yeux LED du portrait brillent et plus un battement de cœur résonne sur le buzzer, d’un battement toutes les 1,5 secondes à six mètres jusqu’à presque trois par seconde de près. Passez à moins d’un mètre et il hurle.

Cliquez sur le radar et faites glisser son curseur de distance pour vous approcher du tableau.
// 6 m away: a dim glow. Right in front: full blaze.
float closeness = constrain((FAR_M - range) / (FAR_M - SHRIEK_M), 0.0f, 1.0f);
eyes(10 + (int)(closeness * 245));
6. Détecteur de fantômes (M5Stack Core)
Plus un jeu qu’un accessoire, et le seul sans rien à câbler. Le M5Stack Core Basic dessine un cadran à aiguille qui lit le « champ spectral » de la pièce. L’aiguille vagabonde d’elle-même et de temps en temps pique dans la zone rouge HAUNT ; c’est alors qu’un fantôme flotte à l’écran et que le haut-parleur se met à grésiller.

Les trois boutons frontaux sont les commandes :
- A scanne plus fort pendant trois secondes, pour que les fantômes apparaissent plus souvent.
- B prend une photo. Attrapez le fantôme pendant qu’il est à l’écran et le compteur dans le coin augmente.
- C active et désactive le son.
Le cadran est dessiné dans un sprite M5Canvas 8 bits et poussé d’un seul coup,
ce qui évite le scintillement de l’aiguille. Un sprite 16 bits plein écran ne
tiendrait pas : le Core Basic n’a pas de PSRAM.
7. Citrouille à matrice LED (Pimoroni Stellar Unicorn)
Le dernier est purement décoratif. La matrice RGB 16x16 du Pimoroni Stellar Unicorn devient une citrouille nervurée dont les yeux, le nez et la bouche dentelée brillent depuis une bougie à l’intérieur. Appuyez sur A pour un éclair suivi d’un HAPPY HALLOWEEN défilant, sur B pour envoyer un fantôme traverser le visage, et sur LUX + et - pour régler la luminosité.

Le visage est une grille de 16 par 16 caractères dans l’esquisse, une lettre par LED, donc changer l’expression n’est qu’une question d’édition de texte.
Passer au matériel réel
Les esquisses sont écrites avec les mêmes bibliothèques et les mêmes broches que vous utiliseriez sur l’établi, donc passer du simulateur à une vraie construction est surtout une affaire d’alimentation et de mécanique :
- Les servos tirent des pics de courant que le régulateur 5 V de l’Uno n’aime pas. Pour le crâne et le distributeur, donnez au servo sa propre alimentation 5 V et reliez les masses.
- Un vrai PIR a besoin d’environ une minute pour se stabiliser après la mise sous tension et se déclenchera de lui-même quelques fois pendant cette minute.
- Pour l’anneau de LED, alimentez-le en 5 V et gardez
setBrightness()bas sauf si vous disposez d’une alimentation dimensionnée pour cela. - Le C4001 voit à travers le bois fin, le carton et le tissu, mais pas à travers le métal, alors faites attention à la quincaillerie de suspension du cadre.
Limites
- Le radar, le capteur de lumière et le capteur à ultrasons sont pilotés par des curseurs. Ils fournissent à l’esquisse les valeurs qu’un vrai capteur donnerait, pas une scène physique.
- Le son est joué par le navigateur. Les parties de buzzer suivent la fréquence produite par la broche ; elles ne modélisent ni le volume ni le timbre d’un vrai piézo.
Ouvrez-en un, modifiez-le et construisez la version qui effraiera votre propre perron. Joyeux Halloween.