กลับไปหน้ารวมไฟล์
analog-read-speaker-89faea.md

Physics of the Theremin: Analog Read-speaker

โปรเจกต์ Analog Read-speaker เป็นบทนำที่ยอดเยี่ยมสำหรับการควบคุมฮาร์ดแวร์แบบไดนามิกแบบเรียลไทม์ แทนที่จะเขียนเพลงลงใน array และปล่อยให้มันเล่นแบบคงที่ โปรแกรมเมอร์จะหมุนปุ่ม Analog Potentiometer เพื่อบังคับให้ฟังก์ชัน tone() ของ Arduino เร่งและลดความถี่เอาต์พุตอย่างรวดเร็ว เลียนแบบเสียงหอนแบบไซไฟอันวุ่นวายของเครื่อง Theremin อิเล็กทรอนิกส์วินเทจ!

button_led_basic_interaction_1772681969235.png

การทำงานของ Map() Array แบบเรียลไทม์

หากคุณเพียงแค่รัน tone(8, analogRead(A0)); โปรเจกต์นี้จะทำงานได้ในทางเทคนิค แต่เสียงที่ออกมาจะแย่มาก!

  1. analogRead(A0) จะส่งค่า integer ตั้งแต่ 0 ถึง 1023
  2. ซึ่งหมายความว่าลำโพงจะเล่นความถี่ตั้งแต่ 0.0Hz (เสียงคลิกของ static ล้วนๆ) ไปจนถึง 1023Hz (เสียงบี๊บสูง)
  3. โค้ด C++ จะต้องจัดการขีดจำกัดเหล่านี้อย่างมีประสิทธิภาพโดยใช้ฟังก์ชัน <map()> อันชาญฉลาด!
  4. การ Re-Mapping ของ Synthesizer:
int sensorReading = analogRead(A0);
// บีบอัดเอาต์พุต integer 1023 และยืดออกไปทั่วสเปกตรัมเสียงขนาดใหญ่ 120Hz ถึง 2500Hz!
int pitch = map(sensorReading, 0, 1023, 120, 2500); 

tone(8, pitch, 10); // ปล่อยความถี่ออกมาเป็นเวลา 10 มิลลิวินาทีอย่างต่อเนื่อง!
  1. ด้วยการวางโค้ดนี้ไว้ใน loop() ที่ทำงานอย่างต่อเนื่อง การหมุนปุ่มทางกายภาพจะทำให้เครื่องกำเนิดคลื่นสี่เหลี่ยมขนาดใหญ่เลื่อนขึ้นลงในย่านเปียโน 8 octave ทั้งหมดได้อย่างราบรื่นทางคณิตศาสตร์!

การอัปเกรดโดยใช้ LDR (Light Dependent Resistor) แทน

หากต้องการสร้างเครื่องดนตรีแนว Science Fiction อย่างแท้จริง ให้ถอด Potentiometer แบบมาตรฐานออก

  • ใช้ LDR Photoresistor มาตรฐานต่อแบบ voltage divider (โดยใช้ 10K external resistor)
  • Map ค่าการอ่านแสงโดยรอบ! เมื่อคุณโบกมือเหนือ photo-resistor เงาจะทำให้ photon array ที่เข้ามาลดลง!
  • Arduino จะแปลงความมืดให้เป็นโครงสร้าง <map()> ที่ยุบตัวลง ทำให้ระดับเสียงของ Piezo buzzer ที่กรีดร้องพุ่งลงอย่างรุนแรงโดยไม่ต้องสัมผัสฮาร์ดแวร์ใดๆ — นี่คือ Optical Theremin ที่ไร้ที่ติ!

การสร้าง Audio Generation แบบ Analog

  • Arduino Uno/Nano (ความเร็วในการประมวลผลมาตรฐานก็เพียงพอแล้ว)
  • 10K Ohm Analog Potentiometer หรือ LDR (Light Dependent Resistor Photo-Cell)
  • Passive Piezoelectric Buzzer (ต้องเป็น PASSIVE หากทำเช่นนี้กับ active buzzer จะทำให้ internal oscillator เสียหายทันทีและปล่อย garbage static ออกมา)
  • 100 Ohm Resistor ที่ต่ออนุกรมอย่างเคร่งครัดกับขา buzzer เพื่อป้องกัน Uno logic gate จาก current back-draw ขนาดใหญ่

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

title: "Analog Read-speaker"
description: "Data-driven frequency modulation! Plunge entirely into multi-step analog variable arrays, dynamically mapping raw 0-1023 hardware potentiometer readings into terrifying 100Hz-20,000Hz sweeping audio-oscillation synthesis."
category: "Audio & Sound"
difficulty: "Beginner"