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

تشخیص صدا در آردوینو با سنسور صدا

تشخیص صدا در آردوینو با سنسور صدا

تشخیص صدا در آردوینو با سنسور صدا

تشخیص صدا در آردوینو با سنسور صدا

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

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

اما اغلب اوقات این کار باعث نقص می شود زیرا این مدار به هر صدای بلند در محیط مانند رادیو با صدای بلند یا ماشین چمن زنی همسایه من پاسخ می دهد.

اگرچه ساخت یک سوئیچ کف زدن نیز یک پروژه جالب است.

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

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

بنابراین در این آموزش می آموزیم که چگونه صدای واسط سوت را از طریق رابط Sensor Sound با Arduino تشخیص دهیم و وقتی سوت شناسایی شد ما یک لامپ AC را از طریق یک رله جابجا می کنیم.

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

بنابراین بیایید با پروژه اتوماسیون خانگی مستقر در آردوینو شروع کنیم.

لوازم مورد نیاز

 

کار کردن با سنسور صدا کار

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

سنسور صدا استفاده شده در این ماژول در زیر نشان داده شده است.

اصل کار اکثر سنسورهای صوتی موجود در بازار مشابه این است ،

اگرچه ممکن است ظاهر کمی تغییر کند.

تشخیص صدا درآردوینو با سنسور صدا

همانطور که می دانیم جز pr ابتدایی در یک سنسور صدا میکروفون است.

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

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

اما این سیگنال ها از قدر بسیار کمی (میلی ولت) برخوردار خواهند بود و از این رو نمی توانند مستقیماً توسط میکروکنترلری مانند آردوینو پردازش شوند.

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

نمودار مدار آردوینو ردیاب سوت و سنسنور صدا

 

تشخیص صدا درآردوینو با سنسور صدا

اندازه گیری فرکانس با آردوینو

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

ما قبلاً یاد گرفته ایم که چگونه این کار را در آموزش شمارنده فرکانس با استفاده از عملکرد نبض انجام دهیم

. اما در این آموزش ما برای دستیابی به نتایج دقیق از کتابخانه Freqmeasure برای اندازه گیری فرکانس استفاده خواهیم کرد.

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

پس از اندازه گیری زمان می توان فرکانس را با استفاده از فرمول F = 1 / T محاسبه کرد.

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

کتابخانه را می توانید از لینک زیر بارگیری کنید:

در پیوند بالا یک فایل zip بارگیری می شود ، سپس می توانید با دنبال کردن مسیر Sketch -> Include Library -> Add .ZIP Library این فایل zip را به Arduino IDE خود اضافه کنید.

توجه: استفاده از کتابخانه عملکرد analogWrite را روی پین 9 و 10 UNO غیرفعال می کند زیرا تایمر توسط این کتابخانه اشغال می شود.

برنامه نویسی آردوینو برای تشخیص سوت

در این عنوان من برنامه را با شکستن آن به قطعات کوچک توضیح خواهم داد.

مثل همیشه ما برنامه را با گنجاندن کتابخانه های مورد نیاز و اعلام متغیرهای مورد نیاز شروع می کنیم.

مطمئن شوید که کتابخانه FreqMeasure.h را قبلاً اضافه کرده اید ، همانطور که در عنوان فوق توضیح داده شد.

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

 

#include <FreqMeasure.h>//https://github.com/PaulStoffregen/FreqMeasure
double sum=0;
int count=0;
bool state = false;
int frequency;
int continuity =0;

 

در داخل تابع void setup ، مانیتور سریال را با نرخ بادی 9600 برای رفع اشکال شروع می کنیم.

سپس از تابع () FreqMeasure.begin برای شروع مقدار 8 پین برای اندازه گیری فرکانس استفاده کنید.

ما همچنین اعلام می کنیم که پین ​​13 (LED_BUILTIN) در حال خروج است.

 

void setup() {
  Serial.begin(9600);
  FreqMeasure.begin(); //Measures on pin 8 by default
  pinMode(LED_BUILTIN, OUTPUT);
}

 

در داخل حلقه بی نهایت

، ما با استفاده از تابع FreqMeasure.available  به پین ​​8 گوش می دهیم.

اگر سیگنال ورودی وجود دارد ، ما فرکانس را با استفاده از FreqMeasure.read اندازه گیری می کنیم.

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

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

 

if (FreqMeasure.available()) {
    // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 100) {
      frequency = FreqMeasure.countToFrequency(sum / count);
      Serial.println(frequency);
      sum = 0;
      count = 0;
    }
  }

 

تشخیص صدا در آردوینو با سنسور صدا

برای بررسی مقدار فرکانس سوت خود می توانید از تابع Serial.println  در اینجا استفاده کنید.

در مورد من مقدار دریافتی از 1800 هرتز تا 2000 هرتز بود.

فرکانس سوت بیشتر افراد در این محدوده خاص قرار می گیرد.

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

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

بنابراین ، اگر فرکانس بین 1800 تا 2000 باشد ، متغیر موسوم به پیوستگی را افزایش می دهیم.

 

 if (frequency>1800 && frequency<2000)
    { continuity++; Serial.print("Continuity -> "); Serial.println(continuity); frequency=0;}

 

اگر مقدار پیوستگی به سه یا بیشتر از آن برسد ، پس با تغییر وضعیت متغیر موسوم به حالت ، وضعیت LED را تغییر می دهیم.

اگر حالت از قبل درست باشد ، آن را به نادرست تغییر می دهیم و بالعکس.

 

  if (continuity >=3 && state==false)
      {state = true; continuity=0; Serial.println("Light Turned ON"); delay(1000);}

    if (continuity >=3 && state==true)
      {state = false; continuity=0; Serial.println("Light Turned OFF"); delay(1000);}

 

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

پس از آماده شدن کد و سخت افزار ، می توانیم تست آن را شروع کنیم.

مطمئن شوید اتصالات صحیح است و ماژول را روشن می کنید.

مانیتور سریال را باز کرده و شروع به سوت زدن می کنید ، می توانید مقدار پیوسته را بیشتر کرده و در آخر لامپ را روشن یا خاموش کنید.

یک عکس فوری از مانیتور سریال من در زیر نشان داده شده است.

وقتی مانیتور سریال می گوید نور پین 13 را روشن کرد ، بالا می رود و رله روشن می شود تا لامپ روشن شود.

به همین ترتیب وقتی مانیتور سریال می گوید چراغ خاموش است ، لامپ خاموش می شود. پ

س از آزمایش کار ، می توانید تنظیمات را با استفاده از آداپتور 12 ولت تأمین کرده و کنترل لوازم خانگی AC خود را با استفاده از سوت شروع کنید.

امیدوارم که شما این آموزش را درک کرده باشید و از یادگیری چیز جدید لذت برده باشید. اگر در کارکردن کارها مشکلی دارید ، آنها را در بخش نظر بگذارید

کد تشخیص صدا در آردوینو با سنسور صدا

 

/*Arduino Whitsle Detector Switch Program
* Detects the whistles from pin 8 and toggles pin 13
* Dated: 31-5-2019
* Website: www.wetat.ir
*/

#include <FreqMeasure.h>//https://github.com/PaulStoffregen/FreqMeasure

void setup() {
Serial.begin(9600);
FreqMeasure.begin(); //Measures on pin 8 by default
pinMode(LED_BUILTIN, OUTPUT);
}

double sum=0;
int count=0;
bool state = false;
float frequency;
int continuity =0;

void loop() {
if (FreqMeasure.available()) {
// average several reading together
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 100) {
frequency = FreqMeasure.countToFrequency(sum / count);
Serial.println(frequency);
sum = 0;
count = 0;
}
}

    if (frequency>1800 && frequency<2000)
{ continuity++; Serial.print(“Continuity -> “); Serial.println(continuity); frequency=0;}

    if (continuity >=3 && state==false)
{state = true; continuity=0; Serial.println(“Light Turned ON”); delay(1000);}

    if (continuity >=3 && state==true)
{state = false; continuity=0; Serial.println(“Light Turned OFF”); delay(1000);}

    digitalWrite(LED_BUILTIN, state);
}

 

این پروژه توسط گروه وی تات انجام شده wetat.ir

کپی با دکر منبع بلامانع است

 

نوشته های مشابه

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

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