Obsah:
Video: Rytmus rúk: 6 krokov
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Táto cyberglove je o tom, správny krok v správny okamih.
Svetlá prechádzajú z vašej ruky (lakťa) do vašej ruky, a keď sa vám svetlá dostanú do ruky, musíte pritlačiť prsty na mini fotobunku.
Ak v správnom momente stlačíte ruku na mini fotobunku, diódy sa rozsvietia na zeleno. Ak tomu tak nie je, LED začervená.
Krok 1: Zbierajte materiály
- Rukavica
- Fabric, aby rukavice dlhšie
- LED pás WS2812B
- Drôty
- Arduino
- Mini fotosell
Krok 2: Vytvorenie obvodov
Najprv pripojte LED pás k arduinu. Môžete to urobiť pripojením +5v k 5v na arduino. Din musí byť pripojený k A0 na arduino a GND musí byť pripojený k GND na arduino.
Mini fotobunku musíte tiež pripojiť k arduinu pripojením k 5V vodiču z LED diódy a z rovnakého zdroja pomocou drôtu na PIN 6 na arduine. Druhá strana mini fotobunky musí byť pripojená k vodiču GND z LED pásky
Krok 3: Navrhovanie rukavice
Rukavice musia mať správnu veľkosť, aby sa zmestili prúžky viedli. LED diódy musia byť zarovnané, aby bol príjemnejší na pohľad.
Pri tejto hre musíte použiť ruku a chcete, aby ste sa mohli voľne pohybovať. To možno dosiahnuť tým, že Arduino na rukavicu. Na pripevnenie arduina k rukavici som použil suchý zips ako zapínanie. Potom, aby ste dosiahli väčšiu stabilitu, môžete okolo rukavice a okolo arduina položiť lano.
Mini fotobunka bola všitá dovnútra rukavice, takže zostane na svojom mieste.
V neposlednom rade budete musieť skryť drôty, aby to vyzeralo lepšie. To sa dá dosiahnuť látkou, ktorá bude prišitá na vrch drôtov.
Krok 4: Spájkovanie
Teraz môžete spájacie vodiče z obvodu zaistiť spájkovaním.
Krok 5: Kódovanie
// Základný každodenný testovací program pásikov NeoPixel.
// NAJLEPŠIE POSTUPY NEOPIXELU pre najspoľahlivejšiu prevádzku: // - Pridajte 1000 uF KAPACITORU medzi spoje + a - na páse NeoPixel. // - MINIMALIZUJTE DĹŽKU zapojenia medzi doskou mikrokontroléra a prvým pixelom. //-DATA-IN prúžku NeoPixelu by mal prechádzať cez 300-500 OHM odpor. // - VYHNITE SA prepojeniu NeoPixelov na ŽIVOM OBVODE. Ak musíte, VŽDY // najskôr pripojte GROUND (-), potom +, potom dáta. //-Pri použití 3,3 V mikrokontroléra s 5V napájaným pásikom NeoPixel // LOGIC-LEVEL CONVERTER na dátovom vedení DOPORUČUJEME. // (Ich preskočenie môže na vašom pracovnom stole fungovať dobre, ale v poli môže zlyhať)
#include #ifdef _AVR_ #include // Vyžadované pre 16 MHz Adafruit Trinket #endif
// Ktorý pin na Arduine je pripojený k NeoPixels? // Na cetke alebo Gemme navrhujeme zmeniť toto na 1: #define LED_PIN 6
// Koľko NeoPixels sú pripojené k Arduino? #define LED_COUNT 60
// Deklarujte náš objekt pásu NeoPixel: pás Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t farba = pásik. Farba (127, 127, 127); // Biela farba, predvolene bool clickedCorrectly = false; // Argument 1 = počet pixelov v páse NeoPixel // Argument 2 = počet pinov Arduino (väčšina z nich je platná) // Argument 3 = vlajky typu pixelov, sčítajte podľa potreby: // NEO_KHZ800 800 KHz bitstream (väčšina produktov NeoPixel w/ LED WS2812) // NEO_KHZ400 400 KHz (klasické „v1“(nie v2) pixely FLORA, ovládače WS2811) // Pixely NEO_GRB sú zapojené pre bitový tok GRB (väčšina produktov NeoPixel) // Pixely NEO_RGB sú zapojené pre bitový tok RGB (v1 pixelov FLORA, nie v2) // NEO_RGBW Pixely sú zapojené pre bitový tok RGBW (produkty NeoPixel RGBW)
// funkcia setup () - prebieha raz pri štarte --------------------------------
void setup () {// Tieto linky sú konkrétne na podporu Adafruit Trinket 5V 16 MHz. // Akúkoľvek inú dosku môžete odstrániť, ale nie je na škodu ju ponechať: #if defined (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // END of Trinket-špecifický kód.
pinMode (A0, INPUT); strip.begin (); // INICIALIZUJTE objekt objektu NeoPixel (POVINNÝ) strip.show (); // VYPNITE všetky pixely ASAP strip.setBrightness (10); // Nastavte BRIGHTNESS na približne 1/5 (max = 255)}
// funkcia loop ()-beží opakovane, pokiaľ je doska zapnutá ---------------
void loop () {clickedCorrectly = TheaterChaseOne (farba); if (clickedSprávne) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}
// Niektoré naše vlastné funkcie na vytváranie animovaných efektov -----------------
// Divadlo-stan v štýle naháňa svetla. Prejdite farbou (32-bitová hodnota, // pásik la. Farba (r, g, b), ako je uvedené vyššie), a čas oneskorenia (v ms) // medzi snímkami. bool TheaterChaseOne (farba uint32_t) {bool correct = false; BOOL clickedWrong = false; pre (int index = 0; index 800) {// hodnota svetelného senzora if (index <16) {// 2 LED pred koncom, potom môžete kliknúť na color = strip. Color (255, 0, 0); // červená LED dióda klikla Nesprávne = true; // klikli zle, potom diódy sčervenali} else if (! clickedWrong) {// ak nie zle color = strip. Color (0, 255, 0); // farba zelená LED diódy korigovať = true; // klikli ste správne, potom sa LED diódy zazelenajú}} strip.clear (); strip.setPixelColor (17 - index, farba); // prvý riadok LED svetiel strip.setPixelColor (18 + index, farba); // druhý riadok LED svetiel strip.setPixelColor (53 - index, farba); // tretia rada led svetiel strip.show (); oneskorenie (300); } Vráti správne; }
Krok 6: Zmeny
Urobil som nejaké zmeny. Za prvé som arduino schoval, takže by bolo pohodlnejšie používať „ruku Rythma“a za druhé som trochu zmenil kód. Zmenil som kód tak, aby keď v správnom momente stlačíte, farba sa zmení na zelenú a LED diódy sa pohybujú rýchlejšie. Tým LED pomyje stala pred 10% rýchlejší ako. Vďaka tomu je hra zaujímavejšia
Takto vyzerá kód teraz:
// Základné každodenné NeoPixel testovací prúžok programu. // NAJLEPŠIE POSTUPY NEOPIXELU pre najspoľahlivejšiu prevádzku: // - Pridajte 1000 uF KAPACITORA medzi spoje + a - na páse NeoPixel. // - MINIMALIZUJTE DĹŽKU zapojenia medzi doskou mikrokontroléra a prvým pixelom. //-DATA-IN prúžku NeoPixelu by mal prechádzať cez 300-500 OHM odpor. // - VYHNITE SA prepojeniu NeoPixelov na ŽIVOM OBVODE. Ak musíte, VŽDY // najskôr pripojte GROUND (-), potom +, potom dáta. //-Pri použití 3,3 V mikrokontroléra s 5V napájaným pásikom NeoPixel // LOGIC-LEVEL CONVERTER na dátovom vedení DOPORUČUJEME. // (Ich preskočenie môže na vašom pracovnom stole fungovať dobre, ale v teréne môže zlyhať) #include #ifdef _AVR_ #include // Vyžadované pre 16 MHz Adafruit Trinket #endif // Ktorý pin na Arduine je pripojený k NeoPixels? // Na Trinket alebo Gemma navrhujeme zmeniť toto na 1: #define LED_PIN 6 // Koľko NeoPixelov je pripojených k Arduinu? #define LED_COUNT 60 // Deklarujte náš objekt pásu NeoPixel: pás Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t farba = pásik. Farba (127, 127, 127); // Biela farba, predvolene bool clickedCorrectly = false; int index = 0; int interval = 300; int výsledok = 0; unsigned long previousMs = Millis (); // Argument 1 = počet pixelov v páse NeoPixel // Argument 2 = počet pinov Arduino (väčšina z nich je platná) // Argument 3 = vlajky typu pixelov, sčítajte podľa potreby: // NEO_KHZ800 800 KHz bitstream (väčšina produktov NeoPixel w/ LED WS2812) // NEO_KHZ400 400 KHz (klasické „v1“(nie v2) pixely FLORA, ovládače WS2811) // Pixely NEO_GRB sú zapojené pre bitový tok GRB (väčšina produktov NeoPixel) // Pixely NEO_RGB sú zapojené pre bitový tok RGB (v1 pixelov FLORA, nie v2) // NEO_RGBW Pixely sú zapojené pre bitový tok RGBW (produkty NeoPixel RGBW) // funkcia setup ()-spustí sa raz pri štarte -------------------- ------------ void setup () {// Tieto riadky sú určené špeciálne na podporu Adafruit Trinket 5V 16 MHz. // Akúkoľvek inú dosku môžete odstrániť, ale nie je na škodu ju ponechať: #if defined (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // END kódu špecifického pre Trinket. Serial.begin (9600); while (! Serial) {; // počkajte na pripojenie sériového portu. Potrebné iba pre natívny port USB} pinMode (A0, INPUT); strip.begin (); // INICIALIZUJTE objekt objektu NeoPixel (POVINNÝ) strip.show (); // VYPNITE všetky pixely ASAP strip.setBrightness (10); // Nastavte BRIGHTNESS na asi 1/5 (max = 255)} // funkcia loop ()-beží opakovane, pokiaľ je doska zapnutá --------------- void loop () {unsigned long currentMs = millis (); // Získanie aktuálnej hodnoty času int = analogRead (A0); // Čítanie aktuálneho svetelného senzora if (hodnota> 900 && result == 0) {// Ak je senzor stlačený a zatiaľ nebol zaznamenaný žiadny výsledok, spustite zachytenie výsledku if (index = interval) {// Skontrolujte, či je aktuálny slučka presahuje interval previousMs = currentMs; // nastaviť nový interval na aktuálny čas + intervale indexu + = 1; // Nastavte diódy v slučke o krok ďalej, ak (index> 17) {// Spustí koniec spracovania slučky index = 0; if (result == 2) {// Na správnom výsledku interval = = (int) max ((interval * 0,95), 50); // Zrýchlenie o 10%, interval až 50 ms/ farba = pásik. Farba (0, 255, 0); // Nastavte diódy na zelené} else if (result == 1) {// Na nesprávnom výsledku = 300; // Reset intervalu color = strip. Color (255, 0, 0); // Nastavte diódy na červené} else {// Žiadny výsledok zachytená farba = pás. Color (255, 0, 0); // Nastaviť LED diódy na červené} result = 0; // Resetovanie výsledku pre ďalšiu slučku} TheaterChaseOne (farba, index); // rozsvieti LED pre indikáciu. }} // Niektoré vlastné funkcie na vytváranie animovaných efektov ----------------- // Prenasledujúce svetlá v štýle divadla. Prejdite farbou (32-bitová hodnota, // a la pásik. Farba (r, g, b) ako je uvedené vyššie) a čas oneskorenia (v ms) // medzi snímkami. neplatné divadloChaseOne (uint32_t farba, int index) {strip.clear (); strip.setPixelColor (17 - index, farba); // prvý riadok LED svetiel strip.setPixelColor (18 + index, farba); // druhý riadok LED svetiel strip.setPixelColor (53 - index, farba); // tretia rada led svetiel strip.show (); }