Mundarija:

Qo'l ritmi: 6 qadam
Qo'l ritmi: 6 qadam

Video: Qo'l ritmi: 6 qadam

Video: Qo'l ritmi: 6 qadam
Video: Barmoqlar mashqlari. Mayda motorikani rivojlantirish mashg'uloti. 2024, Noyabr
Anonim
Qo'l ritmi
Qo'l ritmi

Bu cyberglove to'g'ri vaqtda to'g'ri harakat qilish haqida.

Chiroqlar sizning qo'lingizdan (tirsagingizdan) qo'lingizga o'tadi va chiroqlar sizning qo'lingizga tushganda, mini fotoelementga barmoqlaringizni bosishingiz kerak bo'ladi.

Agar siz o'z vaqtida qo'lingizni mini fotoselga bossangiz, LEDlar yashil rangga aylanadi. Agar yo'q bo'lsa, LEDlar qizil rangga aylanadi.

1 -qadam: materiallarni yig'ish

  • Qo'lqop
  • Qo'lqopni uzunroq qilish uchun mato
  • WS2812B LED tasmasi
  • Simlar
  • Arduino
  • Mini foto sotish

2 -qadam: sxemalarni yaratish

O'chirish
O'chirish
O'chirish
O'chirish

Avval LED chizig'ini arduino -ga ulang. Buni +5v ni arduino -dagi 5v -ga ulash orqali qilishingiz mumkin. Din arduino -da A0 ga, GND esa arduino -da GND -ga ulangan bo'lishi kerak.

Bundan tashqari, mini -fotoselni arduino -ga 5v simli svetodiodli tarmoqdan ulash va arduino -dagi PIN 6 -ga sim bilan ulanish orqali ulash kerak. Mini fotoselning boshqa tomoni GND simiga ulangan bo'lishi kerak

3 -qadam: Qo'lqopni loyihalash

Qo'lqopni loyihalash
Qo'lqopni loyihalash

Qo'lqop etakchi chiziqlarga to'g'ri keladigan darajada bo'lishi kerak. Ko'rinishni yanada yoqimli qilish uchun LEDlarni bir -biriga moslashtirish kerak.

Bu o'yin uchun siz qo'lingizni ishlatishingiz va erkin harakatlanishni xohlaysiz. Buni arduino qo'lqopga qo'yish orqali amalga oshirish mumkin. Men arduinoni qo'lqopga yopishtirish uchun mahkamlagich sifatida velkro ishlatardim. Keyinchalik barqarorlikni o'rnatish uchun siz qo'lqop va arduino atrofiga arqon qo'yishingiz mumkin.

Mini fotosel qo'lqop ichiga tikilgan, shuning uchun u joyida qoladi.

Nihoyat, simlarni yaxshiroq yashirish uchun ularni yashirish kerak. Buni simlar ustiga tikilgan mato yordamida qilish mumkin.

4 -qadam: Lehimlash

Lehimlash
Lehimlash

Endi siz ulanish simlarini sxemadan lehim bilan xavfsiz qilishingiz mumkin.

5 -qadam: kodlash

Kodlash
Kodlash
Kodlash
Kodlash
Kodlash
Kodlash

// NeoPixel -ning har kungi asosiy test dasturi.

// Ishonchli ishlash uchun NEOPIXEL ENG YAXSHI AMALI: // - NeoPixel tasmasi + va - ulanishlari orasiga 1000 uF CAPACITOR qo'shing. // - mikrokontroller taxtasi va birinchi piksel orasidagi sim uzunligini minimallashtirish. //-NeoPixel tasmasi DATA-IN 300-500 OHM Rezistoridan o'tishi kerak. // - NeoPixellarni LIVE CIRCUITda ulashdan saqlaning. Agar kerak bo'lsa, har doim GROUND (-), keyin +, keyin ma'lumotlarni ulang. //-5V quvvatli NeoPixel tasmasi bo'lgan 3.3V mikrokontrolerdan foydalanganda, // ma'lumotlar liniyasidagi LOGIC-LEVEL CONVERTER qat'iy tavsiya etiladi. // (Bularni o'tkazib yuborish dastgohingizda yaxshi ishlashi mumkin, lekin maydonda muvaffaqiyatsiz bo'lishi mumkin)

#include #ifdef _AVR_ #include // 16 MGtsli Adafruit Trinket uchun zarur #endif

// Arduino -dagi qaysi pin NeoPixel -ga ulangan? // Trinket yoki Gemma -da biz buni 1 ga o'zgartirishni taklif qilamiz: #define LED_PIN 6

// Arduino -ga nechta NeoPixel biriktirilgan? #LED_COUNTni aniqlang 60

// NeoPixel tasma ob'ektini e'lon qiling: Adafruit_NeoPixel tasmasi (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Oq rang, standart bool uchun clickedCorrectly = false; // 1 -argument = NeoPixel chizig'idagi piksellar soni // 2 -argument = Arduino pin raqami (ko'pchiligi to'g'ri) // Argument 3 = Pikselli turdagi bayroqlar, kerak bo'lganda qo'shing: // NEO_KHZ800 800 KHz bitstream (NeoPixel mahsulotlarining ko'pchiligi/ WS2812 LEDlari) // NEO_KHZ400 400 KHz (klassik 'v1' (v2 emas) FLORA piksellari, WS2811 drayverlari) // NEO_GRB piksellari GRB bitstream uchun ulanadi (ko'pchilik NeoPixel mahsulotlari) // NEO_RGB piksellari RGB bitstream (v1 FLORA piksellari uchun), v2 emas) // NEO_RGBW piksellari RGBW oqimi uchun simli (NeoPixel RGBW mahsulotlari)

// setup () funktsiyasi-ishga tushganda bir marta ishlaydi --------------------------------

void setup () {// Bu satrlar Adafruit Trinket 5V 16 MGts ni qo'llab -quvvatlash uchun mo'ljallangan. // Boshqa istalgan taxta, siz bu qismni olib tashlashingiz mumkin (lekin undan hech qanday zarar bo'lmaydi): #if belgilangan (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinket-ga xos kodning oxiri.

pinMode (A0, INPUT); strip.begin (); // NeoPixel strip ob'ektini INITIALIZE (REQUIRED) strip.show (); // ASAP strip.setBrightness (10) tezlik bilan barcha piksellarni o'chiring; // BRIGHTNESS ni 1/5 ga o'rnating (maksimal = 255)}

// loop () funktsiyasi-taxta yonib turguncha qayta-qayta ishlaydi ---------------

void loop () {clickedC Corlyly = teatrChaseOne (rang); if (clickedCausely) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}

// Animatsiya effektlarini yaratish uchun o'zimizning ba'zi funktsiyalarimiz -----------------

// Teatr-marquee uslubidagi chiroqlar. Rangni (32-bitli qiymat, // a la strip. Rang (r, g, b) yuqorida aytib o'tilganidek) va ramkalar orasidagi kechikish vaqtini (msda) o'tkazing. bool teatrChaseOne (uint32_t rang) {bool to'g'ri = noto'g'ri; bool clickedWrong = noto'g'ri; for (int index = 0; index 800) {// qiymat sensori, agar (indeks <16) {// 2 tugashidan oldin bo'lsa, siz color = strip. Color (255, 0, 0) tugmasini bosishingiz mumkin; // qizil rangli LEDlar clickedWrong = rost; // noto'g'ri bosilsa, LEDlar qizil rangga aylanadi} else if if (! clickedWrong) {// noto'g'ri bo'lsa color = strip. Color (0, 255, 0); // yashil rangli LEDlar to'g'ri = to'g'ri; // tugma to'g'ri bosilgan bo'lsa, LEDlar yashil rangga aylanadi}} strip.clear (); strip.setPixelColor (17 - indeks, rang); // birinchi qatorli yorug'lik chiroqlari strip.setPixelColor (18 + indeks, rang); // ikkinchi qatorli yorug'lik chiroqlari strip.setPixelColor (53 - indeks, rang); // uchinchi qatorli yorug'lik chiroqlari strip.show (); kechikish (300); } to'g'ri qaytarish; }

6 -qadam: O'zgarishlar

O'zgarishlar
O'zgarishlar
O'zgarishlar
O'zgarishlar
O'zgarishlar
O'zgarishlar

Men ba'zi o'zgarishlar qildim. Birinchidan, men arduino -ni yashirdim, shuning uchun "Ritm qo'lini" ishlatish qulayroq bo'lardi, ikkinchidan, kodni biroz o'zgartirdim. Men kodni o'zgartirdim, shunda siz kerakli vaqtda bosganingizda rang yashil bo'ladi va LEDlar tezroq harakat qiladi. Shunday qilib, LED Swill avvalgidan 10% tezroq bo'ladi. Bu o'yinni yanada qiziqarli qiladi

Kod hozir shunday:

// NeoPixel -ning har kungi asosiy test dasturi. // Ishonchli ishlash uchun NEOPIXEL ENG ZO'R AMALI: // - NeoPixel tasmasi + va - ulanishlari orasiga 1000 uF CAPACITOR qo'shing. // - mikrokontroller taxtasi va birinchi piksel orasidagi sim uzunligini minimallashtirish. //-NeoPixel tasmasi DATA-IN 300-500 OHM Rezistoridan o'tishi kerak. // - NeoPixellarni LIVE CIRCUITda ulashdan saqlaning. Agar kerak bo'lsa, har doim GROUND (-), keyin +, keyin ma'lumotlarni ulang. //-5V quvvatga ega NeoPixel tasmasi bo'lgan 3.3V mikrokontrolerdan foydalanganda, // ma'lumotlar liniyasidagi LOGIC-LEVEL CONVERTER qat'iy tavsiya etiladi. // (Bularni o'tkazib yuborish dastgohingizda yaxshi ishlashi mumkin, lekin maydonda muvaffaqiyatsiz bo'lishi mumkin) #include #ifdef _AVR_ #include // 16 MGtsli Adafruit Trinket #endif uchun talab qilinadi // Arduino -dagi qaysi pin NeoPixel -ga ulangan? // Trinket yoki Gemma -da biz buni 1 ga o'zgartirishni taklif qilamiz: #define LED_PIN 6 // Arduino -ga nechta NeoPixel biriktirilgan? #define LED_COUNT 60 // NeoPixel tasmasi ob'ektini e'lon qiling: Adafruit_NeoPixel tasmasi (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Oq rang, standart bool uchun clickedCausely = false; int indeksi = 0; int oralig'i = 300; int natijasi = 0; imzosiz uzoq oldingiMs = millis (); // 1 -argument = NeoPixel chizig'idagi piksellar soni // 2 -argument = Arduino pin raqami (ko'pchiligi to'g'ri) // Argument 3 = Pikselli turdagi bayroqlar, kerak bo'lganda qo'shing: // NEO_KHZ800 800 KHz bitstream (NeoPixel mahsulotlarining ko'pchiligi/ WS2812 LEDlari) // NEO_KHZ400 400 KHz (klassik 'v1' (v2 emas) FLORA piksellari, WS2811 drayverlari) // NEO_GRB piksellari GRB bitstream uchun ulanadi (ko'pchilik NeoPixel mahsulotlari) // NEO_RGB piksellari RGB bitstream (v1 FLORA piksellari uchun), v2 emas) // NEO_RGBW piksellari RGBW bit oqimi uchun ulanadi (NeoPixel RGBW mahsulotlari) // setup () funktsiyasi-ishga tushganda bir marta ishlaydi -------------------- ------------ void setup () {// Bu satrlar Adafruit Trinket 5V 16 MGts ni qo'llab-quvvatlash uchun mo'ljallangan. // Boshqa istalgan taxta, siz bu qismni olib tashlashingiz mumkin (lekin undan hech qanday zarar bo'lmaydi): #if belgilangan (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinket-ga xos kodning oxiri. Serial.begin (9600); while (! Seriyali) {; // ketma -ket port ulanishini kuting. Faqat mahalliy USB port uchun kerak} pinMode (A0, INPUT); strip.begin (); // NeoPixel strip ob'ektini INITIALIZE (REQUIRED) strip.show (); // Barcha piksellarni ASAP strip.setBrightnessni o'chiring (10); // BRIGHTNESS-ni taxminan 1/5 ga o'rnating (max = 255)} // loop () funktsiyasi-taxta yoniq bo'lguncha qayta-qayta ishlaydi --------------- void loop () {imzosiz uzoq joriyMs = millis (); // Joriy vaqtni olish int qiymati = analogRead (A0); // Hozirgi yorug'lik sensori o'qiladi, agar (qiymati> 900 && natija == 0) {// Agar sensor bosilsa va hali hech qanday natija qayd etilmagan bo'lsa, natijani yozishni tetiklang, agar (indeks = interval) {// Oqim mavjudligini tekshiring pastadir oldingiMs = joriyMs oralig'idan oshib ketadi; // Yangi intervalni joriy vaqtga belgilang + interval indeksi + = 1; // Ledlarni loopda bir qadam oldinga siljiting, agar (indeks> 17) {// Loop bilan ishlashning oxiri indeksi = 0; if (natija == 2) {// To'g'ri natija oralig'ida = (int) max ((interval * 0,95), 50); // 50ms oralig'iga qadar 10%tezlik/ color = strip. Color (0, 255, 0); // LEDlarni yashil rangga o'rnating} else if if (result == 1) {// Noto'g'ri natija oralig'ida = 300; // Interval rangini o'zgartiring = strip. Color (255, 0, 0); // LEDlarni qizil rangga o'rnating} else {// Hech qanday natijaga erishilmadi color = strip. Color (255, 0, 0); // LEDlarni qizil rangga o'rnating} result = 0; // Keyingi tsikl uchun natijani qaytaring} teatrChaseOne (rang, indeks); // Ko'rsatish uchun chiroqlarni yoqing. }} // Animatsiyali effektlarni yaratish uchun o'zimizning ba'zi funktsiyalarimiz ---------------- // Teatr-marquee uslubidagi chiroqlarni quvish. Rangni (32-bitli qiymat, // a la strip. Rang (r, g, b) yuqorida aytib o'tilganidek) va ramkalar orasidagi kechikish vaqtini (msda) o'tkazing. void teatrChaseOne (uint32_t rang, int indeksi) {strip.clear (); strip.setPixelColor (17 - indeks, rang); // birinchi qatorli yorug'lik chiroqlari strip.setPixelColor (18 + indeks, rang); // ikkinchi qatorli yorug'lik chiroqlari strip.setPixelColor (53 - indeks, rang); // uchinchi qatorli yorug'lik chiroqlari strip.show (); }

Tavsiya: