آموزش آردوینوآموزش الکترونیک

آموزش ساخت ملودی و صدا با تابع Tone در آردوینو (پخش آهنگ Arduino)

سلام. آموزش ساخت ملودی و صدا با آردوینو و تابع Tone () را آماده کردیم.

آموزش ایجاد صدا با تابع Tone در Arduino

آردوینو به لطف توسعه دهندگانش که سعی کرده اند همه چیز را ساده جلوه دهند، به راهی عالی برای سرعت بخشیدن به پروژه های الکترونیک است. بسیاری از پروژه های Arduino وجود دارند که میتوانید از آنها لذت ببرید. برخی از این پروژه نیاز به صدا دارند یا اینکه شما میخواهید پروژه خود را جذاب تر کنید. فکر کنید مثلا بتوانیم با آردوینو تم آهنگ مثلا با پیانو را پخش کنیم.

در این آموزش آردوینو یاد میگیریم چگونه با استفاده از بازر و بلندگو و با استفاده از تابع Tone ملودی را پهش کنیم. در پایان این آموزش شما قادر خواهید بود بعضی از آهنگ های معروف را پخش کنید مثل آهنگ دزدان دریایی کارائیپ، سوپر ماریو و …

همچنین یاد میگیرید چگونه یک قطعه موسیقی پیانو را با استفاده از آردوینو پخش کنید. فیلم انتهای مطلب به شما در درک این آموزش کمک خواهد کرد.

تابع Tone چگونه کار میکند ؟

قبل از اینکه بفهمیم Tone چگونه کار می کند باید بدانیم یک بازر چگونه کار می کند. بازر چیزی نیست جز بلوری که ارتعاشات مکانیکی را به برق تبدیل می کند یا برعکس. در اینجا ما یک جریان متغیر (فرکانس) را اعمال می کنیم که کریستال در آن ارتعاش می کند و بنابراین صدا را تولید می کند. اوج صدا بستگی به سرعت لرزش کریستال دارد. از این رو با تغییر فرکانس جریان می توان تن را کنترل کرد.

خب، چگونه فرکانس متغیر را از Arduino دریافت می کنیم؟ اینجاست که تابع () tone وارد می شود. tone() می تواند یک فرکانس خاص را روی یک پین خاص ایجاد کند. در صورت لزوم می توان به مدت زمان آن نیز اشاره کرد.

سینتکس ها

tone(pin, frequency) // برای تنظیم پین و فرکانس
tone(pin, frequency, duration) // برای تنظیم پین ، فرکانس و دوره زمانی

پارامتر ها

pin: پینی که میخواهید فرکانس در آن ایجاد شود
frequency: فرکانس مورد نظر شما در واحد هرتز
duration: دوره زمانی تون در واحد میلی ثانیه

مقادیر پین می تواند هرکدام از پین های دیجیتالی شما باشد. ما در اینجا از پین شماره 8 استفاده کرده ایم. فرکانس تولید شده بستگی به اندازه تایمر در برد آردوینو شما دارد. برای UNO و سایر تابلوهای رایج حداقل فرکانس تولید شده 31Hz است و حداکثر فرکانس قابل تولید 65535Hz است. با این حال ما انسانها فقط فرکانسهای بین 2000 هرتز و 5000 هرتز را می شنویم.

کتابخانه pitches.h

اکنون می دانیم که چگونه می توانیم با استفاده از عملکرد 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 قرار داده شده است. شما فقط باید فایل این کتابخانه را در آردوینو فراخوانی کنید. کتابخانه را میتوانید در انتهای مطلب دانلود کنید.

حتما ببینید :  آموزش پروگرام بیسیم برد آردوینو (آپلود کد Arduino با بلوتوث)

تابع Tone چگونه کار میکند ؟

نوت های پخش موسیقی با Arduino

برای پخش یک ملودی مناسب و با استفاده از آردوینو باید بدانیم که ملودی ها چه هستند. سه عامل اصلی مورد نیاز برای پخش یک ملودی نیاز است.

  1. شماره نُت Note value
  2. مدت نُت Note Duration
  3. تمپو Tempo

ما فایل هدر pitches.h را برای پخش هر مقداری از نت ها داریم، اکنون باید مدت زمان نوت خاص را برای پخش آن وارد کنیم. تمپو سرعت پخش ملودی میباشد. هنگامی که مقدار Note و مدت زمان Note را بدانید می توانید از آنها برای Tone() استفاده کنید.

tone (pinName, Note Value, Note Duration);

برای تن های پخش شده در این آموزش، ما مقادیر نوت ها و مدت زما آن ها را در کتابخانه themes.h قرار داده ایم که میتوانید آن ها را در پروژه خود پخش کنید. اما اگر میخواهید از تن خاصی استفاده کنید ادامه متن را نیز بخوانید.

برای پخش هر تن خاص ، باید موسیقی متن آن را بدست آورید و با خواندن مقدار نت و مدت زمان نت های آن، نت برگ را به طرح Arduino تبدیل کنید. هنگامی که مقادیر مورد نظر خود را به دست آوردید آن ها را در فایل Themes.h قرار دهید.

//##############**"شروع موسیقی دزدان دریایی کارائیپ**##############//
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_F4, NOTE_G4, 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_F4, 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_G4,
NOTE_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
};
//###########پایان موسیقی دزدان دریایی کارائیپ#############//

کد بالا مقدار نت و مدت زمان نوت ها را برای پخش موسیقی دزدان دریائی کارائیپ تشکیل میدهد. شما میتوانید تن ها مورد نظر خود را به همین صورت اضافه کنید.

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.
حتما ببینید :  ADC چیست ؟ مبدل آنالوگ به دیجیتال

شماتیک پروژه پخش موسیقی با آردوینو

شماتیک کلی مدار ایجاد موسیقی با Arduino در تصویر زیر آورده شده است.

شماتیک پروژه پخش موسیقی با آردوینو

اتصالات بسیار ساده است. ما یک اسپیکر پیزو داریم که از طریق یک مقاومت 1K به پین ​​8 و GND آردوینو متصل می شود. این مقاومت 1 کیلو اهم یک مقاومت محدود کننده جریان است که برای نگه داشتن جریان در محدوده ایمن استفاده می شود. همچنین چهار سوییچ برای انتخاب ملودی مورد نیاز داریم. یک انتهای کلید به GND وصل می شود و انتهای دیگر به ترتیب به پین ​​2 ، 3 ، 4 و 5 وصل می شود. سوئیچ ها با استفاده از نرم افزار ، مقاومت های درونی را فعال می کنند.

قطعات مورد نیاز

  1. آردوینو (هر نسخه – UNO در اینجا استفاده می شود)
  2. بلندگو Piezo / Buzzer یا هر بلندگو 8ohm دیگر
  3. دکمه
  4. مقاومت 1k (اختیاری)

توضیحات کد آردوینو

اگر مفاهیمی که در بالا گفته شد را درک کرده باشد، کد Arduino بسیار برای شما ساده است. کد را در انتهای مطلب دانلود کنید و اگر نیاز به توضیح بیشتر دارید این قسمت را بخوانید.

کتابخانه های که باید اضافه شوند

  1. “pitches.h” برای برابر کردن هر نت موسیقی با یک فرکانس خاص استفاده می شود.
  2. “themes.h” شامل ارزش نت و مدت زمان یادداشت از هر چهار لحظه است.
#include "pitches.h"
#include "themes.h"

تابعی ایجاد شده است تا هر تنی را پخش کند. در اینجا وقتی تابع Play_Pirates () که همان تن موسیقی متن دزدان دریایی است خوانده شود، موسیقی آن پخش می شود. این شامل تابع تن است که فرکانس را در پین شماره 8 تولید می کند. اگر می خواهید تن خود را پخشکنید ، Pirates_note و Pirates_duration را به مقادیر جدید نت و مدت زمان ذخیره شده در فایل “themes.h” تغییر دهید.

void Play_Pirates()
{
  for (int thisNote = 0; thisNote < (sizeof(Pirates_note)/sizeof(int)); thisNote++) {
    int noteDuration = 1000 / Pirates_duration[thisNote];
    tone(8, Pirates_note[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.05; //تغییر تمپو موسیقی
    delay(pauseBetweenNotes);
    noTone(8);
    }
}

از پین 2 ، 3 ، 4 و 5 برای پخش تن خاص مورد استفاده می شود. همچنین به در کد زیر آنها را به عنوان ورودی دکمه ها تعیین میکنیم.

pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);

در زیر فشار دکمه از بلوک کد برای پخش آهنگ استفاده می شود. مقدار دیجیتالی هر دکمه را می خواند و هنگامی که کم می شود (صفر) فرض می کند که دکمه فشرده شده است و با فراخوانی عملکرد مورد نیاز ، صدای مربوطه را پخش می کند.

if (digitalRead(2)==0) // تنظیم کلید پین 2
{ Serial.println("Selected -> 'He is a Pirate' ");  Play_Pirates();  } // پخش موسیقی دزدان دریایی
if (digitalRead(3)==0) // تنظیم کلید پین 3
{ Serial.println("Selected -> 'Crazy Frog' ");  Play_CrazyFrog();  } // پخش موسیقی قورباغه دیوانه
if (digitalRead(4)==0) // تنظیم کلید پین 4
{ Serial.println("Selected -> 'Mario UnderWorld' ");  Play_MarioUW();  } // پخش موسیقی ماریو
if (digitalRead(5)==0) // تنظیم کلید پین 5
{ Serial.println("Selected -> 'He is a Pirate' ");  Play_Pirates();  } // پخش موسیقی دزدان دریایی

فیلم عملکرد پروژه پخش آهنگ با آردوینو

پس از آماده شدن کد و سخت افزار ، به سادگی برنامه را در Arduino خود آپلود کنید و باید با فشار دادن دکمه ها صدای آن ها را پخش کنید. اگر مشکلی داشتید برای رفع اشکال به مانیتور سریال خود نگاهی بیندازید یا از بخش نظرات برای گزارش مشکل استفاده کنید. کار کامل پروژه در فیلم زیر نشان داده شده است.

فیلم عملکرد مدار : کلیک کنید !

موارد موجود در فایل : سورس کامل ، کتابخانه های مورد نیاز

دانلود فایل های پروژه

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا