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

Bâton de marche des sorciers

Composants et fournitures

Arduino 101
× 1
Régulateur de tension Pololu à 4 $
× 1
3x porte-piles AA avec interrupteur
× 1
Piles AA
Tout type convient. Il vous en faut 3.
× 1
Adaptateur M Barrel Jack
$1.95 Ceux-ci facilitent la connexion et la déconnexion de l'alimentation
× 1
Adaptateur F Barrel Jack
$1.95 Ceux-ci facilitent la connexion et la déconnexion de l'alimentation
× 1
Bande LED adressable
L'exemple est écrit pour toutes les LED compatibles NeoPixel, bande de 60 pixels.
× 1
Ruban de sport
Tout type de ruban adhésif en tissu. Ceci est utilisé pour maintenir l'électronique sur la mire et faire une bonne prise en main.
× 1
Élastiques
Pour aider à maintenir les pièces en place sur la portée jusqu'à ce que vous puissiez utiliser du ruban adhésif.
× 1
Un personnel. (balai, tuyau d'arrosage, bâton de marche naturel, etc.)
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Ce projet utilise l'Arduino 101, une batterie et une bande LED pour créer un bâton de marche du sorcier à commande gestuelle. Nous allons définir trois "sorts" d'affichage lumineux différents que vous pouvez invoquer en déplaçant le bâton dans l'un des trois gestes.

Technique :

Le code utilise l'unité de mesure inertielle de l'Arduino 101 pour lire les forces G, mais n'utilise pas le moteur de correspondance de motifs (pour un exemple utilisant le PME, consultez le projet PME de Kitty Yeung). Au lieu de cela, ce code compte les impulsions rapides dans les directions X, Y et Z et invoque des sorts lorsque vous effectuez une certaine combinaison en peu de temps.

Lancer des sorts :

Deux pressions verticales rapides lancent un sort, puis vous pouvez soit déplacer le bâton vers l'avant, gauche/droite, soit appuyer une troisième fois pour sélectionner l'un des trois sorts, puis une dernière pression lance le sort.

Commentaires visuels :

Pour vous aider à comprendre où vous en êtes dans votre geste, l'exemple de code inclut un retour visuel de la bande LED. Lorsque vous effectuez un double appui pour la première fois, les lumières clignotent rapidement en blanc, vous indiquant qu'un sort est lancé. Vous obtiendrez un retour visuel pour chaque étape afin que vous sachiez quel sort sera sélectionné.

Lancer des sorts (en détail) :

Tenez le bâton avec l'Arduino 101 face à vous. Appuyez d'abord deux fois sur le bâton (doucement !) Au sol, ou faites deux impulsions verticales rapides dans les airs. Lorsque vous voyez le flash blanc, déplacez brusquement la portée vers l'avant ou l'arrière pour sélectionner Sort 1, ou inclinez la portée vers la gauche ou la droite pour sélectionner Sort 2, ou déplacez-vous verticalement une troisième fois pour sélectionner Sort 3. Lorsqu'un sort est sélectionné, les lumières s'allumera en vert fixe (sort 1,) en bleu (sort 2) ou en rouge (sort 3.) Une fois que les lumières sont allumées, invoquez le sort avec un dernier coup vertical. Les lumières scintilleront et clignoteront dans la couleur sélectionnée.

Les gestes sont sensibles au temps ! Vous n'avez qu'une seconde entre chaque étape d'un geste ou le sort sera réinitialisé. Cela signifie que si vous vous trompez ou sélectionnez le mauvais sort, vous pouvez simplement attendre une seconde et recommencer. Invoquer des sorts avec précision est un peu difficile à maîtriser, mais la bonne nouvelle est que les sorts ne seront pas appelés accidentellement lorsque vous vous promenez avec le personnel.

Construire l'électronique :

Il s'agit essentiellement d'un Arduino 101, d'une batterie et d'une bande de LED NeoPixel.

Il existe plusieurs façons de configurer l'alimentation. Le plus rapide serait d'utiliser une batterie 9v et de faire fonctionner les LED directement sur l'Arduino 101 - mais la durée de vie de la batterie serait très courte. Vous pouvez également utiliser une batterie LiPo pour maximiser la puissance/le poids pour une construction plus "pro", mais vous auriez besoin d'un moyen sûr de charger la batterie. Pour moi, un bon équilibre entre autonomie et simplicité consiste à utiliser 3 piles AA et un régulateur de tension à 4 $. Il s'agit de la même configuration électronique que dans le Shadow Theater et le Kaleidoscope Infinity Mirror.

Étape 1

Récupérez le faisceau d'extrémité de votre bande LED en coupant à environ 1 cm de l'extrémité des lumières. Dénudez les extrémités des fils.

Étape 2

Séparez les broches d'en-tête pliées fournies avec votre régulateur de tension et soudez-en deux aux extrémités des fils vert et jaune. Cela vous permettra de les brancher facilement sur les broches de l'Arduino 101.

Étape 3

Ensuite, soudez le fil rouge à la borne VIN du régulateur de tension et soudez deux connecteurs droits dans les broches GND et VOUT comme indiqué.

Étape 4

Connectez maintenant les adaptateurs de prise cylindrique. Dénudez d'abord les extrémités des fils provenant de votre boîtier de batterie, puis montez-les dans les bornes de la prise jack mâle et serrez avec un tournevis. ROUGE va à la borne (+), NOIR va à la borne (-).

Ensuite, connectez l'adaptateur jack femelle sur les fils lâches provenant du début de la bande LED. Le JAUNE va à la borne (-) et le ROUGE va à la (+).

Étape 5

Connectez maintenant votre harnais à l'Arduino 101. Le fil VERT va à la broche 6, le fil JAUNE va à la broche GND près de #13. Avec les deux broches d'en-tête sur le régulateur de tension, GND va à GND et VOUT va à la broche "VIN" sur l'Arduino 101. Ne vous méprenez pas ! Le branchement à l'envers provoque des odeurs et des brûlures. Je sais ça.

Téléchargement de l'exemple de code :

Étape 1

Avec la batterie éteinte, utilisez un câble USB pour connecter votre Arduino 101 à un ordinateur et téléchargez l'exemple de code joint à l'aide de l'IDE Arduino.

Si vous n'avez jamais programmé un Arduino 101 auparavant, vous trouverez d'excellentes instructions sur le site Web d'Arduino ici :https://www.arduino.cc/en/Guide/Arduino101

Une fois l'exemple de code chargé avec succès, vous pouvez déconnecter l'USB et tester le code en allumant la batterie et en essayant certains des gestes d'orthographe avec le port USB de l'Arduino 101 vers le bas et les broches vers vous. Essayez de déplacer le plateau verticalement quatre fois pour appeler le sort rouge.

Discussion sur le code :

(Si vous souhaitez simplement utiliser l'exemple de code tel quel, vous pouvez passer directement à la section Création du personnel.)

L'exemple de code utilise la capacité de détection des chocs de l'Arduino 101 pour compter les chocs, tandis qu'une minuterie s'exécute qui réinitialise le nombre de chocs à zéro après une courte période sans nouveaux chocs. Si vous frappez la bonne combinaison avant l'expiration du chronomètre, une fonction « épeler » est appelée.

Parce qu'un coup ferme sur le sol enregistrera en fait le choc initial plus plusieurs chocs "bruits" des vibrations dans le personnel, le premier code en boucle essaie simplement de trouver une impulsion dominante de chaque lot de chocs et de le catégoriser simplement comme vertical, gauche/droit ou avant/arrière. J'utilise une variable appelée "geste" pour retenir chaque impulsion dominante :1 =impulsion verticale, 2 =impulsion avant/arrière, 3 =impulsion gauche/droite.

Ensuite, pour suivre les combinaisons, le code utilise une instruction "switch" et la parcourt au fur et à mesure que les gestes s'accumulent. C'est un peu comme un livre "choisissez votre propre aventure", où chaque étape dit quelque chose comme "si la prochaine impulsion est gauche/droite, passez à l'étape 2, si le chronomètre a expiré, revenez à zéro."

Sorts :

Voici où vous pouvez facilement changer ce que fait chaque sort. Ceux-ci n'exécutent actuellement que des exemples de code « theater-chase » dans différentes couleurs. Vous pouvez facilement en ajouter d'autres, modifier les couleurs ou écrire votre propre fonction d'éclairage ici. Les trois premières variables de la fonction TheaterChase sont des valeurs pour le rouge, le vert et le bleu. Le dernier chiffre est la vitesse (chiffre le plus élevé =plus lent).

////////////////////////////////////////// /////sorts///////////////////// void tapspell() { ///lumières de théâtre rouges TheaterChase(strip.Color(127, 20, 0 ), 20); théâtreChase(strip.Color(127, 20, 50), 55); strip.show(); } void leftspell() { TheaterChase(strip.Color(0, 0, 100), 20); théâtreChase(strip.Color(0, 30, 120), 75); strip.show(); } void forwardspell() { TheaterChase(strip.Color(0, 127, 0), 30); théâtreChase(strip.Color(0, 127, 90), 55); strip.show(); }

Former le personnel :

Il y a beaucoup de place pour la créativité ici! Je vais me concentrer sur la construction technologique de base, mais je m'amuserai à créer un bâton unique. Les diffuseurs de lumière tels que le tulle, le papier de soie ou une bouteille en plastique au-dessus des LED peuvent faire des affichages lumineux très cool !

Étape 1 :Trouvez un bâton/un bâton de randonnée

Vous pouvez utiliser un manche à balai, un tuyau d'arrosage ou trouver un bâton naturel. Les magasins d'artisanat de Michael en vendent aussi de beaux. (Dans la section du bâton - vraiment.) J'aime envelopper une section avec du ruban adhésif sport pour avoir une zone de travail propre pour l'électronique, mais c'est facultatif.

Mettez quelques élastiques sur le bâton pour faciliter la fixation.

Étape 2 : Placez l'Arduino 101 sur la portée avec le port USB vers le bas

Utilisez un élastique pour maintenir l'Arduino 101 en place.

Étape 3 :À l'aide d'un élastique pour aider aux deux extrémités, enveloppez les LED

Étape 4 :Enroulez du ruban adhésif sport pour sécuriser l'Arduino 101 et la batterie

Assurez-vous de laisser l'accès à l'interrupteur marche/arrêt sur la batterie. Vous voulez que la batterie soit sécurisée pour les bousculades/tapotements, mais n'oubliez pas que vous devrez éventuellement changer ces batteries.

Étape 5 :Diffusez les lumières LED et décorez

Code

  • Exemple de code de bâton de marche de l'assistant
Exemple de code de bâton de marche de l'assistantArduino
Comptez les impulsions sur les axes x, y et z, certaines combinaisons d'impulsions invoquent des "sorts" (affichages lumineux) sur une bande de néopixels.
/* Copyright (c) 2016 Intel Corporation. Tous les droits sont réservés. Voir l'avis de licence à la fin du fichier.*//* Arduino 101 "Wizard's Walking Staff". Ce code utilise la bibliothèque Adafruit Neopixel. Instructions d'installation de la bibliothèque ici :https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation Assurez-vous d'avoir installé le dernier processeur Intel Curie Core. Pour plus d'informations, visitez https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h"#include #define PIN 6 //// quelle broche sont les NeoPixels connectés à?Adafruit_NeoPixel bande =Adafruit_NeoPixel (60 , PIN, NEO_GRB + NEO_KHZ800); /// la bande fait 60 pixels de long.int tr =0; //Certaines variables pour conserver la couleur cible et la couleur courante pour le lissage...int tg =0;int tb =0;int r =0;int g =0;int b =0;long int globaltimer =0; /// minuteries pour garder une trace des gestes en fonction du temps... pour des choses comme "si la minuterie n'a pas dépassé 0,5 seconde, ET il y a deux appuis, alors..." long int gestetimer =0;long int ledtimer =0;int fondu =10 ; /// à quelle vitesse les lumières s'estompent. Utilisé pour le lissage tapotement =0 ; //compteur pour impulsions verticalesint lr =0; //couter pour les impulsions gauche/droitesint fb =0; //couter pour les impulsions avant/arrièresint geste =0; // état int =0; /// pour notre cas de commutateur... cela gardera une trace de chaque mouvement dans un set.void setup() { // mettez votre code de configuration ici, à exécuter une fois ://Serial.begin(9600); globaltimer =millis(); // démarre les chronométreurs à l'heure actuelle gestetimer =millis(); ledtimer =millis(); /* Initialiser l'IMU */ CurieIMU.begin(); CurieIMU.attachInterrupt(eventCallback); /* Activer la détection de choc */ CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1500); // 1.5g =1500 mg CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 50); // millisecondes de pic requises pour appeler l'interruption CurieIMU.interrupts(CURIE_IMU_SHOCK); strip.begin(); // initialiser la bande néopixel strip.show(); // Initialiser tous les pixels sur 'off'}void loop() { // mettez votre code principal ici, à exécuter à plusieurs reprises :////filtre de base - l'IMU enregistre plusieurs chocs dus au rebond et à la contre-action. Celui-ci tente de capter le choc dominant dans chaque geste. if (millis() - globaltimer> 170) { /// ceci essaie de trouver l'axe de mouvement dominant pour chaque choc. Compare la somme des mouvements de frappe, gauche-droite et avant-arrière, et sélectionne le plus grand. if ((tap>
 lr) &&(tap>
 fb)) { Serial.println("tap"); geste =1 ; toucher =0 ; lr =0 ; fb =0; //// réinitialiser les valeurs après la classification d'un mouvement. } else if ((lr> fb) &&(lr> tap)) { Serial.println("lr"); geste =2 ; toucher =0 ; lr =0 ; fb =0; } else if ((fb> lr) || (fb> tap)) { Serial.println("fb"); geste =3 ; toucher =0 ; lr =0 ; fb =0; } }///////////////////////////////////////////// ////////////////////////////////////////////////////////////// /////////////////////////// if (millis() - globaltimer> 1000) { /////timeoutreset globaltimer =millis() - 170;tr =0; tg=0 ; tb =0 ; état =0 ; //geste=0; } if (millis() - motiontimer> 1000) {gestetimer =millis() - 350;tr =0; tg =0 ; tb =0 ; état =0 ; //geste=0; }////////////////////////////////////////////// ////////////////////////////////////////////////////////////// ///////////////////////// commutateur (état) { // Ceci suit les gestes case 0 :{ /// aucun geste enregistré pour le moment... écoutez le robinet. S'il y en a un, allez au cas 1. if (millis() - gestetimer> 350) { if (gesture ==1) { state =1; geste =0 ; minuteur de geste =millis(); } } Pause; } cas 1 :{ ///// un robinet enregistré. Si un deuxième appui se produit, lancez un flash rapide puis passez à l'étape 2. if (millis() - gestetimer> 350) { if (gesture ==1) { r=10;g=10;b=10; ///état du flash de retour =2; geste =0 ; minuteur de geste =millis(); } } Pause; } cas 2 :{ ///////Switch point - deux taps enregistrés. Les trois sorts divergent ici en fonction du geste suivant. Si c'est un tap, allez à la case 3. Si c'est L/R, allez à la case 4. Si c'est Front/Back, passez à la case 5. if (millis() - gestetimer> 350) { if (geste ==1) { état =3; geste =0 ; minuteur de geste =millis(); } if (geste ==2) { état =4; geste =0 ; minuteur de geste =millis(); } if (geste ==3) { état =5; geste =0 ; minuteur de geste =millis(); } } Pause; } cas 3 :{ //// trois taps enregistrés... nous sommes dans le sort de tapotement, tournez le bâton au rouge et écoutez le dernier "tapotement" pour déclencher le sort. tr =20 ; tg =0 ; tb =0 ; globaltimer =millis()-250 ; if (millis() - gestetimer> 350) { if (geste ==1) { state =0; Serial.println("tapspell!"); tapspell(); } } Pause; } cas 4 :{ ///// deux tapotements et un L ou R enregistré... nous sommes dans le sort de gauche, tournez la portée en bleu et écoutez le dernier "tapotement" pour déclencher le sort. tr =0 ; tg =0 ; tb =20 ; globaltimer =millis()-250 ; if (millis() - minuteur de geste> 350) {; if (geste ==1) { état =0; Serial.println("leftspell!"); orthographe gauche(); } } Pause; } cas 5 :{ ///// //// deux tapotements et un avant ou arrière enregistré... tr =0 ; tg =20 ; tb =0 ; globaltimer =millis()-250 ; if (millis() - gestetimer> 350) { if (geste ==1) { state =0; Serial.println("forwardspell!"); avant-sort(); } } Pause; } par défaut :{ pause ; } } //Série.println(tr); if (millis()-ledtimer> fade){ /// ne faites cette prochaine étape que périodiquement toutes les (valeur de fondu) millisecondes. Contrairement à la fonction "delay()", cela permet à d'autres choses de se produire dans le programme entre les mises à jour. /// lissage des couleurs. La couleur réelle se déplace vers la couleur cible... Si la cible est plus que actuelle, déplacez-vous vers le haut, si elle est inférieure, déplacez-vous vers le bas. si (tr> r + 1) { r++; } si (tg> g + 1) { g++; } si (tb> b + 1) { b++; } si (tr  

Processus de fabrication

  1. Détection de champs électriques CA
  2. Calculs de puissance
  3. Sept façons de sécuriser votre étape de post-traitement
  4. Colorant alimentaire :les ingrédients essentiels pour rendre les aliments attrayants
  5. Créez votre propre chapeau Google Voice
  6. Comment créer une plate-forme robotique Arduino+Raspberry Pi
  7. Comment fabriquer de la fibre de verre
  8. N'importe quel jour peut être un jour de fabrication !
  9. Comment faire une animation en coupe dans Solidworks