آردوینوآموزش آردوینوپروژه آردوینو

ورودی خروجی آنالوگ با بازر و فتوسل در آردوینو

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

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

۱ برد آردوینو Uno R3
فتوسل در آردوینو
۲ برد بورد
نمایشگر کاراکتری
۳ مقاومت ۱ کیلو اهم
فتوسل در آردوینو
۴ مقاومت نوری (LDR)
۵ زنگ اخبار پیزو (Piezo sounder)
۶ جامپر
فتوسل در آردوینو

نواختن یک گام

برای اولین قسمت از این درس ، تنها وسیله بر روی برد بورد، زنگ اخبار پیزو می باشد. یک  سر پیزو به زمین و سر دیگر آن به پایه دیجیتال شماره ۱۲ آردوینو متصل می شود.

برنامه زیر را بر روی آردوینو خود بارگذاری نمایید:

nt speakerPin = 12;
 
    int numTones = 10;
    int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
    //            mid C  C#   D    D#   E    F    F#   G    G#   A
     
    void setup()
    {
      for (int i = 0; i < numTones; i++)
      {
        tone(speakerPin, tones[i]);
        delay(500);
      }
      noTone(speakerPin);
    }
     
    void loop(){}

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

توضیحات کد:

حلقه ‘for’ اعداد ۰ تا ۹ را شمارش می کند.  برای خواندن فرکانس هر نوت که در هر گام نواخته می شود ، از آرایه [tones[i استفاده می شود. در این آرایه مقدار فرکانس متناظر با ‘i’ از داخل آرایه فراخوانی می شود. به طور مثال [tones[i برابر با مقدار ۲۶۱  و , [tones[1 برابر با مقدار ۲۷۷ است.

دستور آردوینو ‘tone’ دارای دو پارامتر می باشد. اولین پارامتر پایه ای است که توسط آن صدا را پخش می کند و پارامتر دوم فرکانس صدایی هست که قرار است پخش شود.

وقتی که تمام نوت ها نواخته شدند ، دستور ‘noTone’ هر آنچه که توسط پایه مربوطه پخش می شود را متوقف می کند. 

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

برای شنیدن دوباره صدا، کافیست که دکمه ریست را فشار دهیم.

صدا

موج های صدا در اصل ارتعاشاتی در فشار هوا می باشند. سرعت این ارتعاشات (سیکل در ثانیه ) عاملی است که باعث ایجاد نواک می شود. هر مقدار که فرکانس بالاتر باشد ، مقدار نواک هم بیشتر است.

معمولا نشانگر فرکانس ۲۶۱ هرتز می باشد . اگر شما یک خروجی دیجیتال را ۲۶۱ بار در هر ثانیه روشن و خاموش کنید ، آنگاه در خروجی خود فرکانسی با مقدار ۲۶۱ هرتز خواهید داشت.

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

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

پیزو – ترمین

ترمین یک آلت موسیقی است که با حرکت دست در جلوی آن صدایی خاص تولید می شود. از این آلت موسیقی در تولید آهنگ اصلی فیلم های Star Trek  استفاده شده است.

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

برنامه آردوینو

برنامه زیر را به آردوینو خود منتقل نمایید:

   
    int speakerPin = 12;
    int photocellPin = 0;
     
    void setup()
    {
    }
     
    void loop()
    {
      int reading = analogRead(photocellPin);
      int pitch = 200 + reading / 4;
      tone(speakerPin, pitch);
    }

کلیت برنامه بسیار آسان است. ابتدا ورودی را از پایه آنالوگ  A0 دریافت می کنیم تا مقدار شدت نور فتوسل در آردوینو را اندازه بگیریم. این مقدار از ۰ تا ۷۰۰ متغیر است. میتوانید با استفاده از فلش موبایل نور را زیاد تر و با قرار دادن دست خود بر روی سنسور نور را کمتر کنید.

ما می توانیم ۲۰۰ واحد به این مقدار اضافه کنیم تا ۲۰۰ به جای ۰ ، کمترین مقدار بشود. از آن طرف مقدار آنالوگ خوانده شده از پایه آنالوگ را تقسیم بر ۴ می کنیم تا در نهایت دامنه فرکانسی ما عددی بین ۲۰۰ و ۳۷۵ هرتز شود.  حال این دامنه معادل دامنه فرکانس های ما در آرایه tone[i] می شود.

امتحان کنید که اگر مقدار آنالوگ دریافتی را به جای ۴ بر عدد دیگری تقسیم کنید چه اتفاقی می افتد.

    ;int pitch = 200 + reading / 4

امتحان کنید که اگر مقادیر موجود در آرایه ‘tones’  را تغییر دهید چه تغییری در صدای خروجی به وجود می آید. دقت کنید که تعداد زیرمجموعه های آرایه بایستی ۱۰ عدد باشد و در صورت کم یا زیاد کردن زیر مجموعه های آن بایستی متغیر ‘numTones’ را هم متناسب با آن تغییر دهید. نمونه کد زیر آهنگ بازی قدیمی ماریو است که نوت ها در اول آن معرفی شده و در ادامه برنامه استفاده میشوند. میتوانید این کد هم بر روی برد خود آپلود کنید با این تفاوت که باید از پایه ۳ به عنوان خروجی استفاده کنید.

نمایش بیشتر

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

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

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