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

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