กลับไปหน้ารวมไฟล์
led-matrix-metronome-e2528c.md

ใช้ Arduino ช่วยให้ตีคอร์ดไม่เพี้ยน! (แบบมีจังหวะ)

พี่เป็นทั้งสาย Arduino และสายดนตรี การฝึกกับเครื่องเคาะจังหวะ (Metronome) เป็นวิธีที่เลิศมากในการพัฒนาทักษะดนตรี แต่แอปเคาะจังหวะส่วนใหญ่มันดูน่าเบื่อและไม่มีองค์ประกอบภาพที่น่าสนใจ พี่เป็นคนชอบมองเห็นภาพ เลยอยากใช้ Arduino กับ LED Matrix มาทำให้การฝึกมันสนุกขึ้น

โปรเจคนี้เรียบง่ายมาก มี LED Matrix ที่แสดงรูปแบบตามอัตราจังหวะ (Time Signature) เช่น สำหรับ 4/4 มันจะสว่างเป็นสี่เหลี่ยมจัตุรัส, สำหรับ 3/4 จะแสดงเป็นสามเหลี่ยม และสำหรับ 6/8 จะแสดงเป็นสี่เหลี่ยมผืนผ้าและสี่เหลี่ยมจัตุรัสสองอัน ตัว Piezo Buzzer จะส่งเสียงติ๊กทุกจังหวะ สามารถเปลี่ยนความเร็ว (BPM) ได้โดยการหมุนโพเทนชิออมิเตอร์ และเปลี่ยนอัตราจังหวะได้โดยการกดสวิตช์

Precision Beat Sync: LED Matrix Metronome

เครื่องเคาะจังหวะแบบกลไกมันก็แค่ติ๊กๆ แบบดิจิทัลก็เพิ่มภาพเข้ามา แต่เจ้า LED Matrix Metronome นี้มันผสานคณิตศาสตร์การหน่วงเวลาแบบลึกซึ้ง <millis()> เข้ากับโปรโตคอลข้อมูล SPI ผลักดันลูกตุ้มกราฟิกที่เคลื่อนไหวไปยังตาราง LED พร้อมๆ กับเสียงติ๊กแหลมคมจาก Piezo

แปลง BPM เป็นลูปมิลลิวินาที

ห้ามใช้ delay(500) แบบมั่วๆ นะน้อง หูมนุษย์มันไวต่อความผิดพลาดของจังหวะมาก

  1. คณิตศาสตร์หน่อย: ผู้ใช้หมุน Rotary Encoder หน้าจอแสดง 120 BPM (Beats Per Minute)
  2. Arduino ต้องแปล BPM เป็นมิลลิวินาทีให้ได้ int interval = 60000 / BPM; // 60,000 / 120 = 500ms
  3. ตัวจับเวลาแบบไม่บล็อก (Non-Blocking Timer): ใช้โครงสร้างคลาสสิค "Blink Without Delay"
    if (millis() - lastTick >= interval) {
      lastTick = millis();
      executeMetronomeTick();
    }
    
    วิธีนี้รับประกันว่าตัวประมวลผลจะไม่หยุดนิ่ง ทำให้สามารถตอบสนองต่อการกดปุ่มปรับ BPM ได้ทันทีโดยไม่ทำให้จังหวะเพี้ยน!

การส่งข้อมูล SPI แบบซิงค์ (MAX7219)

เมื่อจังหวะเริ่มทำงาน ระบบต้องเขียนข้อมูลลง LED Array ขนาดใหญ่ใหม่ทันที

  • ใช้ MAX7219 LED block ขนาด 8x8 หรือ 32x8 Arduino จะส่งข้อมูลบัฟเฟอร์ผ่าน SPI
  • หน้าจอไม่แสดงตัวเลข แต่แสดงจุดใหญ่ๆ ที่แกว่งเหมือนลูกตุ้ม
  • เมื่อถึง จังหวะที่ 1 (The strong downbeat): จุดจะอยู่ที่ขอบซ้ายสุดของหน้าจอ และ Piezo จะส่งเสียงความถี่สูง 3000Hz
  • เมื่อถึง จังหวะที่ 2, 3, 4: จุดจะกวาดผ่านเมทริกซ์ และ Piezo จะส่งเสียงต่ำ 800Hz
  • การติดตามภาพนี้ช่วยให้นักดนตรีอย่างมือกลองหรือมือกีตาร์รู้ล่วงหน้าว่า "หนึ่ง" กำลังจะมาถึงก่อนจะได้ยินเสียง!

ฮาร์ดแวร์ลอจิกจับเวลาที่จำเป็น

  • Arduino Uno/Nano (มีรีจิสเตอร์จับเวลาภายในที่แม่นยำ)
  • โมดูล MAX7219 Dot Matrix Array
  • Rotary Encoder (EC11) สำหรับปรับความเร็วและอัตราจังหวะได้อย่างลื่นไหล
  • Passive Piezo Buzzer สำหรับเสียงติ๊กที่แหลมคม

วิธีประกอบเครื่องเคาะจังหวะ

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

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

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

apps:
  - "1x Arduino IDE"
author: "kzra"
category: "Audio & Sound"
components:
  - "1x Tactile Switch, Top Actuated"
  - "1x Buzzer, Piezo"
  - "1x Adafruit Bicolor LED Square Pixel Matrix with I2C Backpack"
  - "1x Arduino UNO"
  - "1x Rotary potentiometer (generic)"
description: "เอา Arduino มาจับคู่กับ LED Matrix สองสี 8*8 กับ Piezo Buzzer สร้างเมโทรโนมที่มองเห็นจังหวะได้ชัดเจน งานง่ายแต่หล่อ วัยรุ่นสายดนตรีห้ามพลาด!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/0d3a8ff0-9370-44a0-8814-353467204e62.ino"
encryptedPayload: "U2FsdGVkX18ZV+q3pXHOLmjJAy0rKCbjhs+WUbv7cVjfiJK13PzcJFJLjyNeJdYQeL9PZNWR+vAxMkcbsotoTvjaQmMhG0M0eQEKnv2kMtw="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/led-matrix-metronome-e2528c_cover.jpg"
lang: "en"
likes: 9
passwordHash: "d57c2d38b6f9dcd9cf3e1b41ffdcf814acbd219f218ab1578c852dae9267bd01"
price: 1120
seoDescription: "Build an LED Matrix Metronome using Arduino, 8*8 bicolour LED matrix, and piezo buzzer. A cool visual and audio project for musicians."
tags:
  - "led matrix"
  - "music"
  - "metronome"
title: "เมโทรโนมสุดตึง! ไฟกระพริบตามจังหวะดนตรี"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/7WuJovUj4kk"
views: 12425