بشکن بزن، لامپ روشن کن! ساخت کلید صوتی با آردوینو
تصور کنید بدون کلید، ریموت یا حتی گوشی بتوانید فقط با دست زدن یک لامپ را روشن و خاموش کنید. در این پروژه دقیقاً همین کار را با استفاده از Arduino UNO، سنسور صدا و ماژول رله انجام میدهیم.
سنسور صدا ضربه صوتی ناشی از دست زدن را تشخیص میدهد، آردوینو سیگنال سنسور را پردازش میکند و در نهایت با فرمان به رله، وضعیت لامپ تغییر میکند. در ادامه علاوه بر ساخت مدار، منطق برنامه، کد آردوینو، تنظیم حساسیت سنسور و خطاهای رایج این پروژه را بررسی میکنیم.
⚡ این پروژه دقیقاً چه کاری انجام میدهد؟
در این مدار، ماژول میکروفن صدای دست زدن را تشخیص میدهد و یک سیگنال به Arduino UNO میفرستد. آردوینو پس از تشخیص الگوی تعیینشده، خروجی متصل به ماژول رله را تغییر میدهد و رله لامپ را روشن یا خاموش میکند.
برای ساخت کلید صوتی با آردوینو به چه قطعاتی نیاز داریم؟
در ویدئو برای اجرای پروژه از یک مدار نسبتاً ساده استفاده شده است. قطعات اصلی شامل Arduino UNO، ماژول تشخیص صدا، رله تککانال و سیمهای اتصال هستند.
| قطعه | وظیفه در مدار |
|---|---|
| Arduino UNO | پردازش سیگنال سنسور و کنترل رله |
| ماژول سنسور صدا / میکروفن | تشخیص صدای دست زدن |
| ماژول رله تککانال | قطع و وصل بار توسط فرمان آردوینو |
| بردبورد | مونتاژ آزمایشی مدار بدون لحیمکاری |
| سیم جامپر | اتصال ماژولها به Arduino |
| لامپ | بار خروجی برای نمایش عملکرد پروژه |
🛒 برد آردوینو برای ساخت پروژه میخواهید؟
برای مشاهده مدلهای موجود و انتخاب برد مناسب پروژه، میتوانید انواع بردهای آردوینو را در فروشگاه بررسی کنید.
مدار روشن کردن لامپ با دست زدن چطور کار میکند؟
منطق پروژه را میتوان به سه مرحله تقسیم کرد: شنیدن، پردازش و اجرا.
در مرحله اول، میکروفن موجود روی ماژول سنسور صدا تغییرات صوتی محیط را دریافت میکند. مدار روی ماژول میتواند افزایش لحظهای شدت صدا را تشخیص دهد و خروجی خود را تغییر دهد.
در مرحله دوم، Arduino وضعیت خروجی سنسور را میخواند. برنامه باید تشخیص دهد که آیا صدای دریافتشده همان الگوی موردنظر ما بوده است یا خیر.
در مرحله آخر، آردوینو وضعیت پایه متصل به ماژول رله را تغییر میدهد. رله نیز مانند یک کلید الکتریکی عمل میکند و مسیر بار را قطع یا وصل میکند.
←
🎤 سنسور صدا
←
🧠 Arduino UNO
←
⚡ رله
←
💡 لامپ
سنسور صدا چگونه دست زدن را تشخیص میدهد؟
روی ماژول مورد استفاده در پروژه یک میکروفن الکترت و مدار تشخیص سطح صدا وجود دارد. وقتی دست میزنیم، یک تغییر سریع در فشار صوتی ایجاد میشود و میکروفن آن را به سیگنال الکتریکی تبدیل میکند.
در بسیاری از ماژولهای رایج سنسور صدا، یک پتانسیومتر نیز وجود دارد که میتوان با آن آستانه حساسیت خروجی دیجیتال را تنظیم کرد. بنابراین اگر سنسور با صداهای معمولی محیط فعال میشود یا برعکس صدای دست زدن را تشخیص نمیدهد، باید حساسیت آن را تنظیم کنید.
🎤 یک نکته مهم درباره سنسور صدا
این مدار واقعاً مفهوم «دست زدن» را نمیفهمد؛ سنسور افزایش شدت صدا را تشخیص میدهد و آردوینو براساس زمانبندی پالسهای دریافتی تصمیم میگیرد. بنابراین صدای ضربه، افتادن جسم یا صدای بلند دیگر نیز ممکن است سنسور را تحریک کند.
نحوه اتصال سنسور صدا به Arduino UNO
در این پروژه باید تغذیه سنسور و خروجی آن را به Arduino متصل کنیم. اگر از خروجی دیجیتال ماژول استفاده میکنید، سیمبندی کلی به شکل زیر خواهد بود:
| پایه سنسور صدا | اتصال به Arduino UNO |
|---|---|
| VCC / + | 5V |
| GND / – | GND |
| Digital OUT | پایه دیجیتال تعریفشده در برنامه؛ در این آموزش D2 |
نحوه اتصال ماژول رله به آردوینو
ماژول رله نیز معمولاً دارای پایه تغذیه، زمین و ورودی فرمان است. در مدار این آموزش، ورودی فرمان رله را به پایه 13 آردوینو متصل میکنیم.
| پایه ماژول رله | اتصال |
|---|---|
| VCC | 5V متناسب با مشخصات ماژول |
| GND | GND آردوینو |
| IN | Digital Pin 13 |
🔎 اگر رله برعکس کار کرد، مدار خراب نیست!
بعضی ماژولهای رله Active LOW هستند؛ یعنی با LOW فعال و با HIGH غیرفعال میشوند. اگر وضعیت روشن و خاموش در مدار شما برعکس شد، ابتدا نوع Trigger ماژول رله را بررسی کنید.
دو بار دست زدن چگونه تشخیص داده میشود؟
اگر قرار باشد هر صدای لحظهای وضعیت لامپ را تغییر دهد، مدار در محیط واقعی چندان قابل اعتماد نخواهد بود. راه بهتر این است که برنامه یک الگوی مشخص مانند دو ضربه صوتی در یک بازه زمانی مشخص را تشخیص دهد.
پس از دریافت ضربه اول، Arduino یک بازه زمانی کوتاه برای دریافت ضربه دوم در نظر میگیرد. اگر ضربه دوم در محدوده تعیینشده دریافت شود، برنامه آن را بهعنوان فرمان معتبر در نظر میگیرد و وضعیت رله را Toggle میکند.
Toggle یعنی اگر رله خاموش بوده روشن شود و اگر روشن بوده خاموش شود.
کد آردوینو برای روشن و خاموش کردن لامپ با دو بار دست زدن
در این نسخه، سنسور صدا به پایه 2 و ماژول رله به پایه 13 متصل میشود. برای جلوگیری از ثبت چند پالس ناشی از یک ضربه، یک زمان قفل کوتاه نیز در برنامه در نظر گرفتهایم.
const byte soundPin = 2;
const byte relayPin = 13;
bool relayState = false;
byte clapCount = 0;
unsigned long firstClapTime = 0;
unsigned long lastTriggerTime = 0;
const unsigned long minClapGap = 120;
const unsigned long maxClapGap = 700;
const unsigned long lockoutTime = 100;
void setRelay(bool state) {
relayState = state;
// برای رله Active HIGH:
digitalWrite(relayPin, relayState ? HIGH : LOW);
// اگر ماژول شما Active LOW است،
// HIGH و LOW خط بالا را برعکس کنید.
}
void setup() {
pinMode(soundPin, INPUT);
pinMode(relayPin, OUTPUT);
setRelay(false);
}
void loop() {
bool soundDetected = digitalRead(soundPin);
if (soundDetected &&
millis() - lastTriggerTime > lockoutTime) {
lastTriggerTime = millis();
if (clapCount == 0) {
clapCount = 1;
firstClapTime = millis();
} else {
unsigned long gap = millis() - firstClapTime;
if (gap >= minClapGap && gap <= maxClapGap) { setRelay(!relayState); clapCount = 0; } else { clapCount = 1; firstClapTime = millis(); } } } if (clapCount == 1 && millis() - firstClapTime > maxClapGap) {
clapCount = 0;
}
}
کد پروژه چه کاری انجام میدهد؟
ابتدا پایه 2 بهعنوان ورودی سنسور و پایه 13 بهعنوان خروجی رله تعریف میشود. متغیر relayState وضعیت فعلی لامپ را نگه میدارد.
با دریافت اولین پالس صوتی، برنامه زمان آن را ذخیره میکند. اگر پالس دوم در محدوده minClapGap تا maxClapGap دریافت شود، وضعیت رله معکوس میشود.
متغیر lockoutTime نیز کمک میکند یک ضربه صوتی به دلیل لرزش یا چند تغییر سریع خروجی سنسور، چند بار ثبت نشود.
چطور حساسیت سنسور میکروفن را تنظیم کنیم؟
اگر ماژول شما پتانسیومتر تنظیم حساسیت دارد، این مرحله تأثیر زیادی روی عملکرد پروژه دارد.
ابتدا مدار را در همان محیطی قرار دهید که قرار است استفاده شود. سپس حساسیت را طوری تنظیم کنید که صحبت معمولی یا نویز محیط باعث Trigger شدن مداوم سنسور نشود، اما یک دست زدن واضح در فاصله موردنظر تشخیص داده شود.
🎯 تنظیم خوب یعنی چه؟
بیشترین حساسیت الزاماً بهترین تنظیم نیست. اگر حساسیت بیش از حد بالا باشد، صحبت کردن، صدای میز یا حتی نویز محیط میتواند بهعنوان فرمان شناسایی شود. هدف، پیدا کردن آستانهای است که صدای دست زدن را مطمئن تشخیص دهد و نویزهای عادی را تا حد امکان نادیده بگیرد.
چرا سنسور صدا با یک دست زدن چند بار فرمان میدهد؟
یک صدای دست زدن در دنیای واقعی یک پالس دیجیتال کاملاً تمیز نیست. شکل موج صوتی و عملکرد Comparator ماژول ممکن است چند تغییر سریع در خروجی ایجاد کند.
به همین دلیل اگر بدون فیلتر زمانی خروجی را مستقیماً بخوانیم، برنامه ممکن است یک دست زدن را چند رویداد جداگانه تشخیص دهد. استفاده از Lockout، Debounce زمانی یا تحلیل دقیقتر سیگنال این مشکل را کاهش میدهد.
اگر پروژه کار نکرد چه چیزهایی را بررسی کنیم؟
| مشکل | احتمال و راهحل |
|---|---|
| سنسور هیچ واکنشی ندارد | VCC و GND، پایه خروجی و تنظیم حساسیت را بررسی کنید. |
| سنسور دائماً فعال است | حساسیت بیش از حد بالاست یا محیط نویز صوتی زیادی دارد. |
| رله روشن نمیشود | تغذیه، پایه IN، نوع Active HIGH/LOW و اتصال زمین مشترک را بررسی کنید. |
| با یک دست زدن چند بار تغییر وضعیت میدهد | زمان Lockout یا الگوریتم فیلتر پالسها را اصلاح کنید. |
| دو دست زدن تشخیص داده نمیشود | بازه minClapGap و maxClapGap را با سرعت دست زدن خود تنظیم کنید. |
| رله برعکس عمل میکند | احتمالاً ماژول Active LOW است؛ منطق HIGH و LOW را در برنامه معکوس کنید. |
اتصال لامپ به رله؛ قسمت مهمی که نباید سرسری انجام شود
در سمت فرمان، Arduino فقط ورودی ماژول رله را کنترل میکند. اما در سمت کنتاکت، رله دارای ترمینالهایی مانند COM، NO و NC است.
برای حالتی که لامپ در حالت عادی خاموش باشد و فقط پس از فرمان روشن شود، معمولاً از COM و NO استفاده میشود. اگر بخواهیم بار در حالت عادی وصل باشد، NC کاربرد پیدا میکند.
⚠️ هشدار جدی درباره برق ۲۲۰ ولت
بخش Arduino و سنسور پروژه ولتاژ پایین دارد، اما اگر کنتاکت رله را به برق شهر و لامپ ۲۲۰ ولت متصل کنید، با ولتاژ خطرناک سروکار دارید. مدار برق شهر را روی بردبورد معمولی اجرا نکنید و سیم یا ترمینال بدون عایق را در دسترس قرار ندهید. اگر تجربه کار با برق شهر ندارید، تست اولیه پروژه را با یک بار کمولتاژ انجام دهید و اجرای بخش ۲۲۰ ولت را به فرد دارای مهارت لازم بسپارید.
رله چرا برای این پروژه استفاده شده است؟
پایه GPIO آردوینو برای کنترل مستقیم بارهایی مانند لامپ طراحی نشده است. رله به آردوینو اجازه میدهد با یک سیگنال کنترلی کمتوان، یک مدار بار جداگانه را قطع و وصل کند.
البته باید مشخصات کنتاکت رله، ولتاژ و جریان بار و نوع بار را بررسی کرد. عدد چاپشده روی رله را نباید بدون توجه به شرایط واقعی و دیتاشیت، برای هر نوع بار یکسان فرض کرد.
🔌 رله دقیقاً چطور کار میکند؟
اگر تفاوت COM، NO و NC یا نحوه عملکرد بوبین و کنتاکت رله برایتان مبهم است، قبل از اتصال بار بخش آموزش رله را مطالعه کنید.
چطور پروژه را حرفهایتر کنیم؟
نسخه ویدئو یک پروژه آموزشی ساده و جذاب است، اما برای استفاده واقعی میتوان آن را توسعه داد. برای مثال میتوان مدتزمان بین دو دست زدن را دقیقتر تنظیم کرد، تعداد ضربهها را برای فرمانهای مختلف تغییر داد یا وضعیت لامپ را در EEPROM ذخیره کرد تا پس از قطع و وصل برق حفظ شود.
اگر تشخیص صوتی دقیقتری نیاز دارید، بهجای تکیه صرف بر خروجی دیجیتال Comparator میتوان سیگنال صوتی را با روش مناسب نمونهبرداری و پردازش کرد. البته این کار پیچیدگی برنامه و سختافزار را افزایش میدهد.
🛒 میخواهید این پروژه را خودتان بسازید؟
برای ساخت این مدار به برد آردوینو، سنسور صدا، رله و سیمهای اتصال نیاز دارید. قبل از سفارش، مشخصات هر قطعه را با مدار خود تطبیق دهید.
🤖 برای خرید برد آردوینو
مدلهای مختلف برد Arduino را بررسی کنید و براساس تعداد ورودی و خروجی، امکانات برد و نیاز پروژه، گزینه مناسب را انتخاب کنید.
سوالات متداول
آیا با هر ماژول سنسور صدایی میتوان این پروژه را ساخت؟
بسیاری از ماژولهای دارای خروجی دیجیتال قابل استفادهاند، اما نوع خروجی، منطق HIGH/LOW، ولتاژ کاری و روش تنظیم حساسیت ممکن است متفاوت باشد. قبل از سیمبندی، مشخصات ماژول خود را بررسی کنید.
چرا لامپ با صداهای دیگر هم روشن میشود؟
ماژول ساده میکروفن نوع صدا را تشخیص نمیدهد؛ فقط تغییر شدت صوت را دریافت میکند. استفاده از الگوی دو ضربهای و تنظیم صحیح حساسیت احتمال فرمانهای ناخواسته را کمتر میکند، اما آن را به سیستم تشخیص صدای هوشمند تبدیل نمیکند.
آیا میتوان بهجای لامپ وسیله دیگری را کنترل کرد؟
از نظر منطقی بله، اما باید ولتاژ، جریان، نوع بار و ظرفیت واقعی کنتاکت رله را بررسی کنید. برای بارهای القایی و بارهای پرتوان ملاحظات حفاظتی بیشتری لازم است.
💡 یه ترفند بهتر برای این پروژه بلدی؟
اگر این مدار را ساختهای یا برای تشخیص دقیقتر دست زدن، کاهش نویز سنسور یا کنترل بهتر رله ترفندی داری که فکر میکنی به بقیه هم کمک میکند، پایین همین مقاله در بخش نظرات بنویس. تجربه عملی شما میتواند نسخه بعدی این پروژه را بهتر کند.
جمعبندی
در این پروژه با استفاده از Arduino UNO، ماژول سنسور صدا و رله تککانال یک کلید صوتی ساختیم که میتواند با تشخیص دست زدن، وضعیت لامپ را تغییر دهد.
ظاهر پروژه ساده است، اما چند مفهوم مهم الکترونیک و برنامهنویسی را همزمان آموزش میدهد: خواندن ورودی دیجیتال، تشخیص رویداد در یک بازه زمانی، Toggle کردن خروجی، کنترل رله و جداسازی بخش کنترلی از بار.
برای عملکرد بهتر مدار نیز باید حساسیت سنسور، فاصله زمانی بین دو ضربه، نویز محیط و Active HIGH یا Active LOW بودن رله را متناسب با سختافزار واقعی تنظیم کنید.







