กลับไปหน้ารวมไฟล์
arduino-coffin-dance-theme-130475.md

Auditory Arrays: Arduino Coffin Dance Theme

จัดไปวัยรุ่น! โปรเจกต์ Arduino Coffin Dance Theme นี้ กลไกการทำงานเหมือนกับโปรเจกต์ Home Alone ทุกประการ มันคือบทเรียนเริ่มต้นที่โคตรจะเหมาะสำหรับการจัดการความถี่แบบอัลกอริทึม เพราะเป็นเพลงที่ใครๆ ก็จำได้นั่นเอง งานของเราคือต้องแปลงเมโลดี้ EDM ที่เร็วและขาดเป็นห้วงๆ ให้กลายเป็นสัญญาณความถี่ (Hz) ทางกายภาพทั้งหมด ด้วยการจัดวาง delay() ให้เป๊ะเว่อร์

Step 1: อุปกรณ์ที่ต้องใช้

ฮาร์ดแวร์

  1. Arduino Uno / Nano / Leonardo
  2. เปียโซบัซเซอร์ (Passive Piezoelectric Buzzer) 5V หนึ่งตัว
  3. สายจัมเปอร์
  4. ตัวต้านทาน (Resistor) 100 โอห์ม

ซอฟต์แวร์

  1. Arduino IDE
  2. Arduino Tone Library

Step 2: วิธีการต่อวงจร

ต่อขาบวก (+) ของเปียโซบัซเซอร์เข้ากับขา D8 ของ Arduino Uno แนะนำให้ต่อตัวต้านทาน 100 โอห์มแบบอนุกรมกับบัซเซอร์ด้วยนะ เพื่อจำกัดกระแสและปกป้องขาของ Arduino ตัวโปรด ห้ามช็อตนะตัวนี้!

สรุปการต่อ: บัซเซอร์ (+) ---> D8 (ผ่านตัวต้านทาน) บัซเซอร์ (-) ---> GND

Step 3: โค้ดและรายละเอียดทางเทคนิค

ก่อนจะเล่นเสียงได้ ต้องติดตั้งไลบรารี Tone ของ Arduino ก่อน ถ้ายังไม่มี สามารถดาวน์โหลดได้จาก Github ถ้าน้องยังไม่รู้วิธีติดตั้งไลบรารีของบุคคลที่สามใน Arduino IDE เวอร์ชันที่ใช้อยู่ ลองไปศึกษาจากคู่มือทางการในเว็บไซต์ Arduino.cc ได้เลย

ด้านล่างนี้จะมีไฟล์ zip ที่บรรจุโค้ด Arduino สำหรับเล่นเพลง Coffin Theme ไว้ให้แล้ว ดาวน์โหลดมาแล้วแตกไฟล์ไว้ในคอมพิวเตอร์ จากนั้นเปิดไฟล์ Coffin_dance_arduino.ino ใน Arduino IDE แล้วอัปโหลดโค้ดลงบอร์ด Arduino ของน้องได้เลย สู้งานนะน้อง!

รายละเอียดเทคนิคเพิ่มเติม (แบบจัดเต็ม)

ฟิสิกส์ของเสียงสตัคคาโต

เพลง EDM แบบ Coffin Dance Theme นี่เล่นแบบเลกาโต (ต่อเนื่องเนียนๆ) ไม่ได้เลยนะ ถ้าโน้ตสองตัวทับกันละก็ เมโลดี้จะกลายเป็นเสียงหอนที่ต่อเนื่องยาวเหยียดแทน

  1. คำสั่ง tone() ปกติจะเล่นเสียงต่อเรื่อยๆ จนกว่าเราจะสั่งหยุดด้วย noTone()
  2. ตรรกะการทำงาน: เราต้องคำนวณความยาวของโน้ตแต่ละตัว (เช่น 200 มิลลิวินาที) ให้แม่น แล้วบังคับให้ CPU หยุดพักอย่างตั้งใจก่อนจะเล่นโน้ตถัดไป!
    int noteDuration = 1000 / noteLengths[i];
    tone(buzzerPin, melodyHz[i]);
    delay(noteDuration);
    
    noTone(buzzerPin);
    int silenceGap = noteDuration * 0.3; // ช่องว่าง 30% ที่สำคัญมาก!
    delay(silenceGap);
    
  3. ช่องว่าง 30% ระหว่างโน้ตนี่แหละที่สร้างเอฟเฟกต์ "เด้ง" หรือเสียงสตัคคาโตให้กับเพลงอิเล็กทรอนิกส์แดนซ์!

การจัดการหน่วยความจำด้วย PROGMEM

เพลงอิเล็กทรอนิกส์ที่ซับซ้อนนี่มีข้อมูลตัวเลขในอาร์เรย์เป็นพันๆ ตัวสำหรับโน้ตและความยาว

  • ถ้าน้องประกาศ int melody[] = { ... } ตรงๆ คอมไพเลอร์ของ Arduino จะเก็บเพลงทั้งหมดไว้ใน SRAM ขนาดจิ๋ว 2 กิโลไบต์ของ Uno ซึ่งมีโอกาสสูงที่ชิปจะค้างหรือรีสตาร์ท
  • ทางแก้คือใช้มาโคร PROGMEM: const int melody[] PROGMEM = { ... };
  • การนี้จะบังคับให้ระบบเก็บข้อมูลเพลงไว้ใน Flash Storage ขนาด 32 กิโลไบต์ (เหมือนฮาร์ดดิสก์)
  • เวลาที่โค้ดวนลูปเพื่ออ่านข้อมูล ก็จะค่อยๆ ดึงออกมาใช้ทีละน้อยด้วย pgm_read_word_near(&melody[i]) ซึ่งป้องกันไม่ให้ SRAM เกินโหลด

โค้ดสุดท้ายของโปรเจกต์นี้จำเป็นต้องใช้ อาร์เรย์ C++ ที่ซับซ้อนและซ้อนกันหลายชั้น ซึ่งบรรจุข้อมูล MIDI ของเมโลดี้เพลง "Astronomia" (Coffin Dance) ที่ถูกแปลงโน้ตแล้วทั้งหมด โดยโครงสร้างถูกออกแบบมาให้ใช้กับ PROGMEM โดยเฉพาะ

ขั้นตอนที่ 4: ถึงเวลาเล่นเพลงแล้ววว!

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

ถ้าคลิปนี้ช่วยน้องได้จริงๆ อย่าลืมกดไลค์ให้พี่ด้วยนะ ส่วนใครชอบงานแนวนี้ ก็กดติดตามช่องไว้ เดี๋ยวมีโปรเจคเด็ดๆ มาให้เล่นอีกแน่นอน :)

ชอบก็แชร์ต่อได้เลยวัยรุ่น

ขอบคุณที่อ่านจนจบน้า! สู้งานนะน้อง

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

apps:
  - "1x Arduino IDE 2.0 (beta)"
author: "rahulkhanna"
category: "Audio & Sound"
components:
  - "1x Speaker: 0.25W, 8 ohms"
  - "1x Arduino Uno Rev3"
  - "1x Piezo Buzzer"
  - "1x 40 colored male-male jumper wires"
description: "มาเรียนวิธีทำให้ Arduino Uno เล่นเพลงฮิต Coffin Dance กัน! ใช้แค่ Buzzer กับโค้ดไม่กี่บรรทัด ก็ตี๊ดตึงๆ ได้แล้วว่ะ วัยรุ่นจัดไป!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://github.com/Rahul24-06/Arduino-Coffin-Dance-Theme/"
encryptedPayload: "U2FsdGVkX1/YZ/iFZYroCQVPbMWJJxEXUh4AtL1UurvF3Z0xFB6WLyt7Dp9RDrm4w7qb2IGTDF/OT4ra+zcfFw3tpIms8OpYgbOR+191sKg="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-coffin-dance-theme-130475_cover.png"
lang: "en"
likes: 2
passwordHash: "f0464c1e0762aeefbe4749cad5970ed264374c551af1cbd1acfe401573d9a5dc"
price: 435
seoDescription: "Learn how to play the Coffin Dance Theme sound on Arduino Uno with this simple tutorial."
tags:
  - "Audio"
  - "Music"
  - "Smart appliances"
  - "Toys"
  - "Entertainment System"
title: "โปรเจค Arduino Coffin Dance Theme งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://youtu.be/z0ElZUMAmTY"
views: 8102