พื้นฐานความถี่เสียง: การเชื่อมต่อ Buzzer
LED เป็นแบบไบนารี: เปิด หรือ ปิด Buzzer เป็นแบบแอนะล็อกโดยสมบูรณ์ โปรเจกต์ Interfacing Buzzer with Arduino จะแนะนำแนวคิดพื้นฐานของการสร้าง "Square Wave" ที่สามารถได้ยินได้ โดยการสลับสถานะ HIGH และ LOW ของขา Digital ของ Arduino อย่างรวดเร็วเป็นพันครั้งต่อวินาที เพื่อบังคับให้ piezoelectric crystal โค้งงอและดีดตัว เป็นการสร้างคลื่นเสียงในอากาศ!

ฟิสิกส์ของการทำงานของฟังก์ชัน tone()
หากคุณเพียงแค่รัน digitalWrite(BuzzerPin, HIGH) Buzzer อาจจะคลิกหนึ่งครั้งแล้วเงียบไป
- ในการสร้างเสียง คุณต้องทำให้ขา (pin) สั่น
- ทีมงานหลักของ Arduino ได้เขียนไลบรารี
<tone()>ซึ่งเชื่อมต่อโดยตรงกับ ATmega Timer 2 hardware interrupt register - รูปแบบคำสั่ง (Syntax):
tone(pin, frequency, duration);tone(8, 440, 1000);-> ส่งความถี่440Hz(โน้ตดนตรี 'A4') ออกจาก Pin 8 เป็นเวลา1000 milliseconds!
- โปรเซสเซอร์ Arduino จะสลับขา Pin 8 ระหว่าง 5V และ GND อย่างรวดเร็ว 440 ครั้งต่อวินาที! piezoelectric crystal จะงอตัว 440 ครั้ง ซึ่งตรงกับเรโซแนนซ์ทางเสียงของสายเปียโนที่ถูกปรับแต่ง!
การประพันธ์เพลงด้วย Array
การเล่นโน้ตเดียวมันน่าเบื่อ การสร้างเพลงธีม Super Mario จำเป็นต้องวิเคราะห์ Array ขนาดใหญ่
- คุณต้องประกาศ Array ขนาดใหญ่ของจำนวนเต็มเพื่อแสดงถึงโน้ตเพลง:
int melody[] = { 262, 196, 196, 220, 196, 0, 247, 262 }; // C4, G3, G3, A3, G3, Rest, B3, C4
int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 };
- ลูป
forจะวนซ้ำผ่าน Array มันจะคำนวณระยะเวลาทางกายภาพ(1000ms / noteDurations[i]) - หากไม่มี
delay()ระหว่างโน้ต เพลงจะรวมกันเป็นเสียงแหลมที่แย่มากจนแยกไม่ออก คุณต้องใส่ช่วงหยุดชั่วคราวทางคณิตศาสตร์ (duration * 1.3) ระหว่างการทำงานของtone()เพื่อให้ piezoelectric crystal สามารถกลับสู่สถานะพักได้!
ฮาร์ดแวร์ Chiptune ที่จำเป็น
- Arduino Uno/Nano (รูปแบบมาตรฐาน)
- Passive Piezoelectric Buzzer (ห้ามใช้ "Active" buzzer โดยเด็ดขาด Active buzzer มีออสซิลเลเตอร์ภายในของตัวเอง และจะเล่นได้เพียงโน้ต 2kHz ที่แย่และแหลมเท่านั้น ไม่ว่าคุณจะส่งความถี่อะไรจากโค้ด C++ ไปให้ก็ตาม!)
- Resistor ขนาด 100 Ohm ที่ต่ออนุกรมกับขา Buzzer เพื่อป้องกันการดึงกระแสสูงเกินไปและทำให้ logic gate ของ Arduino เสียหายระหว่างการส่ง Square Wave อย่างหนักหน่วง