สร้างตัวควบคุม MIDI ของคุณเองด้วย Arduino

MIDI

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

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

สร้างตัวควบคุม MIDI ของคุณเองด้วยบทช่วยสอนง่ายๆนี้

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

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

บทความที่เกี่ยวข้อง:
วิธีเปลี่ยนชื่อผู้ใช้และรหัสผ่าน Pi บน Raspberry Pi ของเรา

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

ขั้วต่อ midi

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

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

วิธีการสร้างหุ่นยนต์
บทความที่เกี่ยวข้อง:
วิธีสร้างหุ่นยนต์: 3 ตัวเลือกที่แตกต่างกัน

MIDI Controller คืออะไร?

Midi

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

ภายใน MIDI มีสองประเภทที่แตกต่างกันในแง่หนึ่งเรามีชื่อเรียกว่า Change Control ซึ่งมีหมายเลขคอนโทรลเลอร์และค่าระหว่าง 0 ถึง 127 ด้วยเหตุนี้ข้อความจึงสามารถออกได้โดยที่พารามิเตอร์ต่างๆเช่นระดับเสียงหรือโทนเสียงสามารถเปลี่ยนแปลงได้ เครื่องมือต่างๆที่ยอมรับ MIDI ควรนำคู่มือมาด้วยเพื่ออธิบายว่าช่องและข้อความใดถูกตั้งค่าโดยค่าเริ่มต้นและวิธีการเปลี่ยน

อันดับที่สองเรามี Program Change ซึ่งเป็นชุดข้อความที่ง่ายกว่าข้อความที่ใช้ในการควบคุมการเปลี่ยนแปลง ข้อความประเภทนี้ใช้เพื่อเปลี่ยนค่าที่ตั้งไว้ล่วงหน้าหรือแพตช์ของอุปกรณ์ เช่นเดียวกับในการควบคุมการเปลี่ยนแปลงพร้อมกับเครื่องมือของคุณผู้ผลิตจะต้องมีคู่มือที่ระบุว่าค่าที่ตั้งไว้ล่วงหน้าใดที่มีการเปลี่ยนแปลงโดยข้อความเฉพาะ

ชิ้นส่วนที่จำเป็นในการสร้างตัวควบคุม MIDI แบบโฮมเมดของคุณเอง

แผนผังขั้วต่อ Midi

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

เราจะต้องใช้สาย DIN 5 ขั้วตัวเมีย 2 ตัวตัวต้านทาน 220 โอห์มสวิตช์ชั่วขณะ 2 ตัวตัวต้านทาน 2k โอห์ม 10 ตัวสายเชื่อมต่อแผงวงจรสาย MIDI และอุปกรณ์ MIDI หรืออินเทอร์เฟซ USB ด้วยชิ้นส่วนเหล่านี้คุณสามารถเริ่มทำตามขั้นตอนของฉันเพื่อสร้างตัวควบคุม MIDI ของคุณเอง

ขั้นตอนแรก

วงจร Arduino midi

ก่อนที่จะเริ่มฉันฝากรูปที่คุณสามารถเห็นหมุดของสาย MIDI ของคุณด้วยวิธีนี้เราสามารถระบุพินได้อย่างถูกต้องและโดยเฉพาะอย่างยิ่งตำแหน่งที่จะเชื่อมต่อ พูดอย่างกว้าง ๆ สิ่งที่คุณต้องทำ ณ จุดนี้คือเชื่อมต่อพิน 5 ของสายเคเบิลเข้ากับตัวต้านทาน 220 โอห์มและจากที่นั่นไปยัง Arduino Transmit 1, พิน 4 ถึงตัวต้านทาน 220 โอห์มและจากที่นั่นไปยังซ็อกเก็ต 5V ของ Arduino ในขณะที่พิน 2 ต้องเชื่อมต่อกับการเชื่อมต่อภาคพื้นดินของคอนโทรลเลอร์ของคุณ

เมื่อขั้นตอนนี้เสร็จสิ้นคุณไม่มีไดอะแกรมโดยละเอียดในภาพถ่ายซึ่งอยู่ใต้เส้นเหล่านี้ก็ถึงเวลาเชื่อมต่อปุ่มต่างๆ แนวคิดในส่วนนี้คือการบรรลุโดยใช้พิน digitalRead (สามารถตรวจจับเมื่อแรงดันไฟฟ้าที่ถึงมันเปลี่ยนแปลง) เพื่อให้สามารถใช้ทรานซิสเตอร์เพื่อให้บรรลุได้เพียงแค่กดปุ่ม สำหรับสิ่งนี้เราต้องใช้ปุ่มเพื่อให้ด้านซ้ายของมันเชื่อมต่อกับ 5V ด้านขวาถึงความต้านทาน 220 โอห์มและจากที่นั่นถึงกราวด์ในขณะเดียวกันเราก็เชื่อมต่อด้านขวากับพิน 6 ด้วย ปุ่มที่สองจะติดตั้งในลักษณะเดียวกันแม้ว่าดังที่คุณเห็นในแผนภาพแทนที่จะเป็นพิน 6 เราเชื่อมต่อกับ 7

ซอฟต์แวร์ที่จะใช้สำหรับตัวควบคุม midi ที่บ้าน

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

ในกรณีของคอมพิวเตอร์เราจะต้องมีโปรแกรมที่สามารถดูแลข้อมูล MIDI ทั้งหมดที่มาถึงจาก Arduino สำหรับสิ่งนี้เรามีความเป็นไปได้ที่แตกต่างกันเช่น MIDI Monitor (OS X), MIDI-OX (Windows) หรือ Kmidimon (Linux)

ในการทดสอบเล็กน้อยเราต้องเชื่อมต่อ Arduino กับคอมพิวเตอร์ของเราและรันโค้ดต่อไปนี้:

#include
#include
#include
#include
#include

MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // crear objeto de salida MIDI llamado midiOut

void setup() {
Serial.begin(31250); // configuracion de serial para MIDI
}

void loop() {
midiOut.sendControlChange(56,127,1); // envío de señal MIDI CC -- 56 = nota, 127 = velocidad, 1 = canal
delay(1000); // retraso
midiOut.sendProgramChange(12,1); // envío de una señal MIDI PC -- 12 = valor, 1 = canal
delay(1000); // retraso de 1 segundo
}

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

การทดสอบว่าปุ่มทำงานถูกต้อง

ก่อนที่จะป้อนโปรแกรมของเราต่อไปด้วยฟังก์ชันและโค้ดใหม่ ๆ ที่เราจะหลงทางคุณควรหยุดสักครู่และ ทดสอบว่าปุ่มทำงานอย่างถูกต้อง. สำหรับพวกเขาเราต้องโหลดรหัสต่อไปนี้:

const int boton1 = 6; // asignacion del boton a una variable
const int boton2 = 7; // asignacion del boton a una variable

void setup() {
Serial.begin(9600); // configuracion del serial
pinMode(boton1,INPUT); // configuracion del boton1 como entrada
pinMode(boton2,INPUT); // configuracion del boton2 como entrada
}

void loop() {

if(digitalRead(boton1) == HIGH) { // prueba de estado del boton1
delay(10); // retraso
if(digitalRead(boton1) == HIGH) { // prueba de estado de nuevo
Serial.println("Boton 1 funciona correctamente!"); // log
delay(250);
}
}

if(digitalRead(boton2) == HIGH) { // prueba de boton 2
delay(10); // retraso
if(digitalRead(boton2) == HIGH) { // prueba de estado de nuevo
Serial.println("Boton 2 funciona correctamente!"); // log
delay(250);
}
}

}

โค้ดนี้จะต้องได้รับการคอมไพล์และดำเนินการเพื่อให้เมื่อเชื่อมต่อสาย USB โปรแกรมจะแจ้งให้เราทราบว่ามีการกดปุ่มใด ๆ

เราสร้างตัวควบคุม MIDI แบบโฮมเมดของเรา

เมื่อเราทำการทดสอบเหล่านี้แล้วก็ถึงเวลาประกอบตัวควบคุม MIDI ของเราเองคุณจะต้องคอมไพล์โค้ดต่อไปนี้เท่านั้น:

#include
#include
#include
#include
#include

const int boton1 = 6; // asignamos boton a la variable
const int boton2 = 7; // asignamos boton a la variable

MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut

void setup() {
pinMode(boton1,INPUT); // configuracion del boton1 como una entrada
pinMode(boton2,INPUT); // configuracion del boton2 como una entrada
Serial.begin(31250); // configuracion MIDI de salida
}

void loop() {
if(digitalRead(buttonOne) == HIGH) { // comprobacion de estado
delay(10); // retraso
if(digitalRead(buttonOne) == HIGH) { // comprobacion de estado de nuevo
midiOut.sendControlChange(56,127,1); // envío un MIDI CC -- 56 = nota, 127 = velocidad, 1 = canal
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // comprobacion de estado
delay(10); // retraso
if(digitalRead(buttonTwo) == HIGH) { // nueva comprobacion de estado
midiOut.sendControlChange(42,127,1); // envío un MIDI CC -- 42 = nota, 127 = velocidad, 1 = canal
delay(250);
}
}
}

ตามรายละเอียดบอกคุณว่าคุณไม่สามารถใช้คำสั่ง Serial.println () กับเอาต์พุต MIDI ได้ในครั้งนี้หากคุณต้องการแสดงข้อความบางประเภทบนคอมพิวเตอร์ให้เปลี่ยน:

midiOut.sendControlChange(42,127,1);

โดย:

midiOut.sendControlChange(value, channel);

โดยที่ค่าและช่องต้องมีค่าที่ต้องการซึ่งคุณต้องการแสดง

ตัวอย่างการทำงาน:


4 ความคิดเห็นฝากของคุณ

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   อัลเฟรด dijo

    Arduino เสนอความเป็นไปได้มากมายในการทำโครงการด้วยตัวคุณเอง https://www.juguetronica.com/arduino . สิ่งที่ดีที่สุดอย่างหนึ่งคือคุณสามารถเริ่มต้นได้โดยไม่ต้องเป็นผู้เชี่ยวชาญและเรียนรู้ต่อไปซึ่งจะกระตุ้นตัวเองให้เรียนรู้ด้วยตนเอง

  2.   Danel Roman dijo

    อาศิรพจน์

    ฉันกำลังพยายามทำแบบฝึกหัดที่ยอดเยี่ยมนี้… แต่ # รวมยังไม่สมบูรณ์….

    ช่วยบอกหน่อยได้ไหมว่าอันไหนจำเป็น?

    ขอบคุณมาก

  3.   uell dijo

    เฮ้
    ฉันต้องการสร้างโมดูลดรัมอิเล็กทรอนิกส์โดยการเปลี่ยนปุ่มด้วยอินพุตแจ็คซึ่งสัญญาณเพียโซอิเล็กทริกจะมาถึง
    จะเป็นไปได้ไหมที่จะทำ

  4.   เอดูอาร์โดวาเลนซูเอลา dijo

    กรุณาถ้าคุณสามารถให้รวมของรหัสนี้ฉันสนใจในโครงการนี้