Mündəricat:

Ritm Əl: 6 addım
Ritm Əl: 6 addım

Video: Ritm Əl: 6 addım

Video: Ritm Əl: 6 addım
Video: Ritm reqsi oyrenmek #6 2024, Noyabr
Anonim
Ritm Əl
Ritm Əl

Bu cyberglove, doğru zamanda doğru hərəkəti etməkdir.

İşıqlar qolunuzdan (dirsəyinizdən) əlinizə gedir və işıqlar əlinizə çatanda barmaqlarınızı mini fotoselə basmalısınız.

Əlinizi mini fotoselə doğru anda basarsanız, ledlər yaşıllaşır. Əks təqdirdə, ledlər qırmızıya çevrilir.

Addım 1: Material toplayın

  • Bir əlcək
  • Əlcəyi daha uzun etmək üçün parça
  • WS2812B LED şeridi
  • Tellər
  • Arduino
  • Mini foto satış

Addım 2: Dövrə qurmaq

Dövrlər qurmaq
Dövrlər qurmaq
Dövrlər qurmaq
Dövrlər qurmaq

Əvvəlcə led şeridi arduinoya bağlayın. Arduino üzərindəki +5v -ni 5v -ə bağlayaraq bunu edə bilərsiniz. Din arduinoda A0 -a, GND isə arduino -da GND -yə bağlanmalıdır.

Ayrıca, mini fotoselini arduino -ya 5v telinə led zolaqdan və eyni mənbədən arduino -da PIN 6 -ya bağlayaraq bağlamalısınız. Mini fotoselin digər tərəfi led şeriddən GND telinə bağlanmalıdır

Addım 3: Əlcəyin dizaynı

Əlcək dizaynı
Əlcək dizaynı

Əlcək, led şeritlərə uyğun ölçüdə olmalıdır. Ledlər daha həzz almaq üçün hizalanmalıdır.

Bu oyun üçün qolundan istifadə etməlisən və sərbəst hərəkət etmək istəyirsən. Bu, arduino əlcək taxaraq həyata keçirilə bilər. Arduinonu əlcəyə yapışdırmaq üçün bərkidici kimi cırtdan istifadə etdim. Daha çox sabitlik əldə etmək üçün əlcəyin ətrafına və arduinonun ətrafına bir ip qoya bilərsiniz.

Mini fotosel əlcəyin içərisinə tikilmişdir, belə ki, yerində qalacaq.

Nəhayət daha yaxşı görünməsi üçün telləri gizlətməlisiniz. Bu, tellərin üstünə tikiləcək parça ilə edilə bilər.

Addım 4: Lehimləmə

Lehimləmə
Lehimləmə

İndi lehimlə bağlayıcı telləri dövrədən etibarlı edə bilərsiniz.

Addım 5: Kodlaşdırma

Kodlaşdırma
Kodlaşdırma
Kodlaşdırma
Kodlaşdırma
Kodlaşdırma
Kodlaşdırma

// Əsas gündəlik NeoPixel zolaq test proqramı.

// Ən etibarlı əməliyyat üçün NEOPIXEL ƏN İYİ TƏCRÜBƏLƏR: // - NeoPixel şeridinin + və - əlaqələri arasında 1000 uF CAPACITOR əlavə edin. // - mikrokontrolör lövhəsi ilə ilk piksel arasındakı kabel uzunluğunu minimuma endirin. //-NeoPixel zolağının DATA-IN 300-500 OHM Rezistorundan keçməlidir. // - NeoPixelləri CANLI bir dövrə bağlamaqdan çəkinin. Lazım gələrsə, DAİMA // əvvəlcə GROUND (-), sonra +, sonra məlumatları birləşdirin. //-5V gücündə NeoPixel şeridi olan 3.3V mikrokontrolördən istifadə edərkən // məlumat xəttində MƏNTİQİ SƏVİYYƏ DÖYÜŞTÜRÜCÜ TƏCVİQ EDİLİR. // (Bunları atmaq iş masanızda yaxşı işləyə bilər, ancaq sahədə uğursuz ola bilər)

#include #ifdef _AVR_ #include // 16 MHz Adafruit Biblo üçün tələb olunur #endif

// Arduino -da hansı pin NeoPixel -ə bağlıdır? // Bir Əşyədə və ya Gemmada bunu 1 -ə dəyişdirməyi təklif edirik: #define LED_PIN 6

// Arduino -ya neçə NeoPixel qoşulub? #LED_COUNT 60 təyin edin

// NeoPixel şeridi obyektimizi elan edin: Adafruit_NeoPixel şeridi (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Ağ rəng, default bool üçün tıklandığındaDüzgün = yanlış; // Arqument 1 = NeoPixel şeridindəki piksellərin sayı // Arqument 2 = Arduino pin nömrəsi (əksəriyyəti etibarlıdır) // Arqument 3 = Piksel tipli bayraqlar, lazım olduqda əlavə edin: // NEO_KHZ800 800 KHz bit axını (əksər NeoPixel məhsulları/ WS2812 LEDləri) // NEO_KHZ400 400 KHz (klassik 'v1' (v2 deyil) FLORA pikselləri, WS2811 sürücüləri) // NEO_GRB Piksellər GRB bit axını üçün bağlanmışdır (əksər NeoPixel məhsulları) // NEO_RGB Piksellər RGB bit axını üçün bağlanmışdır (v1 FLORA pikselləri), v2 deyil) // NEO_RGBW Pikselləri RGBW bit axını (NeoPixel RGBW məhsulları) üçün bağlanmışdır

// setup () funksiyası-başlanğıcda bir dəfə çalışır --------------------------------

void setup () {// Bu xətlər xüsusi olaraq Adafruit Trinket 5V 16 MHz -i dəstəkləmək üçündür. // İstənilən digər lövhə, bu hissəni silə bilərsiniz (ancaq zərər vermədən): #if müəyyən edilmişsə (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinket-ə məxsus kodun SONU.

pinMode (A0, GİRİŞ); strip.begin (); // NeoPixel zolaq obyektini (TƏLƏB EDİR) strip.show () başlatın; // ASAP strip.setBrightness (10) ən qısa müddətdə bütün pikselləri söndürün; // BRIGHTNESS -i təxminən 1/5 (maksimum = 255) olaraq təyin edin}

// loop () funksiyası-lövhə açıq olduğu müddətdə dəfələrlə işləyir ---------------

void loop () {clickedClaimly = teatrChaseOne (rəng); if (tıklandıqda Düzgün) {color = strip. Color (0, 255, 0); } başqa {color = strip. Color (255, 0, 0); }}

// Cizgi effektləri yaratmaq üçün bəzi funksiyalarımız -----------------

// Teatr-marquee üslubunda işıqları təqib etmək. Rəng (32 bitlik dəyər, // a la strip. Color (r, g, b) yuxarıda qeyd edildiyi kimi) və çərçivələr arasında gecikmə müddəti (ms olaraq) // keçin. bool teatrChaseOne (uint32_t rəng) {bool doğru = yanlış; bool clickedWrong = yalan; for (int index = 0; index 800) {// dəyər işığı sensoru, əgər (indeks <16) {// 2 ədəd bitməzdən əvvəl işıqlandırırsa, color = strip. Color (255, 0, 0); // qırmızı rəngli ledlər clickedWrong = doğru; // səhv tıklandıqda LEDlər qırmızıya çevrilir} başqa halda (! clickedWrong) {// səhv deyilsə color = strip. Color (0, 255, 0); // yaşıl rəngli ledlər doğru = doğru; // düzgün tıklandıqdan sonra ledlər yaşıl olur}} strip.clear (); strip.setPixelColor (17 - indeks, rəng); // birinci sıra led işıqlar strip.setPixelColor (18 + indeks, rəng); // ikinci sıra led işıqlar strip.setPixelColor (53 - indeks, rəng); // üçüncü sıra led işıqlar strip.show (); gecikmə (300); } düzgün qayıt; }

Addım 6: Dəyişikliklər

Dəyişikliklər
Dəyişikliklər
Dəyişikliklər
Dəyişikliklər
Dəyişikliklər
Dəyişikliklər

Bəzi dəyişikliklər etdim. Birincisi, "Ritm əlini" istifadə etməyimin daha rahat olması üçün arduinonu gizlətdim, ikincisi kodu bir az dəyişdim. Kodu elə dəyişdim ki, lazımi anda basdığınız zaman rəng yaşıllaşır və LEDlər daha sürətli hərəkət edir. Beləliklə, LED Swill əvvəlkindən 10% daha sürətli olur. Bu oyunu daha maraqlı edir

Kod indi belədir:

// Əsas gündəlik NeoPixel zolaq test proqramı. // Ən etibarlı əməliyyat üçün NEOPIXEL ƏN İYİ TƏCRÜBƏLƏR: // - NeoPixel şeridinin + və - əlaqələri arasında 1000 uF CAPACITOR əlavə edin. // - mikrokontrolör lövhəsi ilə ilk piksel arasındakı kabel uzunluğunu minimuma endirin. //-NeoPixel zolağının DATA-IN 300-500 OHM Rezistorundan keçməlidir. // - NeoPixelləri CANLI bir dövrə bağlamaqdan çəkinin. Lazım gələrsə, DAİMA // əvvəlcə GROUND (-), sonra +, sonra məlumatları birləşdirin. //-5V gücündə NeoPixel şeridi olan 3.3V mikrokontrolördən istifadə edərkən // məlumat xəttində MƏNTİQİ SƏVİYYƏ DÖYÜŞTÜRÜCÜ TƏCVİQ EDİLİR. // (Bunları atlamaq iş masanızda yaxşı işləyə bilər, ancaq sahədə uğursuz ola bilər) #include #ifdef _AVR_ #include // 16 MHz Adafruit Biblo #endif üçün tələb olunur // Arduino -da hansı pin NeoPixel -ə bağlıdır? // Bir Əşyədə və ya Gemmada bunu 1 -ə dəyişməyi təklif edirik: #define LED_PIN 6 // Arduino -ya neçə NeoPixel bağlıdır? #define LED_COUNT 60 // NeoPixel şeridi obyektimizi elan edin: Adafruit_NeoPixel şeridi (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Ağ rəng, defolt bool üçün tıklandığındaDüzgün = yanlış; int indeksi = 0; int aralığı = 300; int nəticə = 0; işarəsiz uzun əvvəlkiMs = millis (); // Arqument 1 = NeoPixel şeridindəki piksellərin sayı // Arqument 2 = Arduino pin nömrəsi (əksəriyyəti etibarlıdır) // Arqument 3 = Piksel tipli bayraqlar, lazım olduqda əlavə edin: // NEO_KHZ800 800 KHz bit axını (əksər NeoPixel məhsulları/ WS2812 LEDləri) // NEO_KHZ400 400 KHz (klassik 'v1' (v2 deyil) FLORA pikselləri, WS2811 sürücüləri) // NEO_GRB Piksellər GRB bit axını üçün bağlanmışdır (əksər NeoPixel məhsulları) // NEO_RGB Piksellər RGB bit axını üçün bağlanmışdır (v1 FLORA pikselləri), v2 deyil) // NEO_RGBW Pikselləri RGBW bit axını (NeoPixel RGBW məhsulları) üçün qurulmuşdur // setup () funksiyası-başlanğıcda bir dəfə işləyir -------------------- ------------ void setup () {// Bu xətlər xüsusi olaraq Adafruit Trinket 5V 16 MHz-i dəstəkləmək üçündür. // İstənilən digər lövhə, bu hissəni silə bilərsiniz (ancaq zərər vermədən): #if müəyyən edilmişsə (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinket-ə məxsus kodun SONU. Serial.begin (9600); while (! Serial) {; // serial portunun bağlanmasını gözləyin. Yalnız yerli USB portu üçün lazımdır} pinMode (A0, INPUT); strip.begin (); // NeoPixel zolaq obyektini (TƏLƏB EDİR) strip.show () başlatın; // ASAP strip.setBrightness (10) ən qısa zamanda bütün pikselləri söndürün; // BRIGHTNESS-i təxminən 1/5 olaraq təyin edin (max = 255)} // loop () funksiyası-lövhə açıq olduğu müddətdə dəfələrlə işləyir --------------- void loop () {işarəsiz uzun currentMs = millis (); // Cari vaxtın int dəyərinin alınması = analogRead (A0); // Əgər (dəyər> 900 && nəticə == 0) {// Sensor basılarsa və hələ heç bir nəticə qeydə alınmamışdırsa, indeks nəticəsini (indeks = interval) ilə oxudun {// Cərəyanın olub olmadığını yoxlayın döngü əvvəlkiMs = cariMs aralığını aşır; // Yeni aralığı cari vaxt + interval indeksi + = 1 olaraq təyin edin; // LEDləri döngədə bir addım daha irəli qoyun, əgər (indeks> 17) {// Döngənin işlənmə sonu indeksi = 0; if (nəticə == 2) {// Doğru nəticə aralığında = (int) max ((interval * 0,95), 50); // 50ms aralığına qədər 10%sürətləndirin/ color = strip. Color (0, 255, 0); // LEDləri yaşıl} olaraq təyin edin} else if (result == 1) {// Yanlış nəticə intervalında = 300; // color = strip. Color (255, 0, 0) intervalını sıfırlayın; // Ledləri qırmızıya təyin edin} başqa {// Nəticə alınmadıqda color = strip. Color (255, 0, 0); // LEDləri qırmızıya təyin edin} result = 0; // Növbəti döngə üçün nəticəni sıfırlayın} TheaterChaseOne (rəng, indeks); // Ekran üçün ledləri yandırın. }} // Cizgi effektləri yaratmaq üçün özümüzə aid bəzi funksiyalar ----------------- // Teatr-marquee üslubunda işıqları təqib etmək. Rəng (32 bitlik dəyər, // a la strip. Color (r, g, b) yuxarıda qeyd edildiyi kimi) və çərçivələr arasında gecikmə müddəti (ms olaraq) // keçin. void teatrChaseOne (uint32_t rəng, int indeksi) {strip.clear (); strip.setPixelColor (17 - indeks, rəng); // birinci sıra led işıqlar strip.setPixelColor (18 + indeks, rəng); // ikinci sıra led işıqlar strip.setPixelColor (53 - indeks, rəng); // üçüncü sıra led işıqlar strip.show (); }

Tövsiyə: