اگر میخواهید قدم به قدم راه اندازی ماژول میکروفن را با استفاده از آردوینو یاد بگیرید، این مقاله فرصت خوبی برای شما خواهد بود، زیرا بالاخره بهراحتی میتوانید یک گوش به پروژه خود اضافه کنید!!
سنسورهای صدا، ارزان قیمت هستند و بهراحتی میتوانند صدای افراد، دست زدن یا در زدن را تشخیص دهند. شما هم بهراحتی میتوانید از این سنسور در بسیاری از پروژههایی که در آنها باید با شنیدن صدا اتفاقی رخ دهد، استفاده کنید. به عنوان مثال میتوانید یک لامپ را با صدا کنترل کنید. این پروژه یعنی کنترل لامپ با صدا را نیز در انتهای مقاله همراه هم انجام خواهیم داد.
آیا میدانید میکروفنهای الکتریکی چگونه کار میکنند؟
اگر در مورد این موضوع اطلاعاتی ندارید، جالب است که بدانید داخل میکروفن یک خازن ظریف وجود دارد که یکی از صفحات آن دیافراگم نازک و صفحه دیگر آن، خازنی است که در نزدیکی دیافراگم و موازی با آن قرار گرفته است.
مروری بر سخت افزار
اکنون میخواهیم نگاهی به ماژول سنسور تشخیص صدا یا همان ماژول میکروفن مدل FC-04 داشته باشیم. این ماژول، برد کوچکی است که از یک میکروفن (50Hz-10kHz) و چند مدار پردازشگر برای تبدیل امواج صوتی به سیگنالهای الکتریکی تشکیل شده است.
این سیگنال الکتریکی از طریق یک مقایسه کننده دقیق on-board یعنی LM393 دیجیتالی شده و از طریق پایه OUT در دسترس قرار میگیرد.
بر روی این ماژول یک پتانسیومتر قرار دارد که حساسیت سیگنال OUT بهوسیله آن قابل تنظیم است.
شما میتوانید با استفاده از این پتانسیومتر، حد آستانه را تنظیم کنید. بنابراین، اگر دامنه صدا از حد آستانه بیشتر شود، خروجی ماژول LOW خواهد شد. در غیر این صورت، خروجی ماژول HIGH باقی میماند.
امکان تنظیم حساسیت خروجی بسیار مهم و کاربردی است، زیرا بهوسیله آن میتوان عملکردهای متفاوتی را با رسیدن صدا به آستانه مشخصی کنترل کرد. به عنوان مثال، هنگامیکه صدای مورد نظر شما بیشتر از حد آستانه شود (وقتی یک صدا شناسایی شد)، میتوانید یک رله را برای روشن کردن لامپ فعال کنید. حتما مفهموم این موضوع را متوجه شدید!
نکته:
این نکته را حتما به یاد داشته باشید که با چرخاندن پادساعتگرد پیچ پتانسیومتر، حساسیت افزایش مییابد و با چرخش ساعتگرد آن، حساسیت کاهش پیدا میکند.
علاوه بر این، ماژول سنسور تشخیص صدا، دارای دو عدد LED است. LED تغذیه با روشن کردن ماژول، روشن خواهد شد و LED وضعیت زمانیکه خروجی دیجیتال LOW میشود، روشن میگردد.
پایههای ماژول میکروفن FC-04
در تصویر زیر میتوانید پایههای این ماژول را مشاهده کنید. ماژول سنسور صدا تنها سه پایه دارد.
VCC : پایه تغذیه ماژول است. توصیه شده که تغذیه ماژول بین 5V – 3.3V باشد.
GND : پایه اتصال به زمین است.
OUT : این پایه خروجی در شرایط عادی HIGH است و وقتی صدا آشکارسازی شود، LOW خواهد شد. شما میتوانید این پایه را به پایه دیجیتال آردوینو متصل نمایید یا مستقیماً به رله 5V یا ادوات مشابه وصل کنید.
در بخش بعدی راه اندازی ماژول میکروفن با آردوینو را آغاز میکنیم.
سیمکشی – راه اندازی ماژول میکروفن با آردوینو
تا اینجا با ماژول میکروفن و پایههای آن آشنا شدید، به همین دلیل الان میتوانید اتصالات این ماژول به آردوینو را انجام دهید.
قطعات مورد نیاز:
- ماژول میکروفن FC-04
- ماژول آردوینو UNO R3 CH340G
- مینی برد بورد 170 سوراخ
سیمکشی این ماژول و آردوینو کار سادهای است. در ابتدا پایه VCC ماژول را به 5V آردوینو و پایه GND را به زمین متصل کنید. پس از آن، پایه OUT را به پایه دیجیتال #7 آردوینو متصل نمایید. کار شما تمام شد!
از تصویر زیر میتوانید برای سیمکشی کمک بگیرید:
کالیبره کردن سنسور تشخیص صدا (ماژول میکروفن)
برای اینکه دقت ماژول سنسور تشخیص صدای خود را بیشتر کنید، توصیه شده که در ابتدا آن را کالیبره نمایید.
این ماژول دارای یک پتانسیومتر برای کالیبره کردن خروجی دیجیتال (OUT) است. با چرخاندن پیچ پتانسیومتر میتوانید حد آستانه را تنظیم کنید. بنابراین، زمانیکه صدا از مقدار آستانه بیشتر شود، LED وضعیت روشن میشود و خروجی دیجیتال LOW خواهد شد.
برای کالیبره کردن سنسور، با دست خود در نزدیکی میکروفن، صدای دلخواهتان را ایجاد کنید و پتانسیومتر را طوری تنظیم نمایید که LED وضعیت بر روی ماژول در پاسخ به صدای دست، روشن شود. با این کار، سنسور شما کالیبره شده و آماده استفاده است.
تشخیص صدا – مثال مقدماتی برای راه اندازی ماژول میکروفن
بعد از سیمکشی و اتصال سنسور تشخیص صدا به آردوینو ، لازم است کدهای زیر را بر روی آردوینو بارگذاری کنید تا بتوانید کارهای مختلفی را با آن انجام دهید. نمونه کدی که در ادامه مشاهده میکنید، کف زدن و بشکن زدن را شناسایی میکند و پیام آن را بر روی سریال مانیتور چاپ میکند. این نمونه کد را بر روی آردوینو بارگذاری کنید و نتیجه آن را بررسی کنید. ما در بخش بعدی، عملکرد کدها را با جزییات بیشتری برای شما شرح خواهیم داد.
#define sensorPin 7
// Variable to store the time when last event happened
unsigned long lastEvent = 0;
void setup() {
pinMode(sensorPin, INPUT); // Set sensor pin as an INPUT
Serial.begin(9600);
}
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 > 25) {
Serial.println("Clap detected!");
}
// Remember when last event happened
lastEvent = millis();
}
}
اگر همه چیز به درستی انجام شده باشد، با شناسایی صدای دست، باید خروجی زیر را بر روی سریال مانیتور خود ببینید:
توضیحات کد:
دستوراتی که در بخش قبلی بارگذاری کردید، با معرفی پایه آردوینو که به پایه OUT سنسور متصل است، شروع میشود.
#define sensorPin 7
پس از معرفی پایه آردوینو، متغیری به نام lastEvent را تعریف میکنیم. این متغیر زمان تشخیص صدا را در خود ذخیره میکند و به ما کمک خواهد کرد تا صداهای مزاحمی که هدف ما نیستند، بر روی نتیجه تاثیر نگذارند.
unsigned long lastEvent = 0;
و اما در بخش SETUP، پایه سیگنال سنسور را به عنوان ورودی معرفی میکنیم. همچنین تنظیمات مانیتور سریال را انجام میدهیم.
pinMode(sensorPin, INPUT);
Serial.begin(9600);
در بخش Loop نیز، ابتدا خروجی دیجیتال سنسور را میخوانیم.
int sensorData = digitalRead(sensorPin);
زمانیکه صدا به اندازه کافی بلند و بیشتر از حد آستانه شود، توسط سنسور صدا شناسایی خواهد شد و خروجی آن LOW میشود. اما حتما باید مطمئن شویم که صدای شناسایی شده ناشی از دست زدن است و ناشی از نویزهای محیط نیست. بنابراین، ۲۵ میلی ثانیه صبر میکنیم. اگر خروجی برای ۲۵ میلی ثانیه در وضعیت LOW باقی ماند، مطمئن میشویم که صدای دست آشکارسازی شده است. برای این کار از تابع ()millis استفاده میکنیم که زمان را از لحظه شروع به میلی ثانیه برنامه برمیگرداند.
if (sensorData == LOW) {
if (millis() - lastEvent > 25) {
Serial.println("Clap detected!");
}
lastEvent = millis();
}
کنترل لامپ با صدا
در این پروژه میخواهیم تجهیزاتی را که از برق AC استفاده میکنند، از طریق صدای دست زدن روشن کنیم. به عنوان نمونه لامپ را با صدای دست کنترل خواهیم کرد. برای این کار از ماژول میکروفن برای تشخیص صدای کف زدن و ماژول رله 5 ولت برای کنترل تجهیزات AC استفاده میکنیم. اما علاوه بر این ماژول، به قطعات دیگری هم نیاز خواهید داشت.
قطعات مورد نیاز:
- ماژول رله 5 ولت 1 کانال
- ماژول رله 5 ولت 2 کانال
- لامپ ال ای دی 9 وات آفتابی
- دوشاخهی برق کلید دار
- سرپیچ لامپ معمولی استاندارد E27
اگر با ماژول رله آشنایی ندارید، آموزش زیر را مطالعه نمایید:
آشنایی با ماژول رله یک کاناله و راه اندازی آن با آردوینو
سیمکشی – کنترل لامپ با صدا
سیمکشی این پروژه هم مانند پروژه قبلی ساده است. اما قبل از شروع کار، نکته زیر را حتما مطالعه کنید.
هشدار!
در این پروژه ما با ولتاژ بالای AC سروکار داریم. بنابراین، هر نوع اتصال نادرست یا نامناسب میتواند منجر به آسیب جدی یا مرگ شود. پس در صورتیکه دانش و تجربه کافی در این زمینه ندارید، به هیچ وجه این کار را به تنهایی انجام ندهید و حتما از مشورت افراد با تجربه استفاده کنید.
اما اکنون به سیمکشی پروژه برمیگردیم.
در ابتدا، لازم است تغذیه ماژول میکروفن و ماژول رله را فراهم کنید. پایههای VCC را به پایه 5V آردوینو و GND را به زمین متصل کنید.
سپس، پایه خروجی (OUT) ماژول میکروفن را به پایه دیجیتال #7 آردوینو متصل کنید و پایه کنترل ماژول رله (IN) را به پایه دیجیتال #8 متصل نمایید.
برای اتصال لامپ به ماژول رله باید به این صورت عمل کنید:
در ابتدا نول را به طور مستقیم به مصرف کننده (لامپ) متصل کنید. سپس، فاز به پایه COM رله و پس از آن، از پایه NO به لامپ متصل نمایید. در این حالت هنگامیکه رله عمل کند، پایه COM به پایه NC متصل میشود و فاز به لامپ میرسد. در نهایت، لامپ روشن میشود. نحوه سیمکشی را میتوانید در تصویر زیر مشاهده کنید:
کد آردوینو
نمونه کدی که در این بخش میبینید، مربوط به کنترل تجهیزات (در اینجا لامپ) با صدای دست است.
#define sensorPin 7
#define relayPin 8
// Variable to store the time when last event happened
unsigned long lastEvent = 0;
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 > 25) {
//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);
عیب یابی در ماژول سنسور صدا
اگر سنسور شما عمکلرد نادرستی دارد، مراحل زیر را امتحان کنید:
- تغذیه را مجدداً چک نمایید. زیرا ماژول میکروفن یک مدار آنالوگ است و نسبت به نویز منبع تغذیه بسیار حساس است.
- میکروفن الکتریکی روی ماژول به لرزشهای مکانیکی و نویز باد حساس است. بنابراین، بهتر است آن را بر روی یک ماده ارتجاعی نصب نمایید تا ارتعاشات را جذب کند.
- محدوده سنجش این سنسور صدا بسیار کم است و احتمالاً 10 اینچ میباشد. بنابراین، شما باید منبع صدا را به میکروفن نزدیکتر کنید تا پاسخ خوبی دریافت کنید.
حرف آخر
اگر قدم به قدم پیش بروید، راه اندازی ماژول میکروفن با آردوینو دشوار نخواهد بود. همانطور که دیدید اتصالات این ماژول به آردوینو بسیار ساده است. علاوه بر این با بررسیهایی که در نمونه کدمان کردیم، دقیقا متوجه میشوید که چگونه سنسور صدا کار میکند. در نهایت پروژه کنترل لامپ با صدا را انجام دادیم تا بتوانید با استفاده از صدا دستگاههای دیگری را نیز کنترل کنید.
تا به حال با این سنسور کار کردهاید؟ اگر این اولین تجربه شما است و به کمی کمک نیاز دارید، میتوانید سوالات خود را با ما مطرح کنید.
۶ دیدگاه. Leave new
سلام.. ببخشید. من میخواستم که دستگاه صدای گریه نوزاد رو تشخیص بده و به صورت بیسیم به ویبراتوری که داخل دستبند جا سازی میشه منتقل بشه.. امکانش هست؟ ممنون میشم راهنمایی کنید.
سلام مجنبی عزیز،
برای تشخیص صدا از همین آموزش میتونید استفاده کنید. برای ارسال به صورت بیسیم باید از یک فرستنده بیسیم مثل ماژولهای بلوتوث یا وایفای استفاده کنید و
در دستبند هم با ماژول مشابهی سیگنال رو دریافت کنید و یک موتور ویبره کوچک رو روشن کنید.
سلام
ببخشید من میخواستم با صدای دلخواه خودم این کارو انجام بدم میشه بگید چجور باید صدامو داخل ماژول قرار بدم
ممنون میشم پاسخ بدین
سلام محمد امین عزیز،
با این ماژول صرفا میزان بلندی صدا قابل اندازهگیری هست.
برای کاربرد شما ماژولهای تشخیص گفتار (voice recognition یا speech recognition) مناسب هستند.
بسیار مفید بود ، ممنون .
فقط من نفهمیدم مقدار ۲۵ رو از چه طریقی به دست آوردن ؟
اگر بخواهیم به غیر از صدای دست صدایی دیگه ای ( ترجیحا ساده ، ماننده بشکن یا سوت ممتد ) رو تشخیص بدیم با تابع millis() امکان پذیر هست؟
سلام و درود به شما امیر عزیز
در پاسخ به سوال خوبتون باید گفت که این مقدار تجربی به دست اومده و میتونید با کم و زیاد کردن تاثیرش رو ببینید، مثلا میتونید اون رو ۱۰۰۰ قرار بدید تا سیستم فقط به صداهایی با مدت زمان حداقل ۱ ثانیه (مثل سوت ممتد) حساس باشه.
ممنونیم از همراهی شما 🙂