กลับไปหน้ารวมไฟล์
astronomia-coffin-dance-meme-music-using-arduino-uno-b81423.md

โปรเจกต์: การสร้างเพลง Astronomia (Coffin Dance) ด้วย Arduino Uno

ในบทความนี้ เราจะนำทุกท่านเข้าสู่กระบวนการที่สนุกสนานของการสร้างเพลงจากมีมชื่อดัง "Coffin Dance" หรือที่รู้จักกันในชื่อ Astronomia โดยใช้บอร์ดไมโครคอนโทรลเลอร์ Arduino Uno โปรเจกต์นี้ไม่เพียงแต่มอบความบันเทิงเท่านั้น แต่ยังเป็นบทเรียนที่ยอดเยี่ยมในการเรียนรู้เกี่ยวกับการสร้าง Tone (Tone Generation) และการควบคุมอุปกรณ์เอาต์พุตพื้นฐานในงาน Embedded Engineering


วิดีโอสาธิต

รับชมการสาธิตการทำงานของโปรเจกต์และเสียงที่ผลิตจาก Speaker ได้ในวิดีโอข้างล่างนี้:


ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น

การเลือกส่วนประกอบสำหรับโปรเจกต์นี้มีความน่าสนใจจากมุมมองทาง Electronics โดยเฉพาะอย่างยิ่งการใช้ Transistor เพื่อขยายสัญญาณ

  • Arduino Uno / NodeMCU: ทำหน้าที่เป็นหน่วยประมวลผลกลางเพื่อสร้างสัญญาณ Pulse Width Modulation (PWM) ที่ความถี่ต่างๆ
  • Jumper Wires: สำหรับเชื่อมต่อวงจรบน Breadboard
  • Speaker หรือ Buzzer: Speaker ขนาด 8 โอห์มจะให้เสียงที่นุ่มนวลกว่า ในขณะที่ Buzzer จะติดตั้งง่ายกว่า
  • BC547 Transistor (อุปกรณ์เสริม): หากใช้ Speaker ขนาดเล็ก Transistor ชนิด NPN นี้จำเป็นต้องทำหน้าที่เป็น Switching Amplifier เนื่องจากขา I/O ของ Arduino มีกระแสเอาต์พุตจำกัด (ประมาณ 20-40mA) การเชื่อมต่อ Speaker โดยตรงอาจทำให้บอร์ดเสียหายหรือเสียงเบามาก
  • LED (อุปกรณ์เสริม): เพื่อสร้างเอฟเฟกต์ไฟกระพริบให้เข้ากับจังหวะเพลง

ขั้นตอนที่ 2: การเชื่อมต่อ Arduino เข้ากับ Speaker (ผ่านวงจรขยาย)

ในการขับ Speaker เราจะใช้ BC547 Transistor เพื่อขยายกระแสจาก Digital port ของ Arduino วิธีนี้ช่วยให้มั่นใจว่า Speaker ได้รับพลังงานเพียงพอโดยไม่ดึงกระแสโดยตรงจาก Microcontroller

หลักการทำงาน: สัญญาณจาก Digital Pin 7 จะถูกส่งไปยังขา Base ของ Transistor ซึ่งจะควบคุมการไหลของกระแสจากแหล่งจ่ายไฟผ่าน Speaker ไปยัง Ground

แผนภาพวงจรสำหรับ BC547 Transistor Amplifier เพื่อขับ Speaker

ขั้นตอนที่ 3: การเชื่อมต่อ Arduino เข้ากับ Buzzer (วิธีง่ายๆ)

หากคุณเลือกใช้ Piezo Buzzer ซึ่งเป็นอุปกรณ์ใช้กระแสไฟต่ำที่ทำงานโดยการสั่นสะเทือนของแผ่นเซรามิก คุณสามารถเชื่อมต่อเข้ากับบอร์ด Arduino ได้โดยตรงโดยไม่ต้องใช้ Transistor สำหรับการขยายสัญญาณ

แผนภาพวงจรสำหรับการเชื่อมต่อ Arduino เข้ากับ Piezo Buzzer บน Digital Pin 7

ขั้นตอนที่ 4: การเขียนโปรแกรม (Arduino Code)

Source code นี้ใช้ฟังก์ชัน tone() มาตรฐานของ Arduino ซึ่งจะสร้าง Square Wave ที่ความถี่ที่กำหนด (ในหน่วย Hertz) เพื่อส่งไปยัง Speaker

การวิเคราะห์ตรรกะของโปรแกรม:

  1. การกำหนดความถี่ของโน้ต (#define): ส่วนแรกของโค้ดจะจับคู่ชื่อโน้ตดนตรี (เช่น NOTE_A4) กับค่าความถี่ทางกายภาพจริง ซึ่งช่วยให้การเรียบเรียงเพลงง่ายขึ้น
  2. Melody Array: เก็บลำดับของโน้ตที่จะเล่น โดยที่ 0 แทนการหยุด (Rest)
  3. NoteDurations Array: กำหนดความยาวของแต่ละโน้ต (4 = Quarter Note)
  4. ฟังก์ชัน setup(): ในโปรเจกต์นี้ เพลงจะถูกเล่นเพียงครั้งเดียวเมื่อเปิดเครื่องหรือ Reset โดยใช้ Loop ที่วนซ้ำ 112 ครั้ง ซึ่งสอดคล้องกับจำนวนโน้ต
    • คำนวณ noteDuration โดยอิงจากค่าคงที่ 750ms หารด้วยประเภทของโน้ต
    • ใช้ tone(7, ...) เพื่อสั่งให้ Pin 7 ปล่อยเอาต์พุตความถี่
    • คำนวณ pauseBetweenNotes (คูณด้วย 1.30) เพื่อสร้างช่องว่างระหว่างโน้ต ทำให้เพลงฟังดูราบรื่นและไม่กระตุก
#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

int melody[] = {
  NOTE_A4, 0, NOTE_A4, NOTE_A4,
  NOTE_C5, 0, NOTE_AS4, NOTE_A4, 
  NOTE_G4,0, NOTE_G4, NOTE_AS5,
  NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,
  NOTE_G4,0, NOTE_G4, NOTE_AS5,
  NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,
  NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,
  NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,
  NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,
  NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,
  NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,
  NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D5,
  NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, 
  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, 
  NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5,
  NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5, 
  NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5, 
  NOTE_C5, NOTE_AS4, NOTE_A4, NOTE_F4,
  NOTE_G4, 0, NOTE_G4, NOTE_D5,
  NOTE_C5, 0, NOTE_AS4, 0,
  NOTE_A4, 0, NOTE_A4, NOTE_A4,
  NOTE_C5, 0, NOTE_AS4, NOTE_A4, 
  NOTE_G4,0, NOTE_G4, NOTE_AS5,
  NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,
  NOTE_G4,0, NOTE_G4, NOTE_AS5,
  NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,
  NOTE_G4, 0, NOTE_G4, NOTE_D5,
  NOTE_C5, 0, NOTE_AS4, 0,
  NOTE_A4, 0, NOTE_A4, NOTE_A4,
  NOTE_C5, 0, NOTE_AS4, NOTE_A4, 
  NOTE_G4,0, NOTE_G4, NOTE_AS5,
  NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,
  NOTE_G4,0, NOTE_G4, NOTE_AS5,
  NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5
};

int noteDurations[] = {
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4,
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4,
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4,
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4,
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4,
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4,
  4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4
};

void setup() {
  // เล่นโน้ตทั้งหมด 112 ตัวตามที่กำหนดใน Array
  for (int thisNote = 0; thisNote < 112; thisNote++) {
    // คำนวณระยะเวลาของโน้ต (750ms เป็นค่าพื้นฐานที่สามารถปรับ Tempo ได้)
    int noteDuration = 750 / noteDurations[thisNote];
    tone(7, melody[thisNote], noteDuration);
    
    // กำหนดช่องว่างระหว่างโน้ตเพื่อให้เสียงd

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

title: "Astronomia Coffin Dance Meme Music Using Arduino Uno"
description: "In this blog we have shown you Astronomia Coffin Dance Tune With Arduino Uno with Code"
author: "Sparkbuzzer"
category: ""
tags:
  - "astronomia coffin dance"
  - "coffin dance music"
  - "coffin dance song"
  - "home automation"
  - "robotics"
views: 18005
likes: 2
price: 870
difficulty: "Intermediate"
components:
  - "1x Jumper wires (generic)"
  - "1x General Purpose Transistor NPN"
  - "1x Breadboard (generic)"
  - "1x Arduino UNO"
  - "1x LED (generic)"
  - "1x Buzzer, Piezo"
  - "1x Speaker, Piezo"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/35f2dd4e-ef3a-4736-ab21-dd1136d4ce68.ino"
  - "https://projects.arduinocontent.cc/35f2dd4e-ef3a-4736-ab21-dd1136d4ce68.ino"
documentationLinks: []
passwordHash: "7aeb084d30b1a70c914d039387417b00b2966e6663c584987c91bc28c687cd7a"
encryptedPayload: "U2FsdGVkX1/v33llAC/opJHi4Z7G8gebxrPuIv7i9lCYjfKNAHwG7zoRUdFhfSPT5n1ziaPlIBJRTSLv+8feJXRMcwFxAmSzDfljNw5Fr7g="
seoDescription: "Learn how to play Astronomia Coffin Dance meme music using Arduino Uno with full source code and tutorial."
videoLinks:
  - "https://www.youtube.com/embed/PswvlpfAjCI"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/astronomia-coffin-dance-meme-music-using-arduino-uno-b81423_cover.jpg"
lang: "th"