Mundarija:

Arduino Metronome: 4 qadam
Arduino Metronome: 4 qadam

Video: Arduino Metronome: 4 qadam

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

Bolalikda yangi musiqa asbobini o'rganayotganda, diqqat qilish kerak bo'lgan juda ko'p yangi narsalar bor. Tezlikni to'g'ri tempda ushlab turish - ulardan biri. Funktsional jihatdan to'liq va qulay metronomni topa olmaslik, bolalarim bilan yana qurilishni boshlash uchun eng yaxshi bahona edi. Bu ko'rsatmali postda siz funktsional tavsifni, veb -do'kon havolalari va narxlari ko'rsatilgan qismlar ro'yxatini, yig'ish uchun ulanish sxemasini va to'liq Arduino manba kodini topasiz.

1 -qadam: Funktsional tavsif

Qismlar ro'yxati
Qismlar ro'yxati

Uyda yoki musiqa maktabida qulay foydalanish uchun quyidagi funktsiyali metronomli qurilmaga ega bo'lish yaxshi bo'lardi.

  • Kichik joylarni musiqa asboblarining tepasida yoki yonida joylashtirish uchun ixcham shakl faktori;
  • Batareya bilan ishlaydigan, mustahkam va ko'chma,
  • Hatto bolalar uchun ham oson sozlash, BPM qiymati har doim ko'rsatiladi,
  • Qaytib tugmachasi bilan daqiqasiga 240 zarba tezligi sozlanishi
  • Ovoz balandligini boshqarish bilan ovozli xushmuomala,
  • Eshitish vositasi uchun bir kecha -kunduz mashq qilish uchun jim rejim,
  • 8 ta LEDgacha bo'lgan zarbalarning vizual qaytarilishi (1/4, 2/4, 3/3, 4/4, 6/8 va boshqalar),
  • Etakchi aksent bilan yoki bo'lmasdan, vizual va ovozli teskari aloqa bilan.

Metronome rejimi yoqilganda, 60 BPM tezligi kichik displeyda ko'rsatiladi va tezlikni 10 dan 240 gacha aylanadigan tugma yordamida sozlash imkonini beradi. Neopixellar signalni ko'k LEDda ko'rsatadi, gudok chalganda. Tugmani bosish ritmni sozlash rejimiga o'tadi va yashil rangli LEDlar o'rnatilgan zarba tuzilishini ko'rsatadi. Aylanadigan tugma zarba tuzilishini oshiradi yoki kamaytiradi (2/2, 3/3, 4/4, 6/8 va boshqalar). 8 svetodioddan yuqoriroq, soat yo'nalishi bo'yicha aylantiriladi, asosiy aksent yonadi va birinchi LED buni qizil rangda ko'rsatadi. Etakchi urg'u ham eshitiladigan fikrlarga ega bo'ladi. Uni soat sohasi farqli o'laroq aylantirish orqali o'chirish mumkin. Tugmani bosish ritmni sozlash rejimidan metronom rejimiga qaytadi.

2 -qadam: qismlar ro'yxati

Sizga sumka kerak bo'ladi. Har qanday shakl yoki o'lchovni sotib olish mumkin, lekin bizda eski qora qo'lda VGA kaliti bo'lgan do'sti yo'q edi. Qolgan qismlar quyida keltirilgan.

  • 9V batareya, 1,50 AQSh dollari
  • Batareya ulagichi kabeli, 0, 16 AQSh dollari
  • Pinli sarlavhali Arduino Nano, 2.05 AQSh dollari
  • Nano IO kengaytma qalqoni, 1 AQSh dollari, 05 dollar
  • Quvvat uchun mini slayd -kalit, 0,15 AQSh dollari
  • Piezo buzzer, 0, 86 dollar
  • Adafruit Neopixel WS2812 8 bitli, 1 AQSh dollari, 01
  • OLED displey 128x64, 1, 53 dollar
  • Rotary kodlovchi, 0, 50 AQSh dollari
  • Dupont kabellari F/F, USD 0, 49

Komponentlarning umumiy narxi 10 dollardan past, -

3 -qadam: ulanish sxemasi

Ulanish diagrammasi
Ulanish diagrammasi

Bir nechta GND va VCC ulanishlarini lehim bilan bezovta qilmaslik uchun Nano IO kengaytma kartasidan foydalaning. Nano pinli sarlavhalar va Neopixel modul ulagichlari uchun minimal lehim kerak bo'ladi. Dupont simlarini ishlatish sxemada ko'rsatilgandek, qolgan simlarni barqaror ulash imkonini beradi. 9V batareya GND va VIN -ga ulangan, ikkinchisi quvvat slayderining tugmasi orqali. Aylanadigan kodlovchi moduli birlashtiruvchi tugmachaga ega, ularni ulashni osonroq tushunish uchun diagrammada alohida ko'rsatilgan. Aylanadigan qism (CLK va DT) mos ravishda PIN2 va PIN3 ga ulangan, chunki ular NANO -ni uzib qo'yishga qodir yagona pinlardir. Rotary GND, albatta, Nano GND PIN -kodiga ulangan. Birlashtirilgan kalit tugmasi PIN4 ga ulangan. Piezo buzzer PIN5 va GND ga ulangan. Adafruit Neopixel moduli PIN7 va VIN va GND ga mos ravishda Nano 5V va GND ga ulangan. Kichik OLED displey I2C avtobus interfeysiga ulangan, bu SDA va SDL uchun PIN A4 va A5. VCC va GND, albatta, Nano 5V va GND ga o'tadi. Bu bizning Dupont kabelini tugatdi.

4 -qadam: Arduino manba kodi

Arduino manba kodi
Arduino manba kodi

// Metronom, etakchi aksent, vizual va ovozli aloqa - 2019 Piter Csurgay

#include #include #include #include #include "TimerOne.h" #SCREEN_WIDTH 128ni aniqlang #SCREEN_HEIGHT 64 #belgilash OLED_RESET -1 // PIN -kodni tiklash (yoki -1 Arduino reset pinini almashish bo'lsa) Adafruit_SSD130W ekran, SCREEN_SIGHT, & Wire, OLED_RESET); #defin pin_neopixel 7 #NUMPIXELSni aniqlang 8 #Yorqinlikni aniqlang 32 Adafruit_NeoPixel piksel = Adafruit_NeoPixel (NUMPIXELS, pin_neopixel, NEO_GRB + NEO_KHZ800); #delefilm 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 #dein pin_switch 4 #dein pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // birinchi navbatda LED yonadi, qolganida o'chadi… int tack = 4; bool leadTack = noto'g'ri; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {piksel.begin (); pinMod (pin_buzzer, OUTPUT); Taymer 1. boshlang (1000000*60/bpm/2); Taymer1.attachInterrupt (buzztick); pinMod (CLK, INPUT_PULLUP); pinMod (DT, INPUT_PULLUP); pinMod (pin_switch, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Manzil 0x3D 128x64 uchun (;;) uchun; // Davom etma, abadiy pastadir} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {kechiktirish (100); while (digitalRead (pin_switch) == LOW); kechikish (100); Taymer1.detachInterrupt (); ko'rsatishGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (liderTack) tack = 8; else {leadTack = rost; yopish = 1; }}} boshqa if (curValprevVal) {bpm+= 2; agar (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int volume = 4; agar (leadTack && pos == 0) tovush = 8; uchun (int i = 0; i

Tavsiya: