หมายเหตุ: บทช่วยสอนนี้อาจล้าสมัย โปรดไปที่ ที่นี่ สำหรับเวอร์ชันล่าสุด.
ไลบรารี Arduino I2S
ไลบรารี Arduino I2S ใหม่ช่วยให้คุณสามารถส่งและรับข้อมูลเสียงดิจิทัลบน I2S bus ได้ ตัวอย่างนี้มีวัตถุประสงค์เพื่อแสดงวิธีใช้ไลบรารีนี้ในการขับเคลื่อน I2S DAC เพื่อสร้างเสียงที่คำนวณภายใน Arduino sketch.
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไลบรารีและวิธีการทำงาน โปรดอ่านหน้าไลบรารี.
การเชื่อมต่อ I2S
I2S DAC ที่ใช้ในตัวอย่างนี้ต้องการเพียง 3 สายสำหรับ I2S bus (บวกกับแหล่งจ่ายไฟ) การเชื่อมต่อสำหรับ I2S บน Arduino MKRZero มีดังนี้:
- SD (Serial Data) ที่ pin A6;
- SCK (Serial Clock) ที่ pin 2;
- FS (Frame หรือ Word Select) ที่ pin 3;
วิธีการทำงาน
Theremin มีการควบคุมหลักๆ สองอย่าง:
- ระดับเสียง (pitch)
- ความดัง (volume)
ในตัวอย่างนี้ พารามิเตอร์ทั้งสองนี้จะถูกเปลี่ยนโดยการเลื่อน slide potentiometers สองตัว แต่คุณสามารถแก้ไขให้เป็นอ่านค่าโดยใช้ ping sensor ก็ได้! ด้วยวิธีนี้ theremin ของคุณจะสมจริงยิ่งขึ้น!
potentiometers ทั้งสองตัวถูกต่อแบบวงจรแบ่งแรงดันไฟฟ้า ดังนั้นการเลื่อนจะทำให้คุณได้รับค่า (จาก analogRead()) ในช่วง 0 - 1023 ค่าเหล่านี้จะถูกแมปไปยังช่วงความถี่ต่ำสุดและสูงสุด และความดังต่ำสุดและสูงสุด.
เสียงที่ส่งบน I2S bus เป็นคลื่น sine แบบง่ายๆ ที่ความถี่และแอมพลิจูดถูกเปลี่ยนแปลงตามการอ่านค่าจาก potentiometers.
รายละเอียดทางเทคนิคเพิ่มเติม
การสังเคราะห์เสียงคุณภาพสูง
โปรเจกต์นี้สร้าง Theremin ดิจิทัลระดับมืออาชีพโดยใช้ high-speed distance sensors และ I2S DAC เพื่อคุณภาพเสียงที่เหนือกว่า.
- I2S Audio Pipeline: แตกต่างจากเสียง PWM ทั่วไป โปรเจกต์นี้ใช้โปรโตคอล
I2S(Inter-IC Sound) เพื่อสตรีมเสียง 16-bit ไปยัง DAC ภายนอก (เช่น MAX98357A) ซึ่งช่วยขจัดสัญญาณรบกวนดิจิทัลและให้โทนเสียงที่สะอาดเหมือนคลื่น sine. - Distance-to-Frequency Algorithm: ใช้ ultrasonic sensor หรือ IR Time-of-Flight (ToF) sensor Arduino จะคำนวณระดับเสียง (pitch) ตามระยะทาง โดยใช้ lookup table สำหรับสเกลเพลงตะวันตก (เช่น Minor Pentatonic).
การแสดงผล
- Arduino Web Editor Sync: (เฉพาะสำหรับรุ่นนี้) ใช้ Arduino IoT Cloud เพื่อแสดงความถี่และความดังปัจจุบันบน desktop dashboard ทำให้สามารถแสดงผลการทำงานได้แบบเรียลไทม์.