Съдържание:

EAL - MIDI контролер Arduino: 7 стъпки
EAL - MIDI контролер Arduino: 7 стъпки

Видео: EAL - MIDI контролер Arduino: 7 стъпки

Видео: EAL - MIDI контролер Arduino: 7 стъпки
Видео: 7.Несколько потенциометров на мультиплексоре CD74HC4067| Arduino | Midi | Hiduino 2024, Ноември
Anonim
EAL - MIDI контролер Arduino
EAL - MIDI контролер Arduino

Произведено от Søren Østergaard Petersen, OEAAM16EDA

Тази инструкция описва MIDI контролер, базиран на arduino. Това е училищен проект. С помощта на ръката си можете да възпроизвеждате прости мелодии чрез MIDI връзката и свързан MIDI инструмент (или като в този случай преносим компютър, работещ със софтуер на софтсинти). Можете да свирите ноти от мажорна гама, c-d-e-f-g-a-b-c. За да можете да свържете MIDI контролера към преносим компютър, ще ви е необходим интерфейс MIDI към USB като m-audio Uno.

Стъпка 1: Демонстрационно видео

Image
Image

Увеличете силата на звука и се наслаждавайте!

Как работи:

MIDI контролерът използва платка Arduino MEGA 2560. Два светлинни сензора (LDR), вградени в 16 мм електрическа тръба, образуват двойна сензорна система и се използват за създаване на стабилен спусък без фалшиво двойно задействане. Фенерче създава светлинен лъч, когато лъчът е прекъснат от ръката, играеща контролера, сензорът за долна светлина усеща липсващия лъч, а HC-SR04 ултразвуков сензор измерва разстоянието от сензора до ръката.

Измереното разстояние се използва в програмата Arduino за изчисляване и настройване на подходяща стойност на нотата, която да бъде опакована в съобщение MIDI Note On и предаване на MIDI интерфейс. MIDI изходният интерфейс използва шестнадесетичен инвертор 74HC14 и е почти стандартна схема. MIDI комуникацията използва serial1, стандартният сериен порт се използва за отстраняване на грешки.

Когато ръката се движи право нагоре и далеч от светлинния лъч, горният светлинен сензор усеща светлинния лъч отново и съобщението MIDI Note Off се опакова и предава на MIDI изхода.

Зоната за игра между сензорите е около 63 см, а общата дължина на MIDI контролера е около 75 см.

Стъпка 2: Подробности за светлинните сензори

Подробности за сензорите за светлина
Подробности за сензорите за светлина
Подробности за светлинните сензори
Подробности за светлинните сензори

Двата сензора за светлина са монтирани един върху друг, за да образуват двойна сензорна система. Той предотвратява фалшиво задействане, когато се използва правилно в софтуера. Всеки светлинен сензор се състои от фоторезисторен модул, вграден в 16 мм стандартна електрическа тръба. Във всяка тръба е направен прорез с ножовка и фоторезисторната платка може да се натисне в слота. Сензорите са залепени заедно с тиксо и също фиксирани към единия край на парче дърво. Светлините не трябва да могат да достигат до сензорите отзад. Светлинните сензори имат вградени 10k издърпващи се резистори.

Стъпка 3: Подробности за ултразвуковия сензор HC-SR04

Подробности за ултразвуковия сензор HC-SR04
Подробности за ултразвуковия сензор HC-SR04

Ултразвуковият сензор HC-SR04 е фиксиран в другия край на MIDI контролера. Тук се поставя и ярко фенерче, което създава необходимия светлинен лъч.

Стъпка 4: Веригата Aduino

Веригата Aduino
Веригата Aduino
Веригата Aduino
Веригата Aduino

Изходната верига MIDI е основно стандартен шестнадесетичен инвертор 74HC14 и няколко резистора плюс 5 -пинов DIN женски конектор. Схемата 74HC14 управлява MIDI изхода и в същото време осигурява някои средства за защита на платката Arduino срещу „реалния свят“, свързан към MIDI изхода. Допълнителна практическа функция е светодиодът за активност на MIDI, който сигнализира при изпращане на данни.

Използвал съм подходящ прототип на печатна платка за моя хардуер, защото имах много проблеми с лоши връзки на моята дъска. Схемата е направена във Fritzing, pdf копие с висока разделителна способност може да бъде изтеглено чрез натискане на връзката по -долу. Предпочитам да използвам подходяща програма за схеми като Kicad, мисля, че Fritzing е ограничен до всичко друго, освен до най -простите експерименти.

Използвани материали:

1 бр. Arduino MEGA 2560

2 бр. Фоторезистор (LDR) с вграден резистор за изтегляне (от 37 сензорен комплект)

1 бр. HC-SR04 ултразвуков сензор

1 бр. 74HC14 шестнадесетичен инвертиращ спусък на Schmitt

2 броя резистор 220 Ohm 0.25W

1 бр резистор 1k Ohm 0.25W

1 бр LED нисък ток 2mA

1 бр. Керамичен кондензатор 100nF (за отделяне на захранването, директно към захранващите щифтове на 74HC14)

Макетна платка или прототип на печатна платка

2 бр. 16 мм електрическа тръба, дължина 65 мм

1 бр дърво, дължина 75см

Тиксо

Проводници

Стъпка 5: I/O списък

I/O списък
I/O списък

Стъпка 6: Кодът на Aduino

Скицата test_Midi6 използва библиотеката NewPing, която трябва да включите във вашата среда за програмиране на Arduino, за да използвате ултразвуковия сензор HC-SC04. Скицата е коментирана на датски, съжалявам. За да се поддържа добре структурираната скица, се създават отделни функции за различни логически части на скицата и глобалните променливи се избягват най-вече. Потокът на програмата се визуализира в блок -схемата на MIDI контролера pdf.

// 15-05-2017 версия: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Отстраняване на програмата и опростяване на MIDI контролера, както и стилизиране на външна MIDI версия, f.eks и софтуер на компютър. // MIDI контролер може да изпрати тоналност (бележка за командо) hhv. (бележка за коммандо) за en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI командното управление се задейства от en LOB сензор за доббелт, за да скалира лавес и сиккер // откриване на både når hånden lander på brættet (бележка за), samt når hånden fjernes igen (бележка изключена). // MIDI командно управление "бележка на" и "бележка изключена" най -добре след 3 байта, изпратени след серийно1 прехвърляне // във вашия хардуерен опбигиран MIDI интерфейс. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til тригер за задействане на ултразвуков сензор #define ECHO_PIN 2 // Arduino pin til echo pin på ultrasonic # дефинирайте MAX_DISTANCE 100 // Максимално издържане за Ping #дефинирайте медиана 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Създаване на NewPing обект. int Senspin1 = 53; // Подложка LDR1 føler int Senspin2 = 52; // Øverste LDR2 по -байт MIDIByte2; // Variabel декларация за MIDIByte2 bool klar_note_on = 1; // Variabel deklaration for klar_note_on, styler afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Вариабелна декларация за klar_note_off, стилист след добавяне на бележка за изключване на командата void setup () {pinMode (Senspin1, INPUT); // sæt сензорен вход pinMode (Senspin2, INPUT); // вход на сензора за sæt Serial1.begin (31250); // Serial1 bruges до MIDI комуникация: 31250 bit/sekundt Serial.begin (9600); // сериен монитор, til тест} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - подсилен LDR bool сензор2 = digitalRead (Senspin2); // има LDR2 - прехвърля LDR ако (Sensor1 && klar_note_on) // hvis LDR1 активна и кларираща бележка на {байт Note_Byte = Hent_tonehojde (); // Открит тон højde чрез ultralyds сензор MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI note note, værdien 0xFF er out of range Send_Note_On (MIDIByte2); // kald Send_Note_On функция klar_note_on = 0; // der skal kun изпраща бележка за kommando klar_note_off = 1; // най -новата команда е бележка изключена} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal изпраща бележка off kommando gøres det her.. {Send_Note_Off (MIDIByte2); // изпраща бележка off kommando klar_note_off = 0; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // нейният gøres klar til ny note on kommando, hånd er væk fra brædt {klar_note_on = 1; }} байт Hent_MidiByte2 (байт NoteByte) {// Denne функция връща MIDI бележка номер, valgt ud от NoteByte байт MIDIB2; превключвател (NoteByte) // тя дефинира hvilken værdi MIDIByte2 скала, която има ud за фраза на Note_Byte {случай 0: {MIDIB2 = 0x3C; // tonen 'C'} прекъсване; случай 1: {MIDIB2 = 0x3E; // tonen 'D'} прекъсване; случай 2: {MIDIB2 = 0x40; // tonen 'E'} прекъсване; случай 3: {MIDIB2 = 0x41; // tonen 'F'} прекъсване; случай 4: {MIDIB2 = 0x43; // tonen 'G'} прекъсване; случай 5: {MIDIB2 = 0x45; // tonen 'A'} прекъсване; случай 6: {MIDIB2 = 0x47; // tonen 'B'} прекъсване; случай 7: {MIDIB2 = 0x48; // tonen 'C'} прекъсване; по подразбиране: {MIDIB2 = 0xFF; // извън обхват}} връщане MIDIB2; // номер на MIDI бележка за връщане} байт Hent_tonehojde () {// Denne funktion henter Резултат от ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm байтов резултат; // затваряне на spille område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, дер ганг с 2 да tiden и сумата след tiden frem og tilbage. Tid_uS = sonar.ping_median (медиана); // Изпращане на ping, få tid return i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid till afstand i cm (0 = out of range range) resultat = Afstand / 8; // Beregn resultat return resultat; // Резултат за връщане} void Send_Note_On (байт tonenr) {// Denne функция изпращач и бележка за командата на MIDI интерфейс const байт kommando = 0x90; // Забележка относно командата på MIDI канал 1 const байт обем = 0xFF; // обем / скорост = 127 Serial1.write (kommando); // изпращане на бележка към kommando Serial1.write (tonenr); // изпращане на номер на тон Serial1.write (том); // изпращане на обем (скорост)} void Send_Note_Off (байт tonenr) {// Denne функция изпращач бележка изключен командо på MIDI интерфейс const байт kommando = 0x80; // Забележка за коммандо по MIDI канал 1 const байт обем = 0xFF; // обем / скорост = 127 Serial1.write (kommando); // изпращаме бележка off kommando Serial1.write (tonenr); // изпращане на номер на тон Serial1.write (том); // изпращане на обем (скорост)}

Стъпка 7: Основите на MIDI комуникацията

MIDI (цифров интерфейс за музикални инструменти) е универсален сериен комуникационен протокол за свързване на електронни музикални инструменти и други устройства. Използва се серийна комуникация (31250 бита/сек стандартно, използвам две команди в този проект, тези команди се състоят от 3 байта:

а) Забележка по команда:

1. изпращане на байт = 0x90 значение бележка за команда на MIDI канал 1

2. изпращане на байт = 0xZZ ZZ е номер на бележка, използвам диапазона от 0x3C до 0x48

3. изпращане на байт = 0xFF FF = 255, което означава максимален обем, диапазон от 0x00 до 0xFF

б) Забележка Изключена команда: 1. байт изпращане = 0x80 означава команда за изключване на бележка на MIDI канал 1

2. изпращане на байт = 0xZZ ZZ е номер на бележка, използвам диапазона от 0x3C до 0x48

3. изпращане на байт = 0xFF FF = 255, което означава максимален обем, диапазон от 0x00 до 0xFF

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