كيفية عمل وحدة تحكم MIDI باستخدام Arduino

كيفية عمل وحدة تحكم MIDI باستخدام Arduino

بصفتك موسيقيًا جمعت مجموعة من الآلات الموسيقية وصناديق الضوضاء ، فإن Arduino المتواضع هو الأداة المثالية لإنشاء وحدة تحكم MIDI مخصصة. في حين أن Raspberry Pi قد يكون قد أخذ تاج مشاريع إنترنت الأشياء (IoT) ، فإن Arduino Uno البسيط (ما هي أنواع Arduino المختلفة؟) لديه أكثر من القوة الكافية لهذا المشروع.





لأول مرة تستخدم Arduino؟ لا تقلق ، لدينا ملف دليل اردوينو للمبتدئين للقراءة قبل معالجة هذا المشروع.





ما هو ميدي؟

يرمز MIDI إلى الواجهة الرقمية للآلات الموسيقية. إنه يحدد طريقة قياسية للأجهزة الموسيقية للتواصل مع بعضها البعض. إذا كنت تمتلك لوحة مفاتيح إلكترونية ، فمن المحتمل أن يكون لديك واجهة MIDI. في حين أن هناك بعض التفاصيل الفنية المتضمنة في تنفيذ MIDI ، من المهم أن تتذكر أن MIDI ليس صوتيًا! بيانات MIDI هي مجموعة بسيطة من التعليمات (تسمى إحدى التعليمات 'رسالة') والتي قد ينفذها جهاز آخر لإصدار أصوات مختلفة أو معلمات تحكم.





يدعم MIDI 16 قناة. هذا يعني أن كل كابل يمكنه دعم 16 جهازًا مختلفًا تتواصل بشكل مستقل مع بعضها البعض. الأجهزة متصلة باستخدام كبل DIN خماسي السنون. يرمز DIN إلى 'المعهد الألماني للتوحيد القياسي' ، وهو ببساطة كبل به خمسة دبابيس داخل الموصل. غالبًا ما يتم استخدام USB بدلاً من DIN ذي 5 سنون ، أو يمكن استخدام واجهة USB-MIDI.

ميدي- كابل- ذكر



تغيير التحكم وتغيير البرنامج

هناك نوعان رئيسيان من رسائل MIDI: تغيير التحكم وتغيير البرنامج.

تحتوي رسائل Control Change (CC) على رقم وحدة تحكم وقيمة بين 0 و 127. غالبًا ما تستخدم رسائل CC لتغيير الإعدادات مثل مستوى الصوت أو درجة الصوت. يجب أن تأتي الأجهزة التي تقبل MIDI مع دليل يشرح القنوات والرسائل التي يتم إعدادها افتراضيًا ، وكيفية تغييرها (المعروفة باسم تعيين MIDI).





رسائل تغيير البرنامج (الكمبيوتر الشخصي) أبسط من رسائل CC. تتكون رسائل الكمبيوتر من رقم واحد ، وتُستخدم لتغيير الإعداد المسبق أو التصحيح على الجهاز. تُعرف رسائل الكمبيوتر الشخصي أحيانًا باسم 'Patch Change'. على غرار رسائل CC ، يجب على الشركات المصنعة تقديم مستند يحدد الإعدادات المسبقة التي يتم تغييرها بواسطة رسالة معينة.

ما سوف تحتاجه

  • اردوينو
  • مقبس أنثى ذو 5 سنون DIN
  • 2 × 220 أوم مقاومات
  • مقاومات 2 × 10 كيلو أوم
  • 2 × مفاتيح لحظية
  • أسلاك التوصيل
  • اللوح
  • كابل MIDI
  • جهاز MIDI أو واجهة USB
ماء وخشب 5 قطع DIN 5 دبوس ثنائي الفينيل متعدد الكلور تركيب مقابس أنثى للوحة مفاتيح الكمبيوتر اشترِ الآن على أمازون

بناء خطة

سيكون هذا المشروع بسيطًا جدًا. يمكنك بالطبع إضافة المزيد من الأزرار أو الأجهزة لتناسب احتياجاتك. سيكون أي اردوينو مناسبًا تقريبًا - هناك حاجة إلى ثلاثة دبابيس فقط لهذا المثال. يتكون هذا المشروع من زرين للتحكم في البرنامج ومنفذ MIDI لإرسال البيانات وجهاز لتلقي الرسائل. تم بناء هذه الدائرة على لوح تجارب هنا ، ولكن من الممكن نقلها إلى صندوق مشروع وموصلات ملحومة للحصول على حل قوي.





تجميع الدائرة

دائرة تحكم اردوينو ميدي

اتصال MIDI

ميدي بيناوت

اربط مقبس MIDI الخاص بك على النحو التالي:

  • MIDI pin 5 إلى Arduino Transmit (TX) 1 عبر المقاوم 220 أوم
  • MIDI pin 4 إلى Arduino + 5V عبر مقاوم 220 أوم
  • MIDI pin 2 إلى أرض اردوينو

اتصال الزر

تعمل الأزرار عن طريق تغيير المقاومة التي يراها Arduino. يمر دبوس Arduino عبر المفتاح مباشرة إلى الأرض ( قليل ) عبر المقاوم 10 كيلو أوم (مقاوم 'سحب لأسفل' ، يضمن بقاء القيمة منخفضة). عند الضغط على الزر ، تتغير القيمة التي تراها الدائرة إلى +5 فولت بدون مقاومة ( عالي ). يمكن لـ Arduino اكتشاف هذا التغيير باستخدام ملف ديجيتال ريد (دبوس) أمر. قم بتوصيل الأزرار بالدبابيس 6 و 7 في الإدخال / الإخراج الرقمي لـ Arduino (I / O). قم بتوصيل كلا الزرين:

  • الجانب الأيسر من الزر + 5V
  • الجانب الأيمن من الزر إلى Arduino Ground عبر المقاوم 10 كيلو أوم
  • الجانب الأيمن من الزر إلى Arduino pin (6 أو 7)

اختبار MIDI

الآن بعد أن تم الانتهاء من جميع الأجهزة ، حان الوقت لاختبارها. ستحتاج إلى واجهة USB-MIDI (يمكن للعديد من واجهات الصوت القيام بذلك) وكابل MIDI. يرسل منفذ MIDI السلكي على اللوح البيانات ، لذا فهو الإخراج. جهاز الكمبيوتر الخاص بك يتلقى البيانات ، وبالتالي فهي المدخلات. يستخدم هذا المشروع اردوينو الممتاز مكتبة MIDI v4.2 من قبل سبعة وأربعين آثار. بمجرد تثبيت المكتبة ، يمكنك تضمينها في التعليمات البرمجية الخاصة بك عن طريق الانتقال إلى رسم> تضمين مكتبة> MIDI .

ستحتاج أيضًا إلى برنامج لمراقبة بيانات MIDI الواردة:

قم بتوصيل Arduino بجهاز الكمبيوتر الخاص بك وقم بتحميل رمز الاختبار التالي (لا تنس تحديد اللوحة والمنفذ الصحيحين من ملف أدوات> لوحة و أدوات> منفذ القوائم).

#include
#include
#include
#include
#include
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
void setup() {
Serial.begin(31250); // setup serial for MIDI
}
void loop() {
midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
delay(1000); // wait 1 second
midiOut.sendProgramChange(12,1); // send a MIDI PC -- 12 = value, 1 = channel
delay(1000); // wait 1 second
}

سيرسل هذا الرمز رسالة CC ، انتظر ثانية واحدة ، أرسل رسالة للكمبيوتر الشخصي ثم انتظر ثانية واحدة إلى أجل غير مسمى. إذا كان كل شيء يعمل بشكل صحيح ، سترى رسالة تظهر في شاشة MIDI الخاصة بك.

إذا لم يحدث شيء ، فلا داعي للذعر! حاول استكشاف الأخطاء وإصلاحها:

  • تأكد من صحة جميع التوصيلات
  • تحقق من توصيل منفذ MIDI بشكل صحيح - يجب أن يكون هناك دبابيس احتياطية على الحواف الخارجية
  • تحقق مرة أخرى من صحة الدائرة
  • تحقق من أن الدائرة متصلة بواجهة USB-MIDI باستخدام كبل MIDI
  • تحقق من توصيل كبل MIDI بجهاز إدخال على واجهة USB-MIDI الخاصة بك
  • تأكد من أن Arduino لديه القوة
  • قم بتثبيت برنامج التشغيل الصحيح لواجهة USB-MIDI الخاصة بك

إذا كنت كذلك ساكن تواجه مشاكل قد يكون من المفيد التحقق من اللوح الخاص بك. يمكن أن تكون اللوحات الرخيصة في بعض الأحيان غير متسقة للغاية ومنخفضة الجودة - لقد حدث ذلك لي أثناء العمل في هذا المشروع.

اختبار الزر

حان الوقت الآن لاختبار الأزرار تعمل بشكل صحيح. قم بتحميل كود الاختبار التالي. لا يلزم توصيل MIDI لاختبار هذا الجزء.

const int buttonOne = 6; // assign button pin to variable
const int buttonTwo = 7; // assign button pin to variable
void setup() {
Serial.begin(9600); // setup serial for text
pinMode(buttonOne,INPUT); // setup button as input
pinMode(buttonTwo,INPUT); // setup button as input
}
void loop() {

if(digitalRead(buttonOne) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonOne) == HIGH) { // check button state again
Serial.println('Button One Works!'); // log result
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonTwo) == HIGH) { // check button state again
Serial.println('Button Two Works!'); // log result
delay(250);
}
}

}

قم بتشغيل هذا الرمز (ولكن احتفظ بكابل USB متصلاً) وافتح Serial Monitor ( أعلى اليمين> جهاز العرض التسلسلي ). عندما تضغط على زر ، سترى 'Button One Works!' أو 'الزر الثاني يعمل!' حسب الزر الذي ضغطت عليه.

هناك ملاحظة مهمة واحدة يجب أخذها بعيدًا من هذا المثال - إلغاء ارتداد البرنامج. هذا تأخير بسيط قدره 10 مللي ثانية (مللي ثانية) بين التحقق من الزر ثم التحقق من الزر مرة أخرى. هذا يزيد من دقة الضغط على الزر ويساعد على منع الضوضاء التي تؤدي إلى تشغيل Arduino. ليس عليك القيام بذلك ، على الرغم من أنه موصى به.

إنشاء وحدة التحكم

الآن بعد أن أصبح كل شيء سلكيًا ويعمل ، حان الوقت لتجميع وحدة التحكم الكاملة.

سيرسل هذا المثال رسالة CC مختلفة لكل زر يتم الضغط عليه. أنا أستخدم هذا للتحكم في Ableton Live 9.6 على OS X. الرمز مشابه لكل من عينات الاختبار أعلاه.

#include
#include
#include
#include
#include
const int buttonOne = 6; // assign button pin to variable
const int buttonTwo = 7; // assign button pin to variable
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
void setup() {
pinMode(buttonOne,INPUT); // setup button as input
pinMode(buttonTwo,INPUT); // setup button as input
Serial.begin(31250); // setup MIDI output
}
void loop() {
if(digitalRead(buttonOne) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonOne) == HIGH) { // check button state again
midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonTwo) == HIGH) { // check button state again
midiOut.sendControlChange(42,127,1); // send a MIDI CC -- 42 = note, 127 = velocity, 1 = channel
delay(250);
}
}
}

ملاحظة - لن تتمكن من استخدام ملفات Serial.println () مع إخراج MIDI.

إذا كنت ترغب في إرسال رسالة كمبيوتر بدلاً من CC ، فما عليك سوى استبدال:

midiOut.sendControlChange(42,127,1);

مع:

midiOut.sendProgramChange(value, channel);

في العمل

يوجد أدناه عرض توضيحي كوحدة تحكم لـ ابلتون لايف ( أفضل برنامج DJ لكل ميزانية ). يُظهر الجزء العلوي الأيمن عدادات الصوت ، ويعرض الجزء الأوسط العلوي رسائل midi الواردة (عبر شاشة MIDI على OS X).

تنزيلات موسيقى مجانية للكمبيوتر بشكل قانوني

هل صنعت وحدة تحكم MIDI؟

هناك الكثير من الاستخدامات العملية لوحدة تحكم MIDI المخصصة. يمكنك بناء وحدة تحكم كبيرة بالقدم ، أو وحدة تحكم استوديو أنيقة. وإذا كنت مهتمًا بشراء واحدة ، فإليك أفضل وحدات تحكم USB MIDI التي يمكنك شراؤها.

حقوق الصورة: كيث جينتري عبر موقع Shutterstock.com

نأمل أن تعجبك العناصر التي نوصي بها ونناقشها! لدى MUO شراكات تابعة ورعاية ، لذلك نتلقى حصة من الإيرادات من بعض مشترياتك. لن يؤثر ذلك على السعر الذي تدفعه ويساعدنا في تقديم أفضل توصيات المنتجات.

يشارك يشارك سقسقة بريد الالكتروني هل يستحق الترقية إلى Windows 11؟

تم إعادة تصميم Windows. لكن هل هذا كافٍ لإقناعك بالانتقال من Windows 10 إلى Windows 11؟

اقرأ التالي
مواضيع ذات صلة
  • افعلها بنفسك
  • برامج DJ
  • اردوينو
  • إلكترونيات
  • منتصف اليوم
نبذة عن الكاتب جو كوبيرن(تم نشر 136 مقالاً)

تخرج جو في علوم الكمبيوتر من جامعة لينكولن بالمملكة المتحدة. إنه مطور برامج محترف ، وعندما لا يطير بطائرات بدون طيار أو يكتب الموسيقى ، يمكن العثور عليه في كثير من الأحيان يلتقط الصور أو ينتج مقاطع فيديو.

المزيد من Joe Coburn

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك