Съдържание:
- Стъпка 1: Демонстрационно видео
- Стъпка 2: Подробности за светлинните сензори
- Стъпка 3: Подробности за ултразвуковия сензор HC-SR04
- Стъпка 4: Веригата Aduino
- Стъпка 5: I/O списък
- Стъпка 6: Кодът на Aduino
- Стъпка 7: Основите на MIDI комуникацията
Видео: EAL - MIDI контролер Arduino: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Произведено от Søren Østergaard Petersen, OEAAM16EDA
Тази инструкция описва MIDI контролер, базиран на arduino. Това е училищен проект. С помощта на ръката си можете да възпроизвеждате прости мелодии чрез MIDI връзката и свързан MIDI инструмент (или като в този случай преносим компютър, работещ със софтуер на софтсинти). Можете да свирите ноти от мажорна гама, c-d-e-f-g-a-b-c. За да можете да свържете MIDI контролера към преносим компютър, ще ви е необходим интерфейс MIDI към USB като m-audio Uno.
Стъпка 1: Демонстрационно видео
Увеличете силата на звука и се наслаждавайте!
Как работи:
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 е фиксиран в другия край на MIDI контролера. Тук се поставя и ярко фенерче, което създава необходимия светлинен лъч.
Стъпка 4: Веригата 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 списък
Стъпка 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
Препоръчано:
IOT DMX контролер с Arduino и Stage Monster Live: 6 стъпки
IOT DMX контролер с Arduino и Stage Monster Live: Контролирайте сценичното осветление и други DMX устройства от вашия телефон или друго устройство, поддържащо уеб. Ще ви покажа как бързо и лесно да изградите свой собствен DMX контролер, който работи на платформата Stage Monster Live, използвайки Arduino Mega
Arduino контролер за светофари, използващ RBG Led - 4-посочен: 3 стъпки
Arduino контролер за светофари, използващ RBG Led | 4-посочен: В тази публикация ще научите как да направите контролер за светофар Arduino. Този контролер на светофара ще се използва за контрол на потока на трафика. Те могат да се прилагат в райони с голям трафик, за да се избегнат блокиране на трафика или инциденти
Arduino базиран DIY контролер за игри - Arduino PS2 контролер за игри - Възпроизвеждане на Tekken с DIY Arduino геймпад: 7 стъпки
Arduino базиран DIY контролер за игри | Arduino PS2 контролер за игри | Игра на Tekken с DIY Arduino геймпад: Здравейте момчета, играта на игри винаги е забавна, но играта със собствения си DIY персонализиран контролер на играта е по -забавна. Така че ще направим контролер за игра, използвайки arduino pro micro в тази инструкция
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: 4 стъпки
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: Здравейте производители, наскоро започнах да отглеждам гъби у дома, гъби стриди, но вече имам 3 пъти от тези контролери у дома за контрол на температурата на ферментатора за моята домашна напитка, съпруга също прави това нещо Комбуча сега и като термостат за топлина
Разбъркване на NES контролер (Nintendo контролер MP3, V3.0): 5 стъпки (със снимки)
Разбъркване на контролера на NES (Nintendo Controller MP3, V3.0): Напълно изтръгнах ryan97128 от неговия дизайн за Nintendo Controller MP3, версия 2.0 и чувам, че той е получил идеята от всички мъдри Morte_Moya, така че не мога да взема кредит за целия им гений. Просто исках да добавя удобство и презареждане