สารบัญ:

การสร้าง Arduino MIDI Controller: 9 ขั้นตอน (พร้อมรูปภาพ)
การสร้าง Arduino MIDI Controller: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การสร้าง Arduino MIDI Controller: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การสร้าง Arduino MIDI Controller: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: How to Build Arduino MIDI Controllers - The Complete Guide 2024, กรกฎาคม
Anonim

คำแนะนำนี้เผยแพร่ครั้งแรกในบล็อกของฉันเมื่อวันที่ 28 มิถุนายน 2020

ฉันสนุกกับการสร้างสิ่งต่าง ๆ ที่มีอุปกรณ์อิเล็กทรอนิกส์ และฉันต้องการสร้างบางสิ่งโดยใช้ Arduino อยู่เสมอ

หนึ่งในงานสร้างที่พบบ่อยที่สุดสำหรับผู้เริ่มต้นที่ฉันพบคือตัวควบคุม MIDI ตัวควบคุม MIDI คือฮาร์ดแวร์ใดๆ ที่ส่งข้อมูล MIDI (Musical Instrument Digital Interface) ไปยังอุปกรณ์เพื่อเรียกเสียงและสร้างเพลง

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

โครงการ

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

ต้นทุนรวมของโครงการของฉันต่ำกว่า 30 ดอลลาร์ และรายการวัสดุนั้นสั้นมาก (ลิงก์พันธมิตร):

  • Arduino Leonardo (หรือโคลน): ระหว่าง $10 ถึง $20
  • 16 x ปุ่ม Sanwa 24 มม. (หรือโคลน): ระหว่าง $1 ถึง $2.50 ต่อปุ่ม
  • หัวแร้ง
  • สายไฟฟ้า 22 AWG

บอร์ด Arduino

เมื่อฉันเริ่มโครงการนี้ ฉันพบว่ามี Arduino รุ่นต่างๆ มากมาย (ไม่รวมบอร์ดที่เข้ากันได้นับร้อย) และทั้งหมดนั้นมีความสามารถที่แตกต่างกันเล็กน้อย

ฉันต้องการส่งสัญญาณ MIDI ไปยังคอมพิวเตอร์ และวิธีที่ง่ายที่สุดคือผ่าน USB บอร์ด Arduino ใดๆ ที่ใช้ไมโครคอนโทรลเลอร์ ATmega32u4 มีการสื่อสาร USB ในตัว

บอร์ด Arduino อย่างเป็นทางการที่รองรับ USB แบบเนทีฟ ได้แก่ Arduino Due, Arduino Zero, Arduino Leonardo, Arduino Micro บอร์ดเหล่านี้รองรับ USB ในตัว ซึ่งหมายความว่าสามารถทำหน้าที่เป็นอุปกรณ์ USB MIDI ได้

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

ก้าวแรก

แม้ว่าฉันจะอธิบายทีละขั้นตอนว่าฉันติดตั้งโค้ดสำหรับโครงการนี้อย่างไร แต่คุณสามารถดาวน์โหลดเวอร์ชันสุดท้ายได้

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

ขั้นตอนที่ 1: ไฟ LED ในตัวกะพริบ

เป็นเรื่องตลกที่ "Hello World" ในโลกของฮาร์ดแวร์กะพริบไฟ LED

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

รหัส:

ขั้นตอนที่ 2: ไฟ LED กะพริบบนอินพุตแบบแมนนวล

ขั้นตอนต่อไปคือการกะพริบไฟ LED เดียวกันทุกครั้งที่ฉันส่งสัญญาณ ฉันถอดฝาครอบพลาสติกของปลายด้านหนึ่งของสายดูปองท์ 2 เส้นออก และต่อปลายอีกด้านหนึ่งเข้ากับบอร์ด:

  • หมายเลขพิน 2: หนึ่งในอินพุตดิจิตอล (บวก) อาจเป็นพินดิจิทัลก็ได้
  • พิน GND: พินกราวด์ใดๆ (เชิงลบ)

ตอนนี้ ทุกครั้งที่ฉันต่อปลายสายไฟ ฉันกำลังปิดวงจร ดังนั้นฉันจึงสามารถรันโค้ดได้

หมุดดิจิทัล 20 อันบน Leonardo มีตัวต้านทานภายใน (ตัดการเชื่อมต่อโดยค่าเริ่มต้น) ที่สามารถเปิดใช้งานได้โดยใช้ INPUT_PULLUP โปรดทราบว่าอินพุตแบบดึงขึ้นหมายความว่าสถานะของปุ่มกลับด้าน:

  • สูงเมื่อวงจรเปิด (ไม่ได้กดปุ่ม)
  • LOW เมื่อปิดวงจร (กดปุ่ม)

รหัส:

ขั้นตอนที่ 3: การติดตั้งไลบรารี MIDIUSB

ไลบรารีนี้อนุญาตให้บอร์ด Arduino ที่มีความสามารถของ USB ทำหน้าที่เป็นเครื่องมือ MIDI ผ่าน USB ตรวจสอบเอกสารอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติม

เมื่อใช้ Arduino IDE คุณสามารถติดตั้ง Arduino Libraries เพิ่มเติมได้โดยใช้ Library Manager:

  1. เปิด IDE และคลิกที่เมนู "ร่าง" จากนั้น "รวมไลบรารี" จากนั้น "จัดการไลบรารี"
  2. ค้นหา MIDIUSB แล้วคลิกติดตั้ง
  3. เมื่อเสร็จแล้ว แท็ก Installed ควรปรากฏขึ้นข้างไลบรารี MIDIUSB
  4. ปิดตัวจัดการไลบรารี

ตอนนี้ Leonardo สามารถส่งข้อความ MIDI ผ่าน USB ได้แล้ว! แต่ก่อนอื่น จำเป็นต้องมีข้อมูลเชิงลึกเกี่ยวกับวิธีการทำงานของ MIDI

MIDI ทำงานอย่างไร

"MIDI (Musical Instrument Digital Interface) เป็นโปรโตคอลการสื่อสารมาตรฐานที่เชื่อมต่อเครื่องดนตรีอิเล็กทรอนิกส์ คอมพิวเตอร์ และอุปกรณ์เสียงที่เกี่ยวข้องสำหรับการเล่นเพลง" - วิกิพีเดีย

โดยจะจัดการข้อความเหตุการณ์ด้วยข้อมูลระดับเสียงและความเร็วของโน้ตที่เล่น พร้อมคำแนะนำอื่นๆ

ในโครงการเฉพาะนี้ อินพุตจากปุ่ม 16 ปุ่มจะส่งข้อความต่างๆ ผ่าน USB ข้อความเหล่านี้สามารถแปลงเป็นเสียงบนคอมพิวเตอร์โดยใช้ซอฟต์แวร์ที่เหมาะสม เช่น GarageBand หรือ Ableton Live

กายวิภาคของข้อความ MIDI

ในการส่งข้อความ MIDI ฉันใช้เมธอด sendMIDI() จากไลบรารี MIDIUSB ที่ฉันติดตั้งในขั้นตอนที่ 3

วิธีนี้สามารถรับพารามิเตอร์ได้ 4 แบบ:

  • ประเภทเหตุการณ์: อาจเป็น 0x09 สำหรับโน้ตเปิด (โน้ตเล่น) หรือ 0x08 สำหรับโน้ตปิด (หยุดเล่นโน้ต)
  • หมายเหตุ เปิด/ปิด: ประเภทเหตุการณ์รวมกับช่อง MIDI (1-16) ฉันใช้ช่อง 1 เท่านั้นดังนั้นจึงเป็น 0x90 สำหรับโน้ตเปิดหรือ 0x80 สำหรับโน้ตปิด
  • หมายเลขโน้ต: โน้ตแต่ละตัวมีระยะห่างระหว่างตัวเลข (มาตราส่วนความถี่)
  • ความเร็ว: จาก 0 (ไม่มีความเร็ว) ถึง 127 (เร็วที่สุด)

ขั้นตอนที่ 4: การส่งข้อความ MIDI

ฉันรวมไลบรารี MIDIUSB และแทนที่จะกะพริบไฟ LED ในตัว ฉันส่งบันทึกย่อ

รหัส:

⚠ ข้อสำคัญ: จากขั้นตอนนี้เป็นต้นไป Arduino จะกลายเป็น MIDI USB Controller และจะหยุดรับรหัสผ่าน USB

เมื่อคุณติดอยู่ในตำแหน่งที่ไม่สามารถตั้งโปรแกรม Arduino ได้อีกต่อไป ให้ทำตามขั้นตอนเหล่านี้:

  1. กดปุ่มรีเซ็ตที่โค้งมนบนบอร์ด Arduino ค้างไว้
  2. คลิกอัปโหลดบน Arduino IDE
  3. ปล่อยปุ่มรีเซ็ต
  4. รหัสที่อัปเดตจะถูกอัปโหลดไปยังบอร์ด

ขั้นตอนที่ 5: การส่งข้อความ MIDI จากแต่ละปุ่ม

การส่งข้อความ MIDI จากแต่ละปุ่ม
การส่งข้อความ MIDI จากแต่ละปุ่ม

ขั้นตอนสุดท้ายคือการแมปทุกสนามกับปุ่ม สำหรับปุ่มทั้ง 16 ปุ่ม ฉันได้กำหนดมาตราส่วนจาก C2 ถึง E3b ซึ่งเป็นระดับเสียงจาก 36 ถึง 51 ตามลำดับจากล่างขึ้นบนและจากซ้ายไปขวา ลองดูไฟล์นี้จาก Arduino Tutorials เพื่อดูว่าระดับเสียงใดสอดคล้องกับโน้ตแต่ละตัว

ฉันใช้พินดิจิทัลตั้งแต่ 2 ถึง 12 และพินอะนาล็อก (ใช้เป็นดิจิทัล) ตั้งแต่ A0 ถึง A4

และนี่คือลักษณะของโค้ดสุดท้าย

ขั้นตอนที่ 6: การตั้งค่าช่องทางหรือธนาคาร (ตัวเลือก)

การตั้งค่าช่องทางหรือธนาคาร (ตัวเลือก)
การตั้งค่าช่องทางหรือธนาคาร (ตัวเลือก)

ในกรณีที่คุณต้องการเพิ่มปุ่มที่มีความสามารถในการสลับช่องหรือช่องต่างๆ เช่น MIDI Fighter 3D (ดูรูป) Arduino Leonardo มีหมุดอีกสี่ตัวที่คุณสามารถใช้ได้ Arduino Leonardo มีพินอินพุต/เอาท์พุตดิจิตอล 20 พิน ซึ่งมีเพียง 16 อันที่ใช้สำหรับเล่นโน้ต

คุณสามารถใช้ปุ่มพิเศษเหล่านั้นเพื่ออัปเดตตัวแปรในโค้ด และส่งค่าเป็นพารามิเตอร์ไปยังเมธอด MidiUSB.sendMIDI:

gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea

ขั้นตอนที่ 7: กรณี

กรณี
กรณี
กรณี
กรณี

เพื่อให้โปรเจ็กต์นี้เรียบง่าย ฉันจึงเลือกฟีเจอร์ที่มีให้

  • ปุ่มเท่านั้น: ปุ่มอาร์เคดแบบ Sanwa 16 ปุ่ม ในตารางขนาด 4x4 ไม่มีลูกบิด ไม่มีตัวเลื่อน ไม่มีเฟดเดอร์ หรืออินพุตแบบอนาล็อกอื่นๆ
  • เคส Unibody: ไม่ต้องใช้สกรู น็อต สลักเกลียว หรือกาวสำหรับโครงหรือเพื่อยึดบอร์ด Arduino
  • เครื่องมือในชีวิตประจำวัน: ตัวอย่างเช่น ฉันบัดกรีสายไฟแทนการซื้อปัตตาเลี่ยนแบบเจาะจงสำหรับปุ่มอาร์เคด

การออกแบบ Unibody

ความท้าทายอย่างหนึ่งที่ฉันเผชิญคือการออกแบบเคสให้เรียบง่ายจนไม่ต้องประกอบ และสามารถพิมพ์ 3 มิติได้ในคราวเดียว

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

ดาวน์โหลดเคสที่พิมพ์ได้ 3 มิติ (322 KB) การตั้งค่าที่แนะนำ: PLA, เลเยอร์ 0.15 มม., การเติม 20%, ผู้บังคับใช้อย่างน้อยสำหรับรูก้นที่โค้งมน, ตัวยึด Arduino และไมโคร USB

ถือ Arduino โดยไม่ต้องใช้สกรู

Leonardo มี 4 รูสำหรับขันสกรูบอร์ดให้เป็นเคสที่เหมาะสม แต่ความคิดของฉันคือทำให้ง่ายต่อการเพิ่มและถอดบอร์ดออกจากเคส

การหาที่ยึดคลิปสำหรับ Arduino บน Thingiverse เป็นเรื่องง่าย และฉันต้องทำซ้ำ 5 ครั้งเพื่อรวมที่ยึดนั้นเข้ากับการออกแบบแบบ unibody ส่วนที่ยากที่สุดคือการทำให้ขาของมันหลีกเลี่ยงรูสำหรับปุ่มต่างๆ และทำให้ micro USB อยู่ตรงกลางกับเคส

ขั้นตอนที่ 8: สภา

สมัชชา
สมัชชา
สมัชชา
สมัชชา
สมัชชา
สมัชชา

หลังจากใส่ปุ่มทั้งหมดเข้าที่แล้ว ฉันก็บัดกรีสายไฟสีดำสั้นที่เชื่อมขาด้านลบของปุ่มระหว่างทั้งสองเข้าด้วยกัน

จากนั้นฉันก็บัดกรีสายสีแดงยาวจากขาบวกแต่ละข้างเพื่อเชื่อมต่อโดยตรงกับบอร์ด

ในการเชื่อมต่อสายไฟกับ Arduino ฉันตัดและบัดกรีปลาย Dupont บางส่วนแล้วปิดด้วยท่อหดความร้อน

ฉันเชื่อมต่อสายไฟเข้ากับบอร์ดโดยทำตามลำดับเดียวกับใน MIDI Fighter จากล่างขึ้นบนและจากซ้ายไปขวา

ขั้นตอนที่ 9: การใช้ตัวควบคุม MIDI

การใช้ตัวควบคุม MIDI
การใช้ตัวควบคุม MIDI

สามารถใช้ซอฟต์แวร์เพลงใดๆ (หรือฮาร์ดแวร์ที่เหมาะสม) เพื่อรับ MIDI และสร้างเพลงได้ แอพที่แนะนำมากที่สุดคือ Garage Band, Ableton Live และฉันรู้ว่ามีแอพมากมายให้ติดตั้งบนโทรศัพท์

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

MIDI ในเว็บเบราว์เซอร์

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

Punchy: การใช้ WebMIDI และ WebAudio สำหรับตัวควบคุม MIDI

สามารถอ่านข้อความ MIDI บนเบราว์เซอร์ใดก็ได้ที่รองรับ WebMIDI JavaScript API จากนั้นจะเล่นเสียงในซินธิไซเซอร์ (โดยใช้ WebAudio API) หรือในแซมเพลอร์ โดยจะโหลดเสียงที่กำหนดเองจากชุดเสียงใดๆ

ตั้งค่า Ableton Live

หากต้องการให้ตัวควบคุม MIDI ทำงานร่วมกับ Ableton Live ให้ทำตามขั้นตอนง่ายๆ เหล่านี้จากเอกสารอย่างเป็นทางการ

ไปที่ Preferences → Link MIDI และตรวจสอบให้แน่ใจว่า "Input" มี "Track" และ "Remote" ON และเอาต์พุตมี "Remote" ON เช่นเดียวกับที่กล่าวถึงในคำแนะนำ:

แนะนำ: