صداسنج دیجیتال با آردوینو؛ یک دسیبلمتر دقیق و قابلحمل
خیلی از ما عاشق تجهیزات صوتی هستیم یا برای پروژههای مختلف نیاز داریم میزان نویز و صدای محیط رو بسنجیم. شاید فکر کنی با نصب یک اپلیکیشن روی گوشی میشه این کار رو انجام داد، اما میکروفون گوشیها صرفا برای مکالمه طراحی شدن و اصلا دقت لازم برای اندازهگیری کالیبره شده شدت صدا رو ندارن. دستگاههای صداسنج حرفهای هم معمولا قیمتهای خیلی بالایی دارن و برای مصارف عمومی توجیه اقتصادی ندارن.
توی این آموزش از تیم آیسیمدار، تصمیم گرفتیم یک صداسنج (دسیبلمتر) دقیق، قابلحمل و البته اقتصادی بسازیم. این گجت با استفاده از برد آردوینو نانو، یک ماژول میکروفون حرفهای MEMS و یک نمایشگر OLED کار میکنه و شدت صدا رو با واحد استاندارد dBA (دسیبل با وزن A) به صورت زنده بهت نشون میده.
این دستگاه به خاطر مصرف پایینش به راحتی با باتری کار میکنه و مدار فوقالعاده سادهای داره. نیازی به محاسبات پیچیده ریاضی نیست و همهچیز خیلی روان و زیبا روی نمایشگر به تصویر کشیده میشه. بریم قطعات رو آماده کنیم و این ابزار اندازهگیری کاربردی رو با هم بسازیم.
قطعات موردنیاز
- برد آردوینو نانو (Arduino Nano)
- ماژول سنسور صدای DFRobot مدل SEN0232 (میکروفون MEMS)
- ماژول نمایشگر OLED سایز 0.96 اینچ (پروتکل I2C)
- باتری و ماژول شارژ (برای استفاده به صورت پرتابل)
- سیم جامپر
- برد سوراخدار (برای لحیمکاری و مونتاژ نهایی)
معرفی قطعات اصلی دسیبلمتر
برای ساخت این صداسنج، ما به سراغ ماژول DFRobot SEN0232 رفتیم. این ماژول یک میکروفون MEMS حرفهای داره که سیگنالها رو بهینهسازی میکنه و خروجی آنالوگ فوقالعاده تمیزی رو در اختیارمون میذاره.
ولتاژ خروجی این سنسور رابطه کاملا خطی با دسیبل داره. یعنی نیازی به کدهای سنگین پردازش سیگنال مثل FFT (تبدیل فوریه سریع) نداریم و فقط با خوندن مقدار پین آنالوگ و یک ضرب ساده، شدت صدا محاسبه میشه. برای پردازش این مقادیر از یک برد آردوینو نانو استفاده میکنیم که هم کوچیکه و هم قدرت کافی رو داره.
در کنار این قطعات، یک ماژول نمایشگر OLED هم قرار دادیم تا نتایج رو به صورت لحظهای و در قالب یک نمودار خطی جذاب به ما نشون بده. با ترکیب این سه قطعه، یک دسیبلمتر پرتابل و دقیق خواهیم داشت که تو هر شرایطی به کارمون میاد. بریم ببینیم اصلا واحد dBA چی هست و چرا انقدر اهمیت داره.
تفاوت dB و dBA؛ چرا وزن فرکانسی A مهم است؟
قبل از اینکه وارد فاز عملی و سیمکشی بشیم، بد نیست بدونیم dBA دقیقا چیه. گوش انسان صداهای بین 1 تا 5 کیلوهرتز رو خیلی خوب میشنوه و نسبت به فرکانسهای بالاتر یا پایینتر حساسیت کمتری داره. سیستم A-weighting یک منحنی استاندارد هست که اندازهگیری شدت صدا رو دقیقا شبیه به درک شنوایی انسان شبیهسازی میکنه. توی نمودارها میتونی این منحنی واکنش فرکانسی رو به وضوح ببینی.
وقتی علامت dBA رو میبینی، یعنی دسیبل با فیلتر وزنی A اندازهگیری شده. خبر خوب اینه که سنسور SEN0232 ما دقیقا از همین استاندارد استفاده میکنه؛ یعنی عددی که نشون میده دقیقا همون بلندی صدایی هست که گوش تو احساس میکنه، نه فقط یک انرژی صوتی خام. اینجا میتونی یک جدول مرجع رو ببینی که مقادیر مختلف dBA رو با محیطهای واقعی مقایسه کرده.
بررسی مشخصات فنی ماژول SEN0232
ماژول SEN0232 فقط یک میکروفون ساده نیست، بلکه یک سیستم کامل اندازهگیری صداست که مدار بهینهسازی سیگنال رو به صورت یکپارچه روی خودش داره. مشخصات کلیدی این برد فوقالعاده به شرح زیره:
- محدوده اندازهگیری: 30 تا 130 دسیبل (dBA)
- خطای اندازهگیری: ±1.5 دسیبل
- وزن فرکانسی: استاندارد A-Weighted
- پاسخ فرکانسی: 31.5 هرتز تا 8.5 کیلوهرتز
- مشخصه زمانی: 125 میلیثانیه (حالت واکنش سریع)
- ولتاژ ورودی: 3.3 تا 5 ولت
- جریان مصرفی: 22 میلیآمپر در 3.3 ولت / 14 میلیآمپر در 5 ولت
- ولتاژ خروجی (آنالوگ): 0.6 تا 2.6 ولت
این برد یک میکروفون MEMS فوقحساس داره که امواج صوتی رو دریافت میکنه و بعد از عبور از فیلتر A-Weighting، سیگنالهای متناوب (AC) صوتی رو به یک ولتاژ مستقیم (DC) کاملا پایدار تبدیل میکنه.
در نهایت، این ولتاژ خروجی یک رابطه کاملا خطی با مقدار دسیبل داره که کار ما رو برای خوندن مقادیر با آردوینو بینهایت آسون میکنه.
نقشه سیمکشی و اتصالات مدار
به لطف طراحی عالی این سنسور، سیمکشی پروژه خیلی سرراسته. کافیه پایه تغذیه سنسور رو به خروجی 5 ولت آردوینو وصل کنی و پین خروجی اون رو به پین آنالوگ A0 بزنی. برای اتصال نمایشگر OLED هم اتصالات زیر رو برقرار کن:
- پایه VCC نمایشگر به 5 ولت آردوینو
- پایه GND نمایشگر به GND آردوینو
- پایه SDA نمایشگر به پین A4 آردوینو
- پایه SCL نمایشگر به پین A5 آردوینو
پیشنهاد میکنم برای استفاده پرتابل، از یک برد آردوینو نانو استفاده کنی و قطعات رو روی یک برد سوراخدار کوچیک به هم لحیم کنی تا دستگاهت جمعوجور و محکم بشه. شماتیک کلی اتصالات رو میتونی تو تصاویر همین بخش بررسی کنی تا هیچ سیمی رو جابهجا نزنی.
نصب کتابخانهها و آپلود کد
حالا وقتشه که به مدارمون جان ببخشیم! برای راهاندازی نمایشگر، باید کتابخونههای گرافیکی زیر رو از بخش Library Manager نرمافزار آردوینو جستجو و نصب کنی:
1. Adafruit SSD1306 - For the OLED display
2. Adafruit GFX Library - Graphics primitives (installed automatically with SSD1306)
Go to Sketch > Include Library > Manage Libraries, search for Adafruit SSD1306, and install it. The GFX library will be installed as a dependency.
کد اصلی پروژه رو که شامل کدهای نمایشگر و خواندن سنسور میشه، روی برد آپلود کن. اول سریال مانیتور رو روی بادریت 115200 باز کن تا خیالت راحت بشه همهچیز درسته. بسته به محیطی که توش هستی، باید اعدادی بین 30 تا 130 دسیبل رو ببینی. مثلا یک اتاق ساکت معمولا عددی بین 35 تا 45 دسیبل رو بهت نشون میده.
بررسی منطق برنامهنویسی و کالیبراسیون
از اونجایی که محاسبات ما بر اساس مبدل آنالوگ به دیجیتال (ADC) انجام میشه، به یک ولتاژ مرجع کاملا ثابت نیاز داریم. ولتاژ 5 ولت آردوینو ممکنه بسته به منبع تغذیه (مثل پورت USB یا باتری) بین 4.6 تا 5.2 ولت نوسان داشته باشه.
مخصوصا وقتی دستگاه روی باتری کار میکنه، با افت شارژ باتری این ولتاژ به مرور تغییر میکنه. برای حل این مشکل، ما تو کد از تابع readVcc استفاده کردیم که ولتاژ مرجع رو از باندگپ 1.1 ولت داخلی خود میکروکنترلر میخونه. این ترفند هوشمندانه باعث میشه در هر شرایطی مقدار دقیق میلیولت تغذیه رو داشته باشیم و دسیبل رو بدون خطا محاسبه کنیم.
دادههای خام سنسور ممکنه کمی پرش داشته باشن. به همین دلیل تو برنامه از یک بافر حلقوی با 10 نمونه استفاده کردیم تا میانگین متحرک (Running Average) رو محاسبه کنیم. این کار نویزهای لحظهای رو حذف میکنه، در حالی که سرعت واکنش دستگاه رو بالا نگه میداره (10 نمونه ضرب در 125 میلیثانیه میشه حدود 1.25 ثانیه زمان میانگینگیری).
این روش یکی از رایجترین و بهترین تکنیکهای حذف نویز در مبدلهای ADC محسوب میشه. فرمول تبدیل مقادیر هم خیلی سرراسته. محدوده 0.6 تا 2.6 ولت دقیقا معادل 30 تا 130 دسیبل هست.
نه نیازی به جدولهای جستجو (Lookup Table) داریم و نه محاسبات پیچیده؛ فقط کافیه عدد ولتاژ رو ضرب در 50 کنیم! به همین سادگی: 0.6 ولت میشه 30 دسیبل و 2.6 ولت میشه 130 دسیبل.
dbValue = (analogRead(A0) / 1024.0) * Vref * 50.0;
Sensitivity = 100 dB / 2.0V = 50 dB/V
تست عملکرد و پایداری دستگاه
ما این دستگاه رو تو شرایط مختلف تست کردیم و عملکردش بینظیر بود. پیشنهاد میکنم حتما اتصالات رو روی برد سوراخدار به هم لحیم کنی، چون استفاده از سیمهای جامپر شل روی بردبورد میتونه باعث ایجاد نویز بشه و روی دقت کار تأثیر بذاره.
سیستم میانگینگیری که نوشتیم به خوبی نویزهای لحظهای رو فیلتر میکنه و نمودار میلهای روی نمایشگر OLED بدون هیچ پرش یا چشمکزدنی آپدیت میشه. حتی با پخش موسیقی تند هم دستگاه بهخوبی ریتم صدا رو دنبال میکنه. همچنین در زمان مکالمه، حساسیت و سرعت واکنش دستگاه فوقالعادهست و دقیقا با تن صدای شما تغییر میکنه.
جمعبندی؛ یک ابزار اندازهگیری حرفهای در جیب تو
با ساخت این گجت پرتابل، حالا یک دسیبلمتر کاملا مستقل و دقیق داری که با زدن یک کلید روشن میشه و همون لحظه بدون نیاز به لود شدن هیچ نرمافزاری، شدت صدای محیط رو بهت نشون میده. نمایشگر OLED هم خوانایی بینظیری تو تاریکی و روشنایی داره و ظاهر دستگاهت رو خیلی حرفهایتر میکنه.
اگر دنبال یک ابزار اندازهگیری صدای اقتصادی و در عین حال دقیق (dBA) هستی، این پروژه دقیقا همون چیزیه که بهش نیاز داری. کاربردهای خیلی زیادی برای این ماژول وجود داره که میتونی توی پروژههای صوتی و اتوماسیون خودت ازش بهره ببری.
امیدوارم از این آموزش لذت برده باشی. اگر سوالی داری یا این دسیبلمتر رو ساختی، حتما تو بخش نظرات برامون بنویس تا تیم آیسیمدار در اولین فرصت راهنماییت کنن.
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.








































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!