- ฮาร์ดแวร์ที่ต้องการ:
- การทำความเข้าใจฟังก์ชันTone ()ของ Arduino:
- pitches.hไฟล์ส่วนหัว:
- การเล่นโน้ตดนตรีบน Arduino:
- แผนผังและฮาร์ดแวร์:
- คำอธิบายโปรแกรม Arduino:
- การทำงานของวงจร Arduino Melody Player นี้:
Arduino เป็นวิธีที่ยอดเยี่ยมในการลดความซับซ้อนและเร่งความเร็วโครงการไมโครคอนโทรลเลอร์ของคุณด้วยชุมชนนักพัฒนาที่ทำให้เกือบทุกอย่างดูเรียบง่าย มีโครงการ Arduino มากมายให้คุณได้ลองและสนุก บางโครงการของคุณอาจต้องการการดำเนินการที่มีเสียงเพื่อแจ้งเตือนบางสิ่งบางอย่างหรือเพียงเพื่อสร้างความประทับใจให้กับผู้ชม จะเป็นอย่างไรถ้าฉันบอกคุณว่าเพลงธีมเกือบทุกเพลงที่สามารถเล่นบนเปียโนสามารถเลียนแบบได้บน Arduino ของคุณด้วยความช่วยเหลือของโปรแกรมง่ายๆและลำโพง Piezo ราคาถูก?
ในบทช่วยสอนนี้เราจะได้เรียนรู้ว่าการเล่น Melody บน Piezo Buzzer หรือลำโพงโดยใช้ฟังก์ชัน Arduino tone ()นั้นง่ายและสะดวกเพียงใด ในตอนท้ายของบทช่วยสอนนี้คุณจะสามารถเล่นโทนเสียงที่มีชื่อเสียงของ Pirates of Caribbean, Crazy Frog, Super Mario และ Titanic คุณจะได้เรียนรู้วิธีเล่นเพลงเปียโนด้วย Arduino ตรวจสอบวิดีโอในตอนท้าย
ฮาร์ดแวร์ที่ต้องการ:
- Arduino (ทุกรุ่น - ใช้ UNO ที่นี่)
- Piezo Speaker / Buzzer หรือลำโพง 8ohm อื่น ๆ
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
- กดปุ่ม
- ตัวต้านทาน 1k (อุปกรณ์เสริม)
การทำความเข้าใจฟังก์ชัน Tone () ของ Arduino:
ก่อนที่เราจะเข้าใจว่า โทนเสียง () ทำงานอย่างไรเราควรรู้ว่า Piezo buzzer ทำงานอย่างไร เราอาจได้เรียนรู้เกี่ยวกับผลึก Piezo ในโรงเรียนของเรามันไม่ใช่อะไรนอกจากคริสตัลที่แปลงการสั่นสะเทือนทางกลเป็นไฟฟ้าหรือในทางกลับกัน ที่นี่เราใช้กระแสแปรผัน (ความถี่) ซึ่งคริสตัลสั่นสะเทือนจึงทำให้เกิดเสียง ดังนั้นในการทำให้ Piezo Buzzer ส่งเสียงดังเราต้องทำให้คริสตัลไฟฟ้า Piezo สั่นระดับเสียงและระดับเสียงขึ้นอยู่กับว่าคริสตัลสั่นเร็วแค่ไหน ดังนั้นโทนเสียงและระดับเสียงสามารถควบคุมได้โดยการเปลี่ยนแปลงความถี่ของกระแสไฟฟ้า
เอาล่ะเราจะรับความถี่ตัวแปรจาก Arduino ได้อย่างไร? นี่คือที่มาของฟังก์ชัน tone () โทน () สามารถสร้างความถี่เฉพาะบนพินเฉพาะ นอกจากนี้ยังสามารถระบุระยะเวลาได้หากจำเป็น ไวยากรณ์ของ tone () คือ
ไวยากรณ์โทน (ขาความถี่) โทน (pin, ความถี่ระยะเวลา) พารามิเตอร์ขา: ขาที่จะสร้างความถี่เสียง: ความถี่ของเสียงในเฮิรตซ์ - ระยะเวลา int ไม่ได้ลงนาม: ระยะเวลาของเสียงในมิลลิวินาที (ถ้ามี) - ไม่ได้ลงนามยาว
ค่าของพินอาจเป็นพินดิจิทัลของคุณก็ได้ ฉันใช้พินหมายเลข 8 ที่นี่ ความถี่ที่สามารถสร้างได้ขึ้นอยู่กับขนาดของตัวจับเวลาในบอร์ด Arduino ของคุณ สำหรับ UNO และบอร์ดทั่วไปอื่น ๆ ความถี่ต่ำสุดที่สามารถผลิตได้คือ 31Hz และความถี่สูงสุดที่สามารถผลิตได้คือ 65535Hz อย่างไรก็ตามมนุษย์เราสามารถได้ยินเฉพาะความถี่ระหว่าง 2000Hz ถึง 5,000 Hz
pitches.h ไฟล์ส่วนหัว:
ตอนนี้เรารู้วิธีการผลิตเสียงบางใช้Arduino โทน () ฟังก์ชั่น แต่เราจะรู้ได้อย่างไรว่าแต่ละความถี่จะสร้างโทนเสียงแบบไหน?
Arduino ได้ให้ตารางโน้ตแก่เราซึ่งจะเท่ากับว่าแต่ละความถี่เป็นโน้ตดนตรีประเภทใดประเภทหนึ่ง ตารางบันทึกย่อนี้เขียนขึ้นโดยBrett Hagmanซึ่งใช้คำสั่ง tone () เราจะใช้ตารางบันทึกนี้เพื่อเล่นธีมของเรา หากคุณเป็นคนที่คุ้นเคยกับแผ่นเพลงคุณน่าจะเข้าใจตารางนี้ได้บ้างสำหรับคนอื่น ๆ เช่นฉันนี่เป็นเพียงส่วนหนึ่งของรหัส
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_Ade NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 # DEine NOTEf # กำหนด NOTE_C3 131 # กำหนด NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 # กำหนด NOTE_FS3 185 # กำหนด NOTE_G3 196 # กำหนด NOTE_GS3 208 # กำหนดค่า NOTE_A3 220 #define NOTEB3 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349# กำหนด NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 # 698define NOTE_DS5 622 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 NOTEFine 1345 #define NOTE_DS6 NOTEFine 1245 #define NOTE_DS6 NOTEE #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 NOTE_G7 3136 # กำหนด NOTE_GS7 3322 # กำหนด NOTE_A7 3520 # กำหนด NOTE_AS73729 # กำหนด NOTE_B7 3951 # กำหนด NOTE_C8 4186 # กำหนด NOTE_CS8 4435 # กำหนด NOTE_D8 4699 # กำหนด NOTE_DS8 4978
รหัสข้างต้นจะได้รับในส่วนหัวของแฟ้ม pitches.h ใน zip ไฟล์นี้ , คุณเพียงแค่ต้องดาวน์โหลดและรวมไฟล์นี้ในรหัส Arduino ของเราให้เป็นที่สิ้นสุดการกวดวิชานี้หรือใช้รหัสที่ให้ไว้ในไฟล์ซิป
การเล่นโน้ตดนตรีบน Arduino:
ในการเล่นท่วงทำนองที่ดีโดยใช้ Arduino เราควรรู้ว่าอะไรเป็นส่วนประกอบของท่วงทำนองเหล่านี้ ปัจจัยหลักสามประการที่จำเป็นในการเล่นธีมคือ
- หมายเหตุค่า
- หมายเหตุระยะเวลา
- จังหวะ
เรามีไฟล์ส่วนหัวของ pitches.h เพื่อเล่นค่าโน้ตใด ๆ ตอนนี้เราควรหาระยะเวลาโน้ตเฉพาะของมันเพื่อเล่น Tempo ไม่ใช่อะไร แต่ควรเล่นทำนองเพลงเร็วแค่ไหน เมื่อคุณทราบค่า Note และระยะเวลาของ Note แล้วคุณสามารถใช้กับ โทน () เช่น
โทน (pinName, ค่าหมายเหตุ, ระยะเวลาบันทึกย่อ);
สำหรับโทนเสียงที่เล่นในบทช่วยสอนนี้ฉันได้ให้โน้ตมูลค่าและระยะเวลาโน้ตไว้ในไฟล์ส่วนหัว“ themes.h” ซึ่งคุณสามารถเล่นได้ในโปรเจ็กต์ของคุณ แต่ถ้าคุณมีน้ำเสียงที่เฉพาะเจาะจงในเหมืองของคุณและคุณต้องการเล่นในโปรเจ็กต์ของคุณให้อ่านต่อ…. อื่นให้ข้ามหัวข้อนี้และไปที่หัวข้อถัดไป
ในการเล่นโทนเสียงใด ๆคุณต้องรับแผ่นเพลงของเพลงนั้น ๆ และแปลงแผ่นเพลงเป็นร่าง Arduino โดยอ่านค่าโน้ตและระยะเวลาโน้ตจากมัน ถ้าคุณเป็นนักเรียนดนตรีมันจะเป็นเค้กชิ้นหนึ่งสำหรับคุณอย่างอื่นก็ใช้เวลาพอสมควรและทำให้คุณหัวแตกเหมือนที่ฉันทำ แต่ในตอนท้ายของวันที่เสียงของคุณเล่นบนเสียงกริ่ง Piezo คุณจะพบว่าความพยายามของคุณคุ้มค่า
เมื่อคุณมีค่าโน้ตและระยะเวลาโน้ตแล้วให้โหลดลงในโปรแกรมภายในไฟล์ส่วนหัว“ themes.h” ดังที่แสดงด้านล่าง
// ############## ** เพลงธีม "HE IS A PIRATE" ของ Pirates of caribbean ** ############### // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTED4, NOTED4, NOTED4, NOTE_D4, NOTED4, NOTED4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_ NOTE_D NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############## //
บล็อกโค้ดด้านบนแสดงค่าโน้ตและระยะเวลาโน้ตของธีม "He is a Pirate" ในรูปแบบภาพยนตร์เรื่อง Pirates of the Caribbean คุณสามารถเพิ่มธีมของคุณในลักษณะนี้ได้
แผนผังและฮาร์ดแวร์:
แผนผังของ โครงการ Arduino Tone Generator Project นี้แสดงในรูปด้านล่าง:
การเชื่อมต่อค่อนข้างง่ายเรามีลำโพง Piezo ซึ่งเชื่อมต่อกับพิน 8 และกราวด์ของ Arduino ผ่านตัวต้านทาน 1K ตัวต้านทาน 1k นี้เป็นตัวต้านทาน จำกัด กระแสซึ่งใช้เพื่อให้กระแสไฟฟ้าอยู่ในขอบเขตที่ปลอดภัย นอกจากนี้เรายังมีสวิตช์สี่ตัวเพื่อเลือกทำนองเพลงที่ต้องการ ปลายด้านหนึ่งของสวิตช์เชื่อมต่อกับกราวด์และปลายอีกด้านหนึ่งเชื่อมต่อกับพิน 2, 3, 4 และ 5 ตามลำดับ สวิตช์จะมีตัวต้านทานแบบดึงขึ้นที่เปิดใช้งานภายในโดยใช้ซอฟต์แวร์ เนื่องจากวงจรค่อนข้างง่ายจึงสามารถเชื่อมต่อโดยใช้บอร์ดขนมปังดังที่แสดงด้านล่าง:
คำอธิบายโปรแกรม Arduino:
เมื่อคุณเข้าใจแนวคิดแล้วโปรแกรม Arduino ก็ค่อนข้างตรงไปตรงมา รหัสที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอน หากคุณไม่คุ้นเคยกับการเพิ่มไฟล์ส่วนหัวคุณสามารถดาวน์โหลดรหัสเป็นไฟล์ ZIP ได้จากที่นี่และอัปโหลดไปยัง Arduino ของคุณโดยตรง
สองไฟล์ข้างต้นเป็นไฟล์ส่วนหัวที่ต้องเพิ่ม "pitches.h" ใช้ในการเปรียบเทียบโน้ตดนตรีแต่ละตัวกับความถี่เฉพาะและ "themes.h" ประกอบด้วยค่าโน้ตและระยะเวลาโน้ตของเสียงทั้งสี่
#include "pitches.h" #include "themes.h"
ฟังก์ชันถูกสร้างขึ้นเพื่อเล่นแต่ละโทนเสียงเมื่อจำเป็น ที่นี่เมื่อฟังก์ชั่น Play_Pirates () เรียกว่า "เขาเป็นโจรสลัด" จะเล่น ฟังก์ชันนี้ประกอบด้วยฟังก์ชั่นโทนเสียงซึ่งสร้างความถี่ที่พินหมายเลข 8 เสียง เรียกเข้า (8) เรียกให้หยุดเพลงเมื่อเล่นแล้ว หากคุณต้องการเล่นโทนเสียงของคุณเองให้เปลี่ยน Pirates_note และ Pirates_duration เป็นค่าโน้ตและระยะเวลาใหม่ที่คุณบันทึกไว้ในค่า "themes.h"
เป็นโมฆะ Play_Pirates () {สำหรับ (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // แปลงระยะเวลาเป็นเสียงหน่วงเวลา (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // ที่นี่ 1.05 เป็นจังหวะเพิ่มขึ้นเพื่อเล่นช้าลง (pauseBetweenNotes) noTone (8); }}
พิน 2, 3, 4 และ 5 ใช้เพื่อเลือกโทนเสียงที่จะเล่น หมุดเหล่านี้จะถูกยึดไว้สูงโดยค่าเริ่มต้นโดยใช้ตัวต้านทานแบบดึงภายในโดยใช้บรรทัดด้านบนของรหัส เมื่อกดปุ่มจะถูกดึงลงมาที่พื้น
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
ด้านล่างของรหัสใช้เพื่อเล่นเพลงเมื่อกดปุ่ม มันอ่านค่าดิจิตอลของแต่ละปุ่มและเมื่อมันต่ำ (ศูนย์) จะถือว่าปุ่มถูกกดและเล่นโทนเสียงตามลำดับโดยเรียกใช้ฟังก์ชันที่ต้องการ
ถ้า (digitalRead (2) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("เลือกแล้ว -> 'กบบ้า'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Selected -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); }
การทำงานของวงจร Arduino Melody Player นี้:
เมื่อโค้ดและฮาร์ดแวร์ของคุณพร้อมแล้วเพียงแค่เบิร์นโปรแกรมลงใน Arduino ของคุณและคุณจะสามารถเล่นโทนได้โดยเพียงแค่กดปุ่ม หากคุณมีปัญหาใด ๆ ให้ดูที่จอภาพอนุกรมของคุณเพื่อแก้ไขข้อบกพร่องหรือใช้ส่วนความคิดเห็นเพื่อรายงานปัญหาเรายินดีที่จะช่วยเหลือคุณ
การทำงานที่สมบูรณ์แบบของโครงการจะแสดงในวิดีโอด้านล่างหวังว่าคุณจะสนุกกับโครงการและจะใช้ในบางโครงการของคุณหรือสร้างโทนสีใหม่สำหรับโครงการของคุณ ถ้าใช่อย่าลังเลที่จะแบ่งปันงานของคุณในส่วนความคิดเห็น