راه اندازی سنسور صدا | آمادهاید تا پروژه بعدی را ببینید؟ این سنسورهای صدا ارزان، ساده برای استفاده و قادر به تشخیص صدا، دستزدن یا ضربه به در هستند.
شما میتوانید از آنها در پروژههای مختلف واکنشپذیر به صدا استفاده کنید، مانند فعال کردن چراغها با دستزدن یا نظارت بر حیوانات خانگیتان در زمان غیبت. در ادامه با آموزشگاه رباتیک ایران همراه باشید.
آیا میدانید میکروفنهای الکترت چگونه کار میکنند؟
داخل یک میکروفن، یک دیافراگم نازک و یک صفحه پشتی وجود دارد. این دو بهطور جمعی به عنوان یک خازن عمل میکنند.
زمانی که شما در میکروفن صحبت میکنید، صدای شما امواج صوتی تولید میکند که به دیافراگم برخورد کرده و آن را به لرزه در میآورد.
زمانی که دیافراگم در پاسخ به صدا به لرزه درمیآید، صفحات به نزدیکتر یا دورتر حرکت میکنند که باعث تغییر ظرفیت خازن میشود. در نتیجه، ولتاژی در بین صفحات تولید میشود که میتوانیم آن را اندازهگیری کنیم تا شدت صدا را تعیین کنیم.
آموزش کامل راه اندازی سنسور صدا با آردوینو
مروری بر سختافزار سنسور صدا
سنسور صدا یک برد کوچک است که شامل یک میکروفن (۵۰Hz-10kHz) و مدار پردازشگر است که امواج صوتی را به یک سیگنال الکتریکی تبدیل میکند.
این سیگنال الکتریکی به مقایسهکننده دقیق LM393 روی برد ارسال میشود که آن را دیجیتالی کرده و در پین OUT در دسترس قرار میدهد.
این ماژول شامل یک پتانسیومتر برای تنظیم حساسیت سیگنال OUT است.
شما میتوانید از آن برای تعیین یک آستانه استفاده کنید، به طوری که زمانی که شدت صدا از آن آستانه فراتر رود، خروجی ماژول LOW باشد، در غیر این صورت HIGH خواهد بود.
این تنظیمات برای راهاندازی یک عمل در زمان رسیدن به آستانه مشخص بسیار مفید است. به عنوان مثال، زمانی که شدت صدا از یک آستانه فراتر میرود (ضربهای شناسایی میشود)، میتوانید یک رله را فعال کنید تا کنترل نور را به عهده بگیرد.
پتانسیومتر را به سمت چپ بچرخانید تا حساسیت افزایش یابد و به سمت راست بچرخانید تا کاهش یابد.
این ماژول همچنین شامل دو LED است. LED پاور زمانی که ماژول روشن است، روشن میشود و LED وضعیت زمانی که سطح صدا از مقدار آستانه فراتر رود، روشن میشود.
پینهای سنسور صدا
سنسور صدا تنها دارای سه پین است:
VCC برق مورد نیاز سنسور را تامین میکند. توصیه میشود سنسور با ولتاژ بین ۳.۳V تا ۵V تغذیه شود.
GND پین زمین است.
پین OUT در شرایط آرام HIGH و هنگام شناسایی صدا LOW را خروجی میدهد. شما میتوانید آن را به هر پین دیجیتال روی آردوینو یا به طور مستقیم به یک رله ۵V متصل کنید.
راه اندازی سنسور صدا با آردوینو
بیایید سنسور صدا را به آردوینو متصل کنیم.
اتصالات به نسبت ساده است. با متصل کردن پین VCC ماژول به پین ۵V آردوینو و پین GND به زمین شروع کنید.
در نهایت، پین OUT را به پین دیجیتال شماره ۸ آردوینو متصل کنید. همین!
اتصالات در تصویر زیر نشان داده شده است.
تنظیم آستانه
این ماژول دارای یک پتانسیومتر داخلی برای تنظیم آستانه سطح صدا است که بالاتر از آن، ماژول LOW خروجی میدهد و LED وضعیت روشن میشود.
حالا، برای تنظیم آستانه، انگشت خود را نزدیک میکروفن بزنید و پتانسیومتر را تنظیم کنید تا LED وضعیت ماژول در پاسخ به ضربات شما چشمک بزند.
این تمام ماجراست؛ ماژول شما اکنون آماده استفاده است.
راه اندازی سنسور صدا
مثال ۱ – تشخیص صدای پایه
مثال سادهای که در ادامه آمده است، تشخیص ضربهها یا صدای کلیک را انجام میدهد و پیامی را در مانیتور سری نمایش میدهد. میتوانید کد را امتحان کنید؛ ما بعداً به تفصیل به آن خواهیم پرداخت.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ |
#define sensorPin 8 // Variable to store the time when last event happened unsigned long lastEvent = ۰; void setup() { pinMode(sensorPin, INPUT); // Set sensor pin as an INPUT Serial.begin(۹۶۰۰); } void loop() { // Read Sound sensor int sensorData = digitalRead(sensorPin); // If pin goes LOW, sound is detected if (sensorData == LOW) { // If 25ms have passed since last LOW state, it means that // the clap is detected and not due to any spurious sounds if (millis() - lastEvent > ۲۵) { Serial.println("Clap detected!"); } // Remember when last event happened lastEvent = millis(); } } |
اگر همهچیز به درستی کار کند، باید خروجی زیر را در مانیتور سری زمانی که صدای کف زدن شناسایی شد، مشاهده کنید.
توضیح کد:
اسکچ با اعلام پین آردوینو که به پین OUT سنسور متصل است، شروع میشود.
۱ |
#define sensorPin 8 |
سپس، یک متغیر به نام lastEvent تعریف میکنیم که زمان آخرین شناسایی صدای کف زدن را ذخیره میکند. این متغیر به ما کمک میکند تا از شناسایی تصادفی صدا جلوگیری کنیم.
۱ ۲ |
unsigned long lastEvent = ۰; |
در بخش Setup، پین OUT سنسور را طوری تنظیم میکنیم که به عنوان یک ورودی عمل کند و ارتباط سریالی را برقرار میسازیم.
۱ ۲ |
pinMode(sensorPin, INPUT); Serial.begin(۹۶۰۰); |
در بخش loop، ابتدا خروجی سنسور را میخوانیم.
زمانی که سنسور صدایی با بلندی کافی برای عبور از آستانه شناسایی میکند، خروجی به LOW میرود. با این حال، باید مطمئن شویم که صدا ناشی از کف زدن است و نه از نویزهای پسزمینه. بنابراین، پس از اینکه خروجی به LOW رسید، ۲۵ میلیثانیه انتظار میکشیم. اگر خروجی به مدت بیش از ۲۵ میلیثانیه در حالت LOW باقی بماند، پیام “کف زدن شناسایی شد” در مانیتور سری چاپ میشود.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ |
int sensorData = digitalRead(sensorPin); if (sensorData == LOW) { // If 25ms have passed since last LOW state, it means that // the clap is detected and not due to any spurious sounds if (millis() - lastEvent > ۲۵) { Serial.println("Clap detected!"); } // Remember when last event happened lastEvent = millis(); } |
راه اندازی سنسور صدا
مثال ۲ – کنترل دستگاهها با یک کف زدن
برای پروژه بعدیمان، از سنسور صدا استفاده خواهیم کرد تا یک “کفزن” بسازیم که دستگاههای برقی AC را با یک کف زدن فعال میکند.
این پروژه دستگاههای برقی AC را با استفاده از ماژول رله یک کاناله کنترل میکند. اگر با ماژول رله آشنا نیستید، پیشنهاد میکنیم آموزش زیر را مطالعه کنید.
هشدار: این برد با ولتاژ AC بالا کار میکند. استفاده نادرست یا نادرست از آن میتواند منجر به آسیب جدی یا مرگ شود. بنابراین، این پروژه برای افرادی که با ولتاژ AC بالا آشنا و دارای دانش کافی هستند، طراحی شده است.
بیایید با تأمین برق برای سنسور و ماژول رله شروع کنیم. پینهای VCC آنها را به پین ۵ ولت آردوینو و GND را به زمین متصل کنید.
پین خروجی سنسور صدا (OUT) را به پین دیجیتال شماره ۷ آردوینو و پین کنترل ماژول رله (IN) را به پین دیجیتال شماره ۸ متصل کنید.
شما همچنین باید ماژول رله را به دستگاه برقی AC که میخواهید کنترل کنید، متصل کنید. باید خط متناوب زنده را قطع کرده و یک سر سیم بریده شده (که از دیوار میآید) را به COM و سر دیگر را به NO متصل کنید.
نقشهکشی در زیر نشان داده شده است.
کد آردوینو راه اندازی سنسور صدا
در اینجا کد برای کنترل دستگاهها با یک کف زدن ارائه شده است.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ |
#define sensorPin 7 #define relayPin 8 // Variable to store the time when last event happened unsigned long lastEvent = ۰; boolean relayState = false; // Variable to store the state of relay void setup() { pinMode(relayPin, OUTPUT); // Set relay pin as an OUTPUT pin pinMode(sensorPin, INPUT); // Set sensor pin as an INPUT } void loop() { // Read Sound sensor int sensorData = digitalRead(sensorPin); // If pin goes LOW, sound is detected if (sensorData == LOW) { // If 25ms have passed since last LOW state, it means that // the clap is detected and not due to any spurious sounds if (millis() - lastEvent > ۲۵) { //toggle relay and set the output relayState = !relayState; digitalWrite(relayPin, relayState ? HIGH : LOW); } // Remember when last event happened lastEvent = millis(); } } |
زمانی که کارتان تمام شد، سنسور باید هر بار که شما کف میزنید، دستگاه را روشن یا خاموش کند.**
توضیح کد:
اگر این کد را با کد قبلی ما مقایسه کنید، متوجه شباهتهای زیادی خواهید شد، با چند تفاوت.
در ابتدا، ما پین آردوینو را که به پین کنترل رله (IN) متصل است، اعلام میکنیم. علاوه بر این، یک متغیر جدید به نام `relayState` تعریف کردهایم تا وضعیت رله را پیگیری کنیم.
۱ ۲ ۳ |
#define relayPin 7 boolean relayState = false; |
در قسمت Setup، ما پین relayPin را به عنوان یک خروجی تنظیم میکنیم.
۱ |
pinMode(relayPin, OUTPUT); |
زمانی که صدای کف زدن را شناسایی میکنیم، به جای چاپ پیام در مانیتور سریال، به سادگی وضعیت رله را تغییر میدهیم.
۱ ۲ |
relayState = !relayState; digitalWrite(relayPin, relayState ? HIGH : LOW); |
عیبیابی
اگر سنسور صدا به درستی کار نمیکند، مراحل زیر را امتحان کنید:
۱. اطمینان از تمیزی منبع تغذیه: زیرا سنسور صدا یک مدار آنالوگ است، به نویز منبع تغذیه حساستر است.
۲. حساسیت به لرزشهای مکانیکی و نویز باد: نصب سنسور بر روی یک سطح محکم میتواند به کاهش برخی از این لرزشها کمک کند.
۳. محدوده شناسایی کوتاه: این سنسور صدا دارای یک محدوده شناسایی بسیار کوتاه است، احتمالاً فقط ۱۰ اینچ، بنابراین باید برای دریافت یک خوانش قابل اعتماد، صدا را بسیار نزدیکتر به آن ایجاد کنید.
شعبه بابل: پل کارگر به سمت کشوری، روبروی ماکروویو، جنب فروشگاه جانبو
موبایل: ۰۹۱۱۹۵۱۴۸۸۲
شعبه ساری: خیابان مهدیه، نبش بهمن شرقی