Innholdsfortegnelse:

Rytmehånd: 6 trinn
Rytmehånd: 6 trinn

Video: Rytmehånd: 6 trinn

Video: Rytmehånd: 6 trinn
Video: Rytmisk samtidsmusiker 2024, Juli
Anonim
Rytmehånd
Rytmehånd

Denne cyberglove handler om å gjøre det riktige trekket i rett øyeblikk.

Lysene går fra armen (albuen) til hånden din, og når lysene kommer til din hånd må du trykke fingrene på minifotocellen.

Hvis du trykker hånden på minifotocellen i riktig øyeblikk, blir lysdiodene grønne. Hvis ikke blir lysdiodene røde.

Trinn 1: Samle materialer

  • En hanske
  • Stoff som gjør hansken lengre
  • WS2812B LED -stripe
  • Ledninger
  • Arduino
  • Mini fotosel

Trinn 2: Lag kretser

Lag kretser
Lag kretser
Lag kretser
Lag kretser

Koble først led -stripen til arduinoen. Du kan gjøre det ved å koble +5v til 5v på arduinoen. Din må være koblet til A0 på arduinoen og GND må være koblet til GND på arduinoen.

Du må også koble minifotocellen til arduinoen ved å koble til 5v -ledningen fra led -stripen og fra samme kilde som koble til en ledning til PIN 6 på arduinoen. Den andre siden fra minifotocellen må kobles til GND -ledningen fra LED -stripen

Trinn 3: Designe hansken

Designet av hansken
Designet av hansken

Hansken må ha riktig størrelse for å passe til ledlistene. Lysdiodene må justeres for å gjøre det hyggeligere å se på.

For dette spillet må du bruke armen din og du vil kunne bevege deg fritt. Dette kan realiseres ved å sette arduinoen på hansken. Jeg brukte borrelås som et feste for å feste arduinoen til hansken. For å etablere mer stabilitet kan du sette et tau rundt hansken og rundt arduinoen.

Minifotocellen er sydd inne i hansken, så den holder seg på plass.

Til slutt må du skjule ledningene for å få det til å se bedre ut. Det kan gjøres med stoff som blir sydd på toppen av ledningene.

Trinn 4: Lodding

Lodding
Lodding

Nå kan du gjøre tilkoblingstrådene fra kretsen sikre ved lodding.

Trinn 5: Koding

Koding
Koding
Koding
Koding
Koding
Koding

// Et grunnleggende daglig testprogram for NeoPixel stripe.

// NEOPIXEL BESTE PRAKSISER for mest pålitelig drift: // - Legg til 1000 uF KAPASITOR mellom NeoPixel stripes + og - tilkoblinger. // - MINIMER KOBLINGSLENGDE mellom mikrokontrollerkort og første piksel. //-NeoPixel-stripens DATA-IN skal passere gjennom en 300-500 OHM-RESISTOR. // - UNNGÅ å koble NeoPixels til en LIVE CIRCUIT. Hvis du må, må du ALLTID // koble til GRUNN (-) først, deretter +, deretter data. //-Når du bruker en 3.3V mikrokontroller med en 5V-drevet NeoPixel-stripe, // ANBEFALES en LOGISK NIVÅ-KONVERTER på datalinjen STERKT. // (Hopp over disse kan fungere OK på arbeidsbenken din, men kan mislykkes i feltet)

#include #ifdef _AVR_ #include // Påkrevd for 16 MHz Adafruit Trinket #endif

// Hvilken pin på Arduino er koblet til NeoPixels? // På en trinket eller Gemma foreslår vi at du endrer dette til 1: #define LED_PIN 6

// Hvor mange NeoPixels er festet til Arduino? #define LED_COUNT 60

// Deklarere NeoPixel -stripeobjektet vårt: Adafruit_NeoPixel -stripe (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Hvit farge, for standard bool clickedCorrectly = false; // Argument 1 = Antall piksler i NeoPixel -stripe // Argument 2 = Arduino -pinnummer (de fleste er gyldige) // Argument 3 = Pixel -flagg, legg sammen etter behov: // NEO_KHZ800 800 KHz bitstream (de fleste NeoPixel -produkter m/ WS2812 lysdioder) // NEO_KHZ400 400 KHz (klassiske 'v1' (ikke v2) FLORA -piksler, WS2811 -drivere) // NEO_GRB Piksler er koblet til GRB -bitstrøm (de fleste NeoPixel -produkter) // NEO_RGB -piksler er koblet til RGB -bitstrøm (v1 FLORA -piksler, ikke v2) // NEO_RGBW Piksler er koblet til RGBW -bitstrøm (NeoPixel RGBW -produkter)

// setup () -funksjonen-kjøres en gang ved oppstart --------------------------------

void setup () {// Disse linjene er spesielt for å støtte Adafruit Trinket 5V 16 MHz. // Alle andre brett, du kan fjerne denne delen (men ingen skade å forlate den): #if definert (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // END of Trinket-specific code.

pinMode (A0, INNGANG); strip.begin (); // INITIALISER NeoPixel stripeobjekt (påkrevd) strip.show (); // Slå AV alle piksler ASAP strip.setBrightness (10); // Sett LYSSTYRKE til omtrent 1/5 (maks. 255)}

// loop () -funksjon-kjører gjentatte ganger så lenge brettet er på ---------------

void loop () {clickedCorrectly = theaterChaseOne (color); hvis (klikket riktig) {color = strip. Color (0, 255, 0); } annet {color = strip. Color (255, 0, 0); }}

// Noen egne funksjoner for å lage animerte effekter -----------------

// Jaktlys i teater-telt-stil. Send inn en farge (32-biters verdi, // a la strip. Color (r, g, b) som nevnt ovenfor), og en forsinkelse (i ms) // mellom rammer. bool theaterChaseOne (uint32_t color) {bool correct = false; bool clickedWrong = false; for (int index = 0; index 800) {// verdi lyssensor hvis (index <16) {// 2 lysdioder før slutten, kan du klikke color = strip. Color (255, 0, 0); // røde lysdioder clickedWrong = true; // klikket feil og lysdioder blir røde} ellers hvis (! clickedWrong) {// hvis ikke feil farge = strip. Color (0, 255, 0); // grønn farge lysdioder riktig = true; // klikket riktig så blir lysdioder grønne}} strip.clear (); strip.setPixelColor (17 - indeks, farge); // første rad led -lys strip.setPixelColor (18 + indeks, farge); // andre rad led -lys strip.setPixelColor (53 - indeks, farge); // tredje rad led lys strip.show (); forsinkelse (300); } returner riktig; }

Trinn 6: Endringer

Endringer
Endringer
Endringer
Endringer
Endringer
Endringer

Jeg gjorde noen endringer. For det første gjemte jeg arduinoen, så det ville være mer behagelig å bruke "Rythm -hånden", og for det andre endret jeg koden litt. Jeg endret koden slik at når du trykker i riktig øyeblikk, blir fargen grønn og lysdiodene beveger seg raskere. Ved å gjøre det blir LED Swill 10% raskere enn før. Dette gjør spillet mer interessant

Slik er koden nå:

// Et grunnleggende daglig testprogram for NeoPixel stripe. // NEOPIXEL BESTE PRAKSISER for mest pålitelig drift: // - Legg til 1000 uF KAPASITOR mellom NeoPixel stripes + og - tilkoblinger. // - MINIMER KOBLINGSLENGDE mellom mikrokontrollerkort og første piksel. //-NeoPixel-stripens DATA-IN skal passere gjennom en 300-500 OHM-RESISTOR. // - UNNGÅ å koble NeoPixels til en LIVE CIRCUIT. Hvis du må, må du ALLTID // koble til GRUNN (-) først, deretter +, deretter data. //-Når du bruker en 3.3V mikrokontroller med en 5V-drevet NeoPixel-stripe, // ANBEFALES en LOGISK NIVÅ-KONVERTER på datalinjen STERKT. // (Hopp over disse kan fungere OK på arbeidsbenken din, men kan mislykkes i feltet) #include #ifdef _AVR_ #include // Påkrevd for 16 MHz Adafruit Trinket #endif // Hvilken pin på Arduino er koblet til NeoPixels? // På en trinket eller Gemma foreslår vi at du endrer dette til 1: #define LED_PIN 6 // Hvor mange NeoPixels er festet til Arduino? #define LED_COUNT 60 // Declare our NeoPixel strip object: Adafruit_NeoPixel strip (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Hvit farge, for standard bool clickedCorrectly = false; int indeks = 0; int intervall = 300; int resultat = 0; usignerte lange tidligereMs = millis (); // Argument 1 = Antall piksler i NeoPixel -stripe // Argument 2 = Arduino -pinnummer (de fleste er gyldige) // Argument 3 = Pixel -type flagg, legg sammen etter behov: // NEO_KHZ800 800 KHz bitstream (de fleste NeoPixel -produkter m/ WS2812 LED) // NEO_KHZ400 400 KHz (klassiske 'v1' (ikke v2) FLORA -piksler, WS2811 -drivere) // NEO_GRB Piksler er koblet til GRB -bitstrøm (de fleste NeoPixel -produkter) // NEO_RGB -piksler er koblet til RGB -bitstrøm (v1 FLORA -piksler, ikke v2) // NEO_RGBW Piksler kobles til RGBW-bitstrøm (NeoPixel RGBW-produkter) // setup () -funksjon-kjøres en gang ved oppstart -------------------- ------------ ugyldig oppsett () {// Disse linjene er spesifikt for å støtte Adafruit Trinket 5V 16 MHz. // Alle andre brett, du kan fjerne denne delen (men ingen skade å forlate den): #if definert (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // END of Trinket-specific code. Serial.begin (9600); mens (! Seriell) {; // vent på at seriell port kobles til. Bare nødvendig for en innfødt USB -port} pinMode (A0, INPUT); strip.begin (); // INITIALISER NeoPixel stripeobjekt (påkrevd) strip.show (); // Slå AV alle piksler ASAP strip.setBrightness (10); // Sett BRIGHTNESS til omtrent 1/5 (maks = 255)} // loop () -funksjon-kjører gjentatte ganger så lenge kortet er på --------------- void loop () {usignert lang currentMs = millis (); // Få den nåværende tiden int -verdien = analogRead (A0); // Leser gjeldende lyssensor hvis (verdi> 900 && resultat == 0) {// Hvis sensoren trykkes og det ikke er registrert noe resultat ennå, utløser resultatfangst hvis (indeks = intervall) {// Kontroller om gjeldende loop overskrider intervallet previousMs = currentMs; // Sett det nye intervallet til gjeldende tid + intervallindeks + = 1; // Sett lysdiodene et skritt videre i sløyfen hvis (indeks> 17) {// Trigger end of loop -håndteringsindeks = 0; hvis (resultat == 2) {// På et korrekt resultatintervall = (int) max ((intervall * 0,95), 50); // Fremskynde 10%, ned til 50ms intervall/ farge = strip. Color (0, 255, 0); // Sett lysdiodene til grønn} ellers hvis (resultat == 1) {// På et feil resultatintervall = 300; // Tilbakestill intervallfargen = strip. Color (255, 0, 0); // Sett lysdiodene til rød} else {// På ingen resultat fanget farge = strip. Color (255, 0, 0); // Sett lysdiodene til rød} result = 0; // Tilbakestill resultatet for neste sløyfe} theaterChaseOne (farge, indeks); // Tenn lysene for visning. }} // // Noen av våre egne funksjoner for å lage animerte effekter ----------------- // Teater-telt-stil jaktlys. Send inn en farge (32-biters verdi, // a la strip. Color (r, g, b) som nevnt ovenfor), og en forsinkelse (i ms) // mellom rammer. void theaterChaseOne (uint32_t color, int index) {strip.clear (); strip.setPixelColor (17 - indeks, farge); // første rad led -lys strip.setPixelColor (18 + indeks, farge); // andre rad led -lys strip.setPixelColor (53 - indeks, farge); // tredje rad led lys strip.show (); }

Anbefalt: