آردوینو, پروژه آردوینو

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

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

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

فهرست مطالب

لوازم مورد نیاز برای پروژه تولید صدا با برد آردوینو

ساختن گام موسیقی؛ اولین مرحله پروژه تولید صدا با برد آردوینو

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

کدنویسی پروژه تولید صدا با برد آردوینو

در این مرحله از پروژه، کد زیر را در آردوینو بارگذاری کنید:

				
					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 اعداد 0 تا 9 را شمارش می‌کند. برای خواندن فرکانس هر نوت که در هر گام نواخته می‌شود، از آرایه tones[i] استفاده خواهد شد. در این آرایه، مقدار فرکانس متناظر با i از داخل فراخوانی می‌شود. برای مثال، tones[i] برابر با 261 و tones[1] برابر با 277 است.

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

زمانی که تمام نوت‌ها نواخته شدند، دستور notone همه آنچه که توسط پایه مربوطه پخش می‌شود را متوقف می‌کند.

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

آشنایی با زنگ پیزو در پروژه تولید صدا با برد آردوینو

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

شماتیک زنگ پیزو
شماتیک زنگ پیزو

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

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

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

آشنایی با ترمین در پروژه تولید صدا با برد آردوینو

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

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

کد زیر را در آردوینو آپلود کنید:

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

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

این امکان نیز وجود دارد تا کمترین مقدار را روی عدد 200 تنظیم کنیم. در سمت دیگر، مقدار آنالوگ را بر 4 تقسیم می‌کنیم تا در پایان دامنه فرکانسی عددی بین 200 و 375 باشد. اینک این دامنه، معادل دامنه فرکانس‌ها در آرایه tones[i] می‌شود.

حالا وقت آن رسیده تا امتحان کنید که اگر مقادیر موجود در tones را تغییر دهید، چه تأثیری بر خروجی صدا می‌گذارد.

توجه داشته باشید که تعداد زیرمجموعه‌های آرایه می‌بایست 10 عدد باشند و در صورت کم یا زیاد کردن زیرمجموعه‌ها، باید متغیر numTones هم متناسب با آن عوض شود.

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