Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Composants et Fournitures

Composant Quantité Notes
Arduino 101 1
Régulateur de tension Pololu 4 $ 1
Support 3 piles AA avec interrupteur 1
Piles AA 3 Tout type convient
Adaptateur Jack Barrel Mâle 1 1,95 $ - Connexion/déconnexion facile
Adaptateur Jack Barrel Femelle 1 1,95 $ - Connexion/déconnexion facile
Bandeau LED adressable (NeoPixel compatible) 1 60 LEDs, code compatible tout NeoPixel
Ruban adhésif sport (toile) 1 Maintient l'électronique et fait poignées
Élastiques 1 Maintien temporaire avant ruban
Bâton (manche à balai, tube arrosage, branche naturelle...) 1

Applications et Services en Ligne

À Propos de ce Projet

Ce projet utilise un Arduino 101, une batterie et un bandeau LED pour créer un bâton de sorcier à contrôle gestuel. Trois "sorts" (affichages lumineux) sont invoqués par trois gestes distincts.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Technologie

Le code utilise l'IMU (Unité de Mesure Inertielle) de l'Arduino 101 pour lire les forces G, sans utiliser le Moteur de Reconnaissance de Motifs (PME - pour un exemple avec PME, voir le projet de Kitty Yeung). À la place, le code compte les impulsions rapides sur les axes X, Y, Z et déclenche les sorts lors de combinaisons spécifiques dans un court laps de temps.

Lancer des Sorts

Deux tapes verticales rapides démarrent un sort, puis vous choisissez : mouvement brusque avant/arrière (Sort 1), inclinaison gauche/droite (Sort 2), ou troisième tape verticale (Sort 3). Une tape verticale finale lance le sort.

Retour Visuel

Pour guider l'utilisateur dans sa gestuelle, le bandeau LED donne un retour visuel à chaque étape. Double-tape initial : flash blanc rapide = sort démarré. Chaque étape suivante donne un retour visuel indiquant quel sort sera sélectionné.

Lancer des Sorts (En Détail)

Tenez le bâton avec l'Arduino 101 face à vous. Double-tapez doucement au sol (ou deux impulsions verticales rapides dans l'air). Au flash blanc :

Une fois la couleur fixe, tapez verticalement une dernière fois pour lancer le sort. Les LEDs scintillent et flashent dans la couleur choisie.

Les gestes sont chronométrés ! Vous avez seulement 1 seconde entre chaque étape, sinon le sort s'annule. Si vous ratez ou choisissez mal, attendez une seconde et recommencez. La maîtrise demande un peu de pratique, mais l'avantage est qu'aucun sort ne se déclenche accidentellement en marchant simplement avec le bâton.

Construction de l'Électronique

L'essentiel : Arduino 101, batterie, bandeau NeoPixel.

Options d'alimentation :

Étape 1 : Récupérer le Connecteur du Bandeau LED

Coupez ~1 cm depuis l'extrémité du bandeau. Dénudez les fils.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 2 : Préparer le Régulateur

Séparez les broches coudées fournies avec le régulateur. Soudez-en deux sur les fils vert et jaune pour les brancher facilement sur l'Arduino 101.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 3 : Câbler le Régulateur

Soudez le fil rouge sur l'entrée VIN du régulateur. Soudez deux broches droites sur GND et VOUT.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 4 : Connecteurs Jack Barrel

Dénudez les fils du boîtier piles, montez-les sur le jack mâle (ROUGE = +, NOIR = -). Serrez les vis.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Connectez le jack femelle sur les fils libres du début du bandeau LED. JAUNE = (-), ROUGE = (+).

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 5 : Brancher sur Arduino 101

FIL VERT → PIN 6 | FIL JAUNE → GND (près pin 13) | Régulateur : GND → GND, VOUT → VIN sur Arduino 101.

ATTENTION : Ne pas inverser ! Branchement inverse = odeur de brûlé et composants grillés. J'en ai fait l'expérience.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Téléversement du Code Exemple

Étape 1

Boîtier piles ÉTEINT. Connectez Arduino 101 en USB à l'ordinateur. Téléversez le code exemple via Arduino IDE.

Première fois avec Arduino 101 ? Guide officiel : arduino.cc/en/Guide/Arduino101

Une fois le code chargé, débranchez l'USB. Testez en allumant le boîtier piles et en essayant les gestes (port USB vers le bas, broches face à vous). Quatre mouvements verticaux déclenchent le Sort Rouge.

Discussion sur le Code (optionnel)

Si vous voulez juste utiliser le code tel quel, passez à "Construction du Bâton".

Le code utilise la détection de chocs de l'Arduino 101 pour compter les impulsions, avec un minuteur qui remet le compte à zéro après un court délai sans nouvelles impulsions. Si la bonne combinaison survient avant expiration, une fonction "sort" est appelée.

Une tape ferme au sol génère le choc initial + plusieurs "bruit" dus aux vibrations. Le début de loop() identifie l'impulsion dominante de chaque série et la catégorise simplement : 1 = verticale, 2 = avant/arrière, 3 = gauche/droite (variable gesture).

Un switch suit les combinaisons, style "livre dont vous êtes le héros" : "si prochaine impulsion = gauche/droite → étape 2, si minuteur expiré → retour à zéro".

Les Sorts (Personnalisables)

Ici vous changez facilement ce que fait chaque sort. Actuellement : code "theater-chase" Adafruit en différentes couleurs. Ajoutez-en, changez couleurs, écrivez vos propres fonctions. Les 3 premières variables de theaterChase = R, G, B. La dernière = vitesse (plus grand = plus lent).

void tapspell() {   // Sort Rouge
  theaterChase(strip.Color(127, 20, 0), 20);
  theaterChase(strip.Color(127, 20, 50), 55);
  strip.show();
}
void leftspell() {  // Sort Bleu
  theaterChase(strip.Color(0, 0, 100), 20);
  theaterChase(strip.Color(0, 30, 120), 75);
  strip.show();
}
void forwardspell() { // Sort Vert
  theaterChase(strip.Color(0, 127, 0), 30);
  theaterChase(strip.Color(0, 127, 90), 55);
  strip.show();
}

Construction du Bâton

Place à la créativité ! Voici la base technique, amusez-vous à personnaliser. Diffuseurs (tulle, papier de soie, bouteille plastique sur les LEDs) créent de superbes effets.

Étape 1 : Trouver un Bâton/Canne

Manche à balai, tube arrosage, branche naturelle. Magasins de loisirs créatifs (Michaels, etc.) en vendent aussi. J'enroule une section de ruban sport pour zone de travail nette (optionnel).

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Quelques élastiques pour faciliter la fixation.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 2 : Placer Arduino 101 (Port USB vers le Bas)

Maintenez avec un élastique.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 3 : Enrouler les LEDs (Élastiques aux Deux Extrémités)

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 4 : Fixer Arduino 101 et Boîtier Piles au Ruban Sport

Laissez l'accès à l'interrupteur du boîtier piles. Fixez solidement pour résister aux secousses/tapes, mais gardez à l'esprit le changement de piles.

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Étape 5 : Diffuser les LEDs et Décorer

Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension
Kit Bâton de Sorcier Interactif – Arduino 101, Bandeau LED, Régulateur de Tension

Code

Code Exemple Bâton de Sorcier (Arduino)

Compte les impulsions sur axes X, Y, Z. Certaines combinaisons invoquent des "sorts" (affichages lumineux) sur bandeau NeoPixel.

/* Copyright (c) 2016 Intel Corporation. Tous droits réservés. Voir licence fin de fichier. */
/* Arduino 101 "Wizard's Walking Staff." Utilise bibliothèque Adafruit Neopixel.
   Installation : https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
   Assurez-vous d'avoir le dernier noyau Intel Curie. Info : https://www.arduino.cc/en/Guide/Arduino101 */
#include "CurieIMU.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

int tr = 0, tg = 0, tb = 0; // Couleur cible pour lissage
int r = 0, g = 0, b = 0;    // Couleur courante
long int globaltimer = 0;
long int gesturetimer = 0;
long int ledtimer = 0;
int fade = 10;              // Vitesse fondu (lissage)
int tap = 0;                // Compteur impulsions verticales
int lr = 0;                 // Compteur impulsions gauche/droite
int fb = 0;                 // Compteur impulsions avant/arrière
int gesture = 0;            // 1=verticale, 2=gauche/droite, 3=avant/arrière
int state = 0;              // Machine à états pour séquences gestuelles

void setup() {
  globaltimer = millis();
  gesturetimer = millis();
  ledtimer = millis();
  
  CurieIMU.begin();
  CurieIMU.attachInterrupt(eventCallback);
  CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1500); // 1.5g = 1500 mg
  CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 50);    // ms de pic pour interruption
  CurieIMU.interrupts(CURIE_IMU_SHOCK);
  
  strip.begin();
  strip.show(); // Tout éteint
}

void loop() {
  // Classification impulsion dominante (toutes les 170ms)
  if (millis() - globaltimer > 170) {
    if ((tap > lr) && (tap > fb)) { gesture = 1; }      // Verticale
    else if ((lr > fb) && (lr > tap)) { gesture = 2; }  // Gauche/Droite
    else if ((fb > lr) || (fb > tap)) { gesture = 3; }  // Avant/Arrière
    tap = 0; lr = 0; fb = 0; // Reset après classification
  }
  
  // Timeout global (1s)
  if (millis() - globaltimer > 1000) {
    globaltimer = millis() - 170;
    tr = tg = tb = 0;
    state = 0;
  }
  // Timeout geste (1s)
  if (millis() - gesturetimer > 1000) {
    gesturetimer = millis() - 350;
    tr = tg = tb = 0;
    state = 0;
  }
  
  // Machine à états des gestes
  switch (state) {
    case 0: // Attente première tape
      if (millis() - gesturetimer > 350 && gesture == 1) {
        state = 1; gesture = 0; gesturetimer = millis();
      }
      break;
    case 1: // Une tape enregistrée, attend seconde
      if (millis() - gesturetimer > 350 && gesture == 1) {
        r = g = b = 10; // Flash blanc feedback
        state = 2; gesture = 0; gesturetimer = millis();
      }
      break;
    case 2: // Deux tapes - point de branchement vers 3 sorts
      if (millis() - gesturetimer > 350) {
        if (gesture == 1) { state = 3; gesture = 0; gesturetimer = millis(); } // Tap → Sort 3
        if (gesture == 2) { state = 4; gesture = 0; gesturetimer = millis(); } // L/R → Sort 2
        if (gesture == 3) { state = 5; gesture = 0; gesturetimer = millis(); } // F/B → Sort 1
      }
      break;
    case 3: // Trois tapes - Sort 3 (Rouge), attend tape finale
      tr = 20; tg = 0; tb = 0; globaltimer = millis() - 250;
      if (millis() - gesturetimer > 350 && gesture == 1) {
        state = 0; Serial.println("tapspell!"); tapspell();
      }
      break;
    case 4: // 2 tapes + L/R - Sort 2 (Bleu), attend tape finale
      tr = 0; tg = 0; tb = 20; globaltimer = millis() - 250;
      if (millis() - gesturetimer > 350 && gesture == 1) {
        state = 0; Serial.println("leftspell!"); leftspell();
      }
      break;
    case 5: // 2 tapes + F/B - Sort 1 (Vert), attend tape finale
      tr = 0; tg = 20; tb = 0; globaltimer = millis() - 250;
      if (millis() - gesturetimer > 350 && gesture == 1) {
        state = 0; Serial.println("forwardspell!"); forwardspell();
      }
      break;
  }
  
  // Lissage couleurs (toutes les 'fade' ms)
  if (millis() - ledtimer > fade) {
    if (tr > r + 1) r++; if (tg > g + 1) g++; if (tb > b + 1) b++;
    if (tr < r) r--; if (tg < g) g--; if (tb < b) b--;
    for (int i = 0; i < strip.numPixels(); i++) strip.setPixelColor(i, r, g, b);
    strip.show();
    ledtimer = millis();
  }
}

// Interruption détection choc
static void eventCallback(void) {
  if (CurieIMU.getInterruptStatus(CURIE_IMU_SHOCK)) {
    if (CurieIMU.shockDetected(X_AXIS, POSITIVE) || CurieIMU.shockDetected(X_AXIS, NEGATIVE)) { tap++; globaltimer = millis(); }
    if (CurieIMU.shockDetected(Y_AXIS, POSITIVE) || CurieIMU.shockDetected(Y_AXIS, NEGATIVE)) { lr++; globaltimer = millis(); }
    if (CurieIMU.shockDetected(Z_AXIS, POSITIVE) || CurieIMU.shockDetected(Z_AXIS, NEGATIVE)) { fb++; globaltimer = millis(); }
  }
}

// Fonctions sorts (exemple Adafruit theaterChase)
void tapspell() { theaterChase(strip.Color(127, 20, 0), 20); theaterChase(strip.Color(127, 20, 50), 55); strip.show(); }
void leftspell() { theaterChase(strip.Color(0, 0, 100), 20); theaterChase(strip.Color(0, 30, 120), 75); strip.show(); }
void forwardspell() { theaterChase(strip.Color(0, 127, 0), 30); theaterChase(strip.Color(0, 127, 90), 55); strip.show(); }

void theaterChase(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) {
    for (int q = 0; q < 3; q++) {
      for (uint16_t i = 0; i < strip.numPixels(); i += 3) strip.setPixelColor(i + q, c);
      strip.show(); delay(wait);
      for (uint16_t i = 0; i < strip.numPixels(); i += 3) strip.setPixelColor(i + q, 0);
    }
  }
}

/* Licence GNU LGPL v2.1 ou ultérieure - Voir fin fichier original */

Processus de fabrication

  1. Détection des champs électriques AC : Guide pratique sur le couplage capacitif et le blindage
  2. Calculer la dissipation de puissance dans les circuits résistifs
  3. Sept conseils éprouvés pour sécuriser votre post-traitement en fabrication additive
  4. Couleur alimentaire : comment les teintes vibrantes stimulent l'appétit et la présentation
  5. Construire un Google Voice HAT DIY pour votre Raspberry Pi
  6. Construire un robot Arduino piloté par Raspberry Pi – Guide pas à pas
  7. Le Guide Complet de la Production de Fibre de Verre
  8. Célébrez l'excellence manufacturière — Choisissez votre propre jour pour la Journée de la fabrication
  9. Créer une animation de coupe progressive dans SolidWorks – Tutoriel Étape par Étape