ماژول سنسور صدا
(Microphone Sound Sensor Module)
تشخیص هوشمند صدا و سطح شدت صوت با تنظیم حساسیت
ماژول سنسور صدا یک راهحل کامل و مقرونبهصرفه برای تشخیص صدا، اندازهگیری سطح شدت صوت و فعالسازی دستگاهها با محرک صوتی است. این ماژول با استفاده از یک میکروفون الکترت و مدار پردازشگر داخلی، امکان تشخیص صداهای محیط و واکنش به آنها را فراهم میکند. محصولی ایدهآل برای پروژههای خانه هوشمند، امنیتی، کنترلی و تعاملی.
ویژگیهای کلیدی
-
حساسیت قابل تنظیم: مجهز به پتانسیومتر برای تنظیم دقیق آستانه حساسیت
-
خروجی دوگانه: هم خروجی دیجیتال (تشخیص ساده صدا) و هم خروجی آنالوگ (اندازهگیری دقیق سطح صوت)
-
میکروفون با کیفیت: میکروفون الکترت با پاسخ فرکانسی گسترده
-
LED نشانگر وضعیت: LED قرمز برای نمایش لحظهای تشخیص صدا
-
نویزگیری پیشرفته: فیلترهای سختافزاری برای حذف نویزهای محیطی
-
نصب سریع: اتصال آسان با کانکتور 3 پین استاندارد
-
قیمت اقتصادی: مناسب برای پروژههای دانشجویی و صنعتی
مشخصات فنی
-
ولتاژ کاری: 3.3V – 5V DC (سازگار کامل با آردوینو و رزبریپای)
-
جریان مصرف: 4mA (تیپیکال)
-
فرکانس کاری: 50Hz – 20kHz
-
حساسیت میکروفون: -46dB (در 1kHz)
-
امپدانس خروجی: 2.2kΩ
-
خروجی دیجیتال: TTL سطح – LOW هنگام تشخیص صدا
-
خروجی آنالوگ: 0-5V (متناسب با سطح صوت)
-
دمای کاری: -40°C تا +85°C
-
ابعاد PCB: 32mm × 14mm
-
وزن: حدود 3 گرم
کاربردهای عملی
-
سیستمهای کلپروش (کنترل روشنایی با کفزدن)
-
هشداردهنده نویز برای محیطهای اداری و کتابخانهها
-
تشخیص گریه نوزاد و فعالسازی دستگاههای آرامکننده
-
سیستم امنیتی صوتی برای تشخیص صداهای شکستن شیشه
-
دستگاههای کنترلی صوتی برای افراد دارای معلولیت
-
پروژههای رباتیک تعاملی با قابلیت واکنش به صدا
-
مانیتورینگ سطح نویز در محیطهای صنعتی
-
دستگاههای ضبط فعالشونده با صدا (VAS)
پینها و اتصالات
ماژول سنسور صدا → آردوینو --------------------------------- VCC → 5V یا 3.3V GND → GND DO → پایه دیجیتال (مثلاً D2) برای تشخیص صدا AO → پایه آنالوگ (مثلاً A0) برای سطح شدت صوت
راهنمای تنظیم حساسیت
-
تنظیم اولیه: پتانسیومتر روی ماژول را در وسط قرار دهید
-
تست در محیط: در محیط عادی کار، LED ماژول باید خاموش باشد
-
تنظیم دقیق: صدا ایجاد کنید و پتانسیومتر را تنظیم کنید تا LED فقط در صداهای موردنظر روشن شود
-
تأیید نهایی: با صداهای مختلف تست کنید تا از تنظیم صحیح اطمینان یابید
کد پایه آردوینو (تشخیص ساده صدا)
/* * کد پایه برای تشخیص صدا با خروجی دیجیتال * اتصال: پایه DO ماژول به D2 آردوینو */ const int soundSensorPin = 2; // پایه اتصال سنسور const int ledPin = 13; // LED داخلی آردوینو const int buzzerPin = 8; // بوق هشدار (اختیاری) int sensorState = 0; // وضعیت فعلی سنسور int lastState = 0; // وضعیت قبلی سنسور int soundCount = 0; // شمارنده صداها void setup() { Serial.begin(9600); pinMode(soundSensorPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(buzzerPin, OUTPUT); Serial.println("=================================="); Serial.println(" Sound Sensor Basic Test"); Serial.println("=================================="); Serial.println("Listening for sounds..."); Serial.println(); } void loop() { // خواندن وضعیت سنسور // توجه: در اکثر ماژولها، تشخیص صدا = LOW sensorState = digitalRead(soundSensorPin); // تشخیص شروع صدا if (sensorState == LOW && lastState == HIGH) { soundCount++; digitalWrite(ledPin, HIGH); Serial.print("Sound #"); Serial.print(soundCount); Serial.print(" detected at "); Serial.print(millis() / 1000.0, 2); Serial.println(" seconds"); // فعال کردن بوق به مدت کوتاه tone(buzzerPin, 1500, 200); } // تشخیص پایان صدا if (sensorState == HIGH && lastState == LOW) { digitalWrite(ledPin, LOW); Serial.println(" Sound ended"); Serial.println("------------------"); } // ذخیره وضعیت برای چرخه بعد lastState = sensorState; delay(10); // تأخیر کوتاه برای پایداری }
کد پیشرفته (اندازهگیری شدت صوت)
/* * اندازهگیری و نمایش سطح شدت صوت * اتصال: پایه AO ماژول به A0 آردوینو */ const int analogPin = A0; // پایه آنالوگ سنسور const int sampleWindow = 50; // پنجره نمونهبرداری (ms) const int redLed = 11; // LED قرمز برای سطح بالا const int yellowLed = 12; // LED زرد برای سطح متوسط const int greenLed = 13; // LED سبز برای سطح پایین // آستانههای سطح صوت (بر اساس کالیبراسیون تنظیم شود) const int quietThreshold = 50; const int normalThreshold = 150; const int loudThreshold = 300; const int veryLoudThreshold = 500; // متغیرهای آماری float maxLevel = 0; float minLevel = 1024; float longTermAvg = 0; int sampleCount = 0; void setup() { Serial.begin(9600); pinMode(redLed, OUTPUT); pinMode(yellowLed, OUTPUT); pinMode(greenLed, OUTPUT); // خاموش کردن همه LEDها digitalWrite(redLed, LOW); digitalWrite(yellowLed, LOW); digitalWrite(greenLed, LOW); Serial.println("======================================="); Serial.println(" Sound Intensity Measurement"); Serial.println("======================================="); Serial.println("Time\tLevel\tMin\tMax\tAvg\tStatus"); Serial.println("-----\t-----\t---\t---\t---\t------"); } void loop() { unsigned long startTime = millis(); unsigned int peakToPeak = 0; unsigned int signalMax = 0; unsigned int signalMin = 1024; // جمعآوری نمونهها در طول پنجره زمانی while (millis() - startTime < sampleWindow) { int sample = analogRead(analogPin); if (sample < 1024) { // حذف مقادیر نامعتبر if (sample > signalMax) { signalMax = sample; } if (sample < signalMin) { signalMin = sample; } } } // محاسبه دامنه peakToPeak = signalMax - signalMin; // بهروزرسانی آمار if (peakToPeak > maxLevel) maxLevel = peakToPeak; if (peakToPeak < minLevel) minLevel = peakToPeak; // محاسبه میانگین بلندمدت longTermAvg = (longTermAvg * sampleCount + peakToPeak) / (sampleCount + 1); if (sampleCount < 10000) sampleCount++; // نمایش نتایج Serial.print(millis() / 1000.0, 1); Serial.print("\t"); Serial.print(peakToPeak); Serial.print("\t"); Serial.print(minLevel); Serial.print("\t"); Serial.print(maxLevel); Serial.print("\t"); Serial.print(longTermAvg, 0); Serial.print("\t"); // کنترل LEDها بر اساس سطح صوت digitalWrite(greenLed, LOW); digitalWrite(yellowLed, LOW); digitalWrite(redLed, LOW); if (peakToPeak < quietThreshold) { Serial.println("Quiet"); digitalWrite(greenLed, HIGH); } else if (peakToPeak < normalThreshold) { Serial.println("Normal"); digitalWrite(greenLed, HIGH); digitalWrite(yellowLed, HIGH); } else if (peakToPeak < loudThreshold) { Serial.println("Loud"); digitalWrite(yellowLed, HIGH); } else if (peakToPeak < veryLoudThreshold) { Serial.println("Very Loud"); digitalWrite(yellowLed, HIGH); digitalWrite(redLed, HIGH); } else { Serial.println("DANGER - Too Loud!"); // چشمک زدن LED قرمز digitalWrite(redLed, HIGH); delay(100); digitalWrite(redLed, LOW); } delay(100); // تأخیر بین اندازهگیریها }
کد عملی: سیستم کلپروش (کنترل لامپ با کفزدن)
/* * سیستم کنترل لامپ با تشخیص الگوی کفزدن * نیاز به 2 کف متوالی با فاصله مشخص */ const int soundDigitalPin = 2; const int soundAnalogPin = A0; const int relayPin = 7; // کنترل رله لامپ const int statusLed = 13; // LED وضعیت // تنظیمات تشخیص کفزدن const int clapThreshold = 400; // آستانه تشخیص کف const unsigned long clapTimeout = 2000; // زمانات الگو const unsigned long clapGapMin = 200; // حداقل فاصله بین کفها const unsigned long clapGapMax = 800; // حداکثر فاصله بین کفها // متغیرهای تشخیص الگو int clapCount = 0; unsigned long firstClapTime = 0; unsigned long lastClapTime = 0; bool lightOn = false; // وضعیت لامپ void setup() { Serial.begin(9600); pinMode(soundDigitalPin, INPUT); pinMode(relayPin, OUTPUT); pinMode(statusLed, OUTPUT); // لامپ ابتدا خاموش است digitalWrite(relayPin, LOW); digitalWrite(statusLed, LOW); Serial.println("=================================="); Serial.println(" Clap-Controlled Light System"); Serial.println("=================================="); Serial.println("Clap twice quickly to toggle light"); Serial.println(); } void loop() { int analogValue = analogRead(soundAnalogPin); // تشخیص کفزدن (مقدار آنالوگ از آستانه بیشتر شود) if (analogValue > clapThreshold) { unsigned long currentTime = millis(); unsigned long timeSinceLastClap = currentTime - lastClapTime; // بررسی Debouncing delay(50); // تأخیر برای رد کردن نویزهای کوتاه int confirmValue = analogRead(soundAnalogPin); if (confirmValue > clapThreshold) { // کف معتبر تشخیص داده شد if (clapCount == 0) { // اولین کف clapCount = 1; firstClapTime = currentTime; lastClapTime = currentTime; Serial.println("Clap 1 detected"); blinkLed(1); } else if (timeSinceLastClap > clapGapMin && timeSinceLastClap < clapGapMax) { // کف دوم در محدوده زمانی مناسب clapCount++; lastClapTime = currentTime; Serial.print("Clap "); Serial.print(clapCount); Serial.println(" detected"); blinkLed(clapCount); } else { // فاصله زمانی نامناسب - ریست شمارنده clapCount = 0; Serial.println("Invalid clap interval - Reset"); } } // تأخیر برای جلوگیری از تشخیص چندگانه delay(200); } // بررسی زمانات و کامل بودن الگو if (clapCount > 0) { unsigned long currentTime = millis(); // بررسی زمانات if (currentTime - firstClapTime > clapTimeout) { Serial.println("Pattern timeout"); clapCount = 0; } // اگر 2 کف با فاصله مناسب تشخیص داده شد if (clapCount >= 2) { // تغییر وضعیت لامپ lightOn = !lightOn; digitalWrite(relayPin, lightOn ? HIGH : LOW); Serial.print("Light turned "); Serial.println(lightOn ? "ON" : "OFF"); Serial.println("--------------------"); // نمایش وضعیت با LED digitalWrite(statusLed, lightOn); // ریست برای تشخیص بعدی clapCount = 0; // تأخیر برای جلوگیری از تشخیص ناخواسته delay(1000); } } // نمایش دورهای سطح صدا (برای تنظیم آستانه) static unsigned long lastDisplay = 0; if (millis() - lastDisplay > 5000) { Serial.print("Current sound level: "); Serial.println(analogRead(soundAnalogPin)); lastDisplay = millis(); } } // تابع برای چشمک زدن LED به تعداد مشخص void blinkLed(int times) { for (int i = 0; i < times; i++) { digitalWrite(statusLed, HIGH); delay(100); digitalWrite(statusLed, LOW); if (i < times - 1) delay(100); } }
کد تشخیص نویز غیرعادی (سیستم امنیتی)
/* * سیستم تشخیص نویز غیرعادی برای امنیت * هشدار در صورت وجود صداهای بلند ناگهانی */ const int soundAnalogPin = A0; const int alarmPin = 8; // بوق هشدار const int warningLed = 9; // LED هشدار زرد const int alarmLed = 10; // LED هشدار قرمز const int resetButton = 3; // دکمه ریست سیستم // تنظیمات سیستم const int baselineSamples = 100; // تعداد نمونهها برای پایهگذاری const float alarmMultiplier = 3.0; // ضریب برای تشخیص نویز غیرعادی const unsigned long alarmDuration = 10000; // مدت هشدار (ms) float noiseBaseline = 0; // سطح نویز پایه float currentNoiseLevel = 0; // سطح نویز فعلی bool alarmActive = false; // وضعیت هشدار unsigned long alarmStartTime = 0; // زمان شروع هشدار void setup() { Serial.begin(9600); pinMode(alarmPin, OUTPUT); pinMode(warningLed, OUTPUT); pinMode(alarmLed, OUTPUT); pinMode(resetButton, INPUT_PULLUP); Serial.println("=================================="); Serial.println(" Abnormal Noise Detection System"); Serial.println("=================================="); // کالیبراسیون سطح نویز پایه calibrateBaseline(); Serial.println("System calibrated and active"); Serial.println("Monitoring for abnormal noises..."); Serial.println(); } void loop() { // خواندن سطح صوت فعلی currentNoiseLevel = readNoiseLevel(); // بررسی دکمه ریست if (digitalRead(resetButton) == LOW) { resetAlarm(); delay(500); // Debouncing } // اگر هشدار فعال است if (alarmActive) { digitalWrite(alarmLed, HIGH); digitalWrite(warningLed, ((millis() / 500) % 2 == 0)); // چشمک زدن // بوق هشدار tone(alarmPin, 1000, 200); delay(250); tone(alarmPin, 1500, 200); // بررسی پایان زمان هشدار if (millis() - alarmStartTime > alarmDuration) { resetAlarm(); } } else { // بررسی سطح نویز if (currentNoiseLevel > noiseBaseline * alarmMultiplier) { triggerAlarm(); } // نمایش وضعیت عادی digitalWrite(alarmLed, LOW); // LED هشدار ملایم در صورت نویز بالا if (currentNoiseLevel > noiseBaseline * 2.0) { digitalWrite(warningLed, HIGH); } else { digitalWrite(warningLed, LOW); } } // نمایش اطلاعات دورهای static unsigned long lastReport = 0; if (millis() - lastReport > 2000) { Serial.print("Baseline: "); Serial.print(noiseBaseline, 0); Serial.print(" | Current: "); Serial.print(currentNoiseLevel, 0); Serial.print(" | Ratio: "); Serial.print(currentNoiseLevel / noiseBaseline, 1); Serial.print(" | Alarm: "); Serial.println(alarmActive ? "ACTIVE" : "Inactive"); lastReport = millis(); } delay(100); } // کالیبراسیون سطح نویز پایه void calibrateBaseline() { Serial.println("Calibrating noise baseline..."); Serial.println("Please ensure quiet environment for 5 seconds"); digitalWrite(warningLed, HIGH); long total = 0; for (int i = 0; i < baselineSamples; i++) { total += analogRead(soundAnalogPin); delay(50); // نمایش پیشرفت if (i % 20 == 0) { Serial.print("."); } } noiseBaseline = total / (float)baselineSamples; digitalWrite(warningLed, LOW); Serial.println(); Serial.print("Baseline calibration complete: "); Serial.println(noiseBaseline, 0); } // خواندن سطح نویز با میانگینگیری float readNoiseLevel() { long total = 0; for (int i = 0; i < 10; i++) { total += analogRead(soundAnalogPin); delay(5); } return total / 10.0; } // فعالسازی هشدار void triggerAlarm() { alarmActive = true; alarmStartTime = millis(); Serial.println("!!! ABNORMAL NOISE DETECTED !!!"); Serial.print("Level: "); Serial.print(currentNoiseLevel, 0); Serial.print(" ("); Serial.print(currentNoiseLevel / noiseBaseline, 1); Serial.println("x baseline)"); Serial.println("----------------------------------"); } // غیرفعالسازی هشدار void resetAlarm() { alarmActive = false; digitalWrite(alarmLed, LOW); digitalWrite(warningLed, LOW); noTone(alarmPin); Serial.println("Alarm reset"); Serial.println(); }
نکات فنی و عیبیابی
نکات نصب:
-
سنسور را دور از منابع نویز الکتریکی نصب کنید
-
از کابلهای کوتاه استفاده کنید
-
برای محیطهای مرطوب از ماژول ضدآب استفاده کنید
عیبیابی:
| مشکل | علت احتمالی | راهحل |
|---|---|---|
| LED همیشه روشن | حساسیت زیاد | پتانسیومتر را در جهت کاهش حساسیت بچرخانید |
| عدم پاسخ به صدا | حساسیت کم | حساسیت را افزایش دهید |
| پاسخ ناپایدار | نویز الکتریکی | خازن 100μF بین VCC و GND نزدیک ماژول اضافه کنید |
| تشخیص صداهای ضعیف | میکروفون معیوب | میکروفون را تعویض کنید |
بهبود عملکرد:
// اضافه کردن فیلتر دیجیتال float applyLowPassFilter(float input, float previous, float alpha) { return alpha * input + (1 - alpha) * previous; } // میانگینگیری چندگانه برای کاهش نویز int readStableAnalog(int pin, int samples) { long total = 0; for (int i = 0; i < samples; i++) { total += analogRead(pin); delay(2); } return total / samples; }
پروژههای پیشنهادی
1. دستگاه ضد پارس سگ
// تولید فراصوت با تشخیص پارس
2. سیستم نظارت بر خواب
// ثبت خروپف و حرکات در خواب
3. دستگاه مترجم برای ناشنوایان
// تبدیل صداهای مهم به نور یا لرزش
4. کنترل صوتی اسباببازی
// کنترل ربات یا ماشین با دستورات صوتی
5. سیستم تمرین خوانندگی
// اندازهگیری دقت نوتهای موسیقی
اطلاعات خرید
پکیج کامل شامل:
-
1x ماژول سنسور صدا با میکروفون
-
1x کابل ارتباطی 3 پین (20cm)
-
1x پایه نصب با پیچ
-
راهنمای فارسی جامع
-
DVD شامل کدهای نمونه و کتابخانهها
گارانتی و پشتیبانی:
- پشتیبانی تلفنی و آنلاین
-
بهروزرسانی رایگان کدهای نمونه
-
مشاوره رایگان طراحی پروژه
ویژگیهای انحصاری:
-
مقاوم در برابر نویزهای الکترومغناطیسی
-
قابلیت کار در دمای -10 تا +60 درجه
-
طراحی شده برای کار مداوم 24 ساعته
-
سازگاری با تمام پلتفرمهای معتبر
جدول مقایسه با مدلهای مشابه
| ویژگی | مدل پایه | مدل حرفهای | مدل صنعتی |
|---|---|---|---|
| حساسیت | -46dB | -52dB | -58dB |
| نویز خروجی | 200mV | 100mV | 50mV |
| دمای کاری | 0°C-50°C | -20°C-70°C | -40°C-85°C |
| گارانتی | 6 ماه | 12 ماه | 24 ماه |
| قیمت | اقتصادی | متوسط | بالا |
سؤالات متداول
Q1: تفاوت این ماژول با میکروفون معمولی چیست؟
این ماژول علاوه بر میکروفون، شامل مدارهای تقویتکننده، فیلتر و مقایسهگر است و خروجیهای آنالوگ و دیجیتال آماده برای میکروکنترلر ارائه میدهد.
Q2: آیا میتوان برای ضبط صدا با کیفیت استفاده کرد؟
خیر، این ماژول برای تشخیص صدا و اندازهگیری سطح صوت طراحی شده، نه برای ضبط کیفیت بالا. برای ضبط صدا به ماژولهای تخصصیتر نیاز است.
Q3: محدوده تشخیص مؤثر چقدر است؟
در محیط ساکت: 5-7 متر | محیط اداری: 2-3 متر | محیط پرنویز: 1-1.5 متر
Q4: چگونه حساسیت را تنظیم کنم؟
پتانسیومتر روی برد را بهآرامی بچرخانید و با تولید صداهای مختلف، نقطه بهینه را پیدا کنید.
Q5: آیا در فضای باز کار میکند؟
بله، اما باید از محافظ در برابر باد و رطوبت استفاده شود.
توجه: تمام کدهای ارائه شده تست شده و آماده استفاده هستند. برای دریافت نسخههای بهینهشده و کتابخانههای تخصصی به وبسایت ما مراجعه کنید.









ترانزیستورها
خازنها
دیودها
رگولاتورها
مقاومتها
کریستال و اسیلاتور
مدارات مجتمع
ابزارها
تجهیزات
تجهیزات لحیمکاری
مولتیمتر و ابزار اندازهگیری
منبع تغذیه و باتری
تستر