Სარჩევი:

არდუინო მეტრონომი: 4 ნაბიჯი
არდუინო მეტრონომი: 4 ნაბიჯი

ვიდეო: არდუინო მეტრონომი: 4 ნაბიჯი

ვიდეო: არდუინო მეტრონომი: 4 ნაბიჯი
ვიდეო: Метроном на ардуино! #arduino #электроника #метроном 2024, ნოემბერი
Anonim
Image
Image

როდესაც ბავშვობაში სწავლობთ ახალ მუსიკალურ ინსტრუმენტს, არის ბევრი ახალი რამ, რაზეც უნდა გაამახვილოთ ყურადღება. სწორი ტემპის ტემპის დაცვა ერთ -ერთი მათგანია. ფუნქციურად სრულყოფილი და მოსახერხებელი მეტრონომის პოვნა არ ნიშნავს საუკეთესო საბაბს, რომ დავიწყო ისევ ჩემი შვილების მშენებლობა. ამ Instructables პოსტში თქვენ ნახავთ ფუნქციურ აღწერილობას, ნაწილების ჩამონათვალს ვებ მაღაზიის ბმულებითა და ფასებით, გაყვანილობის სქემა შეკრებისთვის და Arduino წყაროს სრულ კოდს.

ნაბიჯი 1: ფუნქციური აღწერა

ნაწილების სია
ნაწილების სია

კარგი იქნებოდა მეტრონომის მოწყობილობა გქონოდა შემდეგი ფუნქციები, რომ გამოეყენებინა ის სახლში ან მუსიკალურ სკოლაში მოხერხებულად.

  • კომპაქტური ფორმის ფაქტორი, რომელიც მოერგება მცირე ადგილებს მუსიკალური ინსტრუმენტების თავზე ან გვერდით,
  • მუშაობს ბატარეაზე, გამძლეა და გადასატანი,
  • ადვილად დაყენებულია ბავშვებისთვისაც კი, BPM მნიშვნელობა ყოველთვის ნაჩვენებია,
  • რეგულირებადი დარტყმები წუთში მბრუნავი სახელურით, 240 BPM– მდე
  • ხმოვანი ტაქტი ხმის კონტროლით,
  • მდუმარე რეჟიმი ღამის ყურსასმენის ვარჯიშისთვის,
  • სხივების ვიზუალური გამოხმაურება (1/4, 2/4, 3/3, 4/4, 6/8 და სხვა) 8 LED- მდე,
  • წამყვანი აქცენტით ან მის გარეშე, ვიზუალური და ხმოვანი უკუკავშირით.

ჩართვისას მეტრონომის რეჟიმი დაიწყება 60 წთ / წთ -ით, რომელიც გამოჩნდება პატარა ეკრანზე და საშუალებას მისცემს ტემპს დაარეგულიროს მბრუნავი ღილაკი 10 -დან 240 -მდე. ნეოპიქსელები აჩვენებენ ცემას ლურჯ შუქდიოდებში, ხოლო ზუზერის ტკიპები. ღილაკზე დაჭერით გადავა დარტყმის რეგულირების რეჟიმში და მწვანე LED- ები მიუთითებს დაყენებული დარტყმის სტრუქტურაზე. მბრუნავი ღილაკი გაზრდის ან შეამცირებს დარტყმის სტრუქტურას (2/2, 3/3, 4/4, 6/8 და ა. 8 LED- ზე ზემოთ, საათის ისრის მიმართულებით შემობრუნება, წამყვანი აქცენტი ჩართული იქნება და პირველი LED ამას წითლად მიუთითებს. წამყვან აქცენტს ექნება ხმოვანი უკუკავშირიც. მისი გამორთვა შესაძლებელია საათის ისრის საწინააღმდეგოდ ბრუნვით. ღილაკზე დაჭერით გადახვალთ უკან დარტყმის რეგულირების რეჟიმიდან მეტრონომის რეჟიმში.

ნაბიჯი 2: ნაწილების სია

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

  • 9 ვ ბატარეა, 1.50 აშშ დოლარი
  • ბატარეის შესაერთებელი კაბელი, 0 აშშ დოლარი, 16
  • არდუინო ნანო სათაურებით, 2.05 აშშ დოლარი
  • ნანო IO გაფართოების ფარი, 1 აშშ დოლარი, 05
  • მინი სლაიდის გადამრთველი დენისთვის, 0.15 აშშ დოლარი
  • პიეზო ზუზერი, 0 აშშ დოლარი, 86
  • Adafruit Neopixel WS2812 8 ბიტიანი, 1 აშშ დოლარი, 01
  • OLED ეკრანი 128x64, 1 აშშ დოლარი, 53
  • მბრუნავი კოდირება, 0 აშშ დოლარი, 50
  • Dupont კაბელები F/F, 0 აშშ დოლარი, 49

კომპონენტების საერთო ფასი 10 აშშ დოლარზე ნაკლებია, -

ნაბიჯი 3: გაყვანილობის დიაგრამა

გაყვანილობის დიაგრამა
გაყვანილობის დიაგრამა

გამოიყენეთ Nano IO გაფართოების დაფა ისე, რომ არ შეგაწუხოთ მრავალჯერადი GND და VCC კავშირები. მინიმალური შედუღება საჭირო იქნება ნანო პინის სათაურებისთვის და ნეოპიქსელის მოდულის კონექტორებისთვის. დიუპონის მავთულის გამოყენება სტაბილურ კავშირებს იძლევა დანარჩენი გაყვანილობისთვის, როგორც ეს ნაჩვენებია დიაგრამაზე. 9 ვ ბატარეა დაკავშირებულია GND და VIN– თან, ეს უკანასკნელი დენის სლაიდერის გადამრთველის მეშვეობით. მბრუნავი კოდირების მოდულს აქვს ინტეგრირებული გადართვის ღილაკი, რომელიც ცალკე ნაჩვენებია დიაგრამაში, რათა უფრო ადვილად გაიგოთ როგორ დააკავშიროთ ისინი. მბრუნავი ნაწილი (CLK და DT) დაკავშირებულია შესაბამისად PIN2 და PIN3, რადგან ეს არის ერთადერთი NANO ქინძისთავები, რომელთაც შეუძლიათ ხელი შეუშალონ დამუშავებას. რა თქმა უნდა, მბრუნავი GND უკავშირდება ნანოს GND PIN- ს. ინტეგრირებული გადართვის ღილაკი უკავშირდება PIN4- ს. Piezo buzzer უკავშირდება PIN5 და GND. Adafruit Neopixel მოდული დაკავშირებულია PIN7- თან და მისი VIN და GND შესაბამისად ნანოს 5V და GND შესაბამისად. მცირე OLED ეკრანი უკავშირდება I2C ავტობუსის ინტერფეისს, რომელიც არის PIN A4 და A5 SDA და SDL. VCC და GND მიდის ნანოს 5V და GND რა თქმა უნდა. ამით მთავრდება ჩვენი დუპონტის გაყვანილობა.

ნაბიჯი 4: Arduino წყაროს კოდი

არდუინოს საწყისი კოდი
არდუინოს საწყისი კოდი

// მეტრონომი, წამყვანი აქცენტი, ვიზუალური და ხმოვანი ტაქტიკა - 2019 პიტერ ცურგაი

#მოიცავს #მოიცავს #მოიცავს #მოიცავს #მოიცავს #TimerOne.h " #განსაზღვრეთ SCREEN_WIDTH 128 #განსაზღვრეთ SCREEN_HEIGHT 64 #განსაზღვრეთ OLED_RESET -1 // გადააყენეთ პინი #(ან -1 Arduino გადატვირთვის პინის გაზიარების შემთხვევაში) Adafruit_SSD1306 ეკრანი, ეკრანი, & მავთული, OLED_RESET); #განსაზღვრეთ pin_neopixel 7 #განსაზღვრეთ NUMPIXELS 8 #განსაზღვრეთ სიკაშკაშე 32 Adafruit_NeoPixel პიქსელი = Adafruit_NeoPixel (NUMPIXELS, pin_neopixel, NEO_GRB + NEO_KHZ800); #განსაზღვრეთ IDLE_11 0 #განსაზღვრეთ SCLK_01 1 #განსაზღვრეთ SCLK_00 2 #განსაზღვრეთ SCLK_10 3 #განსაზღვრეთ SDT_10 4 #განსაზღვრეთ SDT_00 5 #განსაზღვრეთ SDT_01 6 int state = IDLE_11; #განსაზღვრეთ CLK 2 #განსაზღვრეთ DT 3 #განსაზღვრეთ pin_switch 4 #განსაზღვრეთ pin_buzzer 5 int bpm = 60; int bpm პირველი = 0; // LED პირველ რიგში ჩართულია, დანარჩენი გამორთულია … int tack = 4; bool leaderTack = ყალბი; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); ტაიმერი 1. ინიციალიზაცია (1000000*60/წთ/წთ/2); Timer1.attachInterrupt (buzztick); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); pinMode (pin_switch, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); თუ (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// მისამართი 0x3D for 128x64 for (;;); // ნუ გააგრძელებ, მარყუჟით სამუდამოდ} display.clearDisplay (); ჩვენება. ჩვენება (); } void loop () {if (digitalRead (pin_switch) == LOW) {დაგვიანებით (100); ხოლო (digitalRead (pin_switch) == LOW); დაგვიანება (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leaderTack) tack = 8; else {leaderTack = ჭეშმარიტი; შეხება = 1; }}} სხვა თუ (curValprevVal) {ბ / წ+= 2; თუ (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); ჩვენება. ბეჭდვა (წთ / წთ); ჩვენება. ჩვენება (); } void buzztick () {if (bpmFirst == 0) {int ტომი = 4; if (leaderTack && pos == 0) მოცულობა = 8; for (int i = 0; i

გირჩევთ: