آموزش ساخت ملودی با برد آردوینو
سلام. آموزش ساخت ملودی و صدا با آردوینو و تابع Tone () را آماده کردیم.
محتویات
آموزش ایجاد صدا با تابع Tone در آردوینو
آردوینو به لطف توسعه دهندگانش که سعی کرده اند همه چیز را ساده جلوه دهند، به راهی عالی برای سرعت بخشیدن به پروژه های الکترونیک است. بسیاری از پروژه های Arduino وجود دارند که میتوانید از آنها لذت ببرید. برخی از این پروژه نیاز به صدا دارند یا اینکه شما میخواهید پروژه خود را جذاب تر کنید. فکر کنید مثلا بتوانیم با آردوینو تم آهنگ مثلا با پیانو را پخش کنیم.
در این آموزش آردوینو یاد میگیریم چگونه با استفاده از بازر و بلندگو و با استفاده از تابع Tone ملودی را پهش کنیم. در پایان این آموزش شما قادر خواهید بود بعضی از آهنگ های معروف را پخش کنید مثل آهنگ دزدان دریایی کارائیپ، سوپر ماریو و …
کار کامل پروژه در فیلم زیر نشان داده شده است.
همچنین یاد میگیرید چگونه یک قطعه موسیقی پیانو را با استفاده از آردوینو پخش کنید. فیلم انتهای مطلب به شما در درک این آموزش کمک خواهد کرد.
پیشنهاد میکنم پروژه پخش کننده موسیقی با آردوینو را مشاهده کنید.
تابع Tone چگونه کار میکند ؟
قبل از اینکه بفهمیم Tone چگونه کار می کند باید بدانیم یک بازر چگونه کار می کند. بازر چیزی نیست جز بلوری که ارتعاشات مکانیکی را به برق تبدیل می کند یا برعکس. در اینجا ما یک جریان متغیر (فرکانس) را اعمال می کنیم که کریستال در آن ارتعاش می کند و بنابراین صدا را تولید می کند. اوج صدا بستگی به سرعت لرزش کریستال دارد. از این رو با تغییر فرکانس جریان می توان تن را کنترل کرد.
خب، چگونه فرکانس متغیر را از Arduino دریافت می کنیم؟ اینجاست که تابع () tone وارد می شود. tone() می تواند یک فرکانس خاص را روی یک پین خاص ایجاد کند. در صورت لزوم می توان به مدت زمان آن نیز اشاره کرد.
سینتکس ها tone(pin, frequency) // برای تنظیم پین و فرکانس tone(pin, frequency, duration) // برای تنظیم پین ، فرکانس و دوره زمانی پارامتر ها pin: پینی که میخواهید فرکانس در آن ایجاد شود frequency: فرکانس مورد نظر شما در واحد هرتز duration: دوره زمانی تون در واحد میلی ثانیه
مقادیر پین می تواند هرکدام از پین های دیجیتالی شما باشد. ما در اینجا از پین شماره 8 استفاده کرده ایم. فرکانس تولید شده بستگی به اندازه تایمر در برد آردوینو شما دارد. برای UNO و سایر تابلوهای رایج حداقل فرکانس تولید شده 31Hz است و حداکثر فرکانس قابل تولید 65535Hz است. با این حال ما انسانها فقط فرکانسهای بین 2000 هرتز و 5000 هرتز را می شنویم.
جهت کسب اطلاعات بیشتر، مقاله تابع Tone را مشاهده کنید.
کتابخانه 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 قرار داده شده است. شما فقط باید فایل این کتابخانه را در آردوینو فراخوانی کنید. کتابخانه را میتوانید در انتهای مطلب دانلود کنید.
نوت های پخش موسیقی با آردوینو
برای پخش یک ملودی مناسب و با استفاده از آردوینو باید بدانیم که ملودی ها چه هستند. سه عامل اصلی مورد نیاز برای پخش یک ملودی نیاز است.
- شماره نُت Note value
- مدت نُت Note Duration
- تمپو 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 }; //###########پایان موسیقی دزدان دریایی کارائیپ#############//
کد بالا مقدار نت و مدت زمان نوت ها را برای پخش موسیقی دزدان دریائی کارائیپ تشکیل میدهد. شما میتوانید تن ها مورد نظر خود را به همین صورت اضافه کنید.
مدار پروژه پخش موسیقی با آردوینو
شماتیک کلی مدار ایجاد موسیقی با Arduino در تصویر زیر آورده شده است.
اتصالات بسیار ساده است. ما یک اسپیکر پیزو داریم که از طریق یک مقاومت 1K به پین 8 و GND آردوینو متصل می شود. این مقاومت 1 کیلو اهم یک مقاومت محدود کننده جریان است که برای نگه داشتن جریان در محدوده ایمن استفاده می شود. همچنین چهار سوییچ برای انتخاب ملودی مورد نیاز داریم. یک انتهای کلید به GND وصل می شود و انتهای دیگر به ترتیب به پین 2 ، 3 ، 4 و 5 وصل می شود. سوئیچ ها با استفاده از نرم افزار ، مقاومت های درونی را فعال می کنند.
قطعات مورد نیاز
- آردوینو (هر نسخه – UNO در اینجا استفاده می شود)
- بلندگو Piezo / Buzzer یا هر بلندگو 8ohm دیگر
- دکمه
- مقاومت 1k (اختیاری)
توضیحات کد آردوینو
اگر مفاهیمی که در بالا گفته شد را درک کرده باشد، کد Arduino بسیار برای شما ساده است. کد را در انتهای مطلب دانلود کنید و اگر نیاز به توضیح بیشتر دارید این قسمت را بخوانید.
کتابخانه های که باید اضافه شوند
- “pitches.h” برای برابر کردن هر نت موسیقی با یک فرکانس خاص استفاده می شود.
- “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 خود آپلود کنید و باید با فشار دادن دکمه ها صدای آن ها را پخش کنید. اگر مشکلی داشتید برای رفع اشکال به مانیتور سریال خود نگاهی بیندازید یا از بخش نظرات برای گزارش مشکل استفاده کنید.
موارد موجود در فایل : سورس کامل ، کتابخانه های مورد نیاز
ببخشید کد کاملو بدید هی ارور نده من با گوشی کامپایل میکنم ارور میده ممنون
کد کامل پروژه ها در انتهای صفحه (در فایل دانلودی) قرار داده شده است.
ببخشید چطوری باید اون دوتا کتابخانه هارا فراخوانی کنم
سلام جناب، مقاله نصب کتابخانه در آردوینو رو مشاهده کنید.
خب ببخشید ایا اصلا در این برنامه نیازی به اضافه کردن کتابخانه است خیلی ممنون از پاسخ گویی شما
بله جناب کتابخانه مورد نیاز در فایل دانلودی قرار گرفته و باید نصب کنید.
ببخشید که هی سوال میپرسم ببینید
من مقاله کتابخانه آردینو را مطالعه کردم ولی در ان فقط گفته بود که در اردینو فایل زیپ را انتخاب کنید تا اینجا درست ولی الان در فایلی که قرار دادید هم کد قرار داره هم یک کتابخانه دیگر خب چطوری به اردینو ام بگم اون کتابخانه را میخوام من حتی اکسترکت کردم بعد انتخاب کردم ولی خب دیگه رو حالت زیپ نیست و قبول نمیکنه
من هنوز خیلی تازه واردم به برنامه نویسی یکم تجربه ام کمه بازم ببخشید
در فایل دانلودی، یک فایل هست به نام pitches.rar محتویات این فایل رو در یک پوشه بریزید. دیگه نیاز به نصب کتابخانه نیست چون کد و کتابخانه در یک مسیر هستند. همچنین اگر نیاز به یادگیری کامل آردوینو دارید، دوره آموزشی آردوینو رو مشاهده کنید.
سلام
خسته نباشید
چطوری میشه یه صوت که مد نظر خودمونه رو پخش کرد
مثلا یه صوت یا اهنگ دلخواه
ممنون از سایت خوبتون
سلام جناب. پروژه پخش آهنگ با آردوینو رو مشاهده کنید.