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

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