กลับไปหน้ารวมไฟล์
interfacing-buzzer-with-arduino-48a319.md

พื้นฐานความถี่เสียง: การเชื่อมต่อ Buzzer

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

button_led_basic_interaction_1772681969235.png

ฟิสิกส์ของการทำงานของฟังก์ชัน tone()

หากคุณเพียงแค่รัน digitalWrite(BuzzerPin, HIGH) Buzzer อาจจะคลิกหนึ่งครั้งแล้วเงียบไป

  1. ในการสร้างเสียง คุณต้องทำให้ขา (pin) สั่น
  2. ทีมงานหลักของ Arduino ได้เขียนไลบรารี <tone()> ซึ่งเชื่อมต่อโดยตรงกับ ATmega Timer 2 hardware interrupt register
  3. รูปแบบคำสั่ง (Syntax): tone(pin, frequency, duration);
    • tone(8, 440, 1000); -> ส่งความถี่ 440Hz (โน้ตดนตรี 'A4') ออกจาก Pin 8 เป็นเวลา 1000 milliseconds!
  4. โปรเซสเซอร์ 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 อย่างหนักหน่วง

ข้อมูล Frontmatter ดั้งเดิม

title: "Interfacing Buzzer with Arduino"
description: "Acoustic synthesis! Learn the foundational physics of generating square waves, manipulating the internal 16MHz ATmega timers using the `tone()` function to blast complex, polyphonic chiptune melodies."
category: "Audio & Sound"
difficulty: "Easy"