آموزش آردوینو UNO ( رقص نور صوتی )

به آموزش آردوینو ( قسمت هجدهم – رقص نور صوتی) خوش اومدید.

بازبینی اول : در تاریخ ۱۴۰۰/۰۵/۲۵ انجام شد!

سنسور تشخیص صدا KY-037

وقتی ما با میکروفن صحبت میکنیم امواج صوتی ایجاد شده توسط ما به دیافراگم برخورد میکند و باعث ارتعاش اون میشود. با لرزش دیافراگم فاصله صفحات از همدیگه کم میشود و ظرفیت تغییر میکند.این تغییر ظرفیت باعث تغییر ولتاژ میشود که با اندازه گیری اون میتونیم متوجه وجود صدا توی محیط بشیم.

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

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

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

پیاده سازی عملی پروژه

VCC : این پایه برای تغذیه ماژول استفاده میشود و باید به ولتاژ بین ۳.۳ تا ۵ ولت متصل بشود.

GND : این پایه زمین ماژول هست که به GND مدار وصل بشود.

D0 : این پایه هم خروجی دیجیتال ماژول تشخیص صدا هست.خروجی توی حالت عادی که هیچ صدایی نباشد روی HIGH هست به محض تشخیص صدا خروجی روی LOW تغییر حالت میدهد.

A0 : این پایه ،پایه خروجی آنالوگ در سنسور صدا KY-037 هستش که خروجی اون بر خلاف پایه D0 دیجیتال نسبت به تمام صداها فعال هست  و به محض تشخیص هر صدایی در محیط اطراف یک سیگنال آنالوگ رت بر روی پایه A0 میفرستد.

پیاده سازی عملی پروژه

مدار خود را با دقت مانند تصویر زیر ببندید.

کد های دستوری

ابتدا متغیر های مورد نیاز را اضافه میکنیم.

int sensor_value = 0;
int threshold = 400;
int abs_value = 0;
int ledCount = 10;
int bargraph[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

در تابع setup با استفاده از دو حلقه for ال ای دی ها را به عنوان خروجی تعریف کرده و آن ها را روی حالت LOW قرار میدهیم.

void setup()
{
    for (int i = 0; i <= ledCount; i++)
    {
        pinMode(bargraph[i], OUTPUT);
    }
    for (int i = 0; i <= 9; i++)
    {
        digitalWrite(i, LOW);
    }
}

در تابع loop مقدار دریافتی از سنسور را خوانده و چک میکنیم اگر لول LED از شماره آرایه کمتر باشد ال ای دی را روشن کند .

void loop()
{
    sensor_value = analogRead(A0);
    abs_value = abs(sensor_value - threshold);
    int ledLevel = map(abs_value, 0, (1024 - threshold), 0, ledCount);
    for (int i = 0; i < ledCount; i++)
    {

        if (i < ledLevel)
        {
            digitalWrite(bargraph[i], HIGH);
        }

        else
        {
            digitalWrite(bargraph[i], LOW);
        }
    }
}

کد کامل پروژه

int sensor_value = 0;
int threshold = 400;
int abs_value = 0;
int ledCount = 10;
int bargraph[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

void setup()
{
    for (int i = 0; i <= ledCount; i++)
    {
        pinMode(bargraph[i], OUTPUT);
    }
    for (int i = 0; i <= 9; i++)
    {
        digitalWrite(i, LOW);
    }
}

void loop()
{
    sensor_value = analogRead(A0);
    abs_value = abs(sensor_value - threshold);
    int ledLevel = map(abs_value, 0, (1024 - threshold), 0, ledCount);
    for (int i = 0; i < ledCount; i++)
    {

        if (i < ledLevel)
        {
            digitalWrite(bargraph[i], HIGH);
        }

        else
        {
            digitalWrite(bargraph[i], LOW);
        }
    }
}

پایان آموزش آردوینو ( قسمت هجدهم – رقص نور صوتی) 

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

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

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...