จุดประสงค์การเรียนรู้
เพื่อให้สามารถสร้างความถี่เสียงจากลำโพงBuzzerโดยใช้Arduino IDE
สาระการเรียนรู้
ชนิดของลำโพงBuzzer
1. ลำโพงBuzzer
Buzzer เป็นอุปกรณ์กำเนิดเสียงชนิดหนึ่งโดยทำหน้าที่เปลี่ยนแปลงพลังงานไฟฟ้าเป็นพลังงานเสียง Buzzer มีด้วยกัน 2 ชนิดคือ
1. Active Buzzer เป็นลำโพงที่เปล่งความถี่ได้ความถี่เดียว คือ มีเสียง กับไม่มีเสียง ไม่สามารถสร้างเป็นทำนองเมโลดีของเพลงได้
2. Passive Buzzer เป็นลำโพงที่เปล่งความถี่ได้หลายความถี่ สามารถสร้างเป็นเมโลดี้ทำนองเพลงได้
2. คำสั่งการใช้งาน
รูปแบบการใช้งานคำสั่งในภาษาซีของArduino IDEในเนื้อหานี้ จะใช้คำสั่งดังต่อไปนี้
ทฤษฏีของเสียง
เสียง เป็นคลื่นกล เกิดจากการสั่นสะเทือนของวัตถุ หูคนเราปกติจะได้ยินเสียงที่ความถี่ 20Hz - 20KHz
ความถี่ ระดับเสียง (pitch) หมายถึง เสียงสูงเสียงต่ำ สิ่งที่ทำให้เสียงแต่ละเสียงสูงต่ำแตกต่างกันนั้น ขึ้นอยู่กับความเร็วในการสั่นสะเทือนของวัตถุ วัตถุที่สั่นเร็วเสียงจะสูงกว่าวัตถุที่สั่นช้า โดยจะมีหน่วยวัดความถี่ของการสั่นสะเทือนต่อวินาที เช่น 60 รอบต่อวินาที, 2,000 รอบต่อวินาที เป็นต้น และนอกจาก วัตถุที่มีความถี่ในการสั่นสะเทือนมากกว่า จะมีเสียงที่สูงกว่าแล้ว หากความถี่มากขึ้นเท่าตัว ก็จะมีระดับเสียงสูงขึ้นเท่ากับ 1 ออกเตฟ (octave) ภาษาไทยเรียกว่า 1 ช่วงคู่แปด (อ้างอิงจาก : https://th.wikipedia.org/wiki/%E0%B9%80%E0%B8%AA%E0%B8%B5%E0%B8%A2%E0%B8%87)
ตัวอย่างความถี่ตัวโน๊ต
ตารางเปรียบเทียบการนับตัวโน๊ต
วัสดุอุปกรณ์
1. ไมโครสวิตซ์ ชนิดกดติดปล่อยดับ จำนวน 1 ตัว
2. ตัวต้านทาน 10 กิโลโอห์ม จำนวน 1 ตัว
3. บอร์ด ESP32 Devkit V.1 จำนวน 1 บอร์ด
4. สายMicro USB จำนวน 1 เส้น
5. Breadboard
6. สายแพร Male-Male
7. หลอด LED จำนวน 3 หลอด
8. ตัวต้านทาน 220 โอห์ม จำนวน 3 ตัว
9. ตัวต้านทานปรับค่าได้ Potentiometer จำนวน 1 ตัว
10. ลำโพงBuzzer
วิธีทำการทดลอง
1. ต่อวงจรเพิ่มเติมจากLab1-Lab5 โดยใช้นำลำโพง Buzzer ชนิดPassive จำนวน 1 อัน โดยขั้วลบต่อเข้ากับGNDของESP32 และขั้วบวกต่อที่ขาD18 ของESP32 ตาม Datasheetและรูปการต่อวงจรด้านล่าง
2. ทำการCopy Codeด้านล่างก่อนUpload code Arduino IDE ลงไปใบนบอร์ด ESP32 Devkit v1
ควรเลือกที่Tool -> Board -> ESP32 Arduino ->ESP32 Dev Module (ดังภาพประกอบด้านล่าง)
Arduino IDE Code
#include <ESP32Servo.h>
void setup() {
}
void loop() {
tone(18, 800, 500);
tone(18, 900, 500);
}
3.หลังจากนั้นให้เข้ามาที่ Tool ->Port แล้วเลือกพอร์ตC om portที่เชื่อมกับUSB ดังรูปข้างล่าง
** กรณีใช้งานใน Ubuntu พอร์ตที่ใช้อาจจะเป็นพอร์ตttyUSB0 ซึ่งจะต้องเลือกเป็นพอร์ตชื่อนี้แทนCom port และก่อนกดUpload ให้ทำการเปิดTerminal โดยเข้าไปที่desktop คลิกขวาตรงพื้นที่ว่าง แล้วเลือก Open Terminal หลังจากนั้นให้พิมพ์ข้อความในTerminalดังนี้เพื่อทำการเปิดพอร์ตUSB : sudo chmod 666 /dev/ttyUSB0 หลังจากนั้นให้กดEnter และทำการกรอกรหัสผ่านของเครื่องพร้อมกับกดปุ่มEnterอีกครั้ง หลังจากนั้นก็Upload codeในArduino IDE
4.ทำการกดปุ่มUpload ที่เป็นรูปหัวลูกษร หรือจะกด Ctrl+u ที่คีย์บอร์ดเพื่อทำการUploadโปรแกรมไปที่บอร์ดESP32 ดังรูปข้างล่าง
5.หลังจากที่Uploadโปรแกรมแล้วจะมีเสียงดนตรี 2 ความถี่ คือ ความถี่ 800 Hz ยาว 0.5 วินาที
และความถี่900 Hz ยาว 0.5 วินาที ดังสลับกันแบบวนรอบ
ตอนที่ 2 เพลงมาริโอ
เพลงมาริโอ
#include <ESP32Servo.h>
int snd = 18;
void setup(){
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(220);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 200);
delay(300);
tone(snd, 1020, 80);
delay(300);
tone(snd, 1020, 80);
delay(150);
tone(snd, 1020, 80);
delay(300);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(420);
tone(snd, 585, 100);
delay(450);
tone(snd, 550, 100);
delay(420);
tone(snd, 500, 100);
delay(360);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(220);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 200);
delay(300);
tone(snd, 1020, 80);
delay(300);
tone(snd, 1020, 80);
delay(150);
tone(snd, 1020, 80);
delay(300);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(420);
tone(snd, 585, 100);
delay(450);
tone(snd, 550, 100);
delay(420);
tone(9, 500, 100);
delay(360);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(350);
tone(snd, 660, 80);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 430, 80);
delay(150);
tone(snd, 380, 80);
delay(600);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 660, 80);
delay(550);
tone(snd, 870, 80);
delay(325);
tone(snd, 760, 80);
delay(600);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(350);
tone(snd, 660, 80);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 430, 80);
delay(150);
tone(snd, 380, 80);
delay(600);
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
}
void loop (){
}