Inhoudsopgave:

Op afstand bedienbare LED-ogen en kostuumkap - Ajarnpa
Op afstand bedienbare LED-ogen en kostuumkap - Ajarnpa

Video: Op afstand bedienbare LED-ogen en kostuumkap - Ajarnpa

Video: Op afstand bedienbare LED-ogen en kostuumkap - Ajarnpa
Video: 57 LED verlichting. Waar moet je op letten? 2024, Juli-
Anonim

Door bekathwiaBecky SternVolg meer van de auteur:

Webcam Privacy Vriend
Webcam Privacy Vriend
Webcam Privacy Vriend
Webcam Privacy Vriend
Meetlint Yagi-antenne met 3D-geprinte koppelingen
Meetlint Yagi-antenne met 3D-geprinte koppelingen
Meetlint Yagi-antenne met 3D-geprinte koppelingen
Meetlint Yagi-antenne met 3D-geprinte koppelingen
Dierenriem borduurwerk
Dierenriem borduurwerk
Dierenriem borduurwerk
Dierenriem borduurwerk

Over: Maken en delen zijn mijn twee grootste passies! In totaal heb ik honderden tutorials gepubliceerd over alles, van microcontrollers tot breien. Ik ben een motorrijder in New York City en een onberouwvolle hondenmoeder. Mijn w… Meer over bekathwia »

Tweeling Jawa's! Dubbel Orko! Twee spooktovenaars van Bubble-Bobble! Deze kostuumkap kan elk wezen met led-ogen zijn dat je kiest, gewoon door de kleuren te veranderen. Ik maakte dit project voor het eerst in 2015 met een heel eenvoudig circuit en code, maar dit jaar wilde ik een verbeterde versie maken met gelijktijdige animatiecontrole over twee kostuums. Dit circuit maakt gebruik van een eenvoudige RF-afstandsbediening op korte afstand om twee ontvangers op dezelfde frequentie te bedienen, en Arduino-code die interrupts gebruikt om responsieve animatieveranderingen te bereiken, gebaseerd op de zelfstudiecode van Bill Earl.

Voor dit project heb je nodig:

  • Twee NeoPixel-juwelen
  • GEMMA M0-microcontroller
  • 315MHz draadloze ontvanger, vergrendelend type
  • 315 MHz draadloze RF-afstandsbediening in configuratie met vier, twee of één knop
  • Met siliconen gecoate gevlochten draad (30awg aanbevolen)
  • Soldeerbout en soldeer
  • Draadstrippers
  • Verzonken messen
  • Pincet
  • Hulpmiddel uit de derde hand (optioneel)
  • Naaipennen
  • Kleermakerskrijt (optioneel)
  • 19awg gegalvaniseerd staaldraad
  • Dikke stof voor capuchon/cape (voor deze versie gebruikte ik twee lagen witte tabaksdoek en een laag witte kaasdoek, en bekleedde ik de binnenkant van de kap met effen zwart om het licht te blokkeren)
  • Doorschijnende zwarte stof voor gezichtspaneel
  • Naaimachine
  • Schaar
  • Naald en draad
  • 3D-printer met flexibel filament (optioneel)

Om op de hoogte te blijven van waar ik aan werk, volg me op YouTube, Instagram, Twitter, Pinterest en abonneer je op mijn nieuwsbrief. Als Amazon Associate verdien ik met kwalificerende aankopen die je doet via mijn gelieerde links.

Voordat je begint, wil je misschien de volgende vereisten lezen:

  • Introductie van Gemma M0
  • NeoPixel Uberguide
  • Eerste kapprojectversie (gebouwd in 2015 met klassieke Gemma en geen draadloze bediening)
  • Multitasking van de Arduino pt 3

Stap 1: Schakelschema en code

Schakelschema en code
Schakelschema en code

De circuitaansluitingen zijn als volgt:

  • Gemma D2 naar draadloze ontvanger D0
  • Gemma D0 naar draadloze ontvanger D1
  • Gemma 3V naar draadloze ontvanger +5V
  • Gemma GND naar draadloze ontvanger GND en NeoPixel juwelen GND
  • Gemma D1 naar NeoPixel juweelgegevens IN
  • Gemma Vout naar NeoPixel-juwelen PWR
  • NeoPixel-juweelgegevens OUT naar andere NeoPixel-juweelgegevens IN

Zie de volgende stap voor montage-opmerkingen.

Code is gebaseerd op Multi-tasking van de Arduino-schets door Bill Earl, en aangepast om twee NeoPixel-juwelen te besturen met twee digitale ingangen. U hoeft dus de draadloze ontvanger niet te gebruiken - u kunt in plaats daarvan knoppen op het circuit zelf gebruiken. Download dit Arduino-codebestand uit de bijlagen van deze stap, of kopieer en plak vanaf hier in een lege Arduino-schets:

#include "Adafruit_NeoPixel.h"

// Ondersteunde patroontypen: enum-patroon {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE}; // Ondersteunde patroonrichtingen: enum richting { VOORUIT, ACHTERUIT }; // NeoPattern Class - afgeleid van de Adafruit_NeoPixel class class NeoPatterns: public Adafruit_NeoPixel { public: // Member Variables: pattern ActivePattern; // welk patroon loopt richting Richting; // richting om het patroon unsigned long Interval uit te voeren; // milliseconden tussen updates unsigned long lastUpdate; // laatste update van positie uint32_t Color1, Color2; // Welke kleuren worden gebruikt uint16_t TotalSteps; // totaal aantal stappen in het patroon uint16_t Index; // huidige stap binnen de leegte van het patroon (*OnComplete)(); // Callback na voltooiing van patroon // Constructor - roept base-class constructor aan om strip NeoPatterns te initialiseren (uint16_t pixels, uint8_t pin, uint8_t type, void (*callback)()):Adafruit_NeoPixel (pixels, pin, type) { OnComplete = Bel terug; } // Update het patroon void Update () { if ((millis () - lastUpdate) > Interval) // tijd om te updaten { lastUpdate = millis (); switch (ActivePattern) { case RAINBOW_CYCLE: RainbowCycleUpdate(); pauze; geval THEATER_CHASE: TheaterChaseUpdate(); pauze; geval COLOR_WIPE: ColorWipeUpdate(); pauze; case SCANNER: ScannerUpdate(); pauze; geval FADE: FadeUpdate(); pauze; standaard: pauze; } } } // Verhoog de index en reset aan het einde void Increment() { if (Direction == FORWARD) { Index++; if (Index >= TotalSteps) { Index = 0; if (OnComplete!= NULL) { OnComplete(); // bel de complpetion callback } } } else // Direction == REVERSE { --Index; if (Index <= 0) { Index = TotalSteps-1; if (OnComplete!= NULL) { OnComplete(); // bel de complpetion callback } } } } // Reverse patroon richting void Reverse () { if (Direction == FORWARD) { Direction = REVERSE; Index = TotalSteps-1; } else { Richting = VOORUIT; Index = 0; } } // Initialiseer voor een RainbowCycle leegte RainbowCycle (uint8_t interval, direction dir = FORWARD) { ActivePattern = RAINBOW_CYCLE; Interval = interval; Totaal aantal stappen = 255; Index = 0; Richting = richt; } // Update het Rainbow Cycle Pattern void RainbowCycleUpdate() { for(int i=0; i< numPixels(); i++) { setPixelColor(i, Wheel(((i * 256 / numPixels()) + Index) & 255)); } laten zien(); Verhogen(); } // Initialiseer voor een Theater Chase void TheaterChase (uint32_t color1, uint32_t color2, uint8_t interval, direction dir = FORWARD) { ActivePattern = THEATER_CHASE; Interval = interval; TotalSteps = aantalPixels(); Kleur1 = kleur1; Kleur2 = kleur2; Index = 0; Richting = richt; } // Update het Theatre Chase-patroon void TheaterChaseUpdate() { for(int i=0; i<numPixels(); i++) { if ((i + Index) % 3 == 0) { setPixelColor(i, Color1); } else { setPixelColor(i, Color2); } } laten zien(); Verhogen(); } // Initialiseer voor een ColorWipe leegte ColorWipe (uint32_t color, uint8_t interval, direction dir = FORWARD) { ActivePattern = COLOR_WIPE; Interval = interval; TotalSteps = aantalPixels(); Kleur1 = kleur; Index = 0; Richting = richt; } // Update het kleurwispatroon void ColorWipeUpdate() { setPixelColor(Index, Color1); laten zien(); Verhogen(); } // Initialiseer voor een SCANNNER void Scanner (uint32_t color1, uint8_t interval) { ActivePattern = SCANNER; Interval = interval; TotalSteps = (numPixels() - 1) * 2; Kleur1 = kleur1; Index = 0; } // Update het scannerpatroon void ScannerUpdate() { for (int i = 0; i > 1, Groen (kleur) >> 1, Blauw (kleur) >> 1); terug dimColor; } // Stel alle pixels in op een kleur (synchroon) void ColorSet (uint32_t color) { for (int i = 0; i > 16) & 0xFF; } // Retourneert de groene component van een 32-bits kleur uint8_t Green(uint32_t color) { return (color >> 8) & 0xFF; } // Retourneert de blauwe component van een 32-bits kleur uint8_t Blue(uint32_t color) { return color & 0xFF; } // Voer een waarde in van 0 tot 255 om een kleurwaarde te krijgen. // De kleuren zijn een overgang r - g - b - terug naar 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; retourneer Kleur (0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; kleur retourneren (WheelPos * 3, 255 - WheelPos * 3, 0); } } }; ongeldig JuwelenComplete(); // Definieer enkele NeoPatterns voor de twee ringen en de stick // evenals enkele voltooiingsroutines NeoPatterns Jewels(14, 1, NEO_GRBW + NEO_KHZ800, &JewelsComplete); const int HELDERHEID = 50; // Initialiseer alles en bereid je voor op het starten van void setup() { Serial.begin(115200); pinMode(2, INPUT); pinMode (0, INGANG); // Initialiseer alle pixels Jewels.setBrightness (BRIGHTNESS); Juwelen.begin(); // Start een patroon Jewels. TheaterChase (Jewels. Color (255, 50, 0), Jewels. Color (0, 0, 0, 50), 100); } // Main loop void loop() { // Update de juwelen. Juwelen. Update(); // Wissel van patroon met een druk op de knop: if (digitalRead (2) == HOOG) // Knop #1 ingedrukt { Jewels. Color1 = Jewels. Color (255, 50, 0); Jewels. ActivePattern = FADE; Juwelen. TotalSteps = 100; Juwelen. Interval = 1; } else if (digitalRead(0) == HOOG) // Knop #2 ingedrukt { Jewels. Color1 = Jewels. Color (255, 0, 0); Jewels. ActivePattern = SCANNER; Jewels. TotalSteps = Jewels.numPixels(); Juwelen. Interval = 100; } else // Terug naar normale werking { // Herstel alle patroonparameters naar normale waarden Jewels. Color1 = Jewels. Color (255, 50, 0); Jewels. ActivePattern = THEATER_CHASE; Jewels. TotalSteps = Jewels.numPixels(); Juwelen. Interval = 100; } } //---------------------------------------------- -------------- //Voltooiingsroutines - word gebeld na voltooiing van een patroon //---------------------- -------------------------------------- // Voltooiing van juwelen Callback void JewelsComplete() { // Willekeurige kleurverandering voor volgende scan //Jewels. Color1 = Jewels. Wheel(random(255)); Juwelen. Reverse(); }

Stap 2: monteer circuit

Assembleer Circuit
Assembleer Circuit
Assembleer Circuit
Assembleer Circuit

Een set helpende grijpers voor derden kan het solderen van draden aan componenten heel eenvoudig en leuk maken. Maar maak je geen zorgen als je geen set hebt; je kunt altijd wat plakband of posterplamuur gebruiken om je bord stabiel te houden terwijl je soldeert.

Gebruik dunne stukjes gevlochten draad (ongeveer 15 cm lang) voor de verbindingen tussen de twee NeoPixel-juwelen (diagram in de vorige stap). Als u draden gebruikt die te kort zijn, kunt u uw LED-ogen niet ver genoeg uit elkaar plaatsen, en als u te veel draad gebruikt, zal de speling in uw gezicht komen terwijl u het kostuum draagt.

Het hoofdcircuit bevindt zich in het reversgebied (waar je borstkas je schouder raakt), dus voor de verbindingen tussen het eerste NeoPixel-juweel in de ketting en de Gemma zullen de draden veel langer zijn. Je kunt de draad tot aan je oogcontour houden en hem uittrekken om de afstand te meten die de draad moet afleggen, en dan wat meer toevoegen voor speling en verzekering.

Om verbinding te maken tussen de Gemma en de draadloze ontvanger, heb ik ervoor gekozen om prototyping-draden met vrouwelijke headers te gebruiken, omdat de draadloze ontvanger al header-pinnen heeft.

Stap 3: Batterijvermogen

Batterij vermogen
Batterij vermogen
Batterij vermogen
Batterij vermogen

Om het circuit van stroom te voorzien, heb ik een lipoly-batterij van 500 mAh gebruikt. Als u een LiPoly-batterij gebruikt, is het verstandig om deze te beschermen tegen krassen, perforaties, schaafwonden, buigen en ander misbruik. Je zou het in wat stevige stoffen tape kunnen wikkelen, of er een 3D-geprinte houder voor kunnen maken.

U kunt in plaats daarvan gemakkelijk een 3xAAA-houder gebruiken (draag deze in uw zak in plaats van in de revers).

Stap 4: naaipatroon en snijstof

Naaipatroon en snijstof
Naaipatroon en snijstof

Ik heb hetzelfde patroon gebruikt dat ik heb gemaakt voor de eerste versie van dit kostuum, dat is een PDF met meerdere pagina's die samen tegels vormen om de patroondelen te maken.

Vouw uw stof, lijn de randen van de zelfkant uit om de stofkorrel uit te lijnen, en plaats/spel patroondelen langs de vouw zoals aangegeven. Trek een naadtoeslag over buiten de patroondelen (behalve de vouw) van ongeveer 5/8 inch/3 cm met een markeerkrijt of potlood. Omdat mijn stof dun was, wilde ik het verdubbelen, en aangezien ik twee kappen maakte, knipte ik uiteindelijk vier van elk patroondeel in de hoofdstof, dan nog een laag in gaasachtig kaasdoek om textuur aan de buitenkant toe te voegen, en uiteindelijk een laag zwarte stof als voering om het binnenkomende licht te blokkeren. Ik denk dat als ik dat van tevoren had gepland, ik een van de eerste witte lagen had kunnen laten vallen en dat de kappen uit slechts drie lagen zouden bestaan in plaats van vier.

Stap 5: monteer stukken stof

Stukken stof samenstellen
Stukken stof samenstellen
Stukken stof samenstellen
Stukken stof samenstellen
Stukken stof samenstellen
Stukken stof samenstellen
Stukken stof samenstellen
Stukken stof samenstellen

Speld en naai de naden/schoudernaden op elk patroondeel, lijn de delen van de capuchon en de cape uit langs de neknaad met de goede kanten op elkaar. Naai de naad en een naad recht over de bovenkant van de capuchon.

Probeer op de motorkap. Vouw de onbewerkte voorkant van de kap om en speld vast en naai deze vast om een nette rand te creëren en een kanaal voor een draad om door te gaan.

Knip vervolgens een rond stuk pure zwarte stof om de voorkant van de kap te bedekken. Dit is wat het circuit ondersteunt en je gezicht verbergt. Speld het op zijn plaats terwijl u de capuchon draagt voor de beste pasvorm, en naai het vervolgens met de hand of machinaal aan de opening van de capuchon.

Stap 6: Circuit in afzuigkap installeren

Circuit in kap installeren
Circuit in kap installeren

Ik zette de kap op, zette het circuit aan en gebruikte een spiegel om de beste locatie voor de LED's te bepalen. Daarna heb ik pinnen gebruikt om de locaties te markeren en zorgvuldig gestikt met zwarte draad, waarbij ik de montagegaten op de NeoPixel-juwelen aan het pure zwarte voorpaneel bevestigde. De mijne zitten net onder mijn echte ogen, waardoor het gemakkelijk is om er voorbij te kijken.

Spoel en herhaal als je een tweede kap maakt.

Stap 7: Draag het

Draag het!
Draag het!
Draag het!
Draag het!
Draag het!
Draag het!
Draag het!
Draag het!

Deze zijn zo leuk om te dragen. Het is gemakkelijk om naar buiten te kijken, en niet gemakkelijk voor anderen om je gezicht te zien. Het geheel is ook behoorlijk comfortabel, dankzij de oversized capuchon en het draadframe, waardoor de stof aan de voorkant niet over je gezicht valt.

Mijn vriend en ik droegen deze om dit jaar het Halloweenfeest van mijn hackerspace te draaien, en hoewel ik de interface voor de laserprojectorsoftware kon zien, kon hij de kleine tekst in abelton niet helemaal onderscheiden, dus moesten we de zijne aanpassen om een beter zicht. Ik verwijderde het zwarte stoffen paneel van het bovenste deel van de kap en vouwde het overtollige om. In een donkere kamer kon je het verschil tussen de twee niet echt zien, hoewel je het op de foto van ons samen hierboven kunt zien.

Bedankt voor het lezen! Als je dit project leuk vindt, ben je misschien geïnteresseerd in enkele van mijn andere:

  • 13 Ideeën voor het verspreiden van LED's
  • Diffuus LED-stripbord met Arduino/Bluetooth
  • YouTube-abonneeteller met ESP8266
  • Gemakkelijke oneindige spiegel
  • 3 Arduino-fouten voor beginners

Volg mij op YouTube, Instagram, Twitter en Pinterest om op de hoogte te blijven van waar ik mee bezig ben.

Aanbevolen: