กลับไปหน้ารวมไฟล์
led-sound-visualizer-234ced.md

แนะนำตัวและแรงบันดาลใจ

สวัสดีอีกครั้งทุกคน พี่เพิ่งได้บอร์ด Sparkfun Sound Detector มาเล่น และสิ่งแรกที่พี่ทำก็คือใช้คู่มือฮุคอัพอย่างเป็นทางการของ Sparkfun เพื่อทดสอบเจ้า Sound Detector ตัวนี้ หลังจากนั้นพี่ก็อยากเพิ่มความท้าทายหน่อย – มันจะเป็นไปได้มั้ยถ้าเราจะใช้ไฟ LED ทั่วไปมาทำเป็น Sound Visualizer จากค่าที่อ่านได้จาก Sound Detector? ความคิดนั้นเลยพาพี่มาสู่โปรเจคนี้ – ตัวอย่างวิดีโออยู่ด้านล่างเลยจ้า –

ขั้นตอนที่ 1: แนะนำอุปกรณ์

สำหรับโปรเจคนี้ น้องจะต้องมี

  • บอร์ด Arduino (พี่เลือกใช้ Mega 2560)
  • สายจัมเปอร์
  • เบรดบอร์ด
  • Sparkfun Sound Detector
  • LED สีแดง
  • LED สีน้ำเงิน
  • LED สีเหลือง

นี่คือบทเรียนพื้นฐานสำหรับใช้อุปกรณ์พวกนี้

  • บทเรียนพื้นฐานสำหรับการต่อไฟ LED
  • บทเรียนพื้นฐานสำหรับ Sparkfun Sound Detector

เอาล่ะ มาดูการต่อวงจรกันดีกว่า สู้งานนะน้อง!

ขั้นตอนที่ 2: การต่อวงจรฮาร์ดแวร์

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

Sparkfun Sound Detector.

สังเกตว่ามีขาทั้งหมด 5 ขา – Audio, Envelope, Gate, VCC, และ GND โดย Audio, Envelope, และ Gate เป็นอินพุตทั้งหมด ส่วน VCC คือไฟเลี้ยง และ GND คือกราวด์ สำหรับโปรเจคนี้ เราจะทำตามการต่อในคู่มือฮุคอัพของ Sparkfun ซึ่งใช้ทุกขายกเว้น Audio

ตามที่ SparkFun บอกไว้

"การต่อสาย:

ต่อ Sound Detector เข้ากับ Arduino ดังนี้:

(Sound Detector -> ขา Arduino)

GND → GND

VCC → 5V

Gate → ขา 2

Envelope → A0"

ต่อส่วนนั้นเสร็จแล้ว ที่เหลือก็ง่ายดาย LED แต่ละดวงจะมีขายาว (ขาบวก) และขาสั้น (ขาลบ) ขาลบของแต่ละดวงให้ต่อลงกราวด์ (GND) ส่วนขาบวกให้ต่อเข้ากับขา Digital IO ผ่านตัวต้านทาน (Resistor) 220 โอห์ม ในโปรเจคของพี่ ขา Digital IO หมายเลข 5 คือ LED สีเหลืองทางซ้ายสุด, ขา Digital IO หมายเลข 4 คือ LED สีน้ำเงินตรงกลาง, และขา Digital IO หมายเลข 3 คือ LED สีแดง นี่คือวงจรสำหรับ LED

วงจรสำหรับ LED เท่านั้น

เมื่อต่อ LED และ Sound Detector เสร็จแล้ว ก็ไปต่อที่ส่วนโค้ดกันเลย อย่าช็อตนะตัวนี้!

ขั้นตอนที่ 3: ซอฟต์แวร์และการเขียนโค้ด

คัดลอกโค้ดด้านล่างนี้ไปวางใน Arduino IDE ได้เลยจ้า

//Use Sparkfun's Sound Detector Guide to Create a Sound Visualizer
// Define the Pin connections
#define PIN_GATE_IN 2
#define IRQ_GATE_IN  0
#define PIN_LED_OUT 13
#define PIN_ANALOG_IN A0
void soundISR()
{
 int pin_val;
 pin_val = digitalRead(PIN_GATE_IN); 
 digitalWrite(PIN_LED_OUT, pin_val);
}
void setup()
{
 Serial.begin(9600); //Starts Newline Baud Connection
 pinMode(PIN_LED_OUT, OUTPUT); //Setting builtin LED for the SOUND detector as OUTPUT
 pinMode(PIN_GATE_IN, INPUT); //Setting the Gate Pin as input
 attachInterrupt(IRQ_GATE_IN, soundISR, CHANGE);
//Set LED Pins as OUTPUT
 pinMode(5, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(3, OUTPUT);
}
void loop()
{
//Sets the LEDs to OFF
 digitalWrite(5, LOW);
 digitalWrite(4, LOW);
 digitalWrite(3, LOW);
 int value;
 value = analogRead(PIN_ANALOG_IN);
 Serial.println("Volume Value: ");
 if ((value>=10) && (value <=20))
 {
   digitalWrite(5, HIGH);
Serial.print(value);
   Serial.println("LOW VOLUME");
 }
 else if ( (value > 20) && (value <= 30) )
 {
   digitalWrite(4, HIGH);
   digitalWrite(5, HIGH);
   Serial.print(value);
   Serial.println("MEDIUM VOLUME");
 }
 else if (value > 30)
 {
   digitalWrite(3, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(5, HIGH);
   Serial.print(value);
   Serial.println("HIGH VOLUME");
 }
 else {
   Serial.println("LITTLE/NO VOLUME DETECTED");
 }
 delay(1000);
}

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

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

การประมวลผลสัญญาณเสียง (Acoustic Signal Processing)

โปรเจคนี้มันคือการแปลงคลื่นเสียงในอากาศให้กลายเป็นแสงไฟที่เต้นตามจังหวะได้เลย เหมือนเป็น "Visual Equalizer" แบบเร่งด่วนนั่นแหละ

  • การสุ่มตัวอย่างสัญญาณเสียงแบบอนาล็อก (Analog Audio Sampling): Arduino ของเราจะไปอ่านค่าจากขาเอาต์พุต "envelope" ของ Sound Detector ด้วยลูปที่อ่านค่าบ่อยๆ (high-frequency analog polling loop) มันจะจับ "จุดสูงสุด (Peaks)" ของสัญญาณเพื่อหาค่าความดังในตอนนั้น แล้วก็โยงค่ามาแสดงผลกับ LED ตามที่เห็นในโค้ดเลย
  • การควบคุมความเข้มของ LED แบบกำหนดตำแหน่งได้ (Addressable LED Intensity - แนวคิดขั้นสูง): ถ้าอยากอัพเกรดให้เทพกว่านี้ ลองใช้ NeoPixel strip หรือเป็นแถว LED แบบกำหนดตำแหน่งได้ดู ความดังของเสียงสามารถเอาไปควบคุมความยาวของ "Level Meter" หรือความสว่างของสีได้เลย ให้แสงไฟตอบสนองกับจังหวะเพลงได้แบบทันใจ

ฟีเจอร์ขั้นสูง (Advanced Features)

  • การแยกความถี่ด้วย FFT (FFT Frequency Breakdown): (เวอร์ชันขั้นสูง) น้องสามารถใช้ไลบรารี Fast Fourier Transform (FFT) มาช่วยแยกเสียงออกเป็น Bass, Mid, และ Treble ได้เลย จะได้สั่งให้ Arduino ควบคุมแต่ละส่วนของ LED strip ตามความถี่ของเสียงที่ได้ กลายเป็น Spectrum Analyzer ของจริงไปเลย ห้ามช็อตนะตัวนี้!

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

apps:
  - "1x Arduino IDE"
  - "1x Arduino Web Editor"
author: "ShreyanR"
category: ""
components:
  - "1x 5 mm LED: Red"
  - "1x Breadboard (generic)"
  - "1x 5 mm LED: Yellow"
  - "1x SparkFun Sound Detector (with Headers)"
  - "1x LED, Blue"
  - "1x Arduino Mega 2560"
  - "1x Jumper wires (generic)"
description: "ใช้เจ้า Sparkfun Sound Detector ตัวเทพๆ มาจัดการเสียง แล้วส่งสัญญาณไปขับ LED ให้เต้นตามเป็น Soundbar งานง่ายแต่หล่อมาก!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/0aa16511-7435-4d20-b078-602cdec0d4a2.ino"
  - "https://projects.arduinocontent.cc/0aa16511-7435-4d20-b078-602cdec0d4a2.ino"
encryptedPayload: "U2FsdGVkX1/6SUIk41cM5CIFrje1sx92jsgW6NwVGGnGglGhcBxw1nrJs8REW3ZB3wS8fxkPY9JyRNxjI1pXtol/9npaRKUDT6oKCrtNJ2EG/wpMVe4z3RhmUDDhv2yC"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/led-sound-visualizer-234ced_cover.jpg"
lang: "en"
likes: 1
passwordHash: "98bc595f10789c3010b8d240b0c773234a7baa16926bd82944d5a5064a06190d"
price: 2450
seoDescription: "Build an LED Sound Visualizer with Sparkfun Sound Detector. Create a sound-reactive LED soundbar with Arduino."
tags:
  - "sound"
  - "lights"
title: "โปรเจค LED Sound Visualizer - เปลี่ยนเสียงเป็นแสงสี ตึงๆ วัยรุ่น!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/uBqNzmMNXbc"
views: 3031