Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Unopad - Pengontrol MIDI Arduino dengan Ableton

Komponen dan persediaan

Arduino UNO
× 1
Aktuator Saklar, Saklar Tombol Tekan seri APEM A01
× 9
Kabel jumper (generik)
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)
Opsional

Aplikasi dan layanan online

loopMidi
Jembatan MIDISerial Tanpa Rambut
Ableton Live 10 Uji Coba

Tentang proyek ini

Ringkasan

Sebagian besar tutorial dan proyek untuk pengontrol Midi hanya didasarkan pada penjelasan tentang pekerjaan Arduino, tetapi tidak terlalu banyak menggunakannya di DAW itu sendiri. Saya ingin membuat tutorial dengan semua hal yang diperlukan di satu tempat. Dengan proyek ini, saya ingin membantu pemula untuk lebih memahami proses pembuatan dan penggunaan pengontrol, dan saya harap ini akan berguna bagi seseorang.

Saya sudah lama ingin membuat pengontrol midi dan akhirnya saya berhasil dan sekarang saya akan berbagi proyek dengan Anda. Saya menggunakan Arduino Uno yang tidak memiliki kemampuan untuk mengirim pesan MIDI melalui USB, jadi program khusus harus digunakan untuk itu (akan dijelaskan nanti dalam teks).

Bagian berikut akan menjelaskan rangkaian listrik, kode Arduino, serta cara menghubungkan ke komputer dan DAW, dalam hal ini Ableton.

Sirkuit

Ini adalah sirkuit yang sangat sederhana. Saya menggunakan 9 tombol tekan, tetapi tidak dalam matriks, karena saya ingin kemampuan untuk menekan beberapa tombol (lebih mudah dan saya memiliki pin digital yang tidak digunakan - saya menggunakan 9, dalam matriks akan menjadi 6).

Tombol 3 ==> Tombol D2 2 ==> Tombol D3 1 ==> Tombol D4 6 ==> Tombol D5 5 ==> Tombol D6 4 ==> Tombol D7 9 ==> Tombol D8 8 ==> Tombol D9 7 ==> D10  

Pemetaan MIDI

Saya mendefinisikan 9 catatan MIDI, dari 36 hingga 45, dan NOTE_ON dan NOTE_OFF.

Tutorial MIDI ini akan membantu Anda memahami bagaimana Anda dapat menggunakan bahasa MIDI untuk mengontrol perangkat apa pun yang menggunakan protokol MIDI.

#define NOTE_ONE 36#define NOTE_TWO 37// Tentukan semua catatan di sini.#define NOTE_ON_CMD 0x90#define NOTE_OFF_CMD 0x80#define MAX_MIDI_VELOCITY 127  

MIDI melalui USB

Karena Arduino Uno tidak dapat mengirim catatan MIDI ke DAW dengan sendirinya, kita harus menggunakan dua program tambahan - LoopMidi dan Hairless MIDI<->Serial Bridge.

Dengan LoopMidi kami membuat port MIDI virtual yang dapat kami gunakan di Hairless Midi untuk terhubung dengan port Arduino.

Penjelasan kode

Saya membuat kelas Button dan saya menggunakannya seperti ini:

int NUMBER_BUTTONS =9;Tombol Tombol1(4, NOTE_ONE);Tombol Tombol2(3, NOTE_TWO);Tombol Tombol3(2, NOTE_THREE);Tombol Tombol4(7, NOTE_FOUR);Tombol Tombol5(6, NOTE_LIMA);Tombol Button6(5, NOTE_SIX);Tombol Tombol7(10, NOTE_SEVEN);Tombol Tombol8(9, NOTE_EIGHT);Tombol Tombol9(8, NOTE_NINE);Tombol *Tombol[] {&Button1,&Button2,&Button3,&Button4,&Button5,&Button6 ,&Button7,&Button8,&Button9};  

Untuk mempelajari lebih lanjut tentang penerapan tombol, lihat Buttons.cpp.

Karena kami tidak menggunakan resistor apa pun tetapi hanya menghubungkan tombol ke pin digital dan ground, kami menggunakan INPUT_PULLUP sebagai ganti INPUT.

//Buttons.cpppinMode(_pin, INPUT_PULLUP);  

Satu-satunya bagian yang sulit dengan ini adalah Anda tidak mencari HIGH sinyal seperti yang Anda duga – tombol Anda akan mengeluarkan RENDAH (0) saat ditekan.

 // Tombol ditekan if (status ==0) { midiNoteOn(Buttons[i]->Note,127); } // Tombol tidak ditekan jika (status ==1) {} 

Ini juga berarti bahwa status tombol awal adalah 1, bukan 0.

//Buttons.cpp _state =1; 

Setiap pesan NOTE ON membutuhkan pesan NOTE OFF yang sesuai. Ketika tombol ditekan, itu mengirim pesan NOTE_ON. Saat tombol dilepaskan, ia mengirimkan pesan NOTE_OFF, jadi selain status awal, saya menambahkan status yang terakhir diingat ke kode.

//Buttons.cpp _lastState =1; 

Kami hanya mengirim pesan MIDI jika status saat ini berbeda dari status terakhir.

//Buttons.cppif(state!=_lastState){//....} 

Gunakan dua fungsi ini untuk mengirim pesan MIDI. Parameter fungsi adalah catatan dan kecepatan menengah (Saya menggunakan kecepatan maksimum).

void midiNoteOn(byte note, byte midiVelocity){ Serial.write(NOTE_ON_CMD); Serial.write(catatan); Serial.write(midiVelocity);}void midiNoteOff(byte note, byte midiVelocity){ Serial.write(NOTE_OFF_CMD); Serial.write(catatan); Serial.write(midiVelocity);} 

Saya meletakkan logika program di fungsi updateButtons fungsi.

void updateButtons() { for (int i =0; i getButtonState(); // Tombol ditekan if (status ==0) { midiNoteOn(Buttons[i]->Note,127); } // Tombol tidak ditekan jika (status ==1) midiNoteOff(Buttons[i]->Note,0); } } 

Fungsi dipanggil di dalam metode loop.

void loop() { if (NUMBER_BUTTONS !=0) updateButtons();} 

Gunakan pengontrol Anda dengan DAW (Ableton Live)

Sebagai pemula dalam menggunakan DAW, saya tidak tahu bagaimana menghubungkan apa pun di sana. Ketika saya menghubungkan Korg Nanokey saya, Ableton mengenalinya sendiri dan saya dapat langsung menggunakan pengontrol. Ini (tentu saja) tidak terjadi pada pengontrol Arduino, karena ini bukan perangkat HID dan PC masih mengenalinya sebagai Arduino.

Saya akan menunjukkan kepada Anda di sini cara menghubungkan dan menggunakan pengontrol MIDI Arduino Anda di Ableton Live 10.

  • Terhubung dengan Ableton

Buka loopMIDI dan buat port MIDI virtual baru seperti pada gambar berikutnya.

Buka hairless-midserial dan tetapkan port Serial, MIDI Out dan MIDI In seperti pada gambar berikutnya. Untuk port Serial, kami memilih port Arduino Uno, dan untuk MIDI in dan out kami menggunakan port MIDI virtual yang telah kami buat pada langkah sebelumnya.

Setel baudrate ke kecepatan yang sama di sketsa Arduino Anda. Buka File>Preferences , dan di sana Anda harus mengatur baudrate.

Jika semuanya dilakukan dengan benar, Anda dapat men-debug pesan MIDI yang dikirim oleh pengontrol. Tekan tombol pada pengontrol dan periksa pesan MIDI yang masuk di Hairless MIDI.

Jangan tutup MIDI yang tidak berbulu!

Buka Ableton Live, dan pergi ke tab Options, lalu Preferences. Tautan tab MIDI akan terlihat seperti pada contoh ini.

Untuk memeriksa apakah semuanya terhubung dengan baik dan Ableton membaca pesan MIDI, kita akan melihat di sudut kanan atas Ableton. Kotak atas akan berkedip ketika tombol pada pengontrol ditekan seperti yang ditunjukkan pada contoh berikut.

Pengontrol siap digunakan!

  • Gunakan pengontrol sebagai Rak Drum atau Keyboard

Pilih trek MIDI. Dalam Pantau bagian pilih Dalam , alih-alih Otomatis , dan di MIDI ke pilih keluaran speaker Anda. Anda harus mendengar keyboard Anda sekarang. Hal yang sama harus dilakukan untuk rak Drum.

Proyek saya yang sudah selesai

Saya menggunakan kotak speaker lama untuk proyek ini dan beberapa plastik yang saya temukan di rumah. Saya memotong kedua pelat plastik sesuai dengan dimensi casing dan membuat lubang untuk tombol dan satu LED yang akan saya tambahkan nanti.

Saya juga memiliki speaker lama lainnya dengan casing yang sama yang akan saya gunakan untuk pengontrol MIDI lainnya, kali ini dengan kenop dan joystick.

Untuk melakukan

- Tekan lama tombol untuk mengubah ke mode CC.

Kode

  • MidiDrumPad.ino
  • Buttons.cpp
  • Buttons.h
MidiDrumPad.inoArduino
#include "Buttons.h"//------Notes-------------#define NOTE_ONE 36#define NOTE_TWO 37#define NOTE_THREE 38#define NOTE_FOUR 39#define NOTE_FIVE 40#define NOTE_SIX 41#define NOTE_SEVEN 42#define NOTE_EIGHT 43#define NOTE_NINE 44#define NOTE_ON_CMD 0x90#define NOTE_OFF_CMD 0x80#define MAX_MIDI_VELOCITY 127//------------------ ------int NUMBER_BUTTONS =9;Tombol Tombol1(4, NOTE_ONE);Tombol Tombol2(3, NOTE_TWO);Tombol Tombol3(2, NOTE_THREE);Tombol Tombol4(7, NOTE_FOUR);Tombol Tombol5(6, NOTE_FIVE);Tombol Button6(5, NOTE_SIX);Tombol Tombol7(10, NOTE_SEVEN);Tombol Tombol8(9, NOTE_EIGHT);Tombol Tombol9(8, NOTE_NINE);Tombol *Tombol[] {&Button1,&Button2,&Button3,&Button4,&Button5,&Button6 ,&Button7,&Button8,&Button9};int red_light_pin=11;int green_light_pin =12;int blue_light_pin =13;void setup() { Serial.begin(9600);}void loop() { if (NUMBER_BUTTONS !=0) updateButtons( );}void updateButtons() { for (int i =0; i getButtonState(); // Tombol ditekan if (status ==0) { midiNoteOn(Buttons[i]->Note,127); } // Tombol tidak ditekan if (status ==1) { midiNoteOff(Buttons[i]->Note,0); } }}void RGB_color(int red_light_value, int green_light_value, int blue_light_value) { analogWrite(red_light_pin, red_light_value); analogWrite(pin_lampu_hijau, nilai_cahaya_hijau); analogWrite(blue_light_pin, blue_light_value);}// Kirim MIDI note ONvoid midiNoteOn(byte note, byte midiVelocity){ Serial.write(NOTE_ON_CMD); Serial.write(catatan); Serial.write(midiVelocity);}//Send MIDI note OFFvoid midiNoteOff(byte note, byte midiVelocity){ Serial.write(NOTE_OFF_CMD); Serial.write(catatan); Serial.write(midiVelocity);}
Buttons.cppArduino
#include "Buttons.h"Button::Button(int pin, short note){ _pin =pin; pinMode(_pin, INPUT_PULLUP); _status =1; _lastState =1; Catatan =note;}int Button::getButtonState(){ int returnValue =-1; int status =digitalRead(_pin); if(state ==_lastState) mengembalikan 5; if(state!=_lastState) { if(state ==0) { returnValue =0; } else { nilai kembalian =1; } } _lastState =keadaan; return returnValue;}
Buttons.hArduino
#ifndef Buttons_h#define Buttons_h#include //Tombol (Nomor Pin, Nomor Catatan)Tombol kelas{ publik:Tombol(int pin, catatan pendek); int getButtonState(); int Catatan; pribadi:int _pin; catatan pendek; int _status; int _lastState;};#endif
Anda dapat mengunduh kode dari Github saya
https://github.com/sadreactonly/MidiDrumpad

Skema


Proses manufaktur

  1. Peredupan Lampu dengan PWM menggunakan Tombol Tekan
  2. Game Arduino Gyroscope dengan MPU-6050
  3. Sensor DHT11 dengan LED dan Speaker Piezo
  4. Iron Man
  5. Sensor Kendala Sederhana dengan Arduino
  6. Temukan Saya
  7. Kontrol Humidifier Arduino
  8. 4x4x4 LED cube dengan Arduino Uno dan 1sheeld
  9. Arduino Joystick
  10. Pedometer (Arduino 101)