บทเรียน ESP32 14/55 - การเล่นโน้ตเพลงที่กำหนดเองโดยใช้ชุดเรียนรู้ IoT ESP32 ของ SunFounder
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการใช้ไมโครคอนโทรลเลอร์ SunFounder ESP32 เพื่อเล่นโน้ตดนตรีโดยใช้บัซเซอร์แบบพาสซีฟและทรานซิสเตอร์ โปรเจกต์นี้มีจุดประสงค์เพื่อสาธิตวิธีการสร้างเสียงด้วยความถี่เฉพาะโดยการควบคุมบัซเซอร์ผ่านพิน GPIO ของ ESP32

เราจะเชื่อมต่อบัซเซอร์แบบพาสซีฟเข้ากับ ESP32 ซึ่งจะช่วยให้เราสร้างโน้ตดนตรีที่แตกต่างกันตามความถี่ที่เรากำหนดให้ การตั้งค่านี้รวมถึงการใช้ทรานซิสเตอร์เพื่อสลับเปิดและปิดบัซเซอร์ด้วยความเร็วสูง ทำให้เกิดคลื่นเสียงที่เราได้ยิน สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับโปรเจกต์ อย่าลืมดูวิดีโอ (ในวิดีโอที่ 00:30)
คำอธิบายฮาร์ดแวร์
ส่วนประกอบหลักที่ใช้ในโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ SunFounder ESP32 บัซเซอร์แบบพาสซีฟ และทรานซิสเตอร์ชนิด NPN (2N8050) ESP32 เป็นบอร์ดพัฒนาที่ทรงพลังพร้อมความสามารถ Wi-Fi และ Bluetooth ในตัว ทำให้มีความหลากหลายสำหรับการใช้งาน IoT ต่างๆ ในกรณีนี้ มันจะสร้างสัญญาณเพื่อควบคุมบัซเซอร์
บัซเซอร์แบบพาสซีฟทำงานโดยการสร้างเสียงเมื่อมีการจ่ายแรงดันไฟฟ้ากระแสสลับให้กับมัน ต่างจากบัซเซอร์แบบแอคทีฟซึ่งมีออสซิลเลเตอร์ในตัว บัซเซอร์แบบพาสซีฟต้องใช้สัญญาณภายนอกเพื่อสร้างเสียง ทรานซิสเตอร์ทำหน้าที่เป็นสวิตช์ ทำให้ ESP32 ควบคุมบัซเซอร์ได้โดยไม่ต้องจ่ายไฟโดยตรง เพื่อให้แน่ใจว่าไม่เกินพิกัดกระแสของไมโครคอนโทรลเลอร์
รายละเอียดจาก Datasheet
| ผู้ผลิต | SunFounder |
|---|---|
| หมายเลขชิ้นส่วน | บัซเซอร์แบบพาสซีฟ |
| แรงดันไฟฟ้าที่ใช้งาน | 3.3 V - 5 V |
| ความถี่เรโซแนนซ์ | 2 kHz - 4 kHz |
| กระแสไฟฟ้าที่ใช้ | ≤ 30 mA |
| ระดับความดันเสียง | ≥ 70 dB |
| แพ็คเกจ | แบบทะลุผ่านรู (Through-hole) |
| หมายเหตุ / รุ่นต่างๆ | ไม่มี |
- ตรวจสอบขั้วให้ถูกต้องเมื่อเชื่อมต่อบัซเซอร์
- ใช้ตัวต้านทานจำกัดกระแสสำหรับขาเบสของทรานซิสเตอร์
- เชื่อมต่อบัซเซอร์เข้ากับแหล่งจ่ายไฟที่เข้ากันได้กับพิกัดแรงดันไฟฟ้าของมัน
- ระวังอย่าให้เกินพิกัดกระแสสูงสุดของทรานซิสเตอร์
- จัดสายไฟให้เป็นระเบียบเพื่อหลีกเลี่ยงการลัดวงจร
- ทดสอบวงจรก่อนอัปโหลดโค้ดเพื่อหลีกเลี่ยงความเสียหายของชิ้นส่วน
- ใช้เบรดบอร์ดเพื่อการเชื่อมต่อชิ้นส่วนที่ง่ายดาย
- ตรวจสอบให้แน่ใจว่าได้ดีบาวน์อินพุตหากใช้ปุ่มกด
- พิจารณาเพิ่มฮีทซิงก์สำหรับทรานซิสเตอร์หากใช้กับกระแสสูง
คำแนะนำการเดินสายไฟ

ในการเดินสายไฟส่วนประกอบ ให้เริ่มต้นโดยเชื่อมต่อขั้วบวกของบัซเซอร์แบบพาสซีฟเข้ากับพิน 3.3V บน ESP32 ขั้วลบของบัซเซอร์ควรเชื่อมต่อกับขาคอลเลกเตอร์ของทรานซิสเตอร์ชนิด NPN ขาอีมิตเตอร์ของทรานซิสเตอร์ควรเดินสายไปยังกราวด์ (GND) ของ ESP32
จากนั้น เชื่อมต่อตัวต้านทาน 1 kΩ จากขาเบสของทรานซิสเตอร์ไปยังพิน GPIO 14 บน ESP32 ตัวต้านทานนี้จำกัดกระแสที่ไหลเข้าสู่ขาเบสของทรานซิสเตอร์ สุดท้าย ตรวจสอบให้แน่ใจว่าการเชื่อมต่อกราวด์ทั้งหมดถูกผูกเข้าด้วยกันเพื่อให้มีจุดอ้างอิงร่วมสำหรับวงจร
ตัวอย่างโค้ดและคำอธิบาย
const int buzzerPin = 14; // พินของบัซเซอร์
void setup()
{
pinMode(buzzerPin, OUTPUT); // ตั้งค่าเป็นเอาต์พุต
}
ในโค้ด เรากำหนดตัวแปรคงที่ buzzerPin ซึ่งตั้งค่าเป็น 14 ระบุพิน GPIO ที่เชื่อมต่อกับขาเบสของทรานซิสเตอร์ ในฟังก์ชัน setup() เราตั้งค่าพินนี้เป็น OUTPUT เพื่อให้ ESP32 ควบคุมบัซเซอร์ได้
void loop()
{
for (int i = 0; i < 50; i++) // วนลูป 50 ครั้งและเล่นเสียงสั้นๆ ในแต่ละครั้ง
{
digitalWrite(buzzerPin, HIGH); // ตั้งค่าเป็น HIGH เพื่อให้บัซเซอร์ส่งเสียง
delay(3); // รอ 3 มิลลิวินาที
digitalWrite(buzzerPin, LOW); // LOW เพื่อปิดบัซเซอร์
delay(3); //
}
delay(1000); // รอ 1 วินาทีก่อนเริ่มลูปถัดไป
}
ฟังก์ชัน loop() ประกอบด้วย for-loop ที่ทำงาน 50 ครั้ง แต่ละรอบจะเปิดและปิดบัซเซอร์อย่างรวดเร็ว ทำให้เกิดเสียง ดีเลย์ 3 มิลลิวินาทีควบคุมระยะเวลาที่บัซเซอร์ถูกเปิดและปิด ในขณะที่ดีเลย์ 1 วินาทีที่ท้ายลูปให้การหยุดชั่วคราวก่อนที่จะทำซ้ำ
การสาธิต / สิ่งที่คาดหวัง
เมื่อเดินสายไฟเสร็จและอัปโหลดโค้ดแล้ว คุณควรได้ยินเสียงสั้นๆ หลายชุดที่เกิดจากบัซเซอร์ หากบัซเซอร์ไม่ส่งเสียง ให้ตรวจสอบการเชื่อมต่อของคุณ โดยเฉพาะทิศทางของทรานซิสเตอร์และค่าตัวต้านทาน ตรวจสอบให้แน่ใจว่าใช้พินที่ถูกต้องในโค้ดและ ESP32 ได้รับการจ่ายไฟอย่างเหมาะสม
ระหว่างการสาธิต หากคุณพบปัญหา อาจเกิดจากการเดินสายไฟที่ไม่ถูกต้องหรือใช้พินผิดสำหรับบัซเซอร์ ตรวจสอบการเดินสายไฟกับคำแนะนำและตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟเพียงพอ (ในวิดีโอที่ 08:15)
ไทม์สแตมป์ในวิดีโอ
- 00:00 เริ่มต้น
- 1:52 แนะนำโปรเจกต์
- 4:11 คำอธิบายการเดินสายไฟ
- 8:11 การเลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
- 9:53 คำอธิบายโค้ด Arduino
- 13:17 การสาธิตโปรเจกต์
- 13:58 โค้ดและการสาธิตโปรเจกต์ 2
const int buzzerPin = 14; //buzzer pin
const int resolution = 8;
// Frequencies of the 7 musical notes (in Hz)
int frequencies[] = {262, 294, 330, 349, 392, 440, 494};
// Function to play a frequency on the buzzer for a given duration
void playFrequency(int frequency, int duration) {
ledcWriteTone(buzzerPin, frequency); // Start the tone
delay(duration); // Wait for the specified duration
ledcWriteTone(buzzerPin, 0); // Stop the buzzer
}
void setup() {
ledcAttach(buzzerPin, 2000, 8); // Set up the PWM pin
}
void loop() {
for (int i = 0; i < 7; i++) {
playFrequency(frequencies[i], 300); // Play each note for 300ms
delay(50); // Add a brief pause between the notes
}
delay(1000); // Wait for 1 second before replaying the sequence
}
Common Course Links
Common Course Files
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารESP32 Tutorial 14/55- SunFounder Resources page for custom tonedocs.sunfounder.com
ไฟล์📁
แผ่นข้อมูล (pdf)
-
Buzzer MB12A05 C96093 datasheet
Buzzer_MB12A05_C96093_datasheet.pdf0.97 MB -
NPN Epitaxial Silicon Transistor SS8050 datasheet
SS8050-datasheet.pdf0.19 MB