Миди контроллер для гитары (Guitorgan) на базе Arduino
Мне пришло в голову, что всякий раз, когда вы нажимаете струну на ладу вы делаете электрическую связь между ними. В сочетании с кодом для отправки MIDI-сообщений которые направляются в синтезатор, создается воспроизведение музыки. Это альтернатива hexaphonic звукоснимателя гитары-синтезатора, который определяет фактический физический контакт вместо обработки сигналов.
Проект реализуется с Arduino Mega и любой гитарой с металлическими струнами. Загвоздка в том, что мы можем достичь только частичную полифонию (когда вы играете более чем одну ноту сразу). Кроме того, также понимаю, что моя текущая установка генерирует много электрических помех, когда прибор подключен к усилителю. Я работаю над другой версии, которые не должны иметь эту проблему.
Для построения этой конструкции вы будете нуждаться:
Любая гитара (или бас) с металлическими струнами. Я рекомендую дешевую электрическую модель, так как они очень прочные.
- Arduino Mega . для этой установки. Нам нужно много входов!
- Диоды
- Множество 10K Ом резисторов
- Хорошая длина кабеля Ethernet, 12ft +
- Супер клей
- Паяльное оборудование
- Дрель и биты
- Хороший большой макет
Изменение вашей гитары: электрическая изоляция струн
Поскольку сами струны являются частью электрических цепей в этой сборке, нам нужно, чтобы убедиться, что нет проводимости между ними, чтобы микроконтроллер знал, какая струна разъединена. На акустической гитаре это не является проблемой, однако электрические инструменты, как правило, имеют заземление для того, чтобы попытаться снизить уровень шума. Это полная противоположность того, что мы хотим! Вы можете проверить проводимость между струнами с помощью мультиметра, сопротивление должно быть бесконечным. Место, где это происходит, как правило, подставка (бридж). Проверьте место где струна вступает в контакт с металлом. Любая металлическая поверхность, которая затрагивает струны должна быть покрыта непроводящей клеем, как эпоксидная смола или суперклей. Растачиваем эти отверстия и заполняем их эпоксидной смолой. После того, как она высохла проделываем отверстия для установки струн. После установки, подставка и струны не должны иметь проводимость.
Припаиваем провода к порожкам лада, которые подключаются к микроконтроллеру. Вам понадобятся две отдельные секции (или более) кабеля Ethernet, в идеале 6 футов или больше. Один кабель будет подключен к ладам, а другой к струнам. Я только сделал 8 ладов для этой установки, но вы можете добавить еще с большим кабелем Ethernet. Пайка к струнам довольно проста, производится в обработанной ранее подставке. Порожки на ладах припаиваются с торца этилированным припоем.
Цепь такая же, что и в сенсорных клавиатурах, но здесь переключение между порожками и подставкой. Микроконтроллер избирательно подает питание на одну ось сетки, а затем считывает напряжение каждого провода на другой оси, чтобы определить, какие соединения выполнены. Вместо кнопок, мы используем лады и струны в качестве переключателя. Струны в подставке, через диоды идут к вашему Arduino Mega Pins 4-9 (4-7 для меня, так как я использовал бас). Порожки ладов прикрепите проводами к выводам 22-29 (или выше, если у вас есть больше ладов), через резистор 10K Ом также подключая каждый провод к земле. Контроллер не будет работать без них.
Вот код, который вы будете загружать на Arduino Mega. Она доступна на Github. Обратите внимание на то, что наш Arduino посылает MIDI-сообщения через последовательный порт, и у меня нет фактической установки MIDI-порта. Это обрабатывается с помощью Serial-Midi конвертера в программном обеспечении.
//Midi_Guitar, Guitorgan Style
//Michael Niemi, <a href="https://github.com/mvniemi/midi_guitar"> https://github.com/mvniemi/midi_guitar
#define NUM_STRINGS 4
#define NUM_FRETS 8
#define VELOCITY 100
#define noteON 145
#define noteOFF 129
//This is where you pick what note you want your lowest string to start at
#define BASENOTE 28
//Set up for standard tuning of fourths
//This is for my bass, add more pins for a 6 string
//Serial to send midi commands over
//Initialize read pins
for (int i=0; i< NUM_FRETS; i++)