Daftar Isi:
- Langkah 1: Video Demonstrasi
- Langkah 2: Detail Sensor Cahaya
- Langkah 3: Detail Sensor Ultrasonik HC-SR04
- Langkah 4: Sirkuit Aduino
- Langkah 5: Daftar I/O
- Langkah 6: Kode Aduino
- Langkah 7: Dasar-dasar Komunikasi MIDI
Video: EAL - Pengontrol MIDI Arduino: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
Dibuat oleh Søren stergaard Petersen, OEAAM16EDA
Instruksi ini menjelaskan pengontrol MIDI berbasis arduino. Ini adalah proyek sekolah. Dengan menggunakan tangan Anda, Anda dapat memainkan melodi sederhana melalui koneksi MIDI dan instrumen MIDI yang terhubung (atau seperti dalam hal ini notebook yang menjalankan perangkat lunak softsynth). Anda dapat memainkan nada dari tangga nada C mayor, c-d-e-f-g-a-b-c. Untuk dapat menghubungkan pengontrol MIDI ke notebook, Anda memerlukan antarmuka MIDI ke USB seperti m-audio Uno.
Langkah 1: Video Demonstrasi
Naikkan volume dan nikmatilah!
Bagaimana itu bekerja:
Kontroler MIDI menggunakan papan Arduino MEGA 2560. Dua sensor cahaya (LDR) yang terpasang pada tabung listrik 16mm membentuk sistem sensor ganda dan digunakan untuk membuat pemicu stabil tanpa pemicu ganda palsu. Sebuah senter menciptakan berkas cahaya, ketika sinar itu terganggu oleh tangan yang memainkan pengontrol, sensor cahaya yang lebih rendah merasakan sinar yang hilang, dan sensor ultrasonik HC-SR04 mengukur jarak dari sensor ke tangan.
Jarak yang diukur digunakan dalam program Arduino untuk menghitung dan mengatur nilai nomor not yang sesuai untuk dikemas ke dalam pesan dan pemancar MIDI Note On pada antarmuka MIDI. Antarmuka keluaran MIDI menggunakan inverter hex 74HC14 dan merupakan rangkaian standar. Komunikasi MIDI menggunakan serial1, port serial standar digunakan untuk debugging.
Ketika tangan digerakkan lurus ke atas dan menjauhi berkas cahaya, sensor cahaya atas merasakan berkas cahaya lagi dan pesan MIDI Note Off dikemas dan ditransmisikan pada output MIDI.
Area bermain di antara sensor sekitar 63cm, dan panjang total pengontrol MIDI sekitar 75cm.
Langkah 2: Detail Sensor Cahaya
Kedua sensor cahaya dipasang di atas satu sama lain untuk membentuk sistem sensor ganda. Ini mencegah pemicu palsu ketika digunakan dengan benar dalam perangkat lunak. Setiap sensor cahaya terdiri dari modul resistor foto yang dibangun ke dalam tabung listrik standar 16 mm. Sebuah slot dibuat di setiap tabung dengan gergaji besi dan PCB foto resistor dapat ditekan ke dalam slot. Sensor direkatkan dengan selotip dan juga dipasang di salah satu ujung kayu. Tidak ada cahaya yang dapat mencapai sensor dari belakang. Sensor cahaya memiliki resistor pull-up 10k.
Langkah 3: Detail Sensor Ultrasonik HC-SR04
Sensor ultra sonik HC-SR04 dipasang di ujung lain pengontrol MIDI. Senter terang ditempatkan di sini juga, itu menciptakan sinar yang diperlukan.
Langkah 4: Sirkuit Aduino
Rangkaian output MIDI pada dasarnya adalah inverter hex 74HC14 standar dan beberapa resistor ditambah konektor 5 pin DIN female. Sirkuit 74HC14 menggerakkan output MIDI dan pada saat yang sama memberikan beberapa sarana perlindungan untuk papan Arduino terhadap "dunia nyata" yang terhubung ke MIDI keluar. Fitur ekstra praktis adalah LED aktivitas MIDI yang memberi sinyal saat data dikirim.
Saya telah menggunakan prototipe PCB yang tepat untuk perangkat keras saya karena saya memiliki banyak masalah dengan koneksi yang buruk pada papan tempat memotong roti saya. Skema dibuat di Fritzing, salinan pdf resolusi tinggi dapat diunduh dengan menekan tautan di bawah ini. Saya lebih suka menggunakan program skema yang tepat seperti Kicad, saya pikir Fritzing terbatas untuk apa pun kecuali eksperimen yang paling sederhana.
Bahan-bahan yang digunakan:
1 buah Arduino MEGA 2560
2 buah Photo resistor (LDR) dengan resistor pull up built-in (dari 37 kit sensor)
1 buah sensor ultrasonik HC-SR04
1 pcs 74HC14 hex pembalik Schmitt pemicu
2 buah resistor 220 Ohm 0.25W
1 buah resistor 1k Ohm 0.25W
1 pcs LED arus rendah 2mA
1 buah kapasitor keramik 100nF (untuk decoupling catu daya, langsung di pin daya 74HC14)
Papan tempat memotong roti atau prototipe PCB
2 pcs 16mm tabung listrik, panjang 65mm
1 buah kayu, panjang 75cm
Lakban
kabel
Langkah 5: Daftar I/O
Langkah 6: Kode Aduino
Sketsa test_Midi6 menggunakan perpustakaan NewPing yang harus Anda sertakan dalam lingkungan pemrograman Arduino Anda, untuk menggunakan sensor ultrasonik HC-SC04. Sketsa dikomentari dalam bahasa Denmark, maaf.. Untuk menjaga agar sketsa tetap terstruktur dengan baik, fungsi terpisah dibuat untuk bagian logika sketsa yang berbeda dan variabel global sebagian besar dihindari. Alur program divisualisasikan dalam diagram alur pengontrol MIDI pdf.
// Versi 15-05-2017: test_Midi6
// Søren stergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simpel MIDI controller som kan styre en ekstern MIDI enhed, f.eks en softsynt på en PC. // Kontroler MIDI kan sende toneanslag (catatan tentang kommando) hhv. (note off kommando) untuk en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne memicu af en dobbelt LDR sensor, da der skal laves en sikker // detektering af både når hånden lander på brættet (note on), samt når hånden fjernes igen (note off). // MIDI kommandoerne "note on" atau "note off" terbaik untuk 3 byte yang dikirim untuk serial1 porten // untuk mengetahui perangkat keras yang mendukung antarmuka MIDI. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til trigger pin på sensor ultrasonik #define ECHO_PIN 2 // Arduino pin til echo pin på sensor ultrasonik # define MAX_DISTANCE 100 // Afstand maksimum untuk Ping #define Median 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Membuat Objek NewPing. int Senspin1 = 53; //Bawah LDR1 føler int Senspin2 = 52; //Øverste LDR2 føler byte MIDIByte2; //deklarasi variabel untuk MIDIByte2 bool klar_note_on = 1; //Deklarasi variabel untuk klar_note_on, styrer afsendelse af note di kommando. Første kommando er en note di kommando bool klar_note_off = 0; //Deklarasi variabel untuk klar_note_off, styrer afsendelse af note off kommando void setup() { pinMode(Senspin1, INPUT); // st input sensor pinMode(Senspin2, INPUT); // st input sensor Serial1.begin(31250); // Bruges Serial1 hingga komunikasi MIDI: 31250 bit/sekundt Serial.begin(9600); //monitor serial, til test } void loop() { bool Sensor1 = digitalRead(Senspin1); //Ls LDR1 - underte LDR bool Sensor2 = digitalRead(Senspin2); //læs LDR2 - verste LDR if (Sensor1 && klar_note_on) //hvis LDR1 aktif dan klar hingga not pada { byte Note_Byte = Hent_tonehojde(); //Hent tone højde melalui sensor ultralyds MIDIByte2 = Hent_MidiByte2(Note_Byte); // Hent MidByte2, nomor catatan MIDI, værdien 0xFF er di luar jangkauan Send_Note_On(MIDIByte2); // kald Send_Note_On funktion 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 mengirim note off kommando gøres det her.. { Send_Note_Off(MIDIByte2); // kirim nota 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; } } byte Hent_MidiByte2(byte NoteByte) { // Gunakan nomor not MIDI yang mengembalikan fungsi, nilai dari NoteByte byte MIDIB2; switch (NoteByte) // her defineres hvilken værdi MIDIByte2 skal have fra værdien af Note_Byte { case 0: { MIDIB2 = 0x3C; // nada 'C' } istirahat; kasus 1: { MIDIB2 = 0x3E; // nada 'D' } istirahat; kasus 2: { MIDIB2 = 0x40; // nada 'E' } istirahat; kasus 3: { MIDIB2 = 0x41; // nada 'F' } istirahat; kasus 4: { MIDIB2 = 0x43; // nada 'G' } istirahat; kasus 5: { MIDIB2 = 0x45; // nada 'A' } istirahat; kasus 6: { MIDIB2 = 0x47; // nada 'B' } istirahat; kasus 7: { MIDIB2 = 0x48; // nada 'C' } istirahat; default: { MIDIB2 = 0xFF; // di luar jangkauan } } kembalikan MIDIB2; //returner MIDI note number } byte Hent_tonehojde() { //Fungsi Denne kemudian resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i us byte Afstand; // beregnet afstand i cm byte resultat; // inddeling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, der ganges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = sonar.ping_median(Median); // Kirim ping, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = rentang jarak luar) resultat = Afstand / 8; //Beregn resultat kembali resultat; //Returner resultat } void Send_Note_On(byte tonenr) { //Mengisi fungsi pengirim dan catatan pada kommando på Antarmuka MIDI const byte kommando = 0x90; //Catatan tentang kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Kecepatan = 127 Serial1.write(kommando); //kirim catatan di kommando Serial1.write(tonenr); //kirim nomor nada Serial1.write(volumen); //send volumen (velocity) } void Send_Note_Off(byte tonenr) {//Denne funktion sender note off kommando på Antarmuka MIDI const byte kommando = 0x80; //Catatan kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Kecepatan = 127 Serial1.write(kommando); //kirim nota kommando Serial1.write(tonenr); //kirim nomor nada Serial1.write(volumen); //mengirim volumen (kecepatan) }
Langkah 7: Dasar-dasar Komunikasi MIDI
MIDI (Musical Instrument Digital Interface) adalah protokol komunikasi serial universal untuk antarmuka alat musik elektronik dan perangkat lainnya. Komunikasi serial digunakan (31250 bit/s, media transmisi adalah loop arus, opto-terisolasi di ujung penerima. Konektor DIN 5pin digunakan. 16 saluran komunikasi logis dimungkinkan dalam satu koneksi MIDI fisik. Banyak perintah didefinisikan dalam MIDI standar, saya menggunakan dua perintah dalam proyek ini, perintah ini terdiri dari 3 byte:
a) Catatan Pada perintah:
1. byte send = 0x90 artinya catatan pada perintah pada saluran MIDI 1
2. byte send = 0xZZ ZZ adalah nomor catatan, saya menggunakan rentang 0x3C hingga 0x48
3. byte send =0xFF FF = 255 yang berarti volume maksimal, rentang 0x00 hingga 0xFF
b) Perintah Catatan Mati:1. byte send = 0x80 artinya perintah note off pada saluran MIDI 1
2. byte send = 0xZZ ZZ adalah nomor catatan, saya menggunakan rentang 0x3C hingga 0x48
3. byte send =0xFF FF = 255 artinya volume maksimal, rentang 0x00 hingga 0xFF
Direkomendasikan:
EAL - Pengumpulan Data GPS Industri 4.0 pada Mobil Rc: 4 Langkah
EAL - Pengumpulan Data GPS Industri 4.0 pada Mobil Rc: Dalam Instruksi ini kita akan berbicara tentang bagaimana kita mengatur modul GPS pada mobil RC dan memposting data yang dikumpulkan ke halaman web untuk pemantauan yang mudah. Kami sebelumnya telah membuat instruksi tentang bagaimana kami membuat mobil RC kami, yang dapat ditemukan di sini. Ini menggunakan t
EAL- Tertanam - Kunci Kombinasi: 4 Langkah
EAL- Embedded - Kunci Kombinasi: Proyek ini adalah salah satu proyek sekolah, yang saya buat untuk memilih mata pelajaran 2.1 Pemrograman C di EAL. Ini adalah pertama kalinya, ketika saya membuat proyek Arduino dan pemrograman C. Itu adalah proyek, yang menyajikan kunci kombinasi. Kunci kombinasi
EAL - Pemrograman Tertanam: Permen Mixer 1000: 9 Langkah
EAL - Pemrograman Tertanam: Candy Mixer 1000: Untuk proyek kami di Arduino, kami telah memutuskan untuk membuat mixer untuk permen. Idenya adalah bahwa pengguna dapat menekan tombol dan kemudian motor akan mulai mengeluarkan permen ke dalam mangkuk, dan ketika program telah berjalan, program itu akan berhenti. Draf pertama w
EAL- Iklim dalam ruangan tertanam: 5 Langkah
EAL- Embedded Indoor-climate: Untuk proyek sekolah kami, kami ditugaskan untuk mengintegrasikan arduino ke dalam sistem otomatis. Kami memilih untuk membuat sensor iklim dalam ruangan, yang dapat merasakan suhu, kelembaban, dan tingkat desibel di dalam ruangan. Kami mengebor beberapa lubang di kabinet
MIDI 5V LED Strip Light Controller untuk Spielatron atau Synth MIDI Lainnya: 7 Langkah (dengan Gambar)
MIDI 5V LED Strip Light Controller untuk Spielatron atau Synth MIDI Lainnya: Kontroler ini mengedipkan lampu strip LED tiga warna selama 50mS per not. Biru untuk G5 hingga D#6, merah untuk E6 hingga B6 dan hijau untuk C7 hingga G7. Pengontrol adalah perangkat ALSA MIDI sehingga perangkat lunak MIDI dapat menampilkan ke LED pada saat yang sama sebagai perangkat synth MIDI