Мазмуну:

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

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

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

Søren Østergaard Petersen, OEAAM16EDA тарабынан жасалган

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

1 -кадам: Демонстрациялык видео

Image
Image

Үнүн катуулатып, ырахат алыңыз!

Бул кантип иштейт:

MIDI контроллери Arduino MEGA 2560 тактасын колдонот. 16 мм электр түтүгүнө курулган эки жарык (LDR) сенсорлор кош сенсордук системаны түзөт жана жалган кош триггерсиз туруктуу триггерди түзүү үчүн колдонулат. Кол чырак жарык нурун жаратууда, эгерде контроллерди ойноп жаткан кол үзүлгөндө, төмөнкү жарык сенсору жок нурду сезет жана HC-SR04 ультрадыбыштуу сенсор сенсордон колго чейинки аралыкты өлчөйт.

Өлчөнгөн аралык Arduino программасында MIDI интерфейсиндеги MIDI Note On билдирүүсүнө жана өткөрүлүшүнө ылайыктуу номердин маанисин эсептөө жана орнотуу үчүн колдонулат. 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 -кадам: Адуино Circuit

Адуино Circuit
Адуино Circuit
Адуино Circuit
Адуино Circuit

MIDI чыгаруу схемасы негизинен 74HC14 алты бурчтуу инвертору жана бир нече резистор плюс 5 пин DIN аял коннектору. 74HC14 схемасы MIDI чыгарууну айдайт жана ошол эле учурда MIDIге туташкан "чыныгы дүйнөдөн" Arduino тактасын коргоонун кээ бир каражаттарын камсыз кылат. Кошумча практикалык өзгөчөлүк - бул MIDI активдүүлүк LEDы, ал маалымат жөнөтүлгөндө сигнал берет.

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

Колдонулган материалдар:

1 даана Arduino MEGA 2560

2 даана Фото резистор (LDR) орнотулган каршылыгы менен (37 сенсордук комплекттен)

1 даана HC-SR04 УЗИ сенсору

1 даана 74HC14 он алты бурчтуу Шмитт триггери

2 даана резистор 220 Ом 0.25W

1 шт каршылыгы 1k Ohm 0.25W

1 даана LED төмөн ток 2mA

1 даана 100nF керамикалык конденсатор (электр менен камсыз кылуу ажыратуу үчүн, түздөн -түз 74HC14 анын электр казыктары боюнча)

Нан тактасы же PCB прототипи

2 даана 16мм электр түтүгү, узундугу 65мм

1 даана жыгач, узундугу 75 см

Лента

Зымдар

5 -кадам: I/O тизмеси

I/O тизмеси
I/O тизмеси

6 -кадам: Aduino Code

Эскиз 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 "комментарийи" боюнча "эскертүү" боюнча эскертүү 3 байт сомго чейин сериалдын 1 портунда // MIDI интерфейсинин жабдуулары ачылган. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #кошуу // библиотекти колдонуу HC-SR04 ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin tiger pin paster to ultrasonic sensor #dechine ECHO_PINo 2 pin pin echo MAX_DISTANCE 100дү аныктоо // Ping үчүн максималдуу өлчөм #аныктоо медианасы 5 // Аналитикалык маалыматтын алмашуусу NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE) үчүн; // NewPing объектин түзүү. int Senspin1 = 53; // Underste LDR1 издөө Senspin2 = 52; // LDR2 үчүн байт MIDIByte2; // MIDIByte2 болинин вариативдик декларациясы klar_note_on = 1; // Variabel deklaration for klar_note_on, styrer afsendelse af note on kommando. Første kommando er en note on komando bool klar_note_off = 0; // Variabel декларациясы klar_note_off үчүн, стирер жокко чыгарылгандыгын белгилеңиз void setup () {pinMode (Senspin1, INPUT); // сенсор киргизүү pinMode (Senspin2, INPUT); // sæt сенсорунун кириши Serial1.begin (31250); // Serial1 MIDI коммуникациясына өтөт: 31250 бит/sekundt Serial.begin (9600); // сериялык монитор, тестке чейин} void loop () {bool Sensor1 = digitalRead (Senspin1); // LDRs LDR1 - LDR болор Sensor2 = digitalRead (Senspin2); // LDRs LDR2 - эгерде LDR болсо (Sensor1 && klar_note_on) // hvis LDR1 аккаунту жана белгилери боюнча {байт Note_Byte = Hent_tonehojde (); // Hent обону ultralyds сенсор аркылуу MIDIByte2 = Hent_MidiByte2 (Note_Byte) аркылуу; // Hent MidByte2, MIDI эскертме номери, 0xFF чектери Send_Note_On (MIDIByte2) чегинен тышкары; // kald Send_Note_On функциясы klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes not off kommando gøres det her.. {Send_Note_Off (MIDIByte2); // нота жөнөтүү kommando klar_note_off = 0; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // her gøres klar til ny note on kommando, hånd er væk fra brædt {klar_note_on = 1; }} байт Hent_MidiByte2 (байт NoteByte) {// Денне функциясын кайтаруучу MIDI нота номери, ал эми NoteByte байти MIDIB2; switch (NoteByte) // анын аныктамалары MIDIByte2 файлдарынын Note_Byte {case 0: {MIDIB2 = 0x3C; // тон 'C'} тыныгуу; 1 -жагдай: {MIDIB2 = 0x3E; // тон 'D'} тыныгуу; 2 -жагдай: {MIDIB2 = 0x40; // тон "Э"} тыныгуу; 3 -жагдай: {MIDIB2 = 0x41; // тон 'F'} тыныгуу; 4 -жагдай: {MIDIB2 = 0x43; // тон 'G'} тыныгуу; 5 -жагдай: {MIDIB2 = 0x45; // тон "А"} тыныгуу; 6 -жагдай: {MIDIB2 = 0x47; // тон "В"} тыныгуу; 7 -жагдай: {MIDIB2 = 0x48; // тон 'C'} тыныгуу; демейки: {MIDIB2 = 0xFF; // диапазондон}} кайтуу MIDIB2; // кайтаруучу MIDI эскертүүсүнүн номери} байт Hent_tonehojde () {// Денне функциясынын натыйжасы кол коюлбаган int Tid_uS; // mіlt tid i uS байт Afstand; // см см байт натыйжасы; // inddeling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 м/с)/100 = 58, 3uS/см, ганг дарыялары 2 -ден баштап, суммадан баш тартты. Tid_uS = sonar.ping_median (Орточо); // Пинг жөнөтүү, АКШ жана Америка Кошмо Штаттарынын генетикалык маалыматын жөнөтүү Afstand = Tid_uS / Omregningsfaktor; // Колдонуу керек см (0 = тышкы аралык диапазону) натыйжа = Afstand / 8; // Beregn resultat return resultat; // Returner resultat} жараксыз Send_Note_On (байт tonenr) {// Денне функциясын жөнөтүүчү MIDI интерфейсинин конст байтында байт kommando = 0x90; // MIDI канал боюнча 1 эскертүү көлөмү боюнча эскертүү = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // kommando боюнча эскертүү жөнөтүү Serial1.write (tonenr); // тон номерин жөнөтүү Serial1.write (volumen); // көлөмдү жөнөтүү (ылдамдык)} void Send_Note_Off (байт тонен) {// Denne funktion sender note өчүрүү MIDI интерфейси const bayt kommando = 0x80; // MIDI каналынын 1 байт көлөмү боюнча эскертүү = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // нота жөнөтүү kommando Serial1.write (tonenr); // тон номерин жөнөтүү Serial1.write (volumen); // көлөмдү жөнөтүү (ылдамдык)}

7 -кадам: MIDI байланышынын негиздери

MIDI (Musical Instrument Digital Interface) - электрондук музыкалык аспаптарды жана башка түзмөктөрдү туташтыруу үчүн универсалдуу сериялык байланыш протоколу. Сериялык байланыш колдонулат (31250 бит/с, берүүчү чөйрө-бул учурдагы цикл, алуучунун аягында опто-изоляцияланган. 5pin DIN коннекторлору колдонулат. 16 логикалык байланыш каналы бир физикалык MIDI туташуусунда мүмкүн болот. Көптөгөн буйруктар MIDIде аныкталган. стандарт, мен бул долбоордо эки буйрукту колдоном, бул буйруктар 3 байттан турат:

а) Команда жөнүндө эскертүү:

1. байт send = 0x90 MIDI канал 1 боюнча буйрук боюнча эскертүү

2. байт жөнөтүү = 0xZZ ZZ - бул нота номери, мен 0x3Cден 0x48ге чейинки диапазонду колдоном

3. байт жөнөтүү = 0xFF FF = 255 максималдуу көлөмдү билдирет, 0x00дөн 0xFFге чейин

б) Эскертүү өчүрүү буйругу: 1. байт send = 0x80 MIDI канал 1 боюнча эскертүү буйругун билдирет

2. байт жөнөтүү = 0xZZ ZZ - бул нота номери, мен 0x3Cден 0x48ге чейинки диапазонду колдоном

3. байт жөнөтүү = 0xFF FF = 255 максималдуу көлөмдү билдирет, 0x00дөн 0xFFге чейин

Сунушталууда: