Мазмұны:

EAL - Arduino MIDI контроллері: 7 қадам
EAL - Arduino MIDI контроллері: 7 қадам

Бейне: EAL - Arduino MIDI контроллері: 7 қадам

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

Сорен Остергаард Петерсен жасаған, OEAAM16EDA

Бұл нұсқаулық ардуиноға негізделген MIDI контроллерін сипаттайды. Бұл мектеп жобасы. Қолыңызды қолдана отырып, сіз MIDI қосылымы мен қосылған MIDI құралы арқылы қарапайым әуендерді ойнай аласыз (немесе бұл жағдайда softsynth бағдарламалық жасақтамасы бар ноутбук). Сіз ноталарды C негізгі масштабынан ойнай аласыз, c-d-e-f-g-a-b-c. MIDI контроллерін ноутбукке қосу үшін сізге m-audio Uno сияқты MIDI мен USB интерфейсі қажет болады.

1 -қадам: демонстрациялық бейне

Image
Image

Дыбыс деңгейін жоғарылатыңыз және ләззат алыңыз!

Бұл қалай жұмыс істейді:

MIDI контроллері Arduino MEGA 2560 тақтасын пайдаланады. 16 мм электр түтігіне салынған екі жарық сенсоры қос сенсорлық жүйені құрайды және жалған қос триггерсіз тұрақты триггерді құру үшін қолданылады. Шам жарық сәулесін жасайды, егер сәуле контроллерді ойнататын қолмен үзілсе, төменгі жарық сенсоры жоқ сәулені сезеді, ал ультрадыбыстық HC-SR04 сенсордан қолға дейінгі қашықтықты өлшейді.

Өлшенетін қашықтық Arduino бағдарламасында MIDI Note On хабарламасына және MIDI интерфейсінде таратуға сәйкес келетін нота нөмірінің мәнін есептеуге және орнатуға арналған. MIDI шығыс интерфейсі 74HC14 он алтылық түрлендіргішті қолданады және стандартты схема болып табылады. MIDI байланысы serial1 пайдаланады, стандартты сериялық порт күйін келтіру үшін қолданылады.

Қолды тікелей жарық сәулесінен жоғары және алысқа жылжытқанда, жоғарғы жарық сенсоры қайтадан жарық сәулесін сезеді және MIDI Note Off хабарламасы оралады және MIDI шығысына жіберіледі.

Сенсорлар арасындағы ойын алаңы шамамен 63 см, ал MIDI контроллерінің жалпы ұзындығы шамамен 75 см.

2 -қадам: Жарық сенсорлары туралы мәліметтер

Жарық сенсорлары туралы мәліметтер
Жарық сенсорлары туралы мәліметтер
Жарық сенсорлары туралы мәліметтер
Жарық сенсорлары туралы мәліметтер

Екі жарық сенсоры қос датчик жүйесін құру үшін бір -бірінің үстіне орнатылған. Бұл бағдарламалық қамтамасыз етуде дұрыс қолданылған кезде жалған іске қосудың алдын алады. Әрбір жарық сенсоры 16 мм стандартты электр түтігіне салынған фото резисторлық модульден тұрады. Әр түтікте темір қарақшасы бар слот жасалады және ұяға фото резисторлы ПХД басуға болады. Сенсорлар жабысқақ таспамен бекітілген, сонымен қатар ағаштың бір ұшына бекітілген. Ешқандай жарық сенсорларға арт жағынан жете алмауы керек. Жарық сенсорлары 10к тартқыш резисторға салынған

3-қадам: HC-SR04 ультрадыбыстық сенсорының мәліметтері

HC-SR04 ультрадыбыстық сенсорының мәліметтері
HC-SR04 ультрадыбыстық сенсорының мәліметтері

HC-SR04 ультра дыбыстық сенсор MIDI контроллерінің екінші ұшына бекітілген. Мұнда да жарық фонарь орнатылған, ол қажетті жарық сәулесін жасайды.

4 -қадам: Адуино схемасы

Адуино схемасы
Адуино схемасы
Адуино схемасы
Адуино схемасы

MIDI шығыс схемасы негізінен 74HC14 алтыбұрышты стандартты инверторы және бірнеше резисторлар мен 5 істікшелі DIN аналық коннекторы болып табылады. 74HC14 схемасы MIDI шығысын басқарады және сонымен бірге Arduino тақтасын MIDI -ге қосылған «нақты әлемнен» қорғаудың кейбір құралдарын ұсынады. Қосымша практикалық мүмкіндік - бұл деректер жіберілген кезде сигнал беретін MIDI белсенділік светодиоды.

Мен аппараттық құралға сәйкес ПХД прототипін қолдандым, себебі менде тақтада нашар байланыстармен көптеген проблемалар болды. Схема Fritzing -де жасалған, жоғары ажыратымдылығы бар pdf көшірмесін төмендегі сілтемені басу арқылы жүктеуге болады. Мен Kicad сияқты тиісті схемалық бағдарламаны қолданғанды жөн көремін, менің ойымша, Фритзинг қарапайым эксперименттерден басқа ештеңемен шектелмейді.

Қолданылған материалдар:

1 дана Arduino MEGA 2560

2 дана кіріктірілген тартқыш резисторы бар фото резистор (LDR) (37 сенсор жинағынан)

1 дана HC-SR04 ультрадыбыстық сенсор

1 дана 74HC14 алты бұрышты Шмитт триггері

2 дана резистор 220 Ом 0,25 Вт

1 дана резистор 1к Ом 0,25Вт

1 дана төмен ток 2мА жарықдиодты

1 дана 100nF керамикалық конденсатор (электрмен жабдықтауды ажырату үшін, тікелей 74HC14 қуат түйреуіштерінде)

Нан тақтасы немесе ПХД прототипі

2 дана 16 мм электр түтігі, ұзындығы 65 мм

1 дана ағаш, ұзындығы 75см

Жабысқақ таспа

Сымдар

5 -қадам: енгізу -шығару тізімі

I/O тізімі
I/O тізімі

6 -қадам: Aduino коды

Test_Midi6 эскизі HC-SC04 ультрадыбыстық датчигін пайдалану үшін Arduino бағдарламалау ортасына қосылуы тиіс NewPing кітапханасын пайдаланады. Эскиз дания тілінде түсіндірілген, кешірім сұраймыз. Эскизді жақсы құрылымда ұстау үшін эскиздің әр түрлі логикалық бөліктері үшін бөлек функциялар құрастырылады және глобальды айнымалыларға жол берілмейді. Бағдарлама ағыны MIDI контроллерінің pdf схемасында бейнеленген.

// 15-05-2017 нұсқасы: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // MIDI контроллері қарапайым MIDI контроллерлерімен жұмыс істейді, бұл компьютерге MIDI қосуға мүмкіндік береді. // MIDI контроллері сенсорлы емес (коммандо туралы ескертпе) hhv. (kommando ескертуі) en oktav C-C, C dur skala үшін. // «Қарате» бағдарламасын қарау керек, бірақ сенсорлық бақылау. MIDI командалары LDR датчиктерін қосады, сонымен қатар оларды өшіруге мүмкіндік береді. // MIDI командалық «ескертпе» туралы ескертпе «үздіксіз» сериялы 1 порт үшін 3 байт соманы құрайды // MIDI интерфейсінің аппараттық құралдарын қосады. // HC-SR04 ультрадыбыстық сенсорға арналған ең жақсы мүмкіндіктер #қосу // библиотека HC-SR04 ультрадыбыстық сенсорды анықтау #TRIGGER_PIN 3 анықтаңыз // ультрадыбыстық сенсорға арналған ECHO_PIN 2 датчиктерін анықтаңыз // Arduino pin pin MAX_DISTANCE 100 анықтаңыз // Ping үшін максималды ауқым #анықтаңыз Median 5 // Түсіндірудің жаңа нұсқалары NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE) үшін; // NewPing нысанын құру. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler байт MIDIByte2; // MIDIByte2 bool үшін вариативті декларация klar_note_on = 1; // klar_note_on үшін нұсқалық декларация, kommando туралы ескертпе. // Variabel декларациясы klar_note_off үшін, өшіргішті өшіруді ұмытпаңыз () {pinMode (Senspin1, INPUT); // sæt сенсорының кіріс pinMode (Senspin2, INPUT); // sæt сенсорының кірісі Serial1.begin (31250); // Serial1 MIDI хабарламасына дейін: 31250 бит/секунд Serial.begin (9600); // сериялық монитор, тестке дейін} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - асты LDR боль Sensor2 = digitalRead (Senspin2); // lDRs LDR2 - егер LDR болса (Sensor1 && klar_note_on) // hvis LDR1 файлды өзгертуге {байтты Note_Byte = Hent_tonehojde (); // Ультралидс сенсоры арқылы өтетін дыбыстық сигнал MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI жазбасының нөмірі, Send_Note_On (MIDIByte2) ауқымынан тыс 0xFF; // kald Send_Note_On функциясы klar_note_on = 0; // дербес есеп kommando туралы ескерту klar_note_off = 1; // næste kommando er not off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes not note off kommando gøres det…. {Send_Note_Off (MIDIByte2); // жазбаны жіберу kommando klar_note_off = 0; // дереу шолу жасаңыз, егер сіз! }} байт Hent_MidiByte2 (байт NoteByte) {// Denne функциясын қайтарушы MIDI жазбасының нөмірі, MIDBB2 байтына NotByte байт; switch (NoteByte) // оның анықтаушылары MIDIByte2 анықтамасы Note_Byte {0 жағдайда: {MIDIB2 = 0x3C; // тоник 'С'} үзіліс; 1 -жағдай: {MIDIB2 = 0x3E; // тонус 'D'} үзіліс; 2 -жағдай: {MIDIB2 = 0x40; // тондық 'E'} үзіліс; 3 -жағдай: {MIDIB2 = 0x41; // тоник 'F'} үзіліс; 4 -жағдай: {MIDIB2 = 0x43; // тонус 'G'} үзіліс; 5 -жағдай: {MIDIB2 = 0x45; // тондық 'A'} үзіліс; 6 -жағдай: {MIDIB2 = 0x47; // тонус 'B'} үзіліс; 7 жағдай: {MIDIB2 = 0x48; // тоник 'С'} үзіліс; әдепкі: {MIDIB2 = 0xFF; // ауқымнан тыс}} MIDIB2 қайтару; // қайтарушы MIDI ескертпе нөмірі} байт Hent_tonehojde () {// Деннис функциялары ультрадыбыстық емес таңбаланған int Tid_uS; // Америка Құрама Штаттарының байттары; // сантиметрлік байт нәтижесі; // біртіндеп өзгеріп шығуы Omregningsfaktor = 58.3; // 2*(1/343 м/с)/100 = 58, 3uS/см, der ganges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = sonar.ping_median (Медиана); // Пинг жіберу, АҚШ пен АҚШ -тың арасындағы қарым -қатынасты жою, орташа есеппен Afstand = Tid_uS / Omregningsfaktor; // Бірнеше см қашықтықта (0 = сыртқы қашықтық диапазонында) нәтиже = Afstand / 8; // нәтижені қайтару нәтижесін беру; // Returner нәтижесі} void Send_Note_On (байт тонен) {// Денне функциясының жіберушісі MIDI интерфейсіндегі жазбаның жазбасында kommando = 0x90; // MIDI арнасының 1 -байт көлемі бойынша ескерту = 0xFF; // көлем / Жылдамдық = 127 Serial1.write (kommando); // kommando туралы жазбаны жіберу Serial1.write (tonenr); // тон нөмірін жіберу Serial1.write (volumen); // көлемді жіберу (жылдамдық)} void Send_Note_Off (байт тонен) {// Denne функциясын жіберуші жазбаны MIDI интерфейсіндегі const байтты kommando = 0x80; // MIDI арнасының 1 байт көлемі = 0xFF; // көлем / Жылдамдық = 127 Serial1.write (kommando); // жазбаны жіберу kommando Serial1.write (tonenr); // тон нөмірін жіберу Serial1.write (volumen); // көлемді жіберу (жылдамдық)}

7 -қадам: MIDI байланысының негіздері

MIDI (Musical Instrument Digital Interface) - бұл электронды музыкалық аспаптар мен басқа да құрылғыларды байланыстыруға арналған әмбебап сериялық байланыс хаттамасы. Сериялық байланыс қолданылады (31250 бит/с, беріліс ортасы-бұл ағымдық цикл, қабылдағыштың шетінде опто-оқшауланған. 5 істікшелі DIN коннекторлары пайдаланылады. Бір логикалық байланыс MIDI-де 16 логикалық байланыс арнасы мүмкін. MIDI-де көптеген командалар анықталған. стандартты, мен бұл жобада екі пәрменді қолданамын, бұл командалар 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 диапазоны

Ұсынылған: