Съдържание:

Ардуино метроном: 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 светодиода,
  • Със или без водещ акцент, с визуална и звукова обратна връзка.

Включването, режимът на метроном ще започне от 60 BPM, показвани на малкия дисплей и позволявайки на темпото да се регулира от въртящото се копче между 10 и 240. Неопикселите показват ритъма в сини светодиоди, докато зумерът тиктака. Натискането на копчето ще превключи в режим на регулиране на ритъма и зелените светодиоди ще покажат зададената структура на ритъма. Ротационното копче ще увеличи или намали структурата на ритъма (2/2, 3/3, 4/4, 6/8 и т.н.). Над 8 светодиода, които се въртят по посока на часовниковата стрелка, водещият акцент ще бъде включен, а първият светодиод ще покаже това в червено. Водещият акцент ще има и звукова обратна връзка. Може да се изключи чрез завъртане обратно на часовниковата стрелка. Натискането на копчето ще превключи от режим на регулиране на ритъма към режим на метроном.

Стъпка 2: Списък на частите

Ще ви трябва калъф. Всяка форма или размер могат да бъдат закупени, но имахме хубав черен метален корпус на стар ръчен VGA превключвател, изхвърлен от приятел. Останалите части са изброени по -долу.

  • 9V батерия, 1,50 USD
  • Кабел за свързване на батерията, USD 0, 16
  • Arduino Nano с щифтове, 2,05 щ.д.
  • Нано IO разширителен щит, 1, 05 USD
  • Мини плъзгащ се превключвател за захранване, 0,15 USD
  • Пиезо зумер, 0, 86 щ.д.
  • Adafruit Neopixel WS2812 8-битов, USD 1, 01
  • OLED дисплей 128x64, USD 1, 53
  • Ротационен енкодер, USD 0, 50
  • Кабели Dupont F/F, USD 0, 49

Общата цена на компонентите е под 10 USD, -

Стъпка 3: Схема на свързване

Електрическа схема
Електрическа схема

Използвайте платката за разширение Nano IO, за да не се притеснявате от запояване на множество GND и VCC връзки. Минимално запояване ще бъде необходимо за заглавките на Nano pin и за конекторите на модула Neopixel. Използването на кабели Dupont позволява стабилни връзки за останалата част от окабеляването, както е показано на диаграмата. 9V батерията е свързана към GND и VIN, последната чрез превключвателя на захранването. Модулът на въртящ се енкодер има вграден бутон за превключване, който е показан отделно на диаграмата за по -лесно разбиране как да ги свържете. Ротационната част (CLK и DT) е свързана съответно с PIN2 и PIN3, тъй като това са единствените NINO щифтове, способни да обработват прекъсвания. Ротационният GND е свързан, разбира се, с GND PIN на Nano. Вграденият бутон за превключване е свързан към PIN4. Пиезо зумерът е свързан към PIN5 и GND. Модулът Adafruit Neopixel е свързан към PIN7 и неговия VIN и GND съответно към 5V и GND на Nano. Малък OLED дисплей е свързан към интерфейса на I2C шината, който е PIN A4 и A5 за SDA и SDL. VCC и GND отиват при 5V на Nano и GND, разбира се. Това завършва нашето окабеляване на Dupont.

Стъпка 4: Изходният код на Arduino

Изходният код на Arduino
Изходният код на Arduino

// Метроном, водещ акцент, визуален и звуков такт - 2019 Питър Цургай

#include #include #include #include #include "TimerOne.h" #deteine SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Нулиране на щифт #(или -1, ако споделяте щифт за нулиране на Arduino) Adafruit_SSD1306 дисплей (SCREEN_W, SCREEN_WID & Wire, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel пиксели = 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 #define SDT_01 6 int state = IDLE_11; #define CLK 2 #define DT 3 #define pin_switch 4 #define pin_buzzer 5 int bpm = 60; int bpmFirst = 0; // Светодиодът свети първо, изключен в останалата част … int tack = 4; bool leadTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Timer1.inicialize (1000000*60/bpm/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); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Адрес 0x3D за 128x64 за (;;); // Не продължавайте, цикъл завинаги} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {delay (100); while (digitalRead (pin_switch) == LOW); забавяне (100); Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leadTack) tack = 8; else {водещТак = вярно; такт = 1; }}} иначе ако (curValprevVal) {bpm+= 2; ако (bpm> 240) bpm = 240; } else if (curVal = 100) display.print (""); else display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int том = 4; if (leadTack && pos == 0) том = 8; за (int i = 0; i

Препоръчано: