วิธีสร้างตัวควบคุม MIDI ด้วย Arduino

วิธีสร้างตัวควบคุม MIDI ด้วย Arduino

ในฐานะนักดนตรีที่สะสมเครื่องดนตรีและกล่องเสียง Arduino ที่อ่อนน้อมถ่อมตนเป็นเครื่องมือที่สมบูรณ์แบบในการสร้างตัวควบคุม MIDI แบบกำหนดเอง แม้ว่า Raspberry Pi อาจครองตำแหน่งมงกุฎสำหรับโครงการ Internet of Things (IoT) แต่ Arduino Uno ธรรมดา ( Arduino ประเภทต่าง ๆ มีอะไรบ้าง) มีพลังงานเพียงพอสำหรับโครงการนี้





ครั้งแรกกับการใช้ Arduino? ไม่ต้องห่วง เรามีครบ คู่มือสำหรับผู้เริ่มต้นใช้งาน Arduino เพื่ออ่านให้จบก่อนที่คุณจะจัดการกับโครงการนี้





MIDI คืออะไร?

MIDI ย่อมาจาก Musical Instrument Digital Interface เป็นแนวทางมาตรฐานสำหรับอุปกรณ์ดนตรีในการสื่อสารระหว่างกัน หากคุณเป็นเจ้าของแป้นพิมพ์อิเล็กทรอนิกส์ คุณอาจมีอินเทอร์เฟซ MIDI แม้ว่าจะมีรายละเอียดทางเทคนิคบางประการที่เกี่ยวข้องกับการนำ MIDI ไปใช้งาน สิ่งสำคัญที่ต้องจำไว้ว่า MIDI ไม่ใช่เสียง! ข้อมูล MIDI เป็นชุดคำสั่งง่ายๆ (คำสั่งหนึ่งเรียกว่า 'ข้อความ') ที่อุปกรณ์อื่นอาจนำไปใช้เพื่อสร้างเสียงหรือพารามิเตอร์ควบคุมที่แตกต่างกัน





MIDI รองรับ 16 ช่อง ซึ่งหมายความว่าแต่ละสายสามารถรองรับอุปกรณ์ต่างๆ ได้ถึง 16 อุปกรณ์ที่สื่อสารกันอย่างอิสระ อุปกรณ์เชื่อมต่อโดยใช้สาย DIN 5 พิน DIN ย่อมาจาก 'German Institute for Standardization' และเป็นเพียงสายเคเบิลที่มีหมุดห้าตัวอยู่ภายในตัวเชื่อมต่อ มักใช้ USB แทน DIN 5 พิน หรือสามารถใช้อินเทอร์เฟซ USB-MIDI ได้

MIDI-เคเบิ้ล-ชาย



การควบคุมการเปลี่ยนแปลงและการเปลี่ยนแปลงโปรแกรม

ข้อความ MIDI มีสองประเภทหลัก: การเปลี่ยนแปลงการควบคุม และ การเปลี่ยนแปลงโปรแกรม

ข้อความควบคุมการเปลี่ยนแปลง (CC) มีหมายเลขตัวควบคุมและค่าระหว่าง 0 ถึง 127 ข้อความ CC มักใช้เพื่อเปลี่ยนการตั้งค่า เช่น ระดับเสียงหรือระดับเสียง อุปกรณ์ที่ยอมรับ MIDI ควรมาพร้อมกับคู่มือที่อธิบายว่าช่องและข้อความใดถูกตั้งค่าเป็นค่าเริ่มต้น และวิธีเปลี่ยน (เรียกว่าการแมป MIDI)





ข้อความเปลี่ยนโปรแกรม (PC) ง่ายกว่าข้อความ CC ข้อความบนพีซีประกอบด้วยหมายเลขเดียว และใช้เพื่อเปลี่ยนค่าที่ตั้งไว้ล่วงหน้าหรือแพตช์บนอุปกรณ์ ข้อความบนพีซีบางครั้งเรียกว่า 'การเปลี่ยนแปลงการแก้ไข' เช่นเดียวกับข้อความ CC ผู้ผลิตควรจัดเตรียมเอกสารที่ระบุว่าข้อความใดมีการเปลี่ยนแปลงค่าที่ตั้งไว้ล่วงหน้าใดบ้าง

สิ่งที่คุณต้องการ

  • Arduino
  • ซ็อกเก็ตตัวเมีย DIN 5 ขา
  • ตัวต้านทาน 2 x 220 โอห์ม
  • ตัวต้านทาน 2 x 10k ohm
  • 2 x สวิตช์ชั่วขณะ
  • สายต่อ
  • เขียงหั่นขนม
  • สาย MIDI
  • อุปกรณ์ MIDI หรืออินเทอร์เฟซ USB
Water & Wood 5 ชิ้น DIN 5 Pin PCB Mounting Sockets สำหรับ PC Keyboard ซื้อเลยที่ AMAZON

แผนการสร้าง

โครงการนี้จะค่อนข้างง่าย คุณสามารถเพิ่มปุ่มหรือฮาร์ดแวร์เพิ่มเติมเพื่อให้เหมาะกับความต้องการของคุณได้ Arduino เกือบทุกชนิดจะเหมาะสม -- ตัวอย่างนี้ต้องการเพียงสามพินเท่านั้น โปรเจ็กต์นี้ประกอบด้วยปุ่มสองปุ่มสำหรับควบคุมโปรแกรม พอร์ต MIDI สำหรับส่งข้อมูล และอุปกรณ์สำหรับรับข้อความ วงจรนี้สร้างขึ้นบนเขียงหั่นขนมที่นี่ อย่างไรก็ตาม เป็นไปได้ที่จะถ่ายโอนไปยังกล่องโปรเจ็กต์และขั้วต่อแบบบัดกรีสำหรับโซลูชันที่แข็งแกร่ง





การประกอบวงจร

Arduino-Midi-Controller-วงจร

การเชื่อมต่อ MIDI

MIDI-Pinout

ต่อซ็อกเก็ต MIDI ของคุณดังนี้:

  • MIDI พิน 5 ไปยัง Arduino Transmit (TX) 1 ผ่านตัวต้านทาน 220 โอห์ม
  • MIDI พิน 4 ถึง Arduino +5V ผ่านตัวต้านทาน 220 โอห์ม
  • MIDI พิน 2 ไปยังกราวด์ Arduino

การเชื่อมต่อปุ่ม

ปุ่มทำงานโดยเปลี่ยนความต้านทานที่ Arduino 'เห็น' พิน Arduino จะผ่านสวิตช์ตรงไปที่กราวด์ ( ต่ำ ) ผ่านตัวต้านทาน 10k ohm (ตัวต้านทานแบบ 'ดึงลง' เพื่อให้แน่ใจว่าค่าจะยังคงต่ำ) เมื่อกดปุ่ม ค่าที่เห็นในวงจรจะเปลี่ยนเป็น +5v โดยไม่มีตัวต้านทาน ( สูง ). Arduino สามารถตรวจจับการเปลี่ยนแปลงนี้ได้โดยใช้ digitalRead (พิน) สั่งการ. เชื่อมต่อปุ่มกับพิน 6 และ 7 บนอินพุต/เอาต์พุตดิจิตอล Arduino (I/O) เชื่อมต่อทั้งสองปุ่ม:

  • ด้านซ้ายของปุ่มไปที่ +5V
  • ด้านขวาของปุ่มไปยัง Arduino Ground ผ่านตัวต้านทาน 10k ohm
  • ด้านขวาของปุ่มไปยังขา Arduino (6 หรือ 7)

การทดสอบ MIDI

เมื่อฮาร์ดแวร์ทั้งหมดเสร็จสิ้นแล้วก็ถึงเวลาทดสอบ คุณจะต้องมีอินเทอร์เฟซ USB-MIDI (อินเทอร์เฟซเสียงจำนวนมากสามารถทำได้) และสาย MIDI พอร์ต MIDI ต่อสายบนเขียงหั่นขนมกำลังส่งข้อมูล ดังนั้นจึงเป็นเอาต์พุต คอมพิวเตอร์ของคุณกำลังรับข้อมูล ดังนั้นจึงเป็นอินพุต โครงการนี้ใช้ Arduino . ที่ยอดเยี่ยม MIDI Library v4.2 โดย Forty Seven Effects เมื่อคุณติดตั้งไลบรารี่แล้ว คุณสามารถรวมไลบรารีนั้นไว้ในโค้ดของคุณโดยไปที่ ร่าง > รวมไลบรารี > 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 รอ 1 วินาที ส่งข้อความ PC จากนั้นรอ 1 วินาทีโดยไม่มีกำหนด หากทุกอย่างถูกต้อง คุณจะเห็นข้อความปรากฏขึ้นในจอภาพ MIDI ของคุณ

ถ้าไม่มีอะไรเกิดขึ้น อย่าตกใจ! ลองแก้ไขปัญหา:

  • ตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดถูกต้อง
  • ตรวจสอบสายพอร์ต MIDI อย่างถูกต้อง - ควรมีหมุดสำรอง 2 ตัวที่ขอบด้านนอก
  • ตรวจสอบอีกครั้งว่าวงจรถูกต้อง
  • ตรวจสอบว่าวงจรเชื่อมต่อกับอินเทอร์เฟซ 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 ( บนขวา > Serial Monitor ). เมื่อคุณกดปุ่ม คุณจะเห็น 'Button One Works!' หรือ 'Button Two 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

หากคุณต้องการส่งข้อความ PC แทน CC ให้แทนที่:

midiOut.sendControlChange(42,127,1);

กับ:

midiOut.sendProgramChange(value, channel);

ในการดำเนินการ

ด้านล่างนี้เป็นการสาธิตในฐานะตัวควบคุมสำหรับ Ableton Live ( ซอฟต์แวร์ DJ ที่ดีที่สุดสำหรับทุกงบประมาณ ). ด้านบนขวาแสดงมาตรวัดเสียง และตรงกลางด้านบนแสดงข้อความ midi ที่เข้ามา (ผ่าน MIDI Monitor บน OS X)

วิธีนำเข้ารหัสผ่านไปยัง chrome

คุณได้สร้างตัวควบคุม MIDI หรือไม่?

มีการใช้งานจริงมากมายสำหรับตัวควบคุม MIDI แบบกำหนดเอง คุณสามารถสร้างหน่วยควบคุมด้วยเท้าขนาดใหญ่หรือตัวควบคุมสตูดิโอที่ทันสมัย และหากคุณสนใจที่จะซื้อ ตัวควบคุม USB MIDI ที่ดีที่สุดที่คุณสามารถซื้อได้มีดังนี้

เครดิตรูปภาพ: Keith Gentry ผ่าน Shutterstock.com

เราหวังว่าคุณจะชอบรายการที่เราแนะนำและพูดคุย! MUO มีพันธมิตรในเครือและผู้สนับสนุน ดังนั้นเราจึงได้รับส่วนแบ่งรายได้จากการซื้อบางส่วนของคุณ การดำเนินการนี้จะไม่ส่งผลต่อราคาที่คุณจ่ายและช่วยให้เราเสนอคำแนะนำผลิตภัณฑ์ที่ดีที่สุด

แบ่งปัน แบ่งปัน ทวีต อีเมล การอัพเกรดเป็น Windows 11 คุ้มค่าหรือไม่?

Windows ได้รับการออกแบบใหม่ แต่นั่นเพียงพอที่จะโน้มน้าวให้คุณเปลี่ยนจาก Windows 10 เป็น Windows 11 หรือไม่

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • DIY
  • ซอฟต์แวร์ดีเจ
  • Arduino
  • อิเล็กทรอนิกส์
  • เที่ยงวัน
เกี่ยวกับผู้เขียน โจ โคเบิร์น(136 บทความที่ตีพิมพ์)

โจสำเร็จการศึกษาด้านวิทยาการคอมพิวเตอร์จากมหาวิทยาลัยลินคอล์น ประเทศอังกฤษ เขาเป็นนักพัฒนาซอฟต์แวร์มืออาชีพ และเมื่อเขาไม่ได้ขับโดรนหรือเขียนเพลง เขามักจะถูกมองว่าถ่ายภาพหรือผลิตวิดีโอ

เพิ่มเติมจาก Joe Coburn

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก
หมวดหมู่ Diy