Mündəricat:

Arduino Metronome: 4 addım
Arduino Metronome: 4 addım

Video: Arduino Metronome: 4 addım

Video: Arduino Metronome: 4 addım
Video: Метроном на ардуино! #arduino #электроника #метроном 2024, Noyabr
Anonim
Image
Image

Uşaqlıqda yeni bir musiqi aləti öyrənərkən diqqət etməli olduğunuz çox şey var. Düzgün tempdə addım atmaq onlardan biridir. Funksional cəhətdən tam və rahat bir metronom tapmamaq, uşaqlarımla yenidən qurmağa başlamaq üçün ən yaxşı bəhanə demək idi. Bu Təlimat yazılarında, funksional təsviri, veb mağazası bağlantıları və qiymətləri olan hissələr siyahısını, montaj üçün elektrik sxemini və tam Arduino mənbə kodunu tapa bilərsiniz.

Addım 1: Funksional Təsvir

Parça siyahısı
Parça siyahısı

Evdə və ya musiqi məktəbində rahat istifadə etmək üçün aşağıdakı funksiyaları olan bir metronom cihazının olması yaxşı olardı.

  • Musiqi alətlərinin üstündəki və ya yanında olan kiçik yerlərə uyğun kompakt form faktoru,
  • Batareya ilə işləyən, möhkəm və daşımaq üçün portativ,
  • Uşaqlar üçün belə asanlıqla qurulur, BPM dəyəri həmişə göstərilir,
  • 240 BPM -ə qədər dönən bir düymə ilə dəqiqədə tənzimlənən vuruşlar
  • Həcmi idarə edən səsli nəzakət,
  • Gecə qulaqlıq təcrübəsi üçün səssiz rejim,
  • 8 LED -ə qədər vuruşların vizual rəyi (1/4, 2/4, 3/3, 4/4, 6/8 və s.),
  • Baş vurğu ilə və ya olmadan, vizual və səsli rəylə.

Açıldıqda, metronome rejimi kiçik ekranda görünən və sürətin 10 ilə 240 arasında dönən düymə ilə tənzimlənməsinə imkan verən 60 BPM -dən başlayacaq. Neopixels səsləri mavi LED -lərdə göstərərkən səs siqnalı çalır. Düyməni basmaq vuruş tənzimləmə rejiminə keçəcək və yaşıl LEDlər müəyyən edilmiş quruluşu göstərəcək. Döner düymə vuruş quruluşunu artıracaq və ya azaldacaq (2/2, 3/3, 4/4, 6/8 və s.). 8 LED -dən yuxarı, saat yönünde daha da fırlanan, ön vurğu açılacaq və ilk LED bunu qırmızı ilə göstərəcək. Aparıcı vurğu səsli rəylərə də sahib olacaq. Saat əqrəbinin əksinə fırlanaraq söndürülə bilər. Düyməni basmaq ritm tənzimləmə rejimindən metronom rejiminə keçəcək.

Addım 2: Parça siyahısı

Bir davaya ehtiyacınız olacaq. İstənilən forma və ya ölçü almaq olar, amma bir dostumuzun əlindən çıxarılan köhnə əl ilə VGA açarının qara rəngli metal qutusu vardı. Qalan hissələr aşağıda verilmişdir.

  • 9V Batareya, 1.50 USD
  • Batareya bağlayıcı kabeli, USD 0, 16
  • Pin başlıqları olan Arduino Nano, 2.05 USD
  • Nano IO Uzatma Qalxanı, USD 1, 05
  • Güc üçün mini sürüşmə açarı, 0.15 USD
  • Piezo buzzer, 0 USD 86
  • Adafruit Neopixel WS2812 8 bit, USD 1, 01
  • OLED Ekran 128x64, USD 1, 53
  • Rotary kodlayıcı, USD 0, 50
  • Dupont kabelləri F/F, USD 0, 49

Komponentlərin ümumi qiyməti 10 ABŞ dollarından aşağıdır, -

Addım 3: Bağlama Şeması

Kabel diaqramı
Kabel diaqramı

Çoxlu GND və VCC əlaqələrini lehimləməklə narahat olmamaq üçün Nano IO Uzatma Kartından istifadə edin. Nano pin başlıqları və Neopixel modul bağlayıcıları üçün minimum lehim lazım olacaq. Dupont tellərinin istifadəsi, diaqramda göstərildiyi kimi, telin qalan hissəsi üçün sabit bağlantılara imkan verir. 9V batareya GND və VIN -ə qoşulur, ikincisi güc sürüşmə açarı ilə. Rotary encoder modulunun birləşdirilməsini daha asan başa düşmək üçün diaqramda ayrıca göstərilmiş vahid keçid düyməsinə malikdir. Döner hissə (CLK və DT) sırasıyla PIN2 və PIN3 -ə bağlanır, çünki bunlar kəsilmə qabiliyyətinə malik yeganə NANO pinlərdir. Rotary GND, əlbəttə ki, Nanonun GND PIN koduna bağlıdır. İnteqrasiya edilmiş keçid düyməsi PIN4 -ə bağlıdır. Piezo səs siqnalı PIN5 və GND -ə bağlıdır. Adafruit Neopixel modulu müvafiq olaraq PIN7 və VIN və GND -ni Nano 5V və GND -ə qoşur. Kiçik OLED ekran, SDA və SDL üçün PIN A4 və A5 olan I2C avtobus interfeysinə qoşulur. VCC və GND, əlbəttə ki, Nano 5V və GND -ə gedir. Bu, Dupont kabellərimizi bağlayır.

Addım 4: Arduino Mənbə Kodu

Arduino Mənbə Kodu
Arduino Mənbə Kodu

// Metronom, Aparıcı Vurğu, Vizual və Səsli Takt - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #SCREEN_WIDTH 128 təyin et #SCREEN_HEIGHT 64 təyin et #OLED_RESET -1 təyin et // Pini #sıfırla (və ya -1 Arduino sıfırlama pinini paylaşarsa) Adafruit_SSD130WID, SCREEN_SIGHT & Tel, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel piksel = Adafruit_NeoPixel (NUMPIXELS, pin_neopixel, NEO_GRB + NEO_KHZ800); #define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #deffine SDT_01 6 int state = IDLE_11; #define CLK 2 #define DT 3 #define pin_switch 4 #dein pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // Əvvəlcə LED, qalanında sönür… int tack = 4; bool leadTack = yanlış; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {piksel.begin (); pinMode (pin_buzzer, Çıxış); Timer1.initialize (1000000*60/bpm/2); Taymer1.tachAxtat (buzztick); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); pinMode (pin_switch, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// (;;) üçün 128x64 üçün 0x3D ünvanı; // Davam etməyin, sonsuza qədər döngə edin} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {gecikmə (100); while (digitalRead (pin_switch) == LOW); gecikmə (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leadTack) tack = 8; başqa {leadTack = doğru; yapışqan = 1; }}} başqa if (curValprevVal) {bpm+= 2; əgər (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); ekran. çap (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; if (leadTack && pos == 0) həcmi = 8; üçün (int i = 0; i

Tövsiyə: