Агуулгын хүснэгт:

EAL - Arduino MIDI хянагч: 7 алхам
EAL - Arduino MIDI хянагч: 7 алхам

Видео: EAL - Arduino MIDI хянагч: 7 алхам

Видео: EAL - Arduino MIDI хянагч: 7 алхам
Видео: MIDI-контроллер для Roland SC 55, тест педали среза фильтра TVF 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: Адуино тойрог

Адуино тойрог
Адуино тойрог
Адуино тойрог
Адуино тойрог

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

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

Ашигласан материал:

1 ширхэг Arduino MEGA 2560

2 ширхэг гэрэл резистор (LDR), суурилуулсан татах эсэргүүцэлтэй (37 мэдрэгчийн багцаас)

1 ширхэг HC-SR04 хэт авианы мэдрэгч

1 ширхэг 74HC14 зургаан талт урвуутай Шмитт гох

2 ширхэг резистор 220 Ом 0.25 Вт

1 ширхэг эсэргүүцэл 1 к Ом 0.25 Вт

1 ширхэг LED бага гүйдэл 2мА

1 ширхэг 100nF керамик конденсатор (цахилгаан хангамжийг салгахын тулд 74HC14 -ийн цахилгаан тээглүүр дээр шууд)

ПХБ -ийн талх эсвэл прототип

2 ширхэг 16 мм цахилгаан хоолой, урт нь 65 мм

1 ширхэг мод, урт 75 см

Наалдамхай тууз

Утас

Алхам 5: I/O жагсаалт

I/O жагсаалт
I/O жагсаалт

Алхам 6: Адуино код

Ноорог 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 kommandoerne нь LDR мэдрэгчийг идэвхжүүлдэг. // MIDI kommandoerne "not on" og "note off" består hver af 3 bittes sent sendes for a serial1 porten // vha det i hardware i MIDI interface. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // библиотек нь ultralydssensor HC-SR04 #TRIGGER_PIN 3-ийг тодорхойлно уу // хэт авианы мэдрэгчийг тодорхойлох #ECHO_PIN хэт мэдрэгчийг тодорхойлох // Arduino pin pin MAX_DISTANCE 100 -ийг тодорхойлох // Ping #define Median 5 -ийн хамгийн их хязгаарыг тодорхойлох // Шинжлэх ухааны хамгийн сүүлийн үеийн стандартууд нь NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing объект үүсгэх. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 файлын байт MIDIByte2; // MIDIByte2 bool klar_note_on = 1 -ийн хувьсах деклараци; // Variabel deklaration for klar_note_on, styrer afsendelse af not on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Variabel deklaration for klar_note_off, styrer afsendelse not off kommando void setup () {pinMode (Senspin1, INPUT); // sæt мэдрэгчийн оролтын pinMode (Senspin2, INPUT); // sæt мэдрэгчийн оролт Serial1.begin (31250); // Serial1 bruges til MIDI kommunikation: 31250 бит/sekundt Serial.begin (9600); // цуваа монитор, тест хүртэл} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - øverste LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar til note on {byte 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; // der skal kun sendes en not 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) {// Denne функцийг буцааж өгдөг MIDI тэмдэглэлийн дугаар, үнэ цэнэ NoteByte байт MIDIB2; шилжүүлэгч (NoteByte) // түүний тодорхойлолтууд MIDIByte2 -ийн тодорхойлолтууд нь Note_Byte {тохиолдолд 0: {MIDIB2 = 0x3C; // тонн 'C'} тасрах; тохиолдол 1: {MIDIB2 = 0x3E; // tonen 'D'} завсарлага; тохиолдол 2: {MIDIB2 = 0x40; // тонн 'E'} завсарлага; тохиолдол 3: {MIDIB2 = 0x41; // тонон 'F'} таслах; тохиолдол 4: {MIDIB2 = 0x43; // тонн 'G'} таслах; тохиолдол 5: {MIDIB2 = 0x45; // тонон 'А'} завсарлага; тохиолдол 6: {MIDIB2 = 0x47; // тонон 'B'} завсарлага; тохиолдол 7: {MIDIB2 = 0x48; // тонн 'C'} тасрах; анхдагч: {MIDIB2 = 0xFF; // хүрээнээс гадуур}} MIDIB2 буцаах; // буцах MIDI тэмдэглэлийн дугаар} байт Hent_tonehojde () {// Denne funktion henter resultat a ultralydsmålingen unsigned 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/см, der ganges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = sonar.ping_median (Дундаж); // ping илгээх, АНУ -д мэдээлэл дамжуулах, дамжуулах, дамжуулах, дамжуулах, дамжуулах; // Omregn tid til afstand i cm (0 = зайны зай) үр дүн = Afstand / 8; // үр дүнг буцааж өгөх; // Returner resultat} void Send_Note_On (byte tonenr) {// Denne funktion sender en enommand on pommido MIDI интерфейс const byte kommando = 0x90; // MIDI суваг 1 const байтын хэмжээ = 0xFF -ийн тухай тэмдэглэл; // volumen / Velocity = 127 Serial1.write (kommando); // kommando дээр тэмдэглэл илгээх Serial1.write (tonenr); // ton nummer илгээх Serial1.write (volumen); // илгээх хэмжээ (хурд)} void Send_Note_Off (байтын хэмжээ) {// Denne функц илгээгчийн тэмдэглэлийг MIDI интерфэйс const байт kommando = 0x80; // MIDI суваг 1 const байтын хэмжээ = 0xFF -ийг анхаарна уу; // volumen / Velocity = 127 Serial1.write (kommando); // kommando Serial1.write (tonenr) тэмдэглэл илгээх; // ton nummer илгээх Serial1.write (volumen); // эзлэхүүнийг илгээх (хурд)}

Алхам 7: MIDI харилцааны үндэс

MIDI (Musical Instrument Digital Interface) нь электрон хөгжмийн зэмсэг болон бусад төхөөрөмжтэй харилцах бүх нийтийн цуваа холбооны протокол юм. Цуваа холболтыг ашигладаг (31250 бит/сек, дамжуулах орчин нь гүйдлийн хэлхээ, хүлээн авагчийн төгсгөлд опто тусгаарлагдсан. 5 зүү DIN холбогчийг ашигладаг. Нэг физик MIDI холболтоор 16 логик холбооны суваг боломжтой байдаг. Олон команд MIDI дээр тодорхойлогддог. стандарт, би энэ төсөлд хоёр тушаалыг ашигладаг бөгөөд эдгээр командууд нь 3 байтаас бүрдэнэ.

a) Командын тухай тэмдэглэл:

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 хүртэл байна

Зөвлөмж болгож буй: