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

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

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

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

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

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

การประกอบสำหรับการสร้างเสียงอนาล็อก

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

ข้อมูล 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"