آردوینو arduino, پروژه, پروژه آردوینو, توصیه شده

اجرای ملودی موسیقی به وسیله آردوینو و بازر (Buzzer)

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

با این آموزش از سیسوگ همراه باشید.

روش های متداول

روش های مختلفی برای تولید صدا در مدار وجود دارد.

اولین روش این است که از ماژول های پخش کننده موسیقی استفاده کنید. مثل Df player، انواع mp3 player ها و…
این روش برای خیلی از پروژه های کوچک و ساده ارزش نداشته و هزینه زیادی به مدار اضافه می‌کند. مگر آن‌که پخش صدا یکی از ارکان مهم کارکرد مدار شما باشد. مثل دستگاه های نوبت دهی سخنگو و …

باز اگر به دنبال روشی اقتصادی‌تر هستید، میتوانید از روش اتصال مستقیم SD CARD به میکرو و پخش فایل های WAV از روی آن استفاده کنید تا به آی سی دیکدر MP3 هم نیازی نداشته باشید. این روش نیز قبلا در سیسوگ آموزش داده شده است.

همین طور دیکد نرم افزاری فایل های MP3 توسط میکروکنترلر های Arm نیز قبلا در سیوگ منتشر شده است. در این روش هم شما می بایست یک SD CARD را به مدارتان اضافه کنید.

اما اگر هدف شما تنها پخش یک هشدار یا اخطار ساده است و به دنبال راه حلی ساده‌تر و ارزان‌تری برای این کار بوده اید، ممکن است این مشکل را با افزودن مدارهای جانبی ساده حل کرده باشید. مثل اسیلاتور‌ها، مدارات آی سی 555، تراشه های صوتی و …

خلاصه راه‌های تولید صدا در مدار بسیار زیاد هستند. اما شما باید بسته به نیازتان بهترین راه را انتخاب کنید. ما معمولا دنبال راهی هستیم که حجم مدار و هزینه نهایی آن تا حد ممکن کاهش یابد.

 

استفاده از بازر

شاید یکی از ساده ترین روش هایی که استفاده می‌شود، اضافه کردن بازر به مدار باشد. زیرا هزینه اضافه کردن مدار های جانبی را ندارد، همچنین بازر حجم زیادی را هم اشغال نمی کند. در مقایسه با بلندگو، هم حجم کمتری می گیرد و هم هزینه کمتری دارد.
ولی این روش هم معایب خاص خودش را دارد.
اگر زیاد از بازر استفاده کنید آن هم با شدت صدای بلند و ریتمی یکنواخت، ممکن است کم کم صدای جیغ بازر رو اعصاب کاربرتان  برود!

چند وقت پیش داشتم با یه دستگاه ضبط تصویر DVR کار میکردم، متاسفاته موس همراه نداشتم و مجبور شدم با کنترل دستگاه و دکمه های رو خود دستگاه کارکنم. هر یک دکمه‌ای رو که روی کنترل میزدم، دستگاه با صدای خیلی بلندی توسط بازر جیغ میزد. حالا فکرشو بکنید میخواستم گذرواژه رو با استفاده از کیبرد روی صفحه وارد کنم! مدام صدای جیغ جیغ این دستگاه توی گوشم بود! وقتی هم این مرحله سخت تموم شد، نوبت رسید به عقب جلو کردن ویدئو ها و پیدا کردن ویدئو های یه ساعت مشخص! فکرشو بکنید! این صدای جیغ مدام باید توی گوشتون باشه! ماجرا وقتی بدتر میشه که یه نفر بی حوصله از خودتون هم کنارتون باشه…!

 

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

اما بازر تنها برای جیغ کشیدن ساخته نشده و توانایی پخش محدوده‌ی خاصی از فرکانس ها رو هم دارد. از آنجایی جایی که محدوده شنوایی انسان از 20 تا 20 کیلو هرتز می باشد، برای تست این موضوع شما می‌توانید یک بازر را به آردوینو متصل کرده و با استفاده از متد tone فرکانس های مختلف را بر روی آن اجرا نمایید. نحوه عملکرد تابع tone قبلا در سایت سیسوگ آموزش داده شده است. دقت داشته باشید که بازر ها در دو نوع اکتیو و پسیو موجود هستند. تنها بازر های نوع پسیو قابلیت ایجاد صدا از خودشان دارند.

یعنی شما میتوانید بسته به نیازتان در مدار، حتی بجای بلندگو از بازر هم استفاده کنین. اما مسئله‌ی دیگر این است که چطور میتوان یک موزیک یا نت خاص را هم بدون اضافه کردن قطعه‌ای مجزا اجرا کرد؟ اگر قرار باشد نت ها روی SD کارت ذخیره شوند، بهتر است از همان روش اجرای آهنگ های فرمت WAV استفاده کنید.
در پروژه ای که امروز قصد داریم آن را به شما آموزش دهیم، خوشبختانه ملودی موسیقی ها حجم زیادی نیاز ندارند و در حافظه کم میکرو بدون استفاده از اس دی کارت به راحتی جا می شوند. نت ها نیز توسط میکرو و به‌وسیله تابع tone اجرا می شوند. بدین‌صورت شما می توانید بدون اضافه کردن هیچ مدار جانبی، قابلیت اجرا و تولید صدا را به مدارتان اضافه کنید.

نوستالوژی بازی های قدیمی

در زمان کنسول‌های بازی قدیمی، مثل آتاری و میکرو، بازی ها تنها در حد چند بایت و نهایتا چند کیلو بایت بیشتر نبودند! اما در عین حال هر بازی برای خودش موزیک، داستان، مرحله، شخصیت داستانی و … داشت.
خیلی از این بازی ها در زمان خودشان غوغایی به پا کرده بودند. بعضی از آن ها هنوز هم زنده اند! مثل شخصیت محبوب و دوست داشتنی “سوپر ماریو” یا “قارچ خور” شرکت نینتندو که همچنان نسخه های مختلف آن برای موبایل، کامپیوتر و پلتفرم های مختلف عرضه می شود. شاید یکی از عوامل محبوبیت این بازی موسیقی خاص و منحصر به فرد آن باشد. واقعا شرکت های سازنده این دستگاه ها در آن زمان با استفاده از امکانات محدودشان کولاک کرده بودند! مهم ترین درسی که این بازی‌های نوستالوژی به ما می‌دهند سادگی است! اینکه شما میتوانید تنها با چند بایت، این همه کار انجام دهید!

بازی قدیمی سوپر ماریو از شرکت نینتندو

بازی سوپر ماریو محصول شرکت نینتندو

حتی آتاری دستی که تنها با دو باتری قلمی 1.5 ولتی کار میکرد، تم موسیقی مختص به خودش را داشت:

آتاری دستی یا Brick game

آتاری دستی یا Brick game

معرفی آی سی پوکی

آتاری هم یکی از کنسول های بازی مطرح دهه 1980 بود. در این دستگاه وظیفه تولید صداهای بازی به دوش آی سی به نام پوکی بود. پوکی Pot Keyboard Circuit (POKEY) یک تراشه I/O دیجیتالی است که در خانواده 8 تراشه های بیتی قرار می‌گیرد. صدای خیلی از بازی ها مثل Centipede ،Missile Command ،Asteroids ،Deluxe و Gauntlet توسط این تراشه تولید می‌شدند. پوکی علاوه بر تولید صدا، وظیفه اسکن صفحه کلید‌های ماتریسی و گیم پد‌ها را نیز داشت.

آی سی پوکی درون برد آتاری

Atari Pokey sound chip C012294B-01 IC AMI XL XE Arcade

ویژگی خیلی خوب دیگر این صداها این است که به راحتی توسط یک بازر پسیو هم قابل پخش هستند و شما مجبور به استفاده از بلندگو نیستید.

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

توضیحات مربوط به برنامه

در فایل pitches.h با استفاده از دستور define# فرکانس نت های موسیقی برای آردوینو تعریف شده است. 89 نت در این فایل تعریف شده اند.
برای نمونه:

فایل بعدی برنامه مربوط به تم های موسیقی است.
درون فایل 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) تعریف شده است که ورودی آن از 1 تا 5 است و اگر شما آن را در برنامه اصلی صدا بزنید، یکی از پنج ملودی نام برده شده در بالا را برای شما پخش می کند. میتوانید یک ال ای دی به پایه شماره 13 آردونو متصل کنید. هنگام اجرای نت ها، این ال ای دی روشن می شود و حالت رقص نور به خود میگیرد. البته این پایه به ال ای دی داخلی خود آردوینو نیز متصل هست.
پایه های 2 تا 6 آردوینو بصورت ورودی تعریف شده اند و هر کدام اگر برای لحظه ای به زمین متصل شوند، یکی از پنج ملودی اجرا می شود. شما تنها کافی‌ست پس از بستن مدار، فایل برنامه را با توجه به مدل آردوینو خود کامپایل کرده و روی آن آپلود کنید.
خروجی صدا پایه‌ی شماره 8 آردوینو است که با استفاده از pwm صوت را تولید می کند. شما میتوانید خروجی را به یک بازر پسیو بدید. اما بلندگو 8 اهم و هر بلندگوی با امپدانس کم را هیچ وقت مستقیما به پایه خروجی متصل نکنید. چون امپدانس کم باعث می شود جریان زیادی از میکروکنترلر کشیده شود و به آن آسیب برساند. برای اتصال بلندگو به میکرو از یک مدار آمپلی فایر با امپدانس ورودی بالا استفاده کنید.

مدار آمپلی فایر صوتی با آی سی tda2822

TDA2822 یک تقویت کننده دوکاناله (استریو) است که در پروژه های کوچکی مثل واکمن و سمعک بکار رفته است. این تقویت کننده میتواند تا۲۵۰ میلی وات در خروجی توان دهد. برای این پروژه، ما این آمپلی فایر را به شما توصیه می کنیم:

شماتیک مدار آمپلی فایر صوتی با آی سی tda2822

کارکرد این مدار تست شده است. تغذیه مدار از 3 تا 9 ولت با جریان ماکسیمم 500 میلی آمپر است. بلندگوی شماره یک مربوط به ورودی Rin  و بلندگو شماره دو مربوط به ورودی Lin می باشد. در این پروژه‌ شما تنها به یک کانال احتیاج دارید.

 

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

 

شماتیک مدار اجرای ملودی بوسیله پیزوالکتریک (بازر) و آردوینو

کدها و فایل آردوینو پروژه بصورت رایگان در انتهای مطلب قابل دانلود می باشد.

درون IDE آردوینو نیز مثال خیلی ساده ای از تولید صدا قرار داده شده که از مسیر زیر می توانید آن را اجرا کنید:

File->Examples->Digital->toneMelody

در این اسکچ خروجی پایه 8 آردوینو است. هرچند، در توضیح های این اسکچ نوشته شده که یک بلندگو 8 اهم را به این پایه متصل کنید، اما همانند مدار بالا خروجی را نباید با امپدانس پایین به زمین متصل کرد.

 

خب شاید بپرسید که اجرای اینگونه ملودی ها دیگر امروزه به چه درد پروژه های مهم و بزرگ ما میخورند؟
این یک مثال عملی از نحوه ایجاد آهنگ های دیجیتالی با استفاده از یک کنترلر 8 بیتی بود که شامل نت و تمپو برای هر آهنگ بود. شما با ساختن نت ها و تمپو های مختلف میتونید بی نهایت افکت صوتی بسازید.
در خیلی از دستگاه های پرکاربرد امروزی مثل بعضی از دستگاه‌های پوز بانکی، تلفن ها، فکس ها، دستگاه های پزشکی و … از همین ایده خلاقانه برای تولید افکت های صوتی استفاده شده و کلی در هزینه ساختشان صرفه جویی شده است. صدا‌های تولید شده هم متناسب با عملیات انجام شده جالب هستند.

دستگاه پوز بانکی

 

نت های لازم برای پخش

اگر نت نویسی بلند نباشم، نت های لازم برای پخش را از کجا بیاوریم؟

کد هایی که در این مدار اجرا کردید، از شیت پیانو (piano sheet music) تبدیل شده اند. با جستجو در اینترنت می‌توانید نت موسیقی های مختلف را پیدا کنید.
اگر علم نت خوانی ندارید و فرصت یادگیری آن‌را هم ندارید، از یک دوست و یا همکاری که نت خوانی می‌داند، کمک بگیرید.
نرم افزار هایی وجود دارند که شما با استفاده از آن میتوانید برخی از آهنگ‌ها را به نت تبدیل کنید.
از افکت بازی های کنسولی قدیمی، مثل آتاری و نینتندو ایده بگیرید. با جستجو در اینترنت میتوانید این صداهای نستالوژی را پیدا کنید. همینطور شبیه ساز های آتاری، آتاری دستی (RETRO)، سگا و میکرو برای کامپیوتر و موبایل در اینترنت موجود هستند. مراحل مختلف بازی های معروفی مثل سوپرماریو، دانکی کونگ و… افکت های جالبی دارند.
در خیلی از تلفن ها، فکس ها، دستگاه های پوزبانکی، دستگاه های پزشکی و … این صدا ها بکار رفته اند. میتوانید از آن‌ها هم ایده بگیرید.
در سایت ها و فروم های قدیمی نت هایی برای گوشی نوکیا وجود دارد. می توانید با توجه به نحوه کد گذاری آن‌ها، برای کار خودتان تبدیل کنید.
نت های مختلف درون فایل pitches.h ذخیره شده‌اند. آن‌ها را با آردوینو اجرا کنید. با شنیدن و کنار هم قرار دادن آن ها ممکن است ایده‌ای برای تم موسیقی اختصاصیتان کشف کنید!

 

مقاله بالا صرفا تجارب شخصی در فرآیند انتخاب روش های ایجاد صدا در یک پروژه الکترونیکی بود که مطمئنا با ذکر نظرات و تجربه بقیه دوستان این مطلب میتواند کاملتر و بهتر شود.

 


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

11 دیدگاه در “اجرای ملودی موسیقی به وسیله آردوینو و بازر (Buzzer)

  1. کریمی گفت:

    سلام ممنون خیلی عالی بود

  2. noorsun0035 گفت:

    سلام. خدا قوت.
    اگر خیلی فنی نبود ولی قطعا خیلی خاطره انگیز و یادآوری آن خیلی لذت بخش بود.
    دو مسئله برای من بود:
    1- این پروژه را چطور می تونم در خود avr مثلا مگا 8 اجرا کنم؟
    2- این آی سی که گفتید رو من خیلی بررسی کردم. ولی در بردهای آتاری ندیدم. چون من در حال تحقیق و شبیه سازی دستگاه آتاری هستم. در برد یک قطعه c011903 TIA می باشد. که کار تبدیل خروجی تصویر را انجام می دهد. دو قطعه دیگر هم یکی پردازنده زد 80 و دیگری هم که رم است. رام هم که داخل کارتیج قرار دارد. می خواستم اگه ممکن است نقشه شما را هم ببینم.
    با تشکر. اگر در این پروژه شبیه سازی معماری کامپیوتر با آتاری (ساخت سخت افزاری آتاری) می تونید کمکی بکنید سپاسگذار خواهم بود

    1. Digi Boy Digi Boy گفت:

      سلام.
      ممنون.
      می‌دانید که در این برنامه برای هر ملودی، دو آرایه وجود دارد. یکی برای نت (فرکانس) و یکی برای مدت زمان (تمپو) هر نت. نت‌ها توسط تابع tone اجرا می‌شوند. این تابع در‌واقع با استفاده از PWM صوت را ایجاد می کند. شما می بایست برای دیگر میکرو ها تابع tone را بگونه پیاده سازی کنید تا فرکانس مورد نظر شما را با PWM اجرا کند. در متن لینکی به نحوه عملکرد تابع tone داده ام، لطفا آن را نیز مطالعه بفرمایید. در مورد مدت زمان اجرای هر فرکانس هم دقت داشته باشید که هنگام اجرا عدد 1000 تقسیم بر تمپو شده است. مثال خود آردوینو را از مسیری که دادم اجرا کنید، کد ساده‌تری نسبت به این پروژه دارد. همین طور روش های مختلفی وجود دارد که شما از همان کد آردوینو برای میکروکنترلر های مختلف خروجی hex بگیرید و روی آن‌ها بریزید.
      اما در مورد سوال دومتون، این آی سی داخل آتاری 7800 وجود دارد. معمولا اکثر آی سی های این آتاری ها مختص همین کار ساخته شده‌اند و قابل برنامه ریزی مجدد نیستند. این هم از نقشه‌های آتاری 7800:
      bit.ly/2rA6pta
      bit.ly/32KTmC6
      قبلا هم یک نرم افزار برای اجرای آتاری در ویندوز دیدم، جالب اینجا بود که این نرم افزار شبیه ساز (سیمولاتور) نبود، در واقع تقلید کننده (امولاتور) بود و همان فایل های آتاری را اجرا می‌کرد.
      امیدوارم موفق باشید.

      1. noorsun0035 گفت:

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

  3. مهدی عبدالهی مهدی گفت:

    برادر پروژهگذاشتن بااردیوینو برای بچه های الکترونیک هیچ فایده نداره شما باید سعی کنید همه ءروژه ها را با میکروهای شرکت st و کامپایلرهای استاندارد انجام بدهید

    1. Digi Boy Digi Boy گفت:

      دوست عزیز، همان طور که در متن هم اشاره شد، این یک مثال عملی از نحوه ایجاد آهنگ های دیجیتالی با استفاده از یک کنترلر 8 بیتی بود. از آردوینو برای سادگی مطلب استفاده شده است. کدهای آردوینو قابلیت تعمیم برای میکروکنترلر های دیگر را نیز دارند. ضمن اینکه اگر شما لطفا مطلب “آردوینو خوب، بد، زشت ! همه چیز درباره آردوینو” را از سیسوگ مطالعه بفرمایید، متوجه می شوید که آردوینو هم وسیله ای غیر الکترونیک نیست!
      https://b2n.ir/Arduino

    2. اتفاقا خیلی خوب بود

      مسیر اجرا پروژه برای من مشخص شد

      حالا میتونم برای هر نوع میکرویی پیاده سازی کنم

    3. Digi Boy Digi Boy گفت:

      سلام.
      ممنون.
      می‌دانید که در این برنامه برای هر ملودی، دو آرایه وجود دارد. یکی برای نت (فرکانس) و یکی برای مدت زمان (تمپو) هر نت. نت‌ها توسط تابع tone اجرا می‌شوند. این تابع در‌واقع با استفاده از PWM صوت را ایجاد می کند. شما می بایست برای دیگر میکرو ها تابع tone را بگونه پیاده سازی کنید تا فرکانس مورد نظر شما را با PWM اجرا کند. در متن لینکی به نحوه عملکرد تابع tone داده ام، لطفا آن را نیز مطالعه بفرمایید. در مورد مدت زمان اجرای هر فرکانس هم دقت داشته باشید که هنگام اجرا عدد 1000 تقسیم بر تمپو شده است. مثال خود آردوینو را از مسیری که دادم اجرا کنید، کد ساده‌تری نسبت به این پروژه دارد. همین طور روش های مختلفی وجود دارد که شما از همان کد آردوینو برای میکروکنترلر های مختلف خروجی hex بگیرید و روی آن‌ها بریزید.
      اما در مورد سوال دومتون، این آی سی داخل آتاری 7800 وجود دارد. معمولا اکثر آی سی های این آتاری ها مختص همین کار ساخته شده‌اند و قابل برنامه ریزی مجدد نیستند. این هم از نقشه‌های آتاری 7800:
      bit.ly/2rA6pta
      bit.ly/32KTmC6
      قبلا یک نرم افزار برای اجرای آتاری در ویندوز دیدم، جالب اینجا بود که این نرم افزار شبیه ساز (سیمولاتور) نبود، در واقع تقلید کننده (امولاتور) بود و همان فایل های آتاری را اجرا می‌کرد.
      امیدوارم موفق باشید.

    4. مهرداد گفت:

      سلام.
      آقا مهدی فرمودید کامپایر استاندارد، اتفاقا آردوینو از کامپایلر استاندارد و متن باز GCC استفاده میکنه.
      خط های آخر این مطلب رو بخونید:
      https://sisoog.com/2017/05/%da%a9%d8%a7%d9%85%d9%be%d8%a7%db%8c%d9%84%d8%b1-codevisionavr-%d8%af%d8%b1-%d9%85%d9%82%d8%a7%d8%a8%d9%84-gcc/

      1. زئوس Zeus زئوس Zeus گفت:

        بله دقیقا درست میگید :))
        ممنون برای توضیحتون – آردوینو از GCC استفاده میکنه

پاسخی بگذارید

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