Mundarija:

EAL - Arduino MIDI boshqaruvchisi: 7 qadam
EAL - Arduino MIDI boshqaruvchisi: 7 qadam

Video: EAL - Arduino MIDI boshqaruvchisi: 7 qadam

Video: EAL - Arduino MIDI boshqaruvchisi: 7 qadam
Video: Модули MIDI для Arduino. Создавай и объединяй музыкальные инструменты. Железки Амперки 2024, Iyul
Anonim
EAL - Arduino MIDI boshqaruvchisi
EAL - Arduino MIDI boshqaruvchisi

Søren Ostergaard Petersen, OEAAM16EDA tomonidan ishlab chiqarilgan

Bu ko'rsatma arduino -ga asoslangan MIDI tekshirgichini tasvirlaydi. Bu maktab loyihasi. Qo'lingizdan foydalanib, siz MIDI ulanishi va ulangan MIDI vositasi (yoki bu holatda, softsynth dasturiy ta'minoti bilan ishlaydigan daftar) orqali oddiy ohanglarni ijro eta olasiz. Siz C-d-e-f-g-a-b-c keng miqyosli eslatmalarni ijro etishingiz mumkin. Noutbukga MIDI tekshirgichini ulash uchun sizga m-audio Uno kabi MIDI-USB interfeysi kerak bo'ladi.

1 -qadam: Namoyish videosi

Image
Image

Ovoz balandligini oshiring va zavqlaning!

U qanday ishlaydi:

MIDI tekshiruvi Arduino MEGA 2560 kartasidan foydalanadi. 16 mm elektr trubkaga o'rnatilgan ikkita yorug'lik (LDR) datchiklari ikkita sensorli tizimni tashkil qiladi va ular noto'g'ri tetiksiz turg'un tetikni yaratish uchun ishlatiladi. Chiroq yorug'lik nurini yaratadi, agar nurni qo'lda boshqaruvchi to'xtatib tursa, pastki yorug'lik sensori yo'qolgan nurni sezadi va HC-SR04 ultratovush sensori sensordan qo'ligacha bo'lgan masofani o'lchaydi.

O'lchangan masofa Arduino dasturida MIDI Note On xabariga va MIDI interfeysida uzatishga mos yozuvlar sonining qiymatini hisoblash va sozlash uchun ishlatiladi. MIDI chiqish interfeysi 74HC14 olti burchakli inverterni ishlatadi va deyarli standart sxema hisoblanadi. MIDI aloqasi serial1 -ni ishlatadi, standart ketma -ket port disk raskadrovka uchun ishlatiladi.

Qo'l to'g'ridan -to'g'ri va yorug'lik nuridan uzoqlashganda, yuqori yorug'lik sensori yana nurni sezadi va MIDI Note Off xabari yig'iladi va MIDI chiqishiga uzatiladi.

Sensorlar orasidagi o'yin maydoni taxminan 63 sm, MIDI boshqaruvining umumiy uzunligi esa 75 sm atrofida.

2 -qadam: yorug'lik sensori tafsilotlari

Nur sensori tafsilotlari
Nur sensori tafsilotlari
Nur sensori tafsilotlari
Nur sensori tafsilotlari

Ikkita yorug'lik sensori bir -birining ustiga o'rnatilgan bo'lib, ikkita sensorli tizim hosil qiladi. Bu dasturiy ta'minotda to'g'ri ishlatilganda noto'g'ri ishga tushirishni oldini oladi. Har bir yorug'lik sensori 16 mm standart elektr trubkaga o'rnatilgan foto qarshilik modulidan iborat. Har bir trubkada arra bilan teshik yasalgan va uning ichiga rezistorli PCB uyasiga bosish mumkin. Datchiklar yopishqoq lenta bilan yopishtirilgan, shuningdek yog'ochning bir chetiga mahkamlangan. Hech qanday yorug'lik sensorlarga orqadan kira olmasligi kerak. Yorug'lik datchiklari 10k tortish qarshiligiga ega.

3-qadam: HC-SR04 ultratovush sensori tafsilotlari

HC-SR04 ultratovush sensori tafsilotlari
HC-SR04 ultratovush sensori tafsilotlari

HC-SR04 ultra tovushli sensori MIDI tekshirgichining boshqa uchiga o'rnatiladi. Bu erda ham yorqin chiroq o'rnatilgan, u kerakli yorug'lik nurini yaratadi.

4 -qadam: Aduino davri

Aduino davri
Aduino davri
Aduino davri
Aduino davri

MIDI chiqish sxemasi, asosan, 74HC14 olti burchakli standart inverter va bir nechta qarshilik va 5 pinli DINli ayol konnektori. 74HC14 sxemasi MIDI chiqishini boshqaradi va shu bilan birga Arduino kartasini MIDIga ulangan "haqiqiy dunyo" dan himoya qilishning ba'zi vositalarini ta'minlaydi. Qo'shimcha amaliy xususiyat - bu ma'lumot yuborilganda signal beradigan MIDI faolligi LED.

Men uskuna uchun mos PCB prototipidan foydalandim, chunki men non panelidagi noto'g'ri ulanish bilan bog'liq ko'p muammolarga duch keldim. Sxema Fritzingda qilingan, yuqori aniqlikdagi pdf nusxasini quyidagi havolani bosish orqali yuklab olish mumkin. Men Kicad kabi to'g'ri sxemalar dasturidan foydalanishni afzal ko'raman, menimcha Fritzing eng oddiy tajribalardan boshqa hamma narsa bilan cheklangan.

Amaldagi materiallar:

1 dona Arduino MEGA 2560

2 dona o'rnatilgan rezistorli foto qarshilik (LDR) (37 ta sensorlar to'plamidan)

1 dona HC-SR04 ultratovush sensori

1 dona 74HC14 olti burchakli teskari Shmitt tetiği

2 dona rezistor 220 Ohm 0,25 Vt

1 dona qarshilik 1k Ohm 0,25 Vt

1 dona LED past oqim 2mA

1 dona 100nF sopol kondansatör (quvvat manbai ajratish uchun, to'g'ridan -to'g'ri 74HC14 quvvat pimlarida)

Non paneli yoki PCB prototipi

2 dona 16 mm elektr trubkasi, uzunligi 65 mm

Uzunligi 75 sm bo'lgan 1 dona yog'och

Yopishqoq lenta

Simlar

5 -qadam: I/U ro'yxati

I/U ro'yxati
I/U ro'yxati

6 -qadam: Aduino kodi

Test_Midi6 eskizi HC-SC04 ultrasonik sensoridan foydalanish uchun siz Arduino dasturlash muhitiga kiritishingiz kerak bo'lgan NewPing kutubxonasidan foydalanadi. Eskizga Daniya tilida izoh berilgan, uzr.. Eskizni yaxshi tuzilgan holda saqlash uchun, eskizning har xil mantiqiy qismlari uchun alohida funktsiyalar tuzilgan va global o'zgaruvchilardan qochish mumkin. Dastur oqimi pdf MIDI nazoratchi oqim jadvalida tasvirlangan.

// 15-05-2017 versiyasi: test_Midi6

// Segen Ostergaard Petesen // Arduino MEGA 2560 // MIDI -ni boshqaruvchi dastur MIDI -ni boshqaradigan dastur bo'lib, u kompyuterda va kompyuterda o'rnatiladi. // MIDI nazorat qilish uchun ovozli signal (kommando haqida eslatma) hhv. (kommandoga e'tibor bering) C-C, C dur skala uchun. // Darslar "karate hånd" va boshqalar orqali amalga oshiriladi. MIDI qo'mondonligi LDR sensorini ishga tushiradi, bu esa o'z navbatida bizni aniqlay olmaydi (eslatib o'tamiz). // MIDI buyrug'i "eslatmani o'chirib tashlash" haqida eslatmalar ketma -ket 1 baytdan keyin 3 baytni tashkil qiladi // MIDI interfeysi bilan jihozlangan. // HC-SR04 ultralydssensor orqali eng yaxshi natijalar #qo'shish // bibliotek, HC-SR04 ultralydssensor #deguine TRIGGER_PIN 3 // ultratovush sensori uchun aniqlang #ECHO_PIN 2-sonli ulanish sensori // Arduino pin tili MAX_DISTANCE 100 ni belgilang // Ping #define Median 5 uchun eng katta masofa // eng yaxshi ma'lumotni olish uchun NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing ob'ektini yaratish. int Senspin1 = 53; // Underste LDR1 qidiruvi Senspin2 = 52; // LDR2 formatidagi bayt MIDIByte2; // MIDIByte2 uchun o'zgaruvchan deklaratsiya bool klar_note_on = 1; // Variabel deklaration for klar_note_on, styrer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Variabel deklaration for klar_note_off, styrer afsendelse not not off kommando void setup () {pinMode (Senspin1, INPUT); // kirish sensori pinMode (Senspin2, INPUT); // sæt sensorli kirish Serial1.begin (31250); // Serial1 MIDI kommunikatsiyasiga ega: 31250 bit/sekundt Serial.begin (9600); // ketma -ket monitor, testgacha} void loop () {bool Sensor1 = digitalRead (Senspin1); // LDRs LDR1 - pastki LDR bool Sensor2 = digitalRead (Senspin2); // LDRs LDR2 - agar LDR bo'lsa (Sensor1 && klar_note_on) // HDR LDR1 aktyorlar va yozuvlar bo'yicha {bayt Note_Byte = Hent_tonehojde (); // Ultralyds sensori orqali ovoz balandligi hidi MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI eslatma raqami, Send_Note_On (MIDIByte2) diapazonidan tashqari 0xFF; // kald Send_Note_On funktsiyasida 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 note off kommando gøres det.. {Send_Note_Off (MIDIByte2); // eslatmani yuboring kommando klar_note_off = 0; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // kommando -dagi har bir narsani eslatib o'tamiz, bu erda hamma narsa bor {klar_note_on = 1; }} bayt Hent_MidiByte2 (bayt NoteByte) {// Denni funktsiyalarini qaytaruvchi MIDI eslatmalar raqami, MIDBB2 baytiga NoteByte; switch (NoteByte) // uning aniqlagichlari MIDIByte2 -ni aniqlagan holda, Note_Byte -da 0 ta holat mavjud: {MIDIB2 = 0x3C; // tonna 'C'} tanaffus; 1 -holat: {MIDIB2 = 0x3E; // tonnali 'D'} tanaffus; 2 -holat: {MIDIB2 = 0x40; // tonna "E"} tanaffus; 3 -holat: {MIDIB2 = 0x41; // tonna 'F'} tanaffus; 4 -holat: {MIDIB2 = 0x43; // tonna 'G'} tanaffus; 5 -holat: {MIDIB2 = 0x45; // "A" tonnali tanaffus; 6 -holat: {MIDIB2 = 0x47; // tonna 'B'} tanaffus; 7 -holat: {MIDIB2 = 0x48; // tonna 'C'} tanaffus; standart: {MIDIB2 = 0xFF; // diapazondan}} qaytish MIDIB2; // qaytaruvchi MIDI eslatma raqami} bayt Hent_tonehojde () {// Denne funktsiyasining natijasi ultraldsmålingen imzosiz int Tid_uS; // ma 'lum tid i uS bayt Afstand; // bir sm bayt natija beradi; // indideling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/sm, der ganges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = sonar.ping_median (o'rtacha); // Ping yuborish, uS va boshqa ma'lumotlarni yuborish O'rtacha ma'lumot Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = masofa diapazoni) natijasi = Afstand / 8; // natijani qaytarish natijasini bekor qilish; // Returner natijasi} void Send_Note_On (bayt tonenr) {// Denni funktsiyalarini jo'natuvchi MIDI interfeysi uchun eslatma yozadi, bayt kommando = 0x90; // MIDI kanal 1 -bayt volumen = 0xFF buyrug'iga e'tibor bering; // volumen / Tezlik = 127 Serial1.write (kommando); // kommando haqida eslatma yuborish Serial1.write (tonenr); // ohang raqamini yuborish Serial1.write (volumen); // jo'natish hajmi (tezlik)} void Send_Note_Off (bayt tonenr) {// Denne funktsiyasi yuboruvchining eslatmasi o'chirilgan MIDI interfeysi const bayt kommando = 0x80; // MIDI kanalining 1 bayt hajmiga e'tibor bering = 0xFF; // volumen / Tezlik = 127 Serial1.write (kommando); // eslatmani yuborish kommando Serial1.write (tonenr); // ohang raqamini yuborish Serial1.write (volumen); // hajmni yuborish (tezlik)}

7 -qadam: MIDI aloqa asoslari

MIDI (Musiqiy asboblar raqamli interfeysi) - bu elektron musiqa asboblari va boshqa qurilmalarni o'zaro bog'lash uchun universal ketma -ket aloqa protokoli. Ketma-ket aloqa ishlatiladi (31250 bit/s, uzatish vositasi-bu tok uzuk, qabul qiluvchining uchida opto-izolyatsiya qilingan. 5 pinli DIN ulagichlari ishlatiladi. Bir jismoniy MIDI ulanishida 16 ta mantiqiy aloqa kanali mumkin. MIDIda ko'p buyruqlar aniqlangan. standart, men bu loyihada ikkita buyruqdan foydalanaman, bu buyruqlar 3 baytdan iborat:

a) Buyruq haqida eslatma:

1. bayt yuborish = 0x90, MIDI 1 kanalidagi buyruq haqida eslatma

2. bayt yuborish = 0xZZ ZZ - bu eslatma raqami, men 0x3C dan 0x48 oralig'ini ishlataman

3. bayt yuborish = 0xFF FF = 255, maksimal hajm, 0x00 dan 0xFF oralig'ini bildiradi

b) Eslatma o'chirish buyrug'i: 1. bayt yuborish = 0x80 MIDI 1 -kanalda eslatma o'chirish buyrug'ini bildiradi

2. bayt yuborish = 0xZZ ZZ - bu eslatma raqami, men 0x3C dan 0x48 oralig'ini ishlataman

3. bayt yuborish = 0xFF FF = 255, maksimal hajm, 0x00 dan 0xFF oralig'ini bildiradi

Tavsiya: