MIDI-устройство под управлением Arduino

MIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoЭтот электронный музыкальный инструмент мастер сделал для своего сына. Он обучается в музыкальной школе и в дальнейшем должен пройти обучение на таких инструментах, как ксилофон, маримба и глокеншпиль. Такие инструменты дороги и тогда было принято решение сделать инструмент самостоятельно.
Инструменты и материалы:-Мультиплексор 74HC4067;-Arduino;-Пьезоэлементы;
-Деревянные дощечки;
-Провода;
-Кнопки;
-Дисплей.
Шаг первый: общая информация
Этот шаг не является обязательным.В нем мастер дает ряд ссылок для ознакомления работы Ардуино, пьезодатчиков, MIDI-библиотек и т.д.
В конце концов, он не использует никаких миди-библиотек. Все необходимое он программирует с помощью строки кода и последовательного интерфейса.
Большой проблемой при изготовлении устройства была скорость Arduino. Сможет ли он вовремя «опросить» три с половиной октавы пьезодатчиков? Проблема была решена небольшой настройкой аналогового входа, чтобы ускорить его.
Техническим принципом этого инструмента являются пьезодатчики, несколько аналоговых мультиплексоров и аналоговые входы Arduino. Настройка датчиков выполняется программно. Можно контролировать чувствительность и задержку каждого входа.
Набор ударных MIDI: https://todbot.com/arduino/sketches/midi_drum_kit …
Электронная ударная установка:http://blog.georgmill.de/2011/03/22/e-drumset-selb…
Ударная установка:https://www.spikenzielabs.com/learn/drumkitkit.htm…
Ксилофон Arduino:https://jdeboi.com/projects/2011/xylophone.html
Исходный код:https://github.com/jdeboi/xylophone/blob/master/ne…
MIDI-руководство:https: //learn.sparkfun.com/tutorials/midi-tutoria …
MIDI и ардуино:
https://fortyseveneffects.github.io/arduino_midi_l…
https://newt.phys.unsw.edu.au/jw/notes.htmlhttp://www.philrees.co.uk/articles/midimode.htmhttps://www.youtube.com/playlist?list=PL4_gPbvyeb…
https://www.instructables.com/id/Send-and-Receive-…
Шаг второй: механическая часть
Клавиши изготовлены из древесины. Это твердая древесина, и на ней можно будет играть различными палочками. пьезо элементы приклеиваются к нижней части клавиш эпоксидным клеем. Для уменьшения вибрации между датчиками он наклеил на пластины небольшие кусочки губчатой резины.
Всего клавиш 42 штуки, чтобы в конце было три с половиной октавы тона.
MIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoШаг третий: аналоговый мультиплексор
Для сбора аналогового сигнала в устройстве используются аналоговые мультиплексоры, подключенные к аналоговым входам Arduino. Один мультиплексор может работать с 16 каналами. Для 42 датчиков он использовал три мультиплексора.
MIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoШаг четвертый: схема
Устройство собирается по нижепривиденной схеме. Кнопки управления инструментом настроены как электронные педали синтезатора, разницы нет.
MIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoMIDI-устройство под управлением ArduinoШаг пятый: код
Основная программа разделена на подпрограммы.

Развивающий детский конструктор с шуруповертом + 2 подарка
10 часов назад
Мужской триммер для бороды и волос. -50%!
8 часов назад

// midiLoopback ();

Может быть добавлено, если потребуется какая-то миди-петля. Здесь нужно добавить оптопару и разъем midi-in.

readSensors ();

Эта процедура считывает данные со всех датчиков мультиплексных массивов. Подпрограммы считывают сразу три входных сигнала и сохраняют их в массиве.

checkSensors ();

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

checkPedal ();

Этот раздел для анализа педали сустейна. Процедура не зависит от ноты.

InstrumentChange();

Мастер использует Ketron SD4 для генерации звуков с помощью регуляторов midi. Также он сохранил некоторые инструменты в пользовательском банке устройства, которые зациклил с помощью midi-регулятора изменения программы. Используя другой звуковой процессор, пользователь должен настроить эти строки кода.

Любые сорта сыра с Домашней Сыроварней
8 часов назад
Эффективное средство для борьбы с алкогольной зависимостью
6 часов назад

checkOctave ();

Кнопка октавы проверяется и переключает MID-LOW-MID-HIGH-MID-… С этой функцией максимальный октавный диапазон составляет пять с половиной октав.
Дальше пояснения некоторых подпрограмм.
Эта процедура предназначена для ускорения считывания аналоговых показаний.

// Making analog readings faster (for drumrolls) works with this code
// read http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1... for more info #define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif

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

// Midi-Notenwerte
unsigned char PadNote[72] = {36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,
56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,
86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107};

// Threshold Werte, Anschlagsempfindlichkeit
// Tuning-Bedarf ! Ch 10
int PadCutOff[48] = {300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,
300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,
300,300,300,300,300,300,300,300,300};

// time each note remains on after being hit
int MaxPlayTime[48] = {50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50};

// array of flags of pad currently playing
boolean activePad[48] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

// counter since pad started to play
int PinPlayTime[48] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Элементы управления MIDI находятся в последней части кода. Скорость передачи установлена на 31,250 бод.

//*******************************************************************************************************************
// Transmit MIDI Message //*******************************************************************************************************************
void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY)
{ status = MESSAGE + midichannel;
Serial.write(status);
Serial.write(PITCH);
Serial.write(VELOCITY);
}

// MIDI Program Change
void MIDI_PC(unsigned char PROGRAMNUMBER)
{ status = 192 + midichannel;
Serial.write(status);
Serial.write(PROGRAMNUMBER);
}

// MIDI Control Change
void MIDI_CC(unsigned char State)
{ status = 176 + midichannel;
Serial.write(status);
Serial.write(64);
Serial.write(State);
}

Весь код ниже.
xyluino.ino
MIDI-устройство под управлением ArduinoВсе готово. По словам мастера «Это действительно фантастический инструмент. Вы можете воспроизводить все, что умеет ваш звуковой процессор, с помощью элементов управления midi.
Мой сын очень доволен. Теперь он может практиковаться в игре на маримбе или ксилофоне почти как на настоящем инструменте.»
MIDI-устройство под управлением Arduino

Уникальное приспособление для приготовления из филе рыбы, индейки и курицы: Домашняя ветчинница Деликатес
9 часов назад
Инновационное тональное средство с антивозрастным эффектом
7 часов назад

Читайте также