กลับไปหน้ารวมไฟล์
musical-note-detector-7e01ee.md
วิดีโออธิบายและสาธิตการทำงาน

โค้ด/สเก็ตช์นี้จะแสดงความถี่โดยประมาณ รวมถึงโน้ตดนตรีที่เล่นบนคีย์บอร์ดอิเล็กทรอนิกส์หรือแอปเปียโน สำหรับโปรเจกต์นี้ เอาต์พุตอนาล็อกจากโมดูลตรวจจับเสียงจะถูกส่งไปยังอินพุตอนาล็อก A0 ของ Arduino Uno จากนั้นสัญญาณอนาล็อกจะถูกสุ่มตัวอย่างและแปลงเป็นดิจิทัล (Quantized) โค้ดจะใช้เทคนิค Autocorrelation, การให้น้ำหนัก และการปรับแต่ง เพื่อหาความถี่พื้นฐาน (Fundamental Frequency) โดยใช้ข้อมูลจาก 3 คาบแรก จากนั้นความถี่พื้นฐานที่ได้จะถูกนำไปเปรียบเทียบกับความถี่โน้ตในช่วงอ็อกเทฟ 3, 4 และ 5 เพื่อหาโน้ตดนตรีที่มีความถี่ใกล้เคียงที่สุด สุดท้าย โน้ตที่คาดการณ์ไว้สำหรับความถี่ที่ใกล้ที่สุดจะถูกพิมพ์ออกมาที่หน้าจอ

ความวุ่นวายของคลื่นเสียงดิบ (Raw Audio Wave)

ต่างจากสัญญาณดิจิทัลที่สะอาดตา คลื่นเสียงอนาล็อกจากเครื่องดนตรีเนี่ยมันคือความโกลาหลของความถี่ที่ทับซ้อนกัน ฮาร์มอนิก และเสียงรบกวนหลังบ้าน จัดเต็ม

  1. ต่อ เซ็นเซอร์เสียง KY-038 หรือ ไมโครโฟนแบบอิเล็กเตร็ต MAX4466 เข้ากับพินอนาล็อก A0 ของ Arduino
  2. Arduino ต้องสุ่มตัวอย่างแรงดันไฟฟ้าดิบให้เร็วมากๆ (เช่น 20,000 ครั้งต่อวินาที) โดยใช้การจัดการรีจิสเตอร์ ADC โดยตรง เพื่อเติมข้อมูลลงในอาร์เรย์ RAM ขนาดใหญ่
  3. ถ้าเอาไปพล็อตกราฟดู ข้อมูลพวกนี้จะดูเหมือนคลื่นรูปทรงประหลาดๆ ซับซ้อนวุ่นวายไปหมด

การถอดรหัสด้วยอัลกอริทึม FFT

หัวใจของการตรวจจับโน้ตอยู่ที่อัลกอริทึมทรงพลังอย่าง Fast Fourier Transform (FFT) โปรเจกต์นี้ใช้ Autocorrelation แต่หลักการก็คล้ายกับการวิเคราะห์ด้วย FFT

  • มันรับเอาคลื่นเส้นเดียวที่ยุ่งเหยิงและซับซ้อนจากไมโครโฟน
  • จากนั้นมันจะแยกย่อยเส้นนั้นทางคณิตศาสตร์ออกเป็นความถี่องค์ประกอบต่างๆ
  • โปรโตคอลตรวจจับจุดสูงสุด (Peak Detection): โค้ดจะกวาดผ่านข้อมูลที่วิเคราะห์แล้วเพื่อหาความถี่พื้นฐาน
  • ถ้าตรวจพบความถี่ 439.8 Hz ตรรกะของ Arduino ก็จะรู้ทันทีว่านั่นคือโน้ต A4 พื้นฐาน!
  • มันจะอัปเดตการแสดงผลทันที พิมพ์โน้ตที่ระบุได้ออกมา

สิ่งที่ต้องมีสำหรับการวิเคราะห์เสียง

  • Arduino Uno/Nano (การคำนวณ Autocorrelation และ FFT จะผลักดันโปรเซสเซอร์ ATmega ให้ทำงานถึงขีดจำกัดเลยนะตัวนี้)
  • ไมโครโฟนอนาล็อกที่เหมาะสม (เซ็นเซอร์เสียงดิจิทัลราคาถูกพวกนั้นให้เอาต์พุตแค่สัญญาณสูง/ต่ำเท่านั้น ใช้วิเคราะห์ความถี่ไม่ได้เด็ดขาด ต้องจับคลื่นรูปคลื่นอนาล็อกเต็มๆ เท่านั้น!)
  • จอแสดงผล เช่น จอ OLED 0.96" SSD1306 แบบ I2C เพื่อแสดงผลโน้ตดนตรีที่ตรวจจับได้อย่างสวยงาม

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

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

apps:
  - "1x Mini Piano LT"
author: "lbf20012001"
category: "Audio & Sound"
components:
  - "1x Solderless Breadboard Full Size"
  - "1x Arduino UNO"
  - "1x USB-A to B Cable"
  - "1x Jumper wires (generic)"
  - "1x Computer Speaker, Pro-Sound 2000"
  - "1x DEVMO High Sensitivity Sound Detection Module for Arduino"
description: "โค้ดนี้มันจะแสดงค่าความถี่แบบประมาณๆ พร้อมกับบอกว่าโน๊ตดนตรีที่เพื่อนกดบนคีย์บอร์ดหรือแอปเปียโนคือตัวอะไร! ใช้เซนเซอร์รับเสียงแล้วคำนวณให้เลย ตึงๆ"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/8cc6ce54-a520-4583-ba12-c0eceb634911.ino"
encryptedPayload: "U2FsdGVkX1+tnVotIgMatnjXhaxpYK/wIU9KhE1djgBsjXT/3i1jRnJXz1mL2UBcxKW3BZDL6PRLMz4BjpaDZJoq8x90DetNh7jYcilukMc="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/musical-note-detector-7e01ee_cover.jpg"
lang: "en"
likes: 4
passwordHash: "ff40a1bdb45f09d930f7dfd3a7a5c9022f38631613001175f19532a036e44025"
price: 699
seoDescription: "Detect Musical Note and Frequency from an Electronic Keyboard or Piano App using this Arduino Sketch."
tags:
  - "note detector"
  - "audio"
  - "music"
title: "โปรแกรมจับโน๊ตเพลง งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/2n_JiXvBwsw"
views: 20899