İçindekiler:

Ritim El: 6 Adım
Ritim El: 6 Adım

Video: Ritim El: 6 Adım

Video: Ritim El: 6 Adım
Video: 6 ADIM AT & 1 ZIPLA | Ritim Çalışması 2024, Temmuz
Anonim
Ritim El
Ritim El

Bu siber eldiven, doğru anda doğru hareketi yapmakla ilgilidir.

Işıklar kolunuzdan (dirsek) elinize gidiyor ve ışıklar elinize ulaştığında mini fotoselin üzerine parmaklarınızı basmanız gerekiyor.

Doğru anda mini fotosele elinizi basarsanız ledler yeşile döner. Değilse, ledler kırmızıya döner.

Adım 1: Materyalleri Toplayın

  • Bir eldiven
  • Eldiveni daha uzun yapmak için kumaş
  • WS2812B LED şerit
  • teller
  • Arduino
  • Mini fotosel

Adım 2: Devreler Yapmak

Devre Yapımı
Devre Yapımı
Devre Yapımı
Devre Yapımı

Önce led şeridi arduinoya bağlayın. Bunu +5v'yi arduino'daki 5v'ye bağlayarak yapabilirsiniz. Din, arduinodaki A0'a ve GND, arduinodaki GND'ye bağlı olmalıdır.

Ayrıca mini fotoseli led şeritten 5v kabloya bağlayarak ve aynı kaynaktan bir tel ile arduino üzerinde PIN 6'ya bağlayarak arduinoya bağlamanız gerekir. Mini fotoselin diğer tarafı led şeritten GND teline bağlanmalıdır.

Adım 3: Eldiveni Tasarlamak

Eldiveni Tasarlamak
Eldiveni Tasarlamak

Eldiven, led şeritlere uyacak şekilde doğru boyutta olmalıdır. Ledlerin daha keyifli görünmesi için hizalanması gerekir.

Bu oyun için kolunuzu kullanmanız gerekiyor ve özgürce hareket edebilmek istiyorsunuz. Bu, arduino'yu eldivenin üzerine koyarak gerçekleştirilebilir. Arduino'yu eldivene yapıştırmak için tutturucu olarak cırt cırt kullandım. Daha sonra daha fazla stabilite sağlamak için eldivenin etrafına ve arduino'nun etrafına bir ip koyabilirsiniz.

Eldivenin içine mini fotosel dikilerek yerinde duracaktır.

Son olarak, daha iyi görünmesi için kabloları gizlemeniz gerekir. Bu, tellerin üzerine dikilecek kumaşla yapılabilir.

Adım 4: Lehimleme

Lehimleme
Lehimleme

Artık devredeki bağlantı tellerini lehimleyerek güvenli hale getirebilirsiniz.

Adım 5: Kodlama

kodlama
kodlama
kodlama
kodlama
kodlama
kodlama

// Günlük temel bir NeoPixel şerit test programı.

// NEOPİKSEL EN İYİ UYGULAMALAR En güvenilir çalışma için: // - NeoPixel şeridin + ve - bağlantıları arasına 1000 uF KAPASİTÖR ekleyin. // - Mikrodenetleyici kartı ile birinci piksel arasındaki KABLO UZUNLUĞUNU KÜÇÜLDÜ. // - NeoPixel şeridinin VERİ GİRİŞİ, 300-500 OHM DİRENCİ içinden geçmelidir. // - NeoPixel'leri CANLI DEVREYE bağlamaktan KAÇININ. Gerekirse, HER ZAMAN // önce GROUND (-), ardından +, ardından verileri bağlayın. // - 5V'luk NeoPixel şeritli bir 3.3V mikrodenetleyici kullanırken, // veri hattında bir MANTIK DÜZEYİ DÖNÜŞTÜRÜCÜ ŞİDDETLE TAVSİYE EDİLİR. // (Bunları atlamak tezgahınızda işe yarayabilir ancak sahada başarısız olabilir)

#include #ifdef _AVR_ #include // 16 MHz Adafruit Biblo için gereklidir #endif

// Arduino'daki hangi pin NeoPixels'e bağlı? // Bir Biblo veya Gemma'da bunu 1 olarak değiştirmenizi öneririz: #define LED_PIN 6

// Arduino'ya kaç NeoPiksel bağlı? #define LED_COUNT 60

// NeoPixel şerit nesnemizi bildirin: Adafruit_NeoPixel şeridi(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color(127, 127, 127); // Beyaz renk, varsayılan bool için tıklandıDoğru = yanlış; // Argüman 1 = NeoPixel şeridindeki piksel sayısı // Argüman 2 = Arduino pin numarası (çoğu geçerlidir) // Argüman 3 = Piksel tipi bayraklar, gerektiği gibi ekleyin: // NEO_KHZ800 800 KHz bit akışı (çoğu NeoPixel ürünü w/ WS2812 LED'ler) // NEO_KHZ400 400 KHz (klasik 'v1' (v2 değil) FLORA pikselleri, WS2811 sürücüleri) // NEO_GRB Pikselleri, GRB bit akışı (çoğu NeoPixel ürünü) için kablolanmıştır // NEO_RGB Pikseller, RGB bit akışı (v1 FLORA pikselleri) için kablolanmıştır, v2) değil // NEO_RGBW Pikseller RGBW bit akışı için kablolanmıştır (NeoPixel RGBW ürünleri)

// setup() işlevi -- başlangıçta bir kez çalışır --------------------------------

void setup() { // Bu satırlar özellikle Adafruit Biblo 5V 16 MHz'i desteklemek içindir. // Başka herhangi bir kart, bu bölümü kaldırabilirsiniz (ancak bırakmanın zararı olmaz): #ifdefined(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // Bibloya özel kodun sonu.

pinMode(A0, GİRİŞ); strip.begin(); // BAŞLAT NeoPixel şerit nesnesi (GEREKLİ) strip.show(); // En kısa sürede tüm pikselleri KAPATIN strip.setBrightness(10); // PARLAKLIK'ı yaklaşık 1/5'e ayarlayın (maks = 255) }

// loop() işlevi -- kart açık olduğu sürece tekrar tekrar çalışır ---------------

void loop() { tıklandıDoğru = theatreChaseOne(renk); if (Doğru tıklandı) { color = strip. Color(0, 255, 0); } else { color = strip. Color(255, 0, 0); } }

// Animasyonlu efektler oluşturmak için kendimize ait bazı işlevler -----------------

// Tiyatro-marquee tarzı takip ışıkları. Çerçeveler arasında bir renk (32-bit değer, // a la strip. Color(r, g, b) yukarıda belirtildiği gibi) ve bir gecikme süresi (ms cinsinden) // iletin. bool TheaterChaseOne(uint32_t color) { bool doğru = yanlış; bool tıklandıYanlış = yanlış; for (int index = 0; index 800) { //değer ışık sensörü if (index < 16) { //2 led bitmeden color = strip. Color(255, 0, 0); //kırmızı renkli ledler tıklandıYanlış = doğru; //yanlış tıklandığında ledler kırmızı olur } else if (!clickedWrong) { //yanlış değilse renk = strip. Color(0, 255, 0); //yeşil renkli ledler doğru = doğru; //düzelt'e tıkladıktan sonra ledler yeşile döner } } strip.clear(); strip.setPixelColor(17 - dizin, renk); //ilk sıra led ışıklar strip.setPixelColor(18 + indeks, renk); //ikinci sıra led ışıklar strip.setPixelColor(53 - indeks, renk); //üçüncü sıra led ışıklar strip.show(); gecikme(300); } doğru dönüş; }

6. Adım: Değişiklikler

Değişiklikler
Değişiklikler
Değişiklikler
Değişiklikler
Değişiklikler
Değişiklikler

Bazı değişiklikler yaptım. Öncelikle "Rythm hand"ı kullanmak daha rahat olsun diye arduinoyu sakladım ve ikinci olarak kodu biraz değiştirdim. Kodu, doğru anda bastığınızda renk yeşil olacak ve LED'ler daha hızlı hareket edecek şekilde değiştirdim. Bunu yaparak LED Swill öncekine göre %10 daha hızlı hale gelir. Bu, oyunu daha ilginç hale getirir

Bu kod şimdi nasıl:

// Günlük temel bir NeoPixel şerit test programı. // NEOPİKSEL EN İYİ UYGULAMALAR En güvenilir çalışma için: // - NeoPixel şeridin + ve - bağlantıları arasına 1000 uF KAPASİTÖR ekleyin. // - Mikrodenetleyici kartı ile birinci piksel arasındaki KABLO UZUNLUĞUNU MİNİMİZE EDİN. // - NeoPixel şeridinin VERİ GİRİŞİ, 300-500 OHM DİRENCİ içinden geçmelidir. // - NeoPixel'leri CANLI DEVREYE bağlamaktan KAÇININ. Gerekirse, HER ZAMAN // önce GROUND (-), ardından +, ardından verileri bağlayın. // - 5V'luk NeoPixel şeritli bir 3.3V mikrodenetleyici kullanırken, // veri hattında bir MANTIK DÜZEYİ DÖNÜŞTÜRÜCÜ ŞİDDETLE TAVSİYE EDİLİR. // (Bunları atlamak tezgahınızda işe yarayabilir ancak sahada başarısız olabilir) #include #ifdef _AVR_ #include // 16 MHz Adafruit Biblo için gerekli #endif // Arduino'daki hangi pin NeoPixels'e bağlı? // Bir Biblo veya Gemma'da bunu 1'e değiştirmenizi öneririz: #define LED_PIN 6 // Arduino'ya kaç NeoPiksel bağlı? #define LED_COUNT 60 // NeoPixel şerit nesnemizi bildirin: Adafruit_NeoPixel şeridi(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color(127, 127, 127); // Beyaz renk, varsayılan bool için tıklandıDoğru = yanlış; int dizin = 0; int aralık = 300; int sonuç = 0; imzasız uzun öncekiMs = millis(); // Argüman 1 = NeoPixel şeridindeki piksel sayısı // Argüman 2 = Arduino pin numarası (çoğu geçerlidir) // Argüman 3 = Piksel tipi bayraklar, gerektiği gibi ekleyin: // NEO_KHZ800 800 KHz bit akışı (çoğu NeoPixel ürünü w/ WS2812 LED'ler) // NEO_KHZ400 400 KHz (klasik 'v1' (v2 değil) FLORA pikselleri, WS2811 sürücüleri) // NEO_GRB Pikselleri, GRB bit akışı (çoğu NeoPixel ürünü) için kablolanmıştır // NEO_RGB Pikseller, RGB bit akışı (v1 FLORA pikselleri) için kablolanmıştır, v2) değil // NEO_RGBW Pikseller RGBW bit akışı (NeoPixel RGBW ürünleri) için kablolanmıştır // setup() işlevi -- başlangıçta bir kez çalışır -------------------- ------------ void setup() { // Bu satırlar özellikle Adafruit Biblo 5V 16 MHz'i desteklemek içindir. // Başka herhangi bir kart, bu bölümü kaldırabilirsiniz (ancak bırakmanın zararı olmaz): #ifdefined(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // Bibloya özel kodun sonu. Seri.başla(9600); while (!Seri) {; // seri bağlantı noktasının bağlanmasını bekleyin. Yalnızca yerel USB bağlantı noktası için gereklidir } pinMode(A0, INPUT); strip.begin(); // BAŞLAT NeoPixel şerit nesnesi (GEREKLİ) strip.show(); // En kısa sürede tüm pikselleri KAPATIN strip.setBrightness(10); // PARLAKLIK'ı yaklaşık 1/5'e ayarlayın (maks = 255) } // loop() işlevi -- kart açık olduğu sürece tekrar tekrar çalışır --------------- void loop() { unsigned long currentMs = millis(); // Geçerli saati alma int değeri = analogRead(A0); // Mevcut ışık sensörünün okunması if (değer > 900 && sonuç == 0) { //Sensöre basılırsa ve henüz sonuç kaydedilmediyse, sonuç yakalamayı tetikle if (indeks = aralık) { // Akım döngü öncekiMs = currentMs aralığını aşıyor; // Yeni aralığı şimdiki zaman + aralık indeksi += 1'e ayarlayın; // Led'leri döngüde bir adım daha ileriye ayarlayın if (index > 17) { // Trigger döngü sonu işleme indeksi = 0; if (sonuç == 2) { // Doğru bir sonuç aralığında = (int)max((aralık * 0,95), 50); // 50 ms aralığa kadar %10 hızlanma/ renk = strip. Color(0, 255, 0); // Ledleri yeşil yap } else if (sonuç == 1) { // Yanlış sonuç aralığında = 300; // Renk aralığını sıfırla = strip. Color(255, 0, 0); // Ledleri kırmızıya ayarla } else { // Sonuç alınmadığında color = strip. Color(255, 0, 0); // ledleri kırmızı yap } sonuç = 0; // Sonraki döngü için sonucu sıfırla } TheaterChaseOne(color, index); // Gösterge için ledleri yak. } } // Animasyonlu efektler yaratmak için kendimize ait bazı fonksiyonlar ----------------- // Tiyatro-marquee tarzı takip ışıkları. Çerçeveler arasında bir renk (32-bit değer, // a la strip. Color(r, g, b) yukarıda belirtildiği gibi) ve bir gecikme süresi (ms cinsinden) // iletin. void TheaterChaseOne(uint32_t color, int index) { strip.clear(); strip.setPixelColor(17 - dizin, renk); //ilk sıra led ışıklar strip.setPixelColor(18 + indeks, renk); //ikinci sıra led ışıklar strip.setPixelColor(53 - indeks, renk); //üçüncü sıra led ışıklar strip.show(); }

Önerilen: