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

قسمت 53
آردوینو53
مشاهده سایر جلسات آموزش
118 بازدید
۱۴۰۵-۰۳-۳۱
5 دقیقه
  • نویسنده: Arduino captain
  • درباره نویسنده: من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!

در آموزش های قبلی به راه‌اندازی استپر موتور با آردوینو با استفاده از EasyDriver و ULN2003A پرداختیم. در این قسمت قصد داریم در مورد تولید صدا با آردوینو، تولید تن و پخش ملودی صحبت کنیم.

میلیونها نتیجه در Google برای عبارت «Arduino music project» وجود دارد و در این فصل نظر داریم که تکنیکهای صوتی Arduino و چند نمونه پروژه را معرفی کنیم. Arduino برای این ساخته نشده که یک synthesizer audio پیشرفته باشد، اما قطعاً میتواند از طریق یک وسیله خروجی مانند بلندگو، صدا تولید کند.
این فصل نشان میدهد چگونه نویز ایجاد کنید، صداهای از قبل ضبط شده را پخش کنید، چند خروجی ساده بسازید و حتی با synthesis sound پروژه هایی انجام دهید.
در ادامه دو پروژه معرفی شده است که با Arduino، مقداری کمی قطعه و خلاقیت زیاد میتوان ساخت:

پخش تن‌ها (Playing Tones)

اگر می‌خواهید از طریق یک بلندگو یا مبدل صوتی دیگر، تن‌های صوتی تولید کنید، فرکانس و مدت‌زمان تن را مشخص کنید می بایست از تابع tone آردوینو استفاده کنید. اسکچ زیر تنی را پخش می‌کند که فرکانس آن توسط یک مقاومت متغیر (یا سنسور دیگر) که به ورودی آنالوگ 0 متصل است تنظیم می‌شود شکل ( 1 ) را ببینید:

شکل( 1 ) اتصالات اسکچ Tone

شکل(1) اتصالات اسکچ Tone

تابع tone می‌تواند تا سه پارامتر بگیرد: پایه‌ای که بلندگو به آن متصل است، فرکانسی که باید پخش شود (بر حسب هرتز) و مدت‌زمانی (بر حسب میلی‌ثانیه) که نت باید نواخته شود. پارامتر سوم اختیاری است. اگر آن را حذف کنید، نت ادامه پیدا می‌کند تا زمانی که فراخوانی tone جدید دیگری انجام شود و یا تابع noTone اجرا شود. مقدار فرکانس در خط زیر به مقادیر معقول برای فرکانس‌های صوتی نگاشت (map) می‌شود:

این تغییر، از یک مقاومت متغیر دوم (پتانسیومتر پایین-راست در شکل ( 1 )) برای تعیین مدت‌زمان تن استفاده می‌کند:

شاید برای شما مفید باشد:
راه اندازی OLED با آردوینو

تغییر دیگر این است که یک کلید (Switch) اضافه کنید تا تن‌ها فقط زمانی تولید شوند که کلید فشرده شود. در setup زیر یک ورودی را با مقاومت‌های Pull-up فعال کنید. همچنین باید inputPin را تعریف کنید تا پایه‌ی موردنظرتان را مشخص کند:

کد loop را طوری تغییر دهید که توابع tone و delay فقط زمانی فراخوانی شوند که کلید فشرده شده باشد:

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

پخش یک ملودی ساده (Playing a Simple Melody)

فرض کنید می‌خواهید با آردوینو یک ملودی ساده بنوازد.
می‌توانید از تابع tone که در بخش قبلی توضیح داده شد برای پخش صداهای متناظر با نت‌های یک ساز موسیقی استفاده کنید. اسکچ زیر از tone برای نواختن رشته‌ای از نت‌ها استفاده می‌کند همان قطعه‌ی «Hello world» یادگیری پیانو، یعنی «Twinkle, Twinkle Little Star»:

noteNames آرایه‌ای از کاراکترها برای شناسایی نت‌ها در یک پارتیتور (Score) است. هر درایه‌ی این آرایه با فرکانسی که در آرایه‌ی frequencies تعریف شده مرتبط است. برای مثال، نت C (اولین درایه در آرایه‌ی noteNames) فرکانس ۲۶۲ هرتز دارد (اولین درایه در آرایه‌ی frequencies).
score آرایه‌ای از نت‌هاست که نام نت‌هایی را که می‌خواهید بنوازید نمایش می‌دهد (نت‌های با حروف کوچک یک اکتاو بالاتر از نت‌های با حروف بزرگ هستند):

شاید برای شما مفید باشد:
راه اندازی Beeper در STM8

هر کاراکتری در score که با کاراکتری در آرایه‌ی noteNames تطابق داشته باشد، باعث نواخته‌شدن آن نت می‌شود. کاراکتر فاصله (Space) به‌عنوان سکوت (Rest) استفاده می‌شود، اما هر کاراکتری که در noteNames تعریف نشده باشد نیز یک سکوت تولید می‌کند (هیچ نتی نواخته نمی‌شود).
اسکچ، تابع playNote را با هر کاراکتر در score و یک مدت‌زمان یک‌سومِ ثانیه برای نت‌ها فراخوانی می‌کند. تابع playNote در آرایه‌ی noteNames جست‌وجو می‌کند تا یک تطابق پیدا کند و از درایه‌ی متناظر در آرایه‌ی frequencies برای به‌دست‌آوردن فرکانسی که باید نواخته شود استفاده می‌کند.
هر نت مدت‌زمان یکسانی دارد. اگر می‌خواهید طول هر نت را مشخص کنید، می‌توانید کد زیر را به اسکچ اضافه کنید:

beats آرایه‌ای است که طول هر نت را نشان می‌دهد: ۱ یک نت چنگ (Eighth note)، ۲ یک نت سیاه (Quarter note) و همین‌طور تا آخر است. beat تعداد ضرب‌ها در دقیقه است. speed محاسبه‌ای است که تعداد ضرب در دقیقه را به مدت‌زمانی بر حسب میلی‌ثانیه تبدیل می‌کند.
تنها تغییر در کد loop این است که مدت‌زمان را طوری تنظیم کنید که از مقدار موجود در آرایه‌ی beats استفاده کند. خط زیر:

را به این تغییر دهید:

اطلاعات
118
0
0
اشتراک و حمایت
جلسات دیگر
آموزش

آموزش راه‌اندازی استپر موتور با آردوینو: استفاده از...

profile نویسنده: Arduino captain متخصص الکترونیک

من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!


ویراستار: حسین زنجانی زاده
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

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

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله