Სარჩევი:

რიტმის ხელი: 6 ნაბიჯი
რიტმის ხელი: 6 ნაბიჯი

ვიდეო: რიტმის ხელი: 6 ნაბიჯი

ვიდეო: რიტმის ხელი: 6 ნაბიჯი
ვიდეო: სიმღერა ციფრებზე, ვსწავლობთ დათვლას სიმღერით 1-10. საბავშვო სიმღერები ქართულად, ვიდეო ბავშვებისთვის 2024, ივლისი
Anonim
რიტმის ხელი
რიტმის ხელი

ეს კიბერსიყვარული არის სწორი ნაბიჯის გადადგმა საჭირო დროს.

შუქები მიდის თქვენი მკლავიდან (იდაყვი) თქვენს ხელში და როდესაც შუქი მოხვდება თქვენს ხელში, თქვენ უნდა დააჭიროთ თითებს მინი ფოტოელემენტზე.

თუ თქვენ დააჭირეთ მინი ფოტოს უჯრედს სწორ მომენტში, led- ები მწვანე გახდება. თუ არა, led ხდება წითელი.

ნაბიჯი 1: შეაგროვეთ მასალები

  • ხელთათმანი
  • ქსოვილი ხელთათმანების გახანგრძლივების მიზნით
  • WS2812B LED ზოლები
  • მავთულები
  • არდუინო
  • მინი ფოტო გაყიდვა

ნაბიჯი 2: სქემების დამზადება

სქემების დამზადება
სქემების დამზადება
სქემების დამზადება
სქემების დამზადება

ჯერ დაუკავშირეთ led ზოლი არდუინოს. ამის გაკეთება შეგიძლიათ arduino– ზე +5v 5v– სთან დაკავშირებით. დინი უნდა იყოს დაკავშირებული არდუინოს A0- თან და GND უნდა იყოს დაკავშირებული არდუინოს GND- თან.

თქვენ ასევე უნდა დააკავშიროთ მინი ფოტოს უჯრედი არდუინოს საშუალებით, რომელიც უკავშირდება 5 ვ მავთულს led ზოლიდან და იმავე წყაროდან, რომელიც უკავშირდება მავთულს PIN 6 არდუინოზე. მინი ფოტოს უჯრედის მეორე მხარე უნდა იყოს დაკავშირებული GND მავთულხლართთან ერთად

ნაბიჯი 3: ხელთათმანის დიზაინი

ხელთათმანის დიზაინი
ხელთათმანის დიზაინი

ხელთათმანს უნდა ჰქონდეს სწორი ზომა, რათა შეესაბამებოდეს led ზოლებს. ლიდერები უნდა იყოს გასწორებული, რომ უფრო სასიამოვნო იყოს.

ამ თამაშისთვის თქვენ უნდა გამოიყენოთ თქვენი მკლავი და გსურთ თავისუფლად გადაადგილება შეძლოთ. ამის რეალიზება შესაძლებელია არდუინოს ხელთათმანზე დაყენებით. მე ვილკრო გამოვიყენე, როგორც შესაკრავი, რომ არდუინო ხელთათმანზე ჩამაგდო. შემდეგ მეტი სტაბილურობის დასამყარებლად შეგიძლიათ თოკი დადეთ ხელთათმანის გარშემო და არდუინოს გარშემო.

მინი ფოტო უჯრედი შეკერილია ხელთათმანის შიგნით, ასე რომ ის დარჩება ადგილზე.

დაბოლოს, თქვენ უნდა დაიმალოთ მავთულები, რომ ის უკეთესად გამოიყურებოდეს. ეს შეიძლება გაკეთდეს ქსოვილით, რომელიც შეკერილი იქნება მავთულის თავზე.

ნაბიჯი 4: შედუღება

შედუღება
შედუღება

ახლა თქვენ შეგიძლიათ გააკეთოთ დამაკავშირებელი მავთულები წრიდან უსაფრთხოდ შედუღების გზით.

ნაბიჯი 5: კოდირება

კოდირება
კოდირება
კოდირება
კოდირება
კოდირება
კოდირება

// ძირითადი ყოველდღიური NeoPixel ზოლების სატესტო პროგრამა.

// NEOPIXEL საუკეთესო პრაქტიკა ყველაზე საიმედო ოპერაციისთვის: // - დაამატეთ 1000 uF კონდენსატორი NeoPixel– ის ზოლების + და - კავშირებს შორის. // - შეამცირეთ გაყვანილობის სიგრძე მიკროკონტროლერის დაფასა და პირველ პიქსელს შორის. //-NeoPixel ზოლის DATA-IN უნდა გაიაროს 300-500 OHM რეზისტენტმა. // - თავიდან აიცილოთ NeoPixels– ის დაკავშირება ცოცხალ წრეზე. თუ თქვენ გჭირდებათ, ყოველთვის // დააკავშირეთ GROUND (-) ჯერ, შემდეგ +, შემდეგ მონაცემები. //-3.3 ვ მიკროკონტროლერის გამოყენებისას 5 ვ-იანი სიმძლავრის NeoPixel ზოლით, // მონაცემთა ხაზზე LOGIC-LEVEL CONVERTER მტკიცედ არის რეკომენდებული. // (მათი გამოტოვება შეიძლება კარგად იმუშაოს თქვენს სამუშაო მაგიდაზე, მაგრამ შეიძლება ვერ მოხდეს სფეროში)

#მოიცავს #ifdef _AVR_ #მოიცავს // საჭიროა 16 MHz Adafruit Trinket #endif

// არდუინოს რომელი პინია დაკავშირებული ნეოპიქსელებთან? // წვრილმანზე ან გემაზე ჩვენ გირჩევთ შეცვალოთ ეს 1 -ით: #განსაზღვრეთ LED_PIN 6

// რამდენი ნეოპიქსელი ერთვის არდუინოს? #განსაზღვრეთ LED_COUNT 60

// გამოვაცხადოთ ჩვენი NeoPixel ზოლის ობიექტი: Adafruit_NeoPixel ზოლები (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t ფერი = ზოლები. ფერი (127, 127, 127); // თეთრი ფერი, ნაგულისხმევი ლოგიკისთვის დააწკაპუნეთCorrectly = false; // არგუმენტი 1 = პიქსელების რაოდენობა NeoPixel ზოლში // არგუმენტი 2 = Arduino pin ნომერი (უმეტესობა მოქმედებს) // არგუმენტი 3 = პიქსელის ტიპის დროშები, საჭიროებისამებრ დაამატეთ: // NEO_KHZ800 800 KHz ბიტ -სტრიმი (ყველაზე NeoPixel პროდუქტები w/ WS2812 LED- ები // NEO_KHZ400 400 KHz (კლასიკური 'v1' (არა v2) FLORA პიქსელი, WS2811 დრაივერი) // NEO_GRB პიქსელები სადენიანია GRB ბიტრემისთვის (უმეტესობა NeoPixel პროდუქტებით) // NEO_RGB პიქსელები მავთულხლართულია RGB ბიტრემისთვის (v1 FLORA პიქსელი, არა v2) // NEO_RGBW პიქსელები მიერთებულია RGBW ბიტრემისთვის (NeoPixel RGBW პროდუქტები)

// setup () ფუნქცია-გაშვებისას მუშაობს ერთხელ ------------------------------------

void setup () {// ეს ხაზები სპეციალურად არის Adafruit Trinket 5V 16 MHz მხარდაჭერისთვის. // ნებისმიერი სხვა დაფა, შეგიძლიათ ამოიღოთ ეს ნაწილი (მაგრამ მისი დატოვება არანაირ ზიანს არ აყენებს): #თუ განსაზღვრულია (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinket- ის სპეციფიკური კოდის დასასრული.

pinMode (A0, INPUT); ზოლები. დაწყება (); // ინიციალიზაცია NeoPixel ზოლის ობიექტი (საჭირო) strip.show (); // გამორთეთ ყველა პიქსელი ASAP strip.setBrightness (10); // დააყენეთ BRIGHTNESS დაახლოებით 1/5 (მაქსიმ = 255)}

// მარყუჟის () ფუნქცია-გადის არაერთხელ, სანამ დაფა ჩართულია ---------------

void loop () {clickedCorrectly = theaterChaseOne (ფერი); if (დააწკაპუნეთ სწორად) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}

// ჩვენი ზოგიერთი ფუნქცია ანიმაციური ეფექტების შესაქმნელად -----------------

// თეატრ-მარკის სტილში მყოფი შუქები. გაიარეთ ფერი (32 ბიტიანი მნიშვნელობა, // a la strip. ფერი (r, g, b) როგორც ზემოთ აღინიშნა) და შეფერხების დრო (ms) // ჩარჩოებს შორის. bool theaterChaseOne (uint32_t ფერი) {bool სწორი = ყალბი; bool clickedWrong = false; for (int index = 0; index 800) {// მნიშვნელობის სინათლის სენსორი თუ (ინდექსი <16) {// 2 leds end end before then you can click color = strip. Color (255, 0, 0); // წითელი ფერი leds clickedWrong = true; // არასწორად დააწკაპუნეთ, შემდეგ led- ები წითლდება} სხვა შემთხვევაში ((! clickedWrong) {// თუ არა არასწორი ფერი = ზოლები. ფერი (0, 255, 0); // მწვანე ფერი იწვევს სწორი = ჭეშმარიტი; // დააწკაპუნეთ სწორად შემდეგ leds ხდება მწვანე}} strip.clear (); strip.setPixelColor (17 - ინდექსი, ფერი); // პირველი რიგის led განათება strip.setPixelColor (18 + ინდექსი, ფერი); // მეორე რიგის led განათება strip.setPixelColor (53 - ინდექსი, ფერი); // მესამე რიგის led განათება strip.show (); დაგვიანება (300); } დაბრუნება სწორია; }

ნაბიჯი 6: ცვლილებები

ცვლილებები
ცვლილებები
ცვლილებები
ცვლილებები
ცვლილებები
ცვლილებები

მე შევიტანე გარკვეული ცვლილებები. ჯერ არდუინო დავმალე, ასე რომ უფრო კომფორტული იქნებოდა "რითმის ხელის" გამოყენება და მეორეც კოდი ოდნავ შევცვალე. მე შევცვალე კოდი ისე, რომ როდესაც თქვენ დააჭირეთ სწორ მომენტში ფერი ხდება მწვანე და LEDS უფრო სწრაფად მოძრაობს. ამით LED Swill ხდება 10% -ით უფრო სწრაფი ვიდრე ადრე. ეს თამაშს უფრო საინტერესოს ხდის

ეს არის კოდი ახლა:

// ძირითადი ყოველდღიური NeoPixel ზოლების სატესტო პროგრამა. // NEOPIXEL საუკეთესო პრაქტიკა ყველაზე საიმედო ოპერაციისთვის: // - დაამატეთ 1000 uF კონდენსატორი NeoPixel– ის ზოლების + და - კავშირებს შორის. // - შეამცირეთ გაყვანილობის სიგრძე მიკროკონტროლერის დაფასა და პირველ პიქსელს შორის. //-NeoPixel ზოლის DATA-IN უნდა გაიაროს 300-500 OHM რეზისტენტმა. // - თავიდან აიცილოთ NeoPixels– ის დაკავშირება ცოცხალ წრეზე. თუ თქვენ გჭირდებათ, ყოველთვის // დააკავშირეთ GROUND (-) ჯერ, შემდეგ +, შემდეგ მონაცემები. //-3.3 ვ მიკროკონტროლერის გამოყენებისას 5 ვ-იანი სიმძლავრის NeoPixel ზოლით, // მონაცემთა ხაზზე LOGIC-LEVEL CONVERTER მტკიცედ არის რეკომენდებული. // (ამის გამოტოვება შეიძლება კარგად მუშაობდეს თქვენს სამუშაო მაგიდაზე, მაგრამ შეიძლება ველში ჩავარდეს) #მოიცავს #ifdef _AVR_ #მოიცავს // საჭიროა 16 MHz Adafruit Trinket #endif // Arduino– ს რომელი პინია დაკავშირებული NeoPixels– თან? // წვრილმანზე ან გემაზე ჩვენ გირჩევთ შეცვალოთ ეს 1 -ით: #განსაზღვრეთ LED_PIN 6 // რამდენი NeoPixel ერთვის Arduino- ს? #განსაზღვრეთ LED_COUNT 60 // გამოაცხადეთ ჩვენი NeoPixel ზოლის ობიექტი: Adafruit_NeoPixel ზოლები (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t ფერი = ზოლები. ფერი (127, 127, 127); // თეთრი ფერი, ნაგულისხმევი ლოგიკისთვის დააწკაპუნეთCorrectly = false; int ინდექსი = 0; int ინტერვალი = 300; int შედეგი = 0; ხელმოუწერელი წინა წინათ = millis (); // არგუმენტი 1 = პიქსელების რაოდენობა NeoPixel ზოლში // არგუმენტი 2 = Arduino pin ნომერი (უმეტესობა მოქმედებს) // არგუმენტი 3 = პიქსელის ტიპის დროშები, საჭიროებისამებრ დაამატეთ: // NEO_KHZ800 800 KHz ბიტ -სტრიმი (ყველაზე NeoPixel პროდუქტები w/ WS2812 LED- ები // NEO_KHZ400 400 KHz (კლასიკური 'v1' (არა v2) FLORA პიქსელი, WS2811 დრაივერი) // NEO_GRB პიქსელები სადენიანია GRB ბიტრემისთვის (უმეტესობა NeoPixel პროდუქტებით) // NEO_RGB პიქსელები მავთულხლართულია RGB ბიტრემისთვის (v1 FLORA პიქსელი, არა v2) // NEO_RGBW პიქსელები მიერთებულია RGBW ბიტრემისთვის (NeoPixel RGBW პროდუქტები) // setup () ფუნქცია-მუშაობს გაშვებისას ერთხელ -------------------- ------------ void setup () {// ეს ხაზები სპეციალურად არის Adafruit Trinket 5V 16 MHz მხარდაჭერისთვის. // ნებისმიერი სხვა დაფა, შეგიძლიათ ამოიღოთ ეს ნაწილი (მაგრამ მისი დატოვება არანაირ ზიანს არ აყენებს): #თუ განსაზღვრულია (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinket- ის სპეციფიკური კოდის დასასრული. სერიული.დაწყება (9600); ხოლო (! სერიული) {; // დაელოდეთ სერიული პორტის დაკავშირებას. საჭიროა მხოლოდ მშობლიური USB პორტისთვის} pinMode (A0, INPUT); ზოლები. დაწყება (); // ინიციალიზაცია NeoPixel ზოლის ობიექტი (საჭირო) strip.show (); // გამორთეთ ყველა პიქსელი ASAP strip.setBrightness (10); // დააყენეთ BRIGHTNESS დაახლოებით 1/5 (max = 255)} // loop () ფუნქცია-გადის არაერთხელ, სანამ დაფა ჩართულია --------------- void loop () {ხელმოუწერელი გრძელი მიმდინარე Ms = millis (); // მიმდინარე დროის მიღება int მნიშვნელობა = analogRead (A0); // მიმდინარე სინათლის სენსორის წაკითხვა, თუ (მნიშვნელობა> 900 && შედეგი == 0) {// თუ სენსორი დაჭერილია და შედეგი ჯერ არ არის დაფიქსირებული, გამოიწვევს შედეგის დაჭერას თუ (ინდექსი = ინტერვალი) {// შეამოწმეთ თუ არა მიმდინარე მარყუჟი აღემატება ინტერვალი previousMs = currentMs; // დააყენეთ ახალი ინტერვალი მიმდინარე დროზე + ინტერვალის ინდექსი + = 1; // დააყენეთ leds ერთი ნაბიჯი შემდგომი მარყუჟში if (ინდექსი> 17) {// იწვევენ მარყუჟის დამუშავების ინდექსის ბოლოს = 0; if (შედეგი == 2) {// სწორი შედეგის ინტერვალზე = (int) max ((ინტერვალი * 0.95), 50); // აჩქარება 10%-ით, 50ms ინტერვალამდე/ ფერი = ზოლები. ფერი (0, 255, 0); // დააყენეთ led– ები მწვანე} else if (შედეგი == 1) {// არასწორი შედეგის ინტერვალზე = 300; // გადატვირთეთ ინტერვალის ფერი = ზოლები. ფერი (255, 0, 0); // დააყენეთ leds წითელზე} else {// არავითარი შედეგი არ არის გადაღებული color = strip. Color (255, 0, 0); // დააყენეთ led- ები წითელზე} result = 0; // შედეგის გადაყენება მომდევნო მარყუჟისთვის} theatreChaseOne (ფერი, ინდექსი); // განათება leds ჩვენებისათვის. }} // ზოგიერთი საკუთარი ფუნქცია ანიმაციური ეფექტების შესაქმნელად ----------------- // თეატრის მარკის სტილში მყოფი შუქები. გაიარეთ ფერი (32 ბიტიანი მნიშვნელობა, // a la strip. ფერი (r, g, b) როგორც ზემოთ აღინიშნა) და შეფერხების დრო (ms) // ჩარჩოებს შორის. void theaterChaseOne (uint32_t ფერი, int ინდექსი) {strip.clear (); strip.setPixelColor (17 - ინდექსი, ფერი); // პირველი რიგის led განათება strip.setPixelColor (18 + ინდექსი, ფერი); // მეორე რიგის led განათება strip.setPixelColor (53 - ინდექსი, ფერი); // მესამე რიგის led განათება strip.show (); }

გირჩევთ: