Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Arduino MIDI Stepper Synth

Компоненты и расходные материалы

Arduino UNO
Вы можете использовать любой аналогичный Arduino для расширения ввода-вывода.
× 1
Драйвер шагового двигателя A4988
× 4
Arduino CNC Shield V3
Необязательно, вы можете просто вручную подключить драйверы A4988
× 1
Блок питания 12 В, 6 А
Или подобное, чтобы управлять шаговыми двигателями
× 1
Шаговый двигатель OpenBuilds NEMA 17
× 4

Необходимые инструменты и машины

3D-принтер (общий)
Совершенно необязательно!

Об этом проекте

Посмотрите, как это работает.

Я занимался своим обычным делом, просматривал YouTube, когда увидел музыку с дисковода гибких дисков. Зная, что дисководы гибких дисков управляются шаговыми двигателями, я решил сделать свой собственный звуковой генератор для шаговых двигателей.

Я видел, что люди делали это раньше, но каждый экземпляр либо не разделял код, либо их код был сильно ошибочным и / или ограниченным.

Изучая C ++ в школе, я решил применить свои навыки.

На самом деле я хотел создать код, который был бы простым и легким в использовании и изменении. И это именно то, что я сделал!

В целом Процесс

Для начала подумал, что нужно делать. Проще говоря, мне нужно было извлечь MIDI-данные и превратить их в скорость, которая заставила бы шаговый двигатель создать соответствующий шаг.

Извлечение данных MIDI

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

Управление шаговыми двигателями

Драйверы шагового двигателя A4988 имеют два контакта, которые непосредственно управляют движением шагового двигателя; ШАГ и НАПР. DIR контролирует, вращается ли двигатель по часовой стрелке или против часовой стрелки в зависимости от состояния, а STEP перемещает шаговый двигатель на один шаг каждый раз, когда он поднимается вверх (насколько зависит от разрешения микрошага). Поскольку на звук не влияет направление, я просто устанавливаю его на низкий уровень (или просто подключаю его к земле). Теперь я могу просто включить двигатель с помощью команды digitalWrite.

Вызов

Основная проблема при работе с этим проектом заключалась в том, что я хотел управлять несколькими шаговыми двигателями одновременно, поэтому об использовании команды delay () не могло быть и речи (иначе двигатели не работали бы одновременно). Вместо этого я использовал команду micros (), чтобы вычислить длительность импульса шаговых двигателей. Поскольку для каждого шагового двигателя будут разные значения скорости, я превратил переменные скорости в массивы с их индексом, соответствующим номеру двигателя и MIDI-каналу. Первоначально я использовал команду millis (), но обнаружил, что у нее недостаточно разрешения для получения разных высот.

Использование массива для управления скоростью шаговых двигателей означало, что я мог использовать одну переменную для всех двигателей, и это дает возможность Arduino управлять любым количеством шаговых двигателей, просто изменяя размер массива!

Расчет скорости

В ходе теста я отправил прямоугольный сигнал 440 Гц (используя команду тонального сигнала) на вывод шага и обнаружил, что шаговый двигатель создает шаг A440. Поскольку значение скорости, отправленное в функцию шагового двигателя, было периодом в микросекундах, я просто преобразовал частоты нот в период. Я помещаю эти значения в другой массив, называемый pitchValues, с их индексом, соответствующим значению ноты MIDI. Использование массива также позволило мне контролировать игровой диапазон степпера. Я сделал так, чтобы нулевое значение скорости считалось остановкой.

Использование массива вместо вычислений означало, что имелся полный контроль над скоростью каждой ноты, эффективно устанавливая диапазон для инструмента. Кроме того, когда шаговый двигатель приближается к своей резонансной частоте, он издает очень ужасный шум (похоже, что он глохнет). Вы можете определить, что это такое, и изменить значение высоты звука на октаву, чтобы решить эту проблему. Для меня резонансная частота была около F3, поэтому мне пришлось изменить E3, F3 и F # 3 на октаву, чтобы исправить это. (Вы можете проверить это с помощью кода «Tune Stepper.ino»)

Создание USB-MIDI-устройства

Я хотел, чтобы устройство воспринималось как MIDI-устройство, поэтому я немного покопался и обнаружил, что вы можете изменить прошивку микросхемы AVR на плате. Прошивка может быть HIDUINO или mocuLUFA. Я остановился на mocuLUFA, потому что у него была возможность двойной загрузки, поэтому я мог легко перепрограммировать Arduino, не перепрошивая чип AVR. Я мог просто подключить перемычку к разъему ICSP для переключения между USB MIDI и USB Serial.

Код

Репозиторий GitHub
Просто зайдите на мой GitHub. У меня есть инструкции по настройке и установке кода на Arduino. Https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Изготовленные на заказ детали и корпуса

Удерживает шаговые двигатели на месте Добавляет «палец» к двигателю. Чисто в эстетических целях.

Схема

Место для перемычек, если вы захотите использовать этот щит. Если вы хотите подключить его к макетной плате, то вот он Схема подключения макетной платы Fritzing. Включает некоторые значения деталей, не указанные на макетной схеме. Если вы хотите использовать разъем MIDI DIN, используйте этот макет.

Производственный процесс

  1. Янтарный
  2. Гильотина
  3. Кремний
  4. Укулеле
  5. Курица
  6. Компост
  7. Желатин
  8. Заблокировать
  9. Водка
  10. Железо