Search Code

บทเรียน ESP32 14/55 - การเล่นโน้ตเพลงที่กำหนดเองโดยใช้ชุดเรียนรู้ IoT ESP32 ของ SunFounder

บทเรียน ESP32 14/55 - การเล่นโน้ตเพลงที่กำหนดเองโดยใช้ชุดเรียนรู้ IoT ESP32 ของ SunFounder

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

เราจะเชื่อมต่อบัซเซอร์แบบพาสซีฟเข้ากับ ESP32 ซึ่งจะช่วยให้เราสร้างโน้ตดนตรีที่แตกต่างกันตามความถี่ที่เรากำหนดให้ การตั้งค่านี้รวมถึงการใช้ทรานซิสเตอร์เพื่อสลับเปิดและปิดบัซเซอร์ด้วยความเร็วสูง ทำให้เกิดคลื่นเสียงที่เราได้ยิน สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับโปรเจกต์ อย่าลืมดูวิดีโอ (ในวิดีโอที่ 00:30)

ESP32-13-buzzer-schematic

คำอธิบายฮาร์ดแวร์

ส่วนประกอบหลักที่ใช้ในโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ SunFounder ESP32 บัซเซอร์แบบพาสซีฟ และทรานซิสเตอร์ชนิด NPN (2N8050) ESP32 เป็นบอร์ดพัฒนาที่ทรงพลังพร้อมความสามารถ Wi-Fi และ Bluetooth ในตัว ทำให้มีความหลากหลายสำหรับการใช้งาน IoT ต่างๆ ในกรณีนี้ มันจะสร้างสัญญาณเพื่อควบคุมบัซเซอร์

บัซเซอร์แบบพาสซีฟทำงานโดยการสร้างเสียงเมื่อมีการจ่ายแรงดันไฟฟ้ากระแสสลับให้กับมัน ต่างจากบัซเซอร์แบบแอคทีฟซึ่งมีออสซิลเลเตอร์ในตัว บัซเซอร์แบบพาสซีฟต้องใช้สัญญาณภายนอกเพื่อสร้างเสียง ทรานซิสเตอร์ทำหน้าที่เป็นสวิตช์ ทำให้ ESP32 ควบคุมบัซเซอร์ได้โดยไม่ต้องจ่ายไฟโดยตรง เพื่อให้แน่ใจว่าไม่เกินพิกัดกระแสของไมโครคอนโทรลเลอร์

S87050_transistor

รายละเอียดจาก Datasheet

ผู้ผลิต SunFounder
หมายเลขชิ้นส่วน บัซเซอร์แบบพาสซีฟ
แรงดันไฟฟ้าที่ใช้งาน 3.3 V - 5 V
ความถี่เรโซแนนซ์ 2 kHz - 4 kHz
กระแสไฟฟ้าที่ใช้ ≤ 30 mA
ระดับความดันเสียง ≥ 70 dB
แพ็คเกจ แบบทะลุผ่านรู (Through-hole)
หมายเหตุ / รุ่นต่างๆ ไม่มี

 

  • ตรวจสอบขั้วให้ถูกต้องเมื่อเชื่อมต่อบัซเซอร์
  • ใช้ตัวต้านทานจำกัดกระแสสำหรับขาเบสของทรานซิสเตอร์
  • เชื่อมต่อบัซเซอร์เข้ากับแหล่งจ่ายไฟที่เข้ากันได้กับพิกัดแรงดันไฟฟ้าของมัน
  • ระวังอย่าให้เกินพิกัดกระแสสูงสุดของทรานซิสเตอร์
  • จัดสายไฟให้เป็นระเบียบเพื่อหลีกเลี่ยงการลัดวงจร
  • ทดสอบวงจรก่อนอัปโหลดโค้ดเพื่อหลีกเลี่ยงความเสียหายของชิ้นส่วน
  • ใช้เบรดบอร์ดเพื่อการเชื่อมต่อชิ้นส่วนที่ง่ายดาย
  • ตรวจสอบให้แน่ใจว่าได้ดีบาวน์อินพุตหากใช้ปุ่มกด
  • พิจารณาเพิ่มฮีทซิงก์สำหรับทรานซิสเตอร์หากใช้กับกระแสสูง

คำแนะนำการเดินสายไฟ

ESP32-13-buzzer-wriing

ในการเดินสายไฟส่วนประกอบ ให้เริ่มต้นโดยเชื่อมต่อขั้วบวกของบัซเซอร์แบบพาสซีฟเข้ากับพิน 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

ภาพ

ESP32-13-buzzer-wriing
ESP32-13-buzzer-wriing
ESP32-13-buzzer-schematic
ESP32-13-buzzer-schematic
SunFounder-ESP32-Lesson-13-Beep.mp4_snapshot_07.43.463
SunFounder-ESP32-Lesson-13-Beep.mp4_snapshot_07.43.463
S87050_transistor
S87050_transistor
813-ESP32 Tutorial 14/55- Arduino code for custom music tone
ภาษา: C++
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
}

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

แผ่นข้อมูล (pdf)