วันจันทร์ที่ 17 กันยายน พ.ศ. 2561

โปรเจคที่14 เล่นเพลงโดยใช้ฟังก์ชัน Arduino Tone ()

การเล่นท่วงทำนองบน Piezo Buzzer โดยใช้ฟังก์ชัน Arduino Tone ()

ฮาร์ดแวร์ที่จำเป็น:

  1. Arduino (เวอร์ชันใดก็ได้ใช้ UNO ที่นี่)
  2. Piezo Speaker / Buzzer หรือลำโพง 8ohm อื่น ๆ
  3. เขียงหั่นขนม
  4. สายเชื่อมต่อ
  5. ปุ่มกด
  6. ตัวต้านทาน 1k (อุปกรณ์เสริม)

การทำความเข้าใจฟังก์ชันTone ()ของ Arduino:

ก่อนที่เราจะเข้าใจว่าเสียง ()ทำงานอย่างไรเราควรรู้ว่าเสียงพายโซทำงานอย่างไร เราอาจได้เรียนรู้เกี่ยวกับคริสตัล Piezo ในโรงเรียนของเรา แต่ไม่มีอะไรนอกจากผลึกที่แปลงการสั่นสะเทือนทางกลเป็นไฟฟ้าหรือในทางกลับกัน นี่เราใช้กระแสแปรผัน (ความถี่) ซึ่งคริสตัลสั่นทำให้เกิดเสียง ดังนั้นเพื่อให้ Piezo Buzzer สร้างเสียงรบกวนขึ้นเราต้องทำให้ผลึกไฟฟ้า Piezo สั่นสะเทือนเสียงและระดับเสียงขึ้นอยู่กับความเร็วของคริสตัลที่สั่นสะเทือน ดังนั้นเสียงและสนามสามารถควบคุมได้โดยการเปลี่ยนความถี่ของกระแสไฟฟ้า
เอาล่ะเราจะได้ความถี่ตัวแปรจาก Arduino ได้อย่างไร? นี่คือที่ที่มีเสียง () เข้ามาเสียง () สามารถสร้างความถี่เฉพาะบนขาเฉพาะได้ นอกจากนี้ยังสามารถระบุช่วงเวลาได้หากจำเป็น ไวยากรณ์สำหรับโทน ()คือ
วากยสัมพันธ์

โทน (ขา, ความถี่) 
โทน (ขา, ความถี่, ระยะเวลา)

พารามิเตอร์

pin: pin เพื่อสร้างโทนเสียง
ความถี่: ความถี่ของโทนในเฮิรตซ์ - unsigned int
ระยะเวลา: ระยะเวลาของเสียงในหน่วยมิลลิวินาที (ไม่จำเป็น) - ไม่มีเครื่องหมายยาว
ค่าของขาอาจเป็นขาดิจิตอลของคุณ ฉันใช้หมายเลขพินที่ 8 ที่นี่ ความถี่ที่สามารถสร้างขึ้นอยู่กับขนาดของตัวจับเวลาในบอร์ด Arduino ของคุณ สำหรับ UNO และบอร์ดทั่วไปอื่น ๆ ความถี่ต่ำสุดที่สามารถผลิตได้คือ 31Hz และความถี่สูงสุดที่สามารถผลิตได้คือ 65535Hz อย่างไรก็ตามมนุษย์เราสามารถได้ยินความถี่ระหว่าง 2000Hz และ 5000 Hz เท่านั้น

pitches.hไฟล์ส่วนหัว:

ตอนนี้เรารู้วิธีการผลิตเสียงบางใช้Arduino  โทน () ฟังก์ชั่น แต่อย่างไรเราจะทราบได้อย่างไรว่าจะมีการสร้างเสียงแบบไหนสำหรับแต่ละความถี่
Arduino ได้ให้เราทราบตารางซึ่ง equates แต่ละความถี่กับประเภทโน้ตดนตรีเฉพาะ ตารางโน้ตนี้เขียนขึ้นโดย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_A1 55
#define NOTE_AS1 58
#define 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
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define 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
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define 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 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#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 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
รหัสข้างต้นจะได้รับในส่วนหัวของแฟ้ม pitches.hใน zip ไฟล์นี้,คุณเพียงแค่ต้องดาวน์โหลดและรวมไฟล์นี้ในรหัส Arduino ของเราให้เป็นที่สิ้นสุดการกวดวิชานี้หรือใช้รหัสที่ให้ไว้ในไฟล์ซิป

การเล่นโน้ตเพลงเกี่ยวกับ Arduino:

ในการเล่นเมโลดี้ที่ดีโดยใช้ Arduino เราควรรู้ว่าอะไรเป็นเพลงเหล่านี้ ปัจจัยหลัก 3 ประการที่ต้องใช้ในการเล่นคือ
  1. หมายเหตุค่า
  2. หมายเหตุระยะเวลา
  3. จังหวะ
เรามีไฟล์ส่วนหัวpitches.hในการเล่นค่าโน้ตใด ๆ ตอนนี้เราควรจะหาระยะเวลาบันทึกย่อเฉพาะที่จะเล่น Tempo คืออะไร แต่ความไพเราะของเพลงควรจะเล่นเท่าไร เมื่อคุณทราบค่าโน้ตและระยะเวลาโน้ตแล้วคุณสามารถใช้โน้ตและเสียงได้เช่นกัน
โทน (pinName, หมายเหตุค่า, หมายเหตุระยะเวลา);
สำหรับโทนที่เล่นในบทแนะนำนี้ฉันได้ให้ข้อมูลหมายเหตุและระยะเวลาหมายเหตุภายในไฟล์ส่วนหัว "themes.h"โดยใช้ข้อมูลที่คุณสามารถเล่นได้ในโครงการของคุณ แต่ถ้าคุณมีเสียงที่เฉพาะเจาะจงในเหมืองของคุณและคุณต้องการเล่นในโครงการของคุณอ่านต่อ .... Else ข้ามหัวข้อนี้และล้มลงไป
ในการเล่นเสียงเฉพาะใด ๆ ที่คุณต้องได้รับแผ่นเพลงของเพลงที่เฉพาะและแปลงแผ่นเพลงให้ร่าง Arduinoโดยการอ่านค่าทราบและทราบระยะเวลาจากมัน ถ้าคุณเป็นนักเรียนดนตรีมันจะเป็นชิ้นส่วนของเค้กสำหรับคุณอื่นใช้เวลาบางส่วนและทำลายคุณหัวเหมือนที่ฉันทำ แต่ในตอนท้ายของวันที่เสียงของคุณเล่นเสียงพายโซคุณจะพบความพยายามของคุณคุ้มค่า
เมื่อคุณทราบค่าโน้ตและระยะเวลาบันทึกแล้วให้โหลดลงในโปรแกรมภายในไฟล์ส่วนหัว "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, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,  
NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, 
NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4,
0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_D4, NOTE_B3, NOTE_E4, NOTE_F4,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4,
หมายเหตุ_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_G4,
หมายเหตุ_A4, NOTE_D4, 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 เขาเป็นเพลงของโจรสลัด ##############
โค้ดข้างต้นนี้แสดงมูลค่าโน้ตและระยะเวลาบันทึกของ "เขาเป็นโจรสลัด" ในรูปแบบภาพยนตร์ Pirates of the Caribbean คุณสามารถเพิ่มธีมของคุณในทำนองเดียวกันได้เช่นนี้

แผนผังและฮาร์ดแวร์:

แผนผังของ  โครงการ Arduino Tone Generator Project  ดังแสดงในรูปด้านล่าง:
เล่นท่วงทำนองบนเสียงสัญญาณโดยใช้วงจรเสียง Arduino
การเชื่อมต่อเป็นเรื่องง่ายสวยเรามีลำโพง Piezo ซึ่งเชื่อมต่อกับขา 8 และ Ground ของ Arduino ผ่านตัวต้านทาน 1K ตัวต้านทานแบบ 1k นี้เป็นตัวต้านทานแบบ จำกัด กระแสซึ่งใช้เพื่อรักษาระดับกระแสไฟฟ้าให้อยู่ในเกณฑ์ที่ปลอดภัย นอกจากนี้เรายังมีสวิทช์สี่ตัวเลือกเพลงที่ต้องการ ปลายด้านหนึ่งของสวิตช์เชื่อมต่อกับพื้นดินและปลายอีกด้านหนึ่งเชื่อมต่อกับขา 2, 3, 4 และ 5 ตามลำดับ สวิทช์จะดึงตัวต้านทานกลับมาใช้งานภายในโดยใช้ซอฟต์แวร์ ตั้งแต่วงจรง่ายสวยมันสามารถเชื่อมต่อโดยใช้บอร์ดขนมปังดังแสดงด้านล่าง:
เล่นเสียงโดยใช้ Arduino tone function breadboard circuit
 

Arduino Program คำอธิบาย:

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

ด้านบนสองไฟล์ส่วนหัวที่จะต้องมีการเพิ่ม "pitches.h"ใช้เพื่อบันทึกแต่ละโน้ตดนตรีไปเป็นความถี่เฉพาะและ"themes.h" จะมีค่าโน้ตและระยะเวลาบันทึกของทั้งสี่เสียง
# include "pitches.h"
#include "themes.h"

ฟังก์ชั่นจะถูกสร้างขึ้นเพื่อเล่นเสียงแต่ละครั้งเมื่อจำเป็น เมื่อฟังก์ชันPlay_Pirates ()เรียกว่าเสียง "เขาเป็นโจรสลัด" จะเล่น ฟังก์ชั่นนี้ประกอบด้วยฟังก์ชั่นโทนที่สร้างความถี่ที่หมายเลขพิน 8 เสียงเรียกเข้า (noTone (8))เรียกว่าหยุดเพลงเมื่อเล่นแล้ว ถ้าคุณต้องการเล่นเสียงของคุณเองให้เปลี่ยน Pirates_note และ Pirates_duration ไปเป็นโน้ตและค่าความยาวใหม่ที่คุณบันทึกไว้ในค่า"themes.h"
ถือเป็นโมฆะ Play_Pirates ()
{
  สำหรับ (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)) thisNote ++) {
    int noteDuration = 1000 / Pirates_duration [thisNote]; // แปลงระยะเวลาเป็นความล่าช้า
    เสียง (8, Pirates_note [thisNote], 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 -> 'เขาเป็นโจรสลัด'"); Play_Pirates (); }
ถ้า (digitalRead (3) == 0)
{Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); }
ถ้า (digitalRead (4) == 0)
{Serial.println ("Selected -> 'Mario UnderWorld'"); Play_MarioUW (); }
ถ้า (digitalRead (5) == 0)
{Serial.println ("Selected -> 'เขาเป็นโจรสลัด'"); Play_Pirates (); }

การทำงานของเครื่องเล่น Melody Arduino Circuit:

เมื่อรหัสและฮาร์ดแวร์ของคุณพร้อมแล้วให้เขียนโปรแกรมลงใน Arduino ของคุณและคุณจะสามารถเล่นเสียงได้โดยเพียงแค่กดปุ่ม หากคุณมีปัญหาใด ๆ ลองดูที่จอภาพแบบอนุกรมของคุณเพื่อแก้ไขข้อบกพร่องหรือใช้ส่วนข้อคิดเห็นเพื่อรายงานปัญหาและเรายินดีที่จะช่วยเหลือคุณ
เล่นท่วงทำนองโดยใช้ฟังก์ชัน Arduino tone บนแทร็คเสียงพาย
การทำงานที่สมบูรณ์แบบของโครงการจะแสดงในวิดีโอด้านล่าง หวังว่าคุณจะสนุกกับโครงการนี้และจะใช้ในโครงการของคุณหรือสร้างโทนใหม่สำหรับโครงการของคุณ หากมีโปรดแชร์งานของคุณในส่วนความคิดเห็น
รหัส
# include "pitches.h" // เพิ่มความถี่เทียบเท่าสำหรับโน้ตดนตรี
#include "themes.h" // เพิ่มหมายเหตุหุบเขาและระยะเวลา 
void Play_Pirates () 
{  
  for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)) thisNote ++) {
    int noteDuration = 1000 / Pirates_duration [thisNote]; // แปลงความยาวเป็น
    เสียงหน่วงเวลา(8, Pirates_note [thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.05; / / ที่นี่ 1.05 เป็นจังหวะเพิ่มขึ้นในการเล่นช้าลง
    ล่าช้า (pauseBetweenNotes); 
    noTone (8); // หยุดเพลงในพิน 8  
    } 
}
void Play_CrazyFrog () 

  for (int thisNote = 0; thisNote <(sizeof (CrazyFrog_note) / sizeof (int)) thisNote ++) {
    int noteDuration = 1000 / CrazyFrog_duration [thisNote]; / / แปลงระยะเวลาให้
    เสียงหน่วงเวลา(8, CrazyFrog_note [thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30; // ที่นี่ 1.30 คือจังหวะลดลงเพื่อเล่น
    ช้าลง (pauseBetweenNotes); 
    noTone (8); // หยุดเพลงในพิน 8  
    } 
}
void Play_MarioUW () 

    for (int thisNote = 0; thisNote <(sizeof (MarioUW_note) / sizeof (int)) thisNote ++) {
    int noteDuration = 1000 / MarioUW_duration [thisNote]; // แปลงระยะเวลาเป็นความล่าช้าของเวลา
    (8, MarioUW_note [thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.80; 
    ล่าช้า (pauseBetweenNotes); 
    noTone (8); // หยุดเพลงในพิน 8  
    } 
}
void Play_Titanic () 

    for (int thisNote = 0; thisNote <(sizeof (Titanic_note) / sizeof (int)) thisNote ++) {
    int noteDuration = 1000 / Titanic_duration [thisNote]; // แปลงระยะเวลาเป็นความล่าช้าของเวลา
    (8, Titanic_note [thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 2.70; 
    ล่าช้า (pauseBetweenNotes); 
    noTone (8); // หยุดเพลงในพิน 8  
    } 
}
การตั้งค่าเป็นโมฆะ () { 
pinMode (2, INPUT_PULLUP); / / ปุ่ม 1 กับภายในดึง
pinMode (3, INPUT_PULLUP); / / 2 ปุ่มที่มีภายในดึงขึ้น
pinMode (4, INPUT_PULLUP); / / 3 ปุ่มที่มีภายในดึง
pinMode (5, INPUT_PULLUP); / / 4 ปุ่มที่มีภายในดึงขึ้น
Serial.begin (9600); 
}
void loop () { 
    if (digitalRead (2) == 0) 
      {Serial.println ("Selected ->" เขาเป็นโจรสลัด "); Play_Pirates (); 
    if (digitalRead (3) == 0) 
      {Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); 
    if (digitalRead (4) == 0) 
      {Serial.println ("Selected -> 'Mario UnderWorld'"); Play_MarioUW (); 
    if (digitalRead (5) == 0) 
      {Serial.println ("Selected -> 'Titanic'"); Play_Titanic (); 
}
วีดีโอ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น