مقدمه
شاید تاکنون در انجام پروژههایتان، لازمبوده تا مدار شما بهنحوی صدا تولید کند. برای مثال خواستهباشید یک هشدار به کاربر بدید، یا یک پیام خاص مثل پایان عملیات، یا عملیات موفق و… رو به اطلاع کاربر برسانید. شاید هم گاهی خواستهباشید تا یک موزیک ساده را در حین عملیات پخشکنید. در این پست قصد داریم تا ابتدا بر روی روشهای مختلف و معمول تولید صدا در مدار مروری داشتهباشیم، سپس از بین آنها یک روش ساده و مقرونبهصرفه را انتخاب میکنیم و پروژه اجرای ملودی موسیقی سوپر ماریو و چند آهنگ نوستالوژی دیگر را بوسیله آردوینو و بازر انجام میدهیم.
با این آموزش همراه باشید.
روشهای متداول
روشهای مختلفی برای تولید صدا در مدار وجود دارد.
اولین روش این است که از ماژولهای پخشکننده موسیقی استفادهکنید. مثل Df player، انواع mp3 playerها و…
این روش برای خیلیاز پروژه های کوچک و ساده ارزش نداشته و هزینه زیادی به مدار اضافه میکند. مگر آنکه پخش صدا یکیاز ارکان مهم کارکرد مدار شما باشد. مثل دستگاههای نوبتدهی سخنگو و …
باز اگر بهدنبال روشی اقتصادیتر هستید، میتوانید از روش اتصال مستقیم SD CARD به میکرو و پخش فایلهای WAV از روی آن استفادهکنید تا به آیسی دیکدر MP3 هم نیازی نداشتهباشید. این روش نیز قبلا آموزش داده شده است.
همینطور دیکد نرمافزاری فایلهای MP3 توسط میکروکنترلرهای Arm نیز قبلا منتشر کردهایم. در این روش هم شما میبایست یک SD CARD را به مدارتان اضافهکنید.
اما اگر هدف شما تنها پخش یک هشدار یا اخطار ساده است و بهدنبال راهحلی سادهتر و ارزانتری برای این کار بودهاید، ممکناست این مشکل را با افزودن مدارهای جانبی ساده حلکردهباشید. مثل اسیلاتورها، مدارات آیسی۵۵۵، تراشههای صوتی و …
خلاصه راههای تولید صدا در مدار بسیار زیاد هستند. اما شما باید بسته به نیازتان بهترین راه را انتخابکنید. ما معمولا دنبال راهی هستیم که حجم مدار و هزینهنهایی آن تاحدممکن کاهشیابد.
استفادهاز بازر
شاید یکیاز سادهترین روشهایی که استفاده میشود، اضافهکردن بازر به مدار باشد. زیرا هزینه اضافهکردن مدارهای جانبی را ندارد، همچنین بازر حجم زیادی را هم اشغال نمیکند. در مقایسه با بلندگو، هم حجم کمتری میگیرد و هم هزینه کمتری دارد.
ولی این روش هم معایب خاص خودش را دارد.
اگر زیاد از بازر استفادهکنید آنهم با شدت صدایبلند و ریتمی یکنواخت، ممکناست کمکم صدای جیغ بازر رو اعصاب کاربرتان برود.
چندوقت پیش داشتم با یه دستگاه ضبط تصویر DVR کار میکردم، متاسفاته موس همراه نداشتم و مجبور شدم با کنترل دستگاه و دکمههای رو خود دستگاه کار کنم. هر یک دکمهای رو که روی کنترل میزدم، دستگاه با صدای خیلی بلندی توسط بازر جیغ میزد. حالا فکرشو بکنید میخواستم گذرواژه رو بااستفادهاز کیبرد روی صفحه وارد کنم! مدام صدای جیغجیغ این دستگاه توی گوشم بود! وقتی هم این مرحله سخت تموم شد، نوبت رسید به عقبجلوکردن ویدئوها و پیداکردن ویدئوهای یه ساعت مشخص! فکرشو بکنید! این صدای جیغ مدام باید توی گوشتون باشه! ماجرا وقتی بدتر میشه که یه نفر بیحوصلهتر از خودتون هم کنارتون باشه…!
شاید فکر کنید که بازر پیزوالکتریک تنها هنر ایجاد صدای بیپ را دارد و نهایت انتظاری که میتوان از آن داشت این است که برای عملیاتهای مختلف، ریتم خاصی را همانند کدهای مورس اجرا نماید. مثل دستگاههای کارتخوان مترو و اتوبوس. اگر کارت شما به اندازه کافی شارژ داشتهباشد و عملیات پرداخت با موفقیت انجامشود، ریتمی که بازر اجرا میکند، با ریتم هنگامی که کارت شما فاقد اعتبار است متفاوت میباشد.
اما بازر تنها برای جیغکشیدن ساختهنشده و توانایی پخش محدودهی خاصی از فرکانسها رو هم دارد. از آنجاییکه محدوده شنوایی انسان از ۲۰تا ۱۰کیلوهرتز میباشد، برای تست این موضوع شما میتوانید یک بازر را به آردوینو متصلکرده و بااستفادهاز متد tone فرکانسهای مختلف را برروی آن اجرا نمایید. نحوه عملکرد تابع tone را قبلا آموزش دادهایم. دقتداشتهباشید که بازرها در دو نوع اکتیو و پسیو موجود هستند. تنها بازرهای نوع پسیو قابلیت ایجاد صدا از خودشان دارند.
یعنی شما میتوانید بسته به نیازتان در مدار، حتی بجای بلندگو از بازر هم استفادهکنین. اما مسئلهی دیگر این است که چطور میتوان یک موزیک یا نت خاص را هم بدون اضافهکردن قطعهای مجزا اجرا کرد؟ اگر قرار باشد نتها روی SD کارت ذخیره شوند، بهتر است از همان روش اجرای آهنگهای فرمت WAV استفادهکنید.
در پروژهای که امروز قصد داریم آن را به شما آموزشدهیم، خوشبختانه ملودی موسیقیها حجمزیادی نیاز ندارند و در حافظه کم میکرو بدوناستفادهاز اسدی کارت بهراحتی جا میشوند. نتها نیز توسط میکرو و بهوسیله تابع tone اجرا میشوند. بدینصورت شما میتوانید بدون اضافهکردن هیچ مدار جانبی، قابلیت اجرا و تولید صدا را به مدارتان اضافهکنید.
نوستالوژی بازیهای قدیمی
در زمان کنسولهای بازی قدیمی، مثل آتاری و میکرو، بازیها تنها درحد چندبایت و نهایتا چندکیلوبایت بیشتر نبودند! اما درعینحال هر بازی برای خودش موزیک، داستان، مرحله، شخصیت داستانی و… داشت.
خیلیاز این بازیها در زمان خودشان غوغایی به پا کردهبودند. بعضیاز آنها هنوز هم زندهاند! مثل شخصیت محبوب و دوستداشتنی “سوپر ماریو” یا “قارچ خور” شرکت نینتندو که همچنان نسخههای مختلف آن برای موبایل، کامپیوتر و پلتفرمهای مختلف عرضه میشود. شاید یکیاز عوامل محبوبیت این بازی موسیقی خاص و منحصربهفرد آن باشد. واقعا شرکتهای سازنده این دستگاهها در آن زمان بااستفادهاز امکانات محدودشان کولاک کردهبودند! مهمترین درسی که این بازیهای نوستالوژی به ما میدهند سادگی است! اینکه شما میتوانید تنها با چندبایت، این همه کار انجامدهید!
حتی آتاری دستی که تنها با دو باتری قلمی ۱.۵ولتی کار میکرد، تم موسیقی مختص به خودش را داشت:
معرفی آیسی پوکی
آتاری هم یکیاز کنسولهای بازی مطرح دهه ۱۹۸۰ بود. در این دستگاه وظیفه تولید صداهای بازی به دوش آیسی بهنام پوکی بود. پوکی Pot Keyboard Circuit (POKEY) یک تراشه I/O دیجیتالی است که در خانواده ۸تراشههای بیتی قرار میگیرد. صدای خیلیاز بازیها مثل Centipede ،Missile Command ،Asteroids ،Deluxe و Gauntlet توسط این تراشه تولید میشدند. پوکی علاوهبر تولید صدا، وظیفه اسکن صفحه کلیدهای ماتریسی و گیم پدها را نیز داشت.
ویژگی خیلیخوب دیگر این صداها این است که بهراحتی توسط یک بازر پسیو هم قابلپخش هستند و شما مجبور به استفادهاز بلندگو نیستید.
برای تولید این صداها، لازمنیست برید و داخل قطعات اوراقی دنبال آیسی پوکی بگردید! میتونید بااستفادهاز تایمرکانتر داخلی میکروکنترلرها و pwm آنها را تولید کنید. در این پروژه قصد داریم آهنگ سوپر ماریوی نینتندو و چند ملودی خاطرهانگیز دیگر را با استفادهاز آردوینو برای شما تولید کنیم.
توضیحات مربوط به برنامه
در فایل pitches.h بااستفادهاز دستور define# فرکانس نتهای موسیقی برای آردوینو تعریفشدهاست. ۸۹نت در این فایل تعریفشدهاند.
برای نمونه:
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37
فایل بعدی برنامه مربوط به تمهای موسیقی است.
درون فایل themes.h پنج آهنگ ذخیرهشدهاست. برای هر آهنگ، یک ملودی یا نت بههمراه تمپو یا مدت زمان آن بصورت آرایه ذخیرهشدهاست.
ملودیهای موجود در این فایل:
1- ‘Super Mario Main Theme’
2- ‘Super Mario underworld’
3- ‘Pirates Theme’
4- ‘CrazyFrog Theme’
5- ‘Titanic Theme’
اسامی ملودیها به فارسی:
1- سوپر ماریو – تم اصلی
2- سوپر ماریو – زیرزمین
3- تم دزدان دریایی کاراییب
4- کریزی فراگ یا قورباغه احمق
5- ملودی کشتی تایتانیک
در فایل اصلی برنامه با نام music_player.ino متدی با امضای void sing(int s) تعریفشدهاست که ورودی آن از ۱ تا ۵ است و اگر شما آن را در برنامه اصلی صدا بزنید، یکیاز پنج ملودی نامبردهشده در بالا را برای شما پخش میکند. میتوانید یک الایدی به پایه شماره۱۳ آردونو متصلکنید. هنگام اجرای نتها، این الایدی روشن میشود و حالت رقص نور به خود میگیرد. البته این پایه به الایدی داخلی خود آردوینو نیز متصلهست.
پایههای ۲ تا ۶ آردوینو بصورت ورودی تعریف شدهاند و هرکدام اگر برای لحظهای به زمین متصلشوند، یکیاز پنج ملودی اجرا میشود. شما تنها کافیست پساز بستن مدار، فایل برنامه را باتوجهبه مدل آردوینو خود کامپایل کرده و روی آن آپلود کنید.
خروجی صدا پایهی شماره۸ آردوینو است که بااستفادهاز pwm صوت را تولید میکند. شما میتوانید خروجی را به یک بازر پسیو بدید. اما بلندگو ۸ اهم و هر بلندگوی با امپدانس کم را هیچ وقت مستقیما به پایه خروجی متصلنکنید. چون امپدانس کم باعث میشود جریان زیادی از میکروکنترلر کشیدهشود و به آن آسیببرساند. برای اتصال بلندگو به میکرو از یک مدار آمپلی فایر با امپدانس ورودی بالا استفادهکنید.
مدار آمپلی فایر صوتی با آیسی tda2822
TDA2822 یک تقویتکننده دوکاناله(استریو) است که در پروژههای کوچکی مثل واکمن و سمعک بکار رفتهاست. این تقویتکننده میتواند تا۲۵۰میلی وات در خروجی توان دهد. برای این پروژه، ما این آمپلی فایر را به شما توصیه می کنیم:
کارکرد این مدار تستشدهاست. تغذیه مدار از ۳ تا ۹ ولت با جریان ماکسیمم ۵۰۰میلیآمپر است. بلندگوی شماره یک مربوط به ورودی Rin و بلندگو شماره دو مربوط به ورودی Lin می باشد. در این پروژه شما تنها به یک کانال احتیاج دارید.
کدها و فایل آردوینو پروژه بصورت رایگان در انتهای مطلب قابل دانلود می باشد.
درون IDE آردوینو نیز مثال خیلی سادهای از تولید صدا قراردادهشده که از مسیر زیر میتوانید آن را اجراکنید:
File->Examples->Digital->toneMelody
در این اسکچ خروجی پایه ۸ آردوینو است. هرچند، در توضیحهای این اسکچ نوشتهشده که یک بلندگو ۸اهم را به این پایه متصلکنید، اما همانند مدار بالا خروجی را نباید با امپدانس پایین به زمین متصلکرد.
خب شاید بپرسید که اجرای اینگونه ملودیها دیگر امروزه به چه درد پروژههای مهم و بزرگ ما میخورند؟
این یک مثال عملی از نحوه ایجاد آهنگهای دیجیتالی بااستفادهاز یک کنترلر ۸بیتی بود که شامل نت و تمپو برای هر آهنگ بود. شما با ساختن نتها و تمپوهای مختلف میتونید بینهایت افکتصوتی بسازید.
در خیلیاز دستگاههای پرکاربرد امروزی مثل بعضیاز دستگاههای پوز بانکی، تلفنها، فکسها، دستگاههای پزشکی و… از همین ایده خلاقانه برای تولید افکتهای صوتی استفادهشده و کلی در هزینه ساختشان صرفهجویی شدهاست. صداهای تولیدشده هم متناسب با عملیات انجامشده جالب هستند.
نتهای لازم برای پخش
اگر نت نویسی بلند نباشم، نتهای لازم برای پخش را از کجا بیاوریم؟
کد هایی که در این مدار اجرا کردید، از شیت پیانو (piano sheet music) تبدیل شدهاند. با جستجو در اینترنت میتوانید نت موسیقیهای مختلف را پیداکنید.
اگر علم نتخوانی ندارید و فرصت یادگیری آنرا هم ندارید، از یک دوست و یا همکاری که نتخوانی میداند، کمک بگیرید.
نرمافزارهایی وجود دارند که شما بااستفادهاز آن میتوانید برخیاز آهنگها را به نت تبدیلکنید.
از افکت بازیهای کنسولی قدیمی، مثل آتاری و نینتندو ایده بگیرید. با جستجو در اینترنت میتوانید این صداهای نستالوژی را پیدا کنید. همینطور شبیهسازهای آتاری، آتاری دستی(RETRO)، سگا و میکرو برای کامپیوتر و موبایل در اینترنت موجود هستند. مراحل مختلف بازیهای معروفی مثل سوپرماریو، دانکی کونگ و… افکتهای جالبی دارند.
در خیلیاز تلفنها، فکسها، دستگاههای پوزبانکی، دستگاههای پزشکی و… این صداها بکار رفتهاند. میتوانید از آنها هم ایده بگیرید.
در سایتها و فرومهای قدیمی نتهایی برای گوشی نوکیا وجود دارد. میتوانید باتوجهبه نحوه کدگذاری آنها، برای کار خودتان تبدیل کنید.
نتهای مختلف درون فایل pitches.h ذخیرهشدهاند. آنها را با آردوینو اجرا کنید. با شنیدن و کنارهم قراردادن آنها ممکناست ایدهای برای تم موسیقی اختصاصیتان کشف کنید!
مقاله بالا صرفا تجارب شخصی در فرآیند انتخاب روشهای ایجاد صدا در یک پروژه الکترونیکی بود که مطمئنا با ذکر نظرات و تجربه بقیه دوستان این مطلب میتواند کاملتر و بهتر شود.
لینکهای دانلود
لینک دانلود مستقیم “پروژه رایگان اجرای ملودی موسیقی بهوسیله آردوینو و بازر” – حجم ۳کیلوبایت
اسم فایل
arduino_music_player.zip
منبع: سیسوگ