Table des matières:

Yeux LED télécommandés et cagoule : 7 étapes (avec photos)
Yeux LED télécommandés et cagoule : 7 étapes (avec photos)

Vidéo: Yeux LED télécommandés et cagoule : 7 étapes (avec photos)

Vidéo: Yeux LED télécommandés et cagoule : 7 étapes (avec photos)
Vidéo: Elle Était Coincée Donc Ce Policier L'aide 2024, Juillet
Anonim

Par bekathwiaBecky SternSuivez plus par l'auteur:

Ami de la confidentialité de la webcam
Ami de la confidentialité de la webcam
Ami de la confidentialité de la webcam
Ami de la confidentialité de la webcam
Ruban à mesurer Antenne Yagi avec coupleurs imprimés en 3D
Ruban à mesurer Antenne Yagi avec coupleurs imprimés en 3D
Ruban à mesurer Antenne Yagi avec coupleurs imprimés en 3D
Ruban à mesurer Antenne Yagi avec coupleurs imprimés en 3D
Broderie Zodiaque
Broderie Zodiaque
Broderie Zodiaque
Broderie Zodiaque

À propos: Fabriquer et partager sont mes deux plus grandes passions ! Au total, j'ai publié des centaines de tutoriels sur tout, des microcontrôleurs au tricot. Je suis une motocycliste new-yorkaise et une maman chien impénitente. Mon wo… En savoir plus sur bekathwia »

Jawas jumelles ! Double Orko ! Deux sorciers fantômes de Bubble-Bobble ! Ce capuchon de costume peut être n'importe quelle créature aux yeux LED que vous choisissez simplement en changeant les couleurs. J'ai d'abord réalisé ce projet en 2015 avec un circuit et un code très simples, mais cette année, je voulais créer une version améliorée avec un contrôle d'animation simultané sur deux costumes. Ce circuit utilise une simple télécommande RF à courte portée pour contrôler deux récepteurs sur la même fréquence, et un code Arduino utilisant des interruptions pour obtenir des changements d'animation réactifs, basés sur le code du didacticiel de Bill Earl.

Pour ce projet, vous aurez besoin de:

  • Deux bijoux NeoPixel
  • Microcontrôleur GEMMA M0
  • Récepteur sans fil 315MHz, type à verrouillage
  • Télécommande RF sans fil 315 MHz en configuration à quatre, deux ou un seul bouton
  • Fil toronné enduit de silicone (30 awg recommandé)
  • Fer à souder et soudure
  • Pince à dénuder
  • Fraises à ras
  • Pince à épiler
  • Outil d'aide à la troisième main (facultatif)
  • Épingles à coudre
  • Craie de tailleur (facultatif)
  • fil d'acier galvanisé 19awg
  • Tissu épais pour capuche/cape (pour cette version j'ai utilisé deux couches de tissu tabac blanc et une couche de gaze blanche, puis j'ai doublé l'intérieur de la capuche avec du noir uni pour bloquer la lumière)
  • Tissu noir translucide pour panneau facial
  • Machine à coudre
  • Ciseaux
  • Aiguille et fil
  • Imprimante 3D avec filament flexible (optionnel)

Pour suivre ce sur quoi je travaille, suivez-moi sur YouTube, Instagram, Twitter, Pinterest et abonnez-vous à ma newsletter. En tant qu'associé Amazon, je gagne des achats éligibles que vous effectuez en utilisant mes liens d'affiliation.

Avant de commencer, vous voudrez peut-être vous renseigner sur les conditions préalables suivantes:

  • Présentation de Gemma M0
  • Uberguide NeoPixel
  • Première version du projet de hotte (construite en 2015 avec Gemma classique et sans contrôle sans fil)
  • Multitâche l'Arduino pt 3

Étape 1: Schéma de circuit et code

Schéma de circuit et code
Schéma de circuit et code

Les connexions du circuit sont les suivantes:

  • Gemma D2 vers récepteur sans fil D0
  • Gemma D0 vers récepteur sans fil D1
  • Gemma 3V vers récepteur sans fil +5V
  • Gemma GND vers récepteur sans fil GND et bijoux NeoPixel GND
  • Gemma D1 à données de bijou NeoPixel IN
  • Gemma Vout aux bijoux NeoPixel PWR
  • Données NeoPixel Jewel OUT vers d'autres données NeoPixel Jewel IN

Voir l'étape suivante pour les notes d'assemblage.

Le code est basé sur le sketch Arduino multitâche de Bill Earl et modifié pour contrôler deux joyaux NeoPixel avec deux entrées numériques. Vous n'avez donc pas besoin d'utiliser le récepteur sans fil - vous pouvez utiliser des boutons sur le circuit lui-même à la place. Téléchargez ce fichier de code Arduino à partir des pièces jointes de cette étape, ou copiez et collez à partir d'ici dans un croquis Arduino vide:

#include "Adafruit_NeoPixel.h"

// Types de motifs pris en charge: motif enum { NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE }; // Directions de modèle prises en charge: enum direction { FORWARD, REVERSE }; // Classe NeoPattern - dérivée de la classe Adafruit_NeoPixel class NeoPatterns: public Adafruit_NeoPixel { public: // Variables membres: pattern ActivePattern; // quel motif est la direction de course Direction; // direction d'exécution du motif non signé long Interval; // millisecondes entre les mises à jour unsigned long lastUpdate; // dernière mise à jour de la position uint32_t Color1, Color2; // Quelles couleurs sont utilisées uint16_t TotalSteps; // nombre total de pas dans le pattern uint16_t Index; // pas en cours dans le motif void (*OnComplete)(); // Rappel à la fin du motif // Constructeur - appelle le constructeur de la classe de base pour initialiser la bande NeoPatterns(uint16_t pixels, uint8_t pin, uint8_t type, void (*callback)()):Adafruit_NeoPixel(pixels, pin, type) { OnComplete = rappeler; } // Mettre à jour le modèle void Update() { if((millis() - lastUpdate) > Interval) // heure de mise à jour { lastUpdate = millis(); switch(ActivePattern) { case RAINBOW_CYCLE: RainbowCycleUpdate(); Pause; cas THEATER_CHASE: TheaterChaseUpdate(); Pause; case COLOR_WIPE: ColorWipeUpdate(); Pause; case SCANNER: ScannerUpdate(); Pause; case FADE: FadeUpdate(); Pause; par défaut: pause; } } } // Incrémenter l'index et réinitialiser à la fin void Increment() { if (Direction == FORWARD) { Index++; if (Index >= TotalSteps) { Index = 0; if (OnComplete != NULL) { OnComplete(); // appelle le rappel d'achèvement } } } else // Direction == REVERSE { --Index; if (Index <= 0) { Index = TotalSteps-1; if (OnComplete != NULL) { OnComplete(); // appelle le rappel complet } } } } // Inverse la direction du motif void Reverse() { if (Direction == FORWARD) { Direction = REVERSE; Index = TotalÉtapes-1; } else { Direction = FORWARD; Indice = 0; } } // Initialisation pour un RainbowCycle void RainbowCycle (intervalle uint8_t, direction dir = FORWARD) { ActivePattern = RAINBOW_CYCLE; Intervalle = intervalle; Nombre total d'étapes = 255; Indice = 0; Direction = dir; } // Mettre à jour le motif de cycle arc-en-ciel void RainbowCycleUpdate() { for(int i=0; i< numPixels(); i++) { setPixelColor(i, Wheel(((i * 256 / numPixels()) + Index) & 255)); } spectacle(); Incrément(); } // Initialisation pour un Theater Chase void TheaterChase(uint32_t color1, uint32_t color2, uint8_t interval, direction dir = FORWARD) { ActivePattern = THEATER_CHASE; Intervalle = intervalle; TotalSteps = numPixels(); Couleur1 = couleur1; Couleur2 = couleur2; Indice = 0; Direction = dir; } // Mettre à jour le motif Theater Chase void TheaterChaseUpdate() { for(int i=0; i< numPixels(); i++) { if ((i + Index) % 3 == 0) { setPixelColor(i, Color1); } else { setPixelColor(i, Color2); } } spectacle(); Incrément(); } // Initialisation pour un ColorWipe void ColorWipe (couleur uint32_t, intervalle uint8_t, direction dir = FORWARD) { ActivePattern = COLOR_WIPE; Intervalle = intervalle; TotalSteps = numPixels(); Couleur1 = couleur; Indice = 0; Direction = dir; } // Mettre à jour le motif de volet de couleur void ColorWipeUpdate() { setPixelColor(Index, Color1); spectacle(); Incrément(); } // Initialisation pour un SCANNNER void Scanner (uint32_t color1, uint8_t interval) { ActivePattern = SCANNER; Intervalle = intervalle; TotalSteps = (numPixels() - 1) * 2; Couleur1 = couleur1; Indice = 0; } // Mettre à jour le modèle de scanner void ScannerUpdate() { for (int i = 0; i > 1, vert (couleur) >> 1, bleu (couleur) >> 1); return dimColor; } // Définir tous les pixels sur une couleur (de manière synchrone) void ColorSet(uint32_t color) { for (int i = 0; i > 16) & 0xFF; } // Renvoie la composante verte d'une couleur 32 bits uint8_t Green(uint32_t color) { return (color >> 8) & 0xFF; } // Renvoie le composant bleu d'une couleur 32 bits uint8_t Blue(uint32_t color) { return color & 0xFF; } // Saisissez une valeur de 0 à 255 pour obtenir une valeur de couleur. // Les couleurs sont une transition r - g - b - retour à r. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return Color (0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return Color(WheelPos * 3, 255 - WheelPos * 3, 0); } } }; void JewelsComplete(); // Définir des NeoPatterns pour les deux anneaux et le bâton // ainsi que des routines de complétion NeoPatterns Jewels(14, 1, NEO_GRBW + NEO_KHZ800, &JewelsComplete); const int LUMINOSITÉ = 50; // Initialiser tout et se préparer à démarrer void setup() { Serial.begin(115200); pinMode(2, INPUT); pinMode(0, ENTREE); // Initialise tous les pixels Jewels.setBrightness(BRIGHTNESS); Bijoux.begin(); // Lancer un modèle Jewels. TheaterChase(Jewels. Color(255, 50, 0), Jewels. Color(0, 0, 0, 50), 100); } // Boucle principale void loop() { // Mettre à jour les bijoux. Bijoux. Mise à jour(); // Changer de motif en appuyant sur un bouton: if (digitalRead(2) == HIGH) // Bouton n°1 enfoncé { Jewels. Color1 = Jewels. Color(255, 50, 0); Jewels. ActivePattern = FADE; Jewels. TotalSteps = 100; Joyaux. Intervalle = 1; } else if (digitalRead(0) == HIGH) // Bouton #2 enfoncé { Jewels. Color1 = Jewels. Color(255, 0, 0); Jewels. ActivePattern = SCANNER; Jewels. TotalSteps = Jewels.numPixels(); Bijoux. Interval = 100; } else // Retour au fonctionnement normal { // Restaure tous les paramètres du motif aux valeurs normales Jewels. Color1 = Jewels. Color(255, 50, 0); Jewels. ActivePattern = THEATER_CHASE; Jewels. TotalSteps = Jewels.numPixels(); Bijoux. Interval = 100; } } //------------------------------------------------------------ -------------- //Routines d'achèvement - sont appelées à la fin d'un motif //---------------------- -------------------------------------- // Rappel de fin de bijoux void JewelsComplete() { // Changement de couleur aléatoire pour la prochaine analyse //Jewels. Color1 = Jewels. Wheel(random(255)); Bijoux. Reverse(); }

Étape 2: Assembler le circuit

Assembler le circuit
Assembler le circuit
Assembler le circuit
Assembler le circuit

Un ensemble de pinces d'aide à la troisième main peut rendre le processus de soudure des fils aux composants très simple et amusant. Mais ne vous inquiétez pas si vous n'avez pas d'ensemble; vous pouvez toujours utiliser du ruban adhésif ou du mastic pour affiches pour maintenir votre planche stable pendant que vous soudez.

Utilisez de minces morceaux de fil torsadé (environ 6 pouces/15 cm de longueur) pour les connexions entre les deux bijoux NeoPixel (schéma à l'étape précédente). Si vous utilisez des fils trop courts, vous ne pourrez pas placer vos yeux LED assez loin l'un de l'autre, et si vous utilisez trop de fil, le mou vous touchera le visage pendant que vous portez le costume.

Le circuit principal vivra dans la zone du revers (là où votre poitrine rencontre votre épaule), donc pour les connexions entre le premier bijou NeoPixel de la chaîne et la Gemma, les fils seront beaucoup plus longs. Vous pouvez tenir le fil jusqu'à la zone de vos yeux et le tirer pour mesurer la distance que le fil doit parcourir, puis en ajouter un peu plus pour le mou et l'assurance.

Pour connecter le Gemma et le récepteur sans fil, j'ai choisi d'utiliser des fils de prototypage avec des embases femelles, car le récepteur sans fil a déjà des broches d'en-tête attachées.

Étape 3: Alimentation par batterie

Alimentation par batterie
Alimentation par batterie
Alimentation par batterie
Alimentation par batterie

Pour alimenter le circuit, j'ai utilisé une batterie lipoly de 500mAh. Si vous utilisez une batterie lipoly, il est sage de la protéger contre les rayures, les perforations, les abrasions, la flexion et autres abus. Vous pouvez l'envelopper dans du ruban adhésif en tissu solide ou en faire un support imprimé en 3D.

Vous pouvez facilement utiliser un support 3xAAA à la place (portez-le dans votre poche plutôt qu'à l'intérieur du revers).

Étape 4: Patron de couture et tissu de coupe

Patron de couture et tissu de coupe
Patron de couture et tissu de coupe

J'ai utilisé le même modèle que j'ai créé pour la première version de ce costume, qui est un PDF de plusieurs pages qui s'assemble pour créer les pièces du modèle.

Pliez votre tissu en alignant les bords des lisières pour aligner le grain du tissu et placez/épinglez les pièces du patron le long du pli comme indiqué. Tracez un surplus de couture à l'extérieur des pièces du patron (sauf le pli) d'environ 5/8 po/3 cm à l'aide d'une craie ou d'un crayon de marquage. Comme mon tissu était fin, je voulais le doubler, et comme j'avais fait deux capuches, j'ai fini par découper quatre de chaque pièce du patron dans le tissu principal, puis une autre couche de gaze gazeuse pour ajouter de la texture à l'extérieur, et finalement un couche de tissu noir comme doublure pour bloquer la lumière entrante. Je pense que si j'avais prévu cela à l'avance, j'aurais pu laisser tomber l'une des couches blanches initiales et les capots n'auraient été constitués que de trois couches chacune au lieu de quatre.

Étape 5: Assembler les morceaux de tissu

Assembler des morceaux de tissu
Assembler des morceaux de tissu
Assembler des morceaux de tissu
Assembler des morceaux de tissu
Assembler des morceaux de tissu
Assembler des morceaux de tissu
Assembler des morceaux de tissu
Assembler des morceaux de tissu

Épinglez et cousez les coutures des pinces/épaules sur chaque pièce du patron, puis alignez les pièces de la capuche et de la cape le long de la couture de l'encolure, endroit contre endroit. Cousez la couture, ainsi qu'une couture directement sur le haut de la capuche.

Essayez sur le capot. Repliez et épinglez le bord avant brut de la capuche et cousez-le pour créer un bord net ainsi qu'un canal pour le passage d'un fil.

Ensuite, coupez un morceau de tissu noir transparent arrondi pour couvrir le devant de la capuche. C'est ce qui soutiendra le circuit et cachera votre visage. Épinglez-le tout en portant la capuche pour un meilleur ajustement, puis cousez-le à la main ou à la machine à l'ouverture de la capuche.

Étape 6: Installer le circuit dans la hotte

Installer le circuit dans la hotte
Installer le circuit dans la hotte

J'ai mis le capot, allumé le circuit et utilisé un miroir pour trouver le meilleur emplacement pour les LED. Ensuite, j'ai utilisé des épingles pour marquer les emplacements et j'ai soigneusement cousu à l'aide de fil noir, en fixant les trous de montage des bijoux NeoPixel au panneau avant noir transparent. Les miens se trouvent juste en dessous de mes vrais yeux, ce qui permet de voir facilement au-delà d'eux.

Rincez et répétez si vous faites un deuxième capuchon.

Étape 7: Portez-le

Porter!
Porter!
Porter!
Porter!
Porter!
Porter!
Porter!
Porter!

Ce sont tellement amusants à porter. Il est facile de voir à l'extérieur, et pas facile pour les autres de voir votre visage. L'ensemble est également assez confortable, grâce à la capuche surdimensionnée et à l'armature métallique, qui empêchent le tissu avant de se draper sur votre visage.

Mon petit ami et moi les avons portés pour DJ à la fête d'Halloween de mon hackerspace cette année, et même si je pouvais voir l'interface du logiciel du projecteur laser, il ne pouvait pas tout à fait distinguer le petit texte en abelton, nous avons donc dû l'adapter pour avoir un meilleure vue. J'ai retiré le panneau de tissu noir du haut du capot et replié l'excédent. Dans une pièce sombre, vous ne pouviez pas vraiment faire la différence entre les deux, bien que vous puissiez le voir sur la photo de nous ensemble ci-dessus.

Merci d'avoir lu! Si vous aimez ce projet, vous pourriez être intéressé par certains de mes autres:

  • 13 idées pour diffuser des LED
  • Bande LED diffuse avec Arduino/Bluetooth
  • Compteur d'abonnés YouTube avec ESP8266
  • Miroir infini facile
  • 3 erreurs d'Arduino pour débutants

Pour suivre ce sur quoi je travaille, suivez-moi sur YouTube, Instagram, Twitter et Pinterest.

Conseillé: