Cuprins:

Mâna ritmului: 6 pași
Mâna ritmului: 6 pași

Video: Mâna ritmului: 6 pași

Video: Mâna ritmului: 6 pași
Video: Pas hora de mana 6/6 2024, Noiembrie
Anonim
Mână ritmică
Mână ritmică

Această cârmă cibernetică este despre a face mișcarea corectă la momentul potrivit.

Luminile merg de la braț (cot) la mână și când luminile ajung la mâna dvs., trebuie să apăsați degetele pe mini fotocelula.

Dacă apăsați mâna pe mini fotocelula în momentul potrivit ledurile devin verzi. Dacă nu, ledurile devin roșii.

Pasul 1: Colectați materiale

  • O mănușă
  • Tesatura pentru a face manusa mai lunga
  • Benzi LED WS2812B
  • Fire
  • Arduino
  • Mini vanzare foto

Pasul 2: Realizarea circuitelor

Realizarea de circuite
Realizarea de circuite
Realizarea de circuite
Realizarea de circuite

Mai întâi conectați banda led la arduino. Puteți face acest lucru conectând + 5v la 5v pe arduino. Din trebuie să fie conectat la A0 pe arduino și GND trebuie să fie conectat la GND pe arduino.

De asemenea, trebuie să conectați mini fotocelula la arduino prin conectarea la firul de 5v din banda led și de la aceeași sursă conectându-se cu un fir la PIN 6 pe arduino. Cealaltă parte a mini-fotocelulei trebuie să fie conectată la firul GND din banda led

Pasul 3: Proiectarea mănușii

Proiectarea mănușii
Proiectarea mănușii

Mănușa trebuie să aibă dimensiunea potrivită pentru a se potrivi benzilor led. Ledurile trebuie să fie aliniate pentru a face mai plăcute să le privim.

Pentru acest joc trebuie să vă folosiți brațul și doriți să vă puteți mișca liber. Acest lucru se poate realiza punând arduino pe mănușă. Am folosit velcro ca element de fixare pentru a lipi arduino de mănușă. Apoi, pentru a stabili mai multă stabilitate, puteți pune o frânghie în jurul mănușii și în jurul arduino-ului.

Mini-fotocelula a fost cusută în interiorul mănușii, astfel încât să rămână la locul său.

În cele din urmă trebuie să ascundeți firele pentru a face să arate mai bine. Acest lucru se poate face cu țesături care vor fi cusute deasupra firelor.

Pasul 4: lipire

Lipire
Lipire

Acum puteți face firele de conectare din circuit securizate prin lipire.

Pasul 5: Codificare

Codificare
Codificare
Codificare
Codificare
Codificare
Codificare

// Un program de bază zilnic de testare a benzii NeoPixel.

// CELE MAI BUNE PRACTICI NEOPIXEL pentru cea mai fiabilă operare: // - Adăugați 1000 uF CAPACITOR între conexiunile + și - ale benzii NeoPixel. // - MINIMIZAȚI Lungimea cablului între placa microcontrolerului și primul pixel. // - DATA-IN a benzii NeoPixel ar trebui să treacă printr-un RESISTOR 300-500 OHM. // - EVITA conectarea NeoPixels pe un CIRCUIT LIVE. Dacă trebuie, ÎNTOTDEAUNA // conectați întâi GROUND (-), apoi +, apoi date. // - Atunci când utilizați un microcontroler de 3,3 V cu o bandă NeoPixel alimentată cu 5 V, // un CONVERTITOR DE NIVEL LOGIC pe linia de date este RECOMANDAT PUTERNIC. // (Omiterea acestora poate funcționa OK pe bancul dvs. de lucru, dar poate eșua pe teren)

#include #ifdef _AVR_ #include // Necesar pentru 16 MHz Adafruit Trinket #endif

// Care pin de pe Arduino este conectat la NeoPixels? // Pe un Trinket sau Gemma, vă sugerăm să schimbați acest lucru în 1: #define LED_PIN 6

// Câți NeoPixeli sunt atașați la Arduino? #define LED_COUNT 60

// Declarați obiectul nostru de bandă NeoPixel: banda Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Culoare albă, pentru bool implicit clicatCorect = fals; // Argumentul 1 = Numărul de pixeli din banda NeoPixel // Argumentul 2 = numărul pinului Arduino (majoritatea sunt valide) // Argumentul 3 = semnalizatoarele de tip Pixel, adăugați după cum este necesar: // NEO_KHZ800 800 KHz bitstream (majoritatea produselor NeoPixel cu / LED-uri WS2812) // NEO_KHZ400 400 KHz (clasic 'v1' (nu v2) pixeli FLORA, drivere WS2811) // NEO_GRB Pixelii sunt conectați pentru fluxul de biți GRB (majoritatea produselor NeoPixel) // NEO_RGB Pixelii sunt conectați pentru fluxul de biți RGB (v1 pixeli FLORA, nu v2) // NEO_RGBW Pixelii sunt conectați la fluxul de biți RGBW (produse NeoPixel RGBW)

// funcția setup () - rulează o dată la pornire --------------------------------

void setup () {// Aceste linii sunt special pentru a sprijini Adafruit Trinket 5V 16 MHz. // Orice altă placă, puteți elimina această parte (dar nu o va lăsa rău): #if definit (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // END al codului specific Trinket.

pinMode (A0, INPUT); strip.begin (); // INITIALIZAȚI obiectul de bandă NeoPixel (NECESAR) strip.show (); // Dezactivați toți pixelii ASAP strip.setBrightness (10); // Setați BRIGHTNESS la aproximativ 1/5 (max = 255)}

funcția // loop () - rulează în mod repetat, atâta timp cât placa este activată ---------------

bucla void () {clickedCorrectly = theaterChaseOne (culoare); if (clickedCorrect) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}

// Unele funcții proprii pentru crearea de efecte animate -----------------

// Lumini de urmărire în stil teatru. Treceți într-o culoare (valoare pe 32 de biți, // a la strip. Culoare (r, g, b) așa cum s-a menționat mai sus) și un timp de întârziere (în ms) // între cadre. bool theatreChaseOne (uint32_t color) {bool corect = fals; bool clickedWrong = false; for (int index = 0; index 800) {// valoare senzor de lumină if (index <16) {// 2 leduri înainte de sfârșit, atunci puteți face clic pe color = strip. Color (255, 0, 0); // leduri de culoare roșie clickedWrong = true; // a făcut clic greșit, apoi ledurile devin roșii} else if (! clickedWrong) {// if not greșit color = strip. Color (0, 255, 0); // leduri de culoare verde corect = adevărat; // a făcut clic corect, apoi ledurile devin verzi}} strip.clear (); strip.setPixelColor (17 - index, culoare); // lumini cu led de pe primul rând strip.setPixelColor (18 + index, culoare); // luminile cu ledul al doilea rând strip.setPixelColor (53 - index, culoare); // a treia linie cu leduri strip.show (); întârziere (300); } returnează corect; }

Pasul 6: Modificări

Schimbări
Schimbări
Schimbări
Schimbări
Schimbări
Schimbări

Am făcut câteva schimbări. În primul rând am ascuns arduino-ul, așa că ar fi mai confortabil să folosesc „mâna Rythm” și, în al doilea rând, am schimbat puțin codul. Am schimbat codul astfel încât, atunci când apăsați la momentul potrivit, culoarea să devină verde și LED-urile să se miște mai repede. Procedând astfel, LED-ul Swill devine cu 10% mai rapid decât înainte. Acest lucru face jocul mai interesant

Iată cum este acum codul:

// Un program de bază zilnic pentru testarea benzilor NeoPixel. // CELE MAI BUNE PRACTICI NEOPIXEL pentru cea mai fiabilă operare: // - Adăugați 1000 uF CAPACITOR între conexiunile + și - ale benzii NeoPixel. // - MINIMIZAȚI Lungimea cablului între placa microcontrolerului și primul pixel. // - DATA-IN a benzii NeoPixel ar trebui să treacă printr-un RESISTOR 300-500 OHM. // - EVITA conectarea NeoPixels pe un CIRCUIT LIVE. Dacă trebuie, ÎNTOTDEAUNA // conectați întâi GROUND (-), apoi +, apoi date. // - Atunci când utilizați un microcontroler de 3,3 V cu o bandă NeoPixel alimentată cu 5 V, // un CONVERTITOR DE NIVEL LOGIC pe linia de date este RECOMANDAT PUTERNIC. // (Omiterea acestora poate funcționa OK pe bancul dvs. de lucru, dar poate eșua în câmp) #include #ifdef _AVR_ #include // Necesar pentru 16 MHz Adafruit Trinket #endif // Care pin de pe Arduino este conectat la NeoPixels? // Pe un Trinket sau Gemma vă sugerăm să schimbați acest lucru în 1: #define LED_PIN 6 // Câți NeoPixeli sunt atașați la Arduino? #define LED_COUNT 60 // Declarați obiectul nostru de bandă NeoPixel: banda Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Culoare albă, pentru bool implicit clicatCorect = fals; int index = 0; intervalul int = 300; int result = 0; unsigned long previousMs = millis (); // Argumentul 1 = Numărul de pixeli din banda NeoPixel // Argumentul 2 = numărul pinului Arduino (majoritatea sunt valide) // Argumentul 3 = semnalizatoarele de tip Pixel, adăugați după cum este necesar: // NEO_KHZ800 800 KHz bitstream (majoritatea produselor NeoPixel cu / LED-uri WS2812) // NEO_KHZ400 400 KHz (clasic 'v1' (nu v2) pixeli FLORA, drivere WS2811) // NEO_GRB Pixelii sunt conectați pentru fluxul de biți GRB (majoritatea produselor NeoPixel) // NEO_RGB Pixelii sunt conectați pentru fluxul de biți RGB (v1 pixeli FLORA, nu v2) // NEO_RGBW Pixelii sunt conectați la fluxul de biți RGBW (produse NeoPixel RGBW) // funcția setup () - rulează o dată la pornire -------------------- ------------ void setup () {// Aceste linii sunt special pentru a sprijini Adafruit Trinket 5V 16 MHz. // Orice altă placă, puteți elimina această parte (dar nu o va lăsa rău): #if definit (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // END al codului specific Trinket. Serial.begin (9600); while (! Serial) {; // așteptați conectarea portului serial. Este necesar doar pentru portul USB nativ} pinMode (A0, INPUT); strip.begin (); // INITIALIZAȚI obiectul de bandă NeoPixel (NECESAR) strip.show (); // Dezactivați toți pixelii ASAP strip.setBrightness (10); // Setați BRIGHTNESS la aproximativ 1/5 (max = 255)} // funcția loop () - rulează în mod repetat atâta timp cât placa este pe --------------- bucla nulă () {unsigned long currentMs = millis (); // Obținerea valorii int a timpului actual = analogRead (A0); // Citirea senzorului de lumină curent dacă (valoare> 900 && rezultat == 0) {// Dacă senzorul este apăsat și nu a fost înregistrat încă niciun rezultat, declanșați captura rezultatului dacă (index = interval) {// Verificați dacă curentul bucla depășește intervalul anteriorMs = currentMs; // Setați noul interval la ora curentă + indicele intervalului = = 1; // Setați ledurile cu un pas mai departe în buclă if (index> 17) {// Trigger end of loop handling index = 0; if (result == 2) {// Pe un interval de rezultat corect = (int) max ((interval * 0,95), 50); // Accelerați cu 10%, până la 50ms interval / culoare = strip. Color (0, 255, 0); // Setați ledurile la verde} else if (result == 1) {// Pe un interval de rezultat incorect = 300; // Resetați intervalul de culoare = strip. Color (255, 0, 0); // Setați ledurile pe roșu} else {// Pe niciun rezultat capturat culoare = strip. Color (255, 0, 0); // Setați ledurile pe roșu} rezultat = 0; // Resetați rezultatul pentru următoarea buclă} theaterChaseOne (culoare, index); // Aprindeți ledurile pentru afișare. }} // Câteva funcții proprii pentru crearea efectelor animate ----------------- // Lumini de urmărire în stil teatru-cadru. Treceți într-o culoare (valoare pe 32 de biți, // a la strip. Culoare (r, g, b) așa cum s-a menționat mai sus) și un timp de întârziere (în ms) // între cadre. void theatreChaseOne (uint32_t color, int index) {strip.clear (); strip.setPixelColor (17 - index, culoare); // lumini cu led de pe primul rând strip.setPixelColor (18 + index, culoare); // luminile cu ledul al doilea rând strip.setPixelColor (53 - index, culoare); // a treia linie cu leduri strip.show (); }

Recomandat: