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

اتصال میکروفن به آردوینو (راه اندازی میکروفون)

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

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

میکروفون الکترت چیست؟

میکروفون های الکترت به عنوان یک واحد مستقل مانند این بسته بندی می شوند:

میکروفون های الکترت

یا به شکل ماژول به یک برد متصل میشوند:

میکروفن های بردی

برد بالا یک ماژول آشکارساز صدا Keyes KY-038 است. میکروفون‌های برد Breakout معمولاً دارای یک پیش تقویت‌کننده داخلی هستند. پیش تقویت‌کننده سیگنال صوتی را تا حدی تقویت می‌کند که آردوینو می‌تواند با آن کار کند. این برد دارای «خروجی آنالوگ» و «خروجی دیجیتال» است. جزء آبی در تصویر بالا پتانسیومتر تنظیم آستانه است که حساسیت میکروفون را تنظیم می کند.

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

پایه های میکروفون برقی

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

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

موج سینوسی در مقابل موج صوتی

سیگنال صوتی با فرکانس بالاتر صدایی با تناسب بالاتر ایجاد می کند. و یک سیگنال صوتی با فرکانس پایین تر صدایی با زیر و بم کمتر ایجاد می کند:

صدا با فرکانس بالا و پایین

“ولوم” یا “بلندی” صدا به طور مستقیم با دامنه قله ها مرتبط است. سیگنال صوتی با دامنه بالاتر صدایی با حجم بالاتر ایجاد می کند. و سیگنال صوتی با دامنه کمتر صدایی با حجم کمتر ایجاد می کند.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

موج صدا حجم کم در مقابل حجم زیاد

عامل دیگری به نام “DC offset” ولتاژ را در مرکز شکل موج تعیین می کند.

بدون آفست DC در مقابل Offset DC مثبت

سیگنال صوتی حول ولتاژ “DC offset” بالا و پایین می رود.

چگونه یک میکروفون را به آردوینو وصل کنیم

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

پیش تقویت کننده چیست؟

پیش تقویت کننده مداری است که سیگنال صوتی ضعیف را افزایش می دهد یعنی به سیگنال قوی تر تبدیل می کند. یکی از راه های ساخت پیش تقویت کننده، استفاده از یک یا چند “تقویت کننده عملیاتی” یا به اختصار “آپ امپ” است. Op-amp ها تقویت کننده های ولتاژ هستند:

نماد شماتیک آپ امپ

Op-amp ها یک سیگنال ورودی ولتاژ پایین را دریافت می کنند و یک سیگنال ولتاژ بالا را خارج  می کنند. یکی از جنبه های مهم op-amps مفهوم “بهره یا Gain” است. Gain میزان تقویتی است که توسط تقویت کننده انجام می شود. در حقیقت این نسبت ولتاژ خروجی به ولتاژ ورودی است.

معادله محاسبه بهره Gain

بهره 1 منجر به تقویت سیگنال ورودی نمی شود و بهره 10 منجر به تقویت ده برابر سیگنال ورودی می شود. بهره معمولاً از 1 تا حدود 100 برابر تنظیم می شود. تعداد زیادی تراشه پیش تقویت کننده در بازار وجود دارد که می توانید از آنها برای تقویت سیگنال میکروفون الکترت استفاده کنید. در اینجا برخی از رایج ترین آنها آورده شده است:

  • TLC272
  • LM393
  • LM358
  • OPA2344
  • OPA2345
  • LM386

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

مدار اتصال میکروفون به آردوینو

در اینجا تصویری از پین های LM358 آمده است:

نمودار پین LM358

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

مدار پیش تقویت کننده

یا می توانید از این شماتیک سیم کشی میکروفون و آردوینو استفاده کنید:

شماتیک سیم کشی میکروفون و آردوینو

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

  • آردوینو اونو
  • سیم های جامپر
  • برد بورد
  • یک مقاومت 1K اهم
  • سه مقاومت 10K اهم
  • یک مقاومت 100 کیلو اهم
  • یک عدد خازن 10 uF
  • یک عدد خازن 10 nF
  • LM358 op-amp
  • میکروفون برقی

بهره این مدار می تواند با جایگزینی مقاومت 100K اهم با مقدار دیگری تغییر کند. وقتی مقدار 100K اهم باشد، بهره روی 100X تنظیم می شود که بالاترین بهره ای است که LM358 می تواند ایجاد کند. بنابراین میکروفون را بسیار حساس می کند. با استفاده از یک مقاومت کوچکتر می توانید بهره را کاهش دهید. به عنوان مثال، یک مقاومت 47K اهم بهره را روی 47 برابر تنظیم می کند. یک مقاومت 10K اهم بهره را روی 10 برابر تنظیم می کند.

کد راه اندازی میکروفون برقی با آردوینو

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

const int microphonePin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int mn = 1024;
  int mx = 0;

  for (int i = 0; i < 10000; ++i) {

    int val = analogRead(microphonePin);
    
    mn = min(mn, val);
    mx = max(mx, val);
  }

  int delta = mx - mn;

  Serial.print("Min=");
  Serial.print(mn);
  Serial.print(" Max=");
  Serial.print(mx);
  Serial.print(" Delta=");
  Serial.println(delta);
}

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

حداقل نمودار صوتی و حداکثر

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

محاسبه دلتا میکروفن

در بخش loop، با ایجاد متغیری به نام mn شروع می کنیم که حداقل مقدار خوانده شده آنالوگ را ذخیره می کند. در ابتدا برابر با 1024 تنظیم شده است. سپس متغیری به نام mx را اعلام می کنیم که حداکثر مقادیر خوانده شده آنالوگ را ذخیره می کند. در ابتدا برابر با صفر تعیین شده است.

بعد ما یک for  داریم.  حلقه for یک حلقه ایجاد می کند که 10000 بار قبل از خروج از آن اجرا می شود. هر بار که حلقه تکرار می شود، یک قرائت آنالوگ از پین میکروفون گرفته می شود و در متغیر محلی val ذخیره می شود.

پس از هر خواندن آنالوگ، حداقل و حداکثر مقادیر اندازه گیری شده در آن 10000 خواندن آنالوگ را محاسبه می کنیم.

تابع MIN(): تابع min() دو پارامتر می گیرد و پارامتری را که کمترین مقدار را دارد برمی گرداند. در این حالت پارامترها متغیرهای mn و val هستند. به عنوان مثال، اگر mn = 1، و val = 5، تابع min() عدد 1 را برمی گرداند، زیرا کوچکتر از 5 است.

تابع MAX(): تابع max() مانند تابع min() عمل می کند، اما از دو پارامتر آن پارامتر بزرگتر را برمی گرداند. بنابراین اگر mx بزرگتر از val باشد، mx را برمی گرداند. اگر val بزرگتر از mx باشد، val را برمی گرداند.

چگونه حلقه for مقادیر حداقل و حداکثر خواندن آنالوگ را در یک سری از 10000 خواندن برمی گرداند؟ اولین بار از طریق loop، متغیر mn برابر با 1024 و mx برابر با صفر تنظیم می شود. در اولین تکرار از طریق حلقه for، ما یک قرائت آنالوگ از پین میکروفون می گیریم و قرائت را در val ذخیره می کنیم. فرض کنید 620 باشد. تابع min() عدد 1024 را با 620 مقایسه می کند و مقدار کوچکتر را برمی گرداند، بنابراین 620 اکنون در متغیر mn ذخیره می شود. سپس تابع max()  مقدار 0 را با 620 مقایسه می کند و مقدار بالاتر را برمی گرداند. بنابراین 620 اکنون در متغیر mx ذخیره می شود.

حالا حلقه for برای بار دوم تکرار می شود. مقدار آنالوگ از پین میکروفون گرفته شده و در متغیر val ذخیره می شود. حالا فرض کنید 340 است. تابع min() اکنون 620 را با 340 مقایسه می کند و مقدار کوچکتر را برمی گرداند. بنابراین این زمان 340 در متغیر mn ذخیره می شود. هنگامی که تابع max() اجرا می شود، 620 را با 340 مقایسه می کند و مقدار بالاتر را برمی گرداند. این زمان 620 هنوز بالاتر از 340 است، بنابراین مقدار ذخیره شده در mx هنوز 620 است. این فرآیند تا تکرار 10000 تکرار می شود، در این مرحله از حلقه با بالاترین و کمترین مقادیر خواندن آنالوگ ذخیره شده در mx و mn خارج می شود.

برای بدست آوردن دلتا یا تفاوت بین بالاترین و کمترین مقدار، به سادگی mx را از mn کم می کنیم. پس از آن می توانیم mn، mx و delta را در سریال مانیتور چاپ کنیم. پس از ساخت مدار و آپلود کد، سریال مانیتور را باز کنید و مقادیر Min، Max و Delta را مشاهده کنید که چاپ می شوند:

مقدار min max میکروفن در سریال مانیتور

راه اندازی ماژول میکروفون با آردوینو

حال بیایید نحوه تنظیم برد میکروفون را بررسی کنیم. راه‌اندازی این‌ها کمی آسان‌تر است، زیرا دارای یک تقویت‌کننده پیش‌فرض هستند. ما از ماژول میکروفون Keyes KY-038 استفاده می‌کنیم. Keyes KY-038 از یک آپ امپ LM393 استفاده می کند. ماژول دارای چهار پایه است. پین A0 خروجی صدای آنالوگ تقویت شده را خارج می کند. G برای زمین، علامت “+” برای Vcc، و پایه D0 خروجی دیجیتال است.

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

مقدار آستانه را می توان با تنظیم پیچ بالای پتانسیومتر آبی تغییر داد. چرخاندن پیچ در جهت عقربه های ساعت آستانه را کاهش می دهد و میکروفون را حساس تر می کند. چرخاندن آن در خلاف جهت عقربه های ساعت آستانه را افزایش می دهد و میکروفون را کمتر حساس می کند.

راه اندازی یک رویداد با خروجی دیجیتال ماژول میکروفون

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

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

  • آردوینو اونو
  • سیم های جامپر
  • برد بورد
  • یک مقاومت 220 اهم
  • یک عدد LED
  • ماژول میکروفون KY-038

برای اتصال ماژول میکروفون و LED به آردوینو، این شماتیک را دنبال کنید:

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

در کد زیر، ما یک مقدار دیجیتالی از پین دیجیتال میکروفون می گیریم. اگر HIGH باشد، مقدار HIGH را روی LED می نویسیم.

int ledPin = 10;
int microphonePin = 1;
int state = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(microphonePin, INPUT);
}

void loop() {
  state = digitalRead(microphonePin);

  if (state == HIGH) {
    digitalWrite(ledPin, HIGH);
    delay(1000);
  }

  else {
    digitalWrite(ledPin, LOW);
  }
}

در ابتدای کد، متغیرهایی را برای microphonePin و ledPin ایجاد می کنیم. همچنین متغیر دیگری به نام state را برای ذخیره مقادیر HIGH و LOW که از پین دیجیتال میکروفون خوانده می شود، ایجاد می کنیم.

در بخش setup() داده ledPin را به عنوان OUTPUT و microphonePin را به عنوان INPUT مقداردهی می کنیم. در بخش loop() ابتدا یک قرائت دیجیتالی از microphonePin می گیریم و آن را در متغیر state ذخیره می کنیم. سپس یک عبارت if else داریم که می گوید: “اگر وضعیت پین میکروفون HIGH است، سپس دیجیتال ledPin نیز HIGH شود و یک ثانیه تاخیر ایجاد شود”. در غیر این صورت، ledPin برابر LOW باشد.

پس از اتصال ماژول میکروفون و LED به آردوینو، کد را آپلود کنید. وقتی صدای بلندی تولید می کنید مثلا سوت میزنید یا کف میزنید، LED باید روشن شود.

اگر در مورد هر چیزی سوالی دارید، در زیر نظر خود را بنویسید…

5/5 - (2 امتیاز)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام آیرنکس را دنبال کنید.
تصویر از محمد رحیمی

محمد رحیمی

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.