กลับไปหน้ารวมไฟล์
midi-player-piano-powered-by-arduino-200f2b.md

ย้อนกลับไปตอนเดือนสิงหาคม 2017 ตอนนั้นพี่อายุ 15 อยากจะทำโปรเจควิศวะอะไรสักอย่างที่ทั้งสนุกและได้เรียนรู้ไปด้วย เก็บ Arduino Uno ไว้ในลิ้นชักมานานแสนนาน พอดีมีโอกาสก็เลยคว้ามาอัดโปรเจคใหม่ซะเลย

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

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

เอกสารรายละเอียดขั้นตอนการสร้างเปียโนระบบอัตโนมัตินี้ สามารถดูได้ที่นี่: เอกสารรายละเอียดการสร้าง

มุมมองของโปรเจค

MIDI Player Piano Powered by Arduino คือการสำรวจโลกแห่งวิศวกรรมดนตรีและการเชื่อมโยงระหว่าง MIDI กับกลไกอย่างลึกซึ้ง ด้วยการโฟกัสที่ส่วนประกอบหลัก—อาร์เรย์โซลินอยด์ 88 ตัว และระบบจ่ายไฟกระแสสูง—น้องจะได้เรียนรู้วิธีการสื่อสารและเล่นเปียโนอะคูสติกโดยใช้ซอฟต์แวร์ลอจิกเฉพาะทางและการตั้งค่ากลไกที่แข็งแกร่ง

การลงมือทำจริง: โซลินอยด์และลอจิก MIDI

โปรเจคนี้จะเผยให้เห็นเลเยอร์ที่ซ่อนอยู่เบื้องหลังการโต้ตอบระหว่างโค้ดง่ายๆ กับดนตรี:

  • เลเยอร์ระบุตัวตน: โซลินอยด์ JF-1039B จำนวน 88 ตัว ทำหน้าที่เป็น "นิ้วลม" ความละเอียดสูง ให้แรงกระแทกทางกายภาพสำหรับแต่ละคีย์เปียโน
  • เลเยอร์แปลงสัญญาณ: Arduino Mega ใช้ข้อมูล MIDI (ผ่าน Serial หรือ Bluetooth) เพื่อถอดรหัสข้อความ "Note On" และ "Velocity"
  • เลเยอร์ลอจิกประมวลผล: โค้ด Arduino ใช้กลยุทธ์ "sequential decoding" (หรือการจับคู่เวลาด้วยคิว): มันตีความสตรีม MIDI และจับคู่พัลส์ของโซลินอยด์เพื่อสร้างการแสดงดนตรีที่มีความละเอียดสูง
  • เลเยอร์อินเตอร์เฟซกำลังสูง: แบงค์ของ รีเลย์ (หรือ MOSFET) จัดเตรียมกระแสและกำลังไฟสูงที่จำเป็นสำหรับโซลินอยด์ 12V/24V ในขณะที่ปกป้องไมโครคอนโทรลเลอร์
  • เลเยอร์อินเตอร์เฟซภาพ: จอแสดงผล LCD 20x4 ให้ฟีดแบ็คภาพความละเอียดสูงสำหรับการตรวจสอบสถานะ MIDI ทุกครั้ง (เช่น "Song: Chopin Op. 9")

ฮาร์ดแวร์และโครงสร้างพื้นฐาน

  • Arduino Mega 2560: คือ "สมอง" ของโปรเจกต์นี้ จัดการจังหวะการทำงานของโซลินอยด์หลายช่องทางและประสานข้อมูลสตรีม MIDI
  • อาร์เรย์โซลินอยด์ 88 ตัว: ให้แรงกดทางกายภาพและทิศทางสำหรับทุกคีย์ของนักเปียโน
  • โมดูล Bluetooth MIDI: จัดการส่งข้อมูลความเร็วสูงและเสถียรสำหรับการอัปเดต MIDI จากสมาร์ทโฟน
  • แหล่งจ่ายไฟ 24V กระแสสูง: สำคัญมากสำหรับการจ่ายกระแส 20A+ เพื่อให้กดคีย์หลายตัวพร้อมกันและควบคุมเพดัลได้
  • รางติดตั้งแบบกำหนดเอง: ให้โครงสร้างทางกลที่มีความแม่นยำสูงสำหรับโซลินอยด์กว่า 100 ตัวที่อยู่หลังคีย์เปียโน
  • สาย Micro-USB: ใช้สำหรับโปรแกรม Arduino และเป็นแหล่งจ่ายไฟหลักในขั้นตอนตั้งต้น

คุณสมบัติเด่น

  • เล่นเพลงใดก็ได้จากไฟล์ MIDI ซึ่งเป็นไฟล์ประเภทหนึ่ง (คล้าย mp3) ที่บันทึกโน้ตเฉพาะของเพลงไว้ ไฟล์ MIDI เป็นที่นิยมมาก หาเพลงอะไรก็เจอในรูปแบบนี้
  • เชื่อมต่อกับเปียโนได้ทั้งผ่านสายไปยังคอมพิวเตอร์ หรือผ่าน Bluetooth ไปยังสมาร์ทดีไวซ์
  • โปรแกรมอย่าง Synthesia และ Piano From Above ทำให้เล่นเพลงใดก็ได้ในทันที หรือใช้ PianoStream แอปสตรีม MIDI เพื่อเปิดเพลงบนเปียโนแบบวิทยุได้เป็นชั่วโมง
  • บันทึกเพลงเป็นไฟล์ MIDI ง่ายๆ ด้วยคีย์บอร์ดดิจิทัล แล้วเล่นซ้ำบนเปียโนได้ทันที
  • เปียโนยังใช้งานปกติได้ แม้ในขณะที่มันกำลังเล่นเพลงอยู่! นักเปียโนสามารถฝึกซ้อมหรือเล่นเพลงไปพร้อมกับมันได้
  • ประสิทธิภาพ - เปียโนสามารถถอดรหัสข้อมูล MIDI และจัดเวลากดแต่ละคีย์เพื่อสร้างเสียงตามที่ตั้งใจ แม้ว่าข้อมูลที่ส่งมาจะเล่นตามไม่ได้ในทางทฤษฎีก็ตาม
  • ระบบควบคุมเพดัลแดมเปอร์ (ซัสเทน) เพื่อสร้างการแสดงที่สมจริง
  • ระบบควบคุมความดัง (velocity) ของแต่ละคีย์ได้ ทำให้เล่นโน้ตเบาหรือดังตามข้อมูล MIDI ที่ได้รับ
  • มีกล่องควบคุมด้านหน้าของเปียโน สำหรับสวิตช์เปิด/ปิด ปุ่มปรับระดับเสียง และปุ่มเปลี่ยนการตั้งค่าต่างๆ ของเปียโน

ขั้นตอนการเล่นและโต้ตอบ

กระบวนการแปลง MIDI เป็นเสียงเปียโนออกแบบมาให้มีประสิทธิภาพสูง:

  1. เตรียมฮาร์ดแวร์: ติดตั้งโซลินอยด์ 88 ตัวบนรางแบบกำหนดเองให้ถูกต้อง และเชื่อมต่อกับแบงค์รีเลย์และ Arduino
  2. ตั้งค่าซิงค์กำลังสูง: ในฟังก์ชัน setup() กำหนดอัตราบอด (baud rate) ของ MIDI (31250 bps) และเริ่มต้นใช้งานพินเอาต์พุตดิจิทัลทั้ง 88 พิน
  3. ลูปประสานงานภายใน: เปียโนจะตรวจสอบ MIDI ประสิทธิภาพสูงอย่างต่อเนื่องและอัปเดตสถานะคีย์แบบเรียลไทม์ไปกับเพลง
  4. แสดงผลแบบเห็นภาพ: ดูสิว่าเปียโนอะคูสติกของคุณกลายเป็นสัญญาณภาพที่เคลื่อนไหวไปกับจังหวะ พลั๊งๆ ตามการตั้งค่า MIDI ของคุณ

ไอเดียสำหรับอนาคต & การขยาย功能

  • บันทึกไฟล์ MIDI ด้วยตัวเปียโนเองได้
  • ผสานทั้งเสียงและ MIDI เข้าด้วยกัน
  • เพิ่ม OLED Dashboard: ติดจอ OLED ขนาดเล็กบนกล่องควบคุมหน้าเปียโน เพื่อแสดง "BPM", "คีย์", และ "โหลด CPU"
  • เพิ่ม Multi-sensor Climate Sync: เชื่อมต่อ "โมดูลบันทึก" พิเศษเพื่อติดตามและบันทึกการแสดงเปียโนของคุณลงในไฟล์ MIDI แบบแม่นยำ
  • เพิ่ม Cloud Interface: สร้างเว็บแดชบอร์ดพิเศษเพื่อติดตามและดูประวัติการเล่นเปียโนจากสมาร์ทโฟนที่ไหนก็ได้
  • ปรับแต่ง Advanced Velocity Profile: เพิ่ม "Pedal Dynamics" พิเศษ (ใช้ Servo) เพื่อให้การเหยียบเพดัลสมจริงยิ่งขึ้น สำหรับการแสดงคอนเสิร์ต

โปรเจกต์ MIDI Player Piano Powered by Arduino นี้คือโปรเจกต์สุดปังสำหรับใครก็ตามที่ชอบงานอิเล็กทรอนิกส์และมองหาเครื่องมือหุ่นยนต์ดนตรีที่โต้ตอบได้ สนุกแน่นอน!

[!CAUTION] ใช้สายไฟคุณภาพสูง กันน้ำและฉนวนดีเสมอสำหรับโซลินอยด์ 88 ตัวนี้ เพื่อหลีกเลี่ยงความร้อนเกินและลัดวงจรระหว่างการแสดงนานๆ ห้ามช็อตนะตัวนี้!

รายละเอียดและเอกสารประกอบ

รายละเอียดขั้นตอนการสร้าง, โค้ด, และวิดีโออื่นๆ น้องสามารถไปดูเพิ่มเติมได้ในเว็บของพี่เลย (จัดไปวัยรุ่น)

ข้อมูล Frontmatter ดั้งเดิม

title: "เปียโนเล่นเองด้วย Arduino รับ MIDI งานง่ายแต่หล่อ!"
description: "เปลี่ยนเปียโนตั้งโต๊ะธรรมดาให้กลายเป็นระบบเล่นเองแบบอัตโนมัติ ควบคุมผ่าน Bluetooth ด้วย MIDI งานนี้ตึงๆ ใช้ Arduino กับมอเตอร์จัดไป รับอินเตอร์รัพต์เทพๆ ใครชอบดนตรีกับวิศวะต้องลอง!"
author: "bbswitzer"
category: ""
tags:
  - "home automation"
  - "music"
  - "robots"
views: 3184
likes: 2
price: 2450
difficulty: "Intermediate"
components:
  - "88x JF-1039B Solenoid"
  - "2x JF-1250B Solenoid"
tools: []
apps:
  - "1x Synthesia"
downloadableFiles:
  - "https://github.com/bbswitzer/PianoProject"
documentationLinks: []
passwordHash: "25193ee7560cbabba2fc7508a4517f9b40c07c5d7205455d618b23797b7ad5ba"
encryptedPayload: "U2FsdGVkX19JK6OWVCQyigpyr/pzEfwKfooFIOQl1xxUfH+s8vk+veOeklbUncQHkXnWx0628ffl9vIeCPP9Nafa40zKhDE5wpaCQRl5xRA="
seoDescription: "Build an Arduino-powered MIDI player piano. Convert an upright piano into an automated system with a MIDI Bluetooth interface."
videoLinks:
  - "https://www.youtube.com/embed/S7Bd992k368"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/midi-player-piano-powered-by-arduino-200f2b_cover.jpg"
lang: "en"