Оглавление:

Метроном Arduino: 4 шага
Метроном Arduino: 4 шага

Видео: Метроном Arduino: 4 шага

Видео: Метроном Arduino: 4 шага
Видео: Электронный Метроном Своими Руками! Простая схема для начинающих! 2024, Июль
Anonim
Image
Image

Когда ты учишься играть на новом музыкальном инструменте в детстве, есть так много новых вещей, на которых нужно сосредоточиться. Сохранение правильного темпа - одна из них. Отсутствие функционально законченного и удобного метронома было лучшим предлогом для того, чтобы снова начать строить вместе с моими детьми. В этом посте с инструкциями вы найдете функциональное описание, список деталей со ссылками на интернет-магазины и ценами, схему подключения для сборки и полный исходный код Arduino.

Шаг 1. Функциональное описание

Список деталей
Список деталей

Было бы неплохо иметь метроном со следующими функциями, чтобы удобно пользоваться им дома или в музыкальной школе.

  • Компактный форм-фактор для небольших мест сверху или рядом с музыкальными инструментами,
  • Работает от батареи, прочный и портативный, чтобы носить его с собой,
  • Легко настраивается даже для детей, всегда отображается значение BPM,
  • Регулируемое количество ударов в минуту с помощью поворотной ручки, до 240 ударов в минуту
  • Звуковой такт с регулятором громкости,
  • Бесшумный режим для ночной тренировки в наушниках,
  • Визуальная обратная связь ударов (1/4, 2/4, 3/3, 4/4, 6/8 и т. Д.) До 8 светодиодов,
  • С ведущим акцентом или без него, с визуальной и звуковой обратной связью.

При включении режим метронома запускается со скоростью 60 ударов в минуту, отображаемой на маленьком дисплее, и позволяет регулировать темп с помощью поворотной ручки в диапазоне от 10 до 240. Неопиксели показывают ритм синими светодиодами, пока горит зуммер. Нажатие на ручку переключит режим настройки ударов, и зеленые светодиоды укажут на установленную структуру ударов. Поворотная ручка будет увеличивать или уменьшать структуру ударов (2/2, 3/3, 4/4, 6/8 и т. Д.). Над 8 светодиодами, при дальнейшем вращении по часовой стрелке, будет включен начальный акцент, и первый светодиод укажет это красным. Ведущий акцент также будет иметь звуковую обратную связь. Его можно выключить, повернув против часовой стрелки. Нажатие на ручку переключит обратно из режима настройки ударов в режим метронома.

Шаг 2: Список деталей

Вам понадобится чехол. Можно купить любую форму и размер, но у нас был красивый черный металлический корпус старого ручного переключателя VGA, который выбрал друг. Остальные части перечислены ниже.

  • Аккумулятор 9 В, 1,50 доллара США.
  • Кабель для подключения аккумулятора, 0, 16 долларов США
  • Arduino Nano с разъемами для контактов, 2,05 доллара США.
  • Nano IO Extension Shield, 1,05 доллара США.
  • Мини-ползунковый переключатель питания, 0,15 доллара США.
  • Пьезозуммер, 0,86 долларов США
  • Adafruit Neopixel WS2812 8-бит, 1 доллар США
  • OLED-дисплей 128x64, доллар США 1, 53
  • Круговой энкодер, 50 долларов США
  • Кабели Dupont F / F, 49 долларов США

Общая стоимость компонентов менее 10 долларов США, -

Шаг 3: Схема подключения

Схема подключения
Схема подключения

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

Шаг 4: Исходный код Arduino

Исходный код Arduino
Исходный код Arduino

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

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Сброс пин # (или -1, если общий пин сброса Arduino) Adafruit_SSD1306 display (SCREEN_WIDHE) & Провод, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel Pixel = 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; booladingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; пустая настройка () {пикселей.begin (); pinMode (pin_buzzer, ВЫХОД); Timer1.initialize (1000000 * 60 / уд / мин / 2); Timer1.attachInterrupt (звонок); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); pinMode (pin_switch, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, ИЗМЕНИТЬ); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Адрес 0x3D для 128x64 for (;;); // Не продолжать, цикл бесконечно} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {задержка (100); while (digitalRead (pin_switch) == LOW); задержка (100); Timer1.detachInterrupt (); showGreenTacks (); в то время как (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack + = 1; if (tack> 8) {if (leadingTack) tack = 8; иначе {leadTack = true; липкость = 1; }}} иначе, если (curValprevVal) {bpm + = 2; если (уд / мин> 240) уд / мин = 240; } иначе, если (curVal = 100) display.print (""); иначе display.print (""); display.print (уд / мин); display.display (); } void buzztick () {если (bpmFirst == 0) {int volume = 4; if (LeadingTack && pos == 0) volume = 8; для (int i = 0; i

Рекомендуемые: