از دیگر سنسورهای امبدد داخلی قرار گرفته شده بر روی برد آردوینو Arduino nano 33 sense ble سنسور میکروفن است. این سنسور شدت صدای محیط را دریافت میکند. در این آموزش به معرفی سنسور و کدنویسی میکروفن MP34DT05-A بر روی برد آردوینو نانو ۳۳ خواهیم پرداخت. در ادامه با مرجع تخصصی آردوینو نانو به زبان فارسی، دیجی اسپارک همراه باشید.
سنسور میکروفن MP34DT05-A
سنسور MEMS AUDIO یک سنسور گیرنده فرستنده همه جانبه صوتی است که با کد تجاری MP34DT05 معرفی شده است. یک سنسور دیجیتال فوق فشرده، کم مصرف . همه جهته که از یک عنصر حسگر خازنی تشکیل شده است. پروتکل ارتباطی این سنسور با میکروکنترلر به صورت I2C است. المنت حسگر قادر به تشخیص امواج صوتی است و از آی سی CMOS برای ساخت و طراحی آن استفاده شده است. MP34DT05-A یک میکروفون دیجیتال کم اعوجاج با سیگنال به نویز ۶۴ دسی بل است. این سنسور از ۵ پایه VDD, LR, CLK, DOUT, GND تشکیل شده است. از این سنسور در ساخت ترمینال های صوتی موبایل، ساخت کامپیوترها،مدیا پلیرهای پرتابل، تشخیص صحبت کردن، بازی و ساخت بازی های مجازی به عنوان ورودی و دیگر دیوایس ها استفاده میشود.
• Single supply voltage
• Low power consumption
• AOP = 122.5 display
• ۶۴ dB signal-to-noise ratio
• Omnidirectional sensitivity
• –۲۶ dBFAST ±۳ dB sensitivity
• PDM output
• HCLGA package
میکروفن ها صدای فیزیکی را به صدای دیجیتال تبدیل میکنند به همین دلیل در ساخت بسیاری از دیوایس ها این سنسور یعنی MP34TD05 کاربرد ویژه ای برای تبدیل و دریافت صدای دیجیتال استفاده میشود. سنسور میکروفن با تراشه MP34TD05 از ماهیت PDM مخفف Pulse-Density Modulation بهره برده که برای نمایش سیگنال آنالوگ به سیگنال باینری از آن استفاده میشود.
- Signal-to-noise ratio: 64dB
- Sensitivity: -26dBFS ±۳dB
- Temperature range: -40 to 85°C
نصب کتابخانه PDM برای فعال سازی میکروفن
در قدم اول با توجه به اینکه سنسور میکروفن MP34DT05-A از ماهیت PDM استفاده میکند، بایستی کتابخانه PDM را به لیست کتابخانه های نرم افزار آردوینو اضافه کنیم. برای اینکار از منو نرم افزار آردوینو عبارت PDM را فیلتر کنید.
کتابخانه Adafruit Zero PDM Library را نصب کنید. با نمایش پیغام INSTALLED کتابخانه نصب و آماده به کار است.
راه اندازی سنسور میکروفن MP34DT05-A
برای راه اندازی سنسور میکروفن MP34DT05-A در برد آردوینو نانو ۳۳ sense از کتابخانه PDM استفاده میکنیم. کد را کپی و به نرم افزار آردوینو انتقال دهید.
#include <PDM.h> //ساخت بافر برای سمپل ۱۶ بیتی short sampleBuffer[256]; // number of samples read volatile int samplesRead; void setup() { Serial.begin(9600); while (!Serial); // تنظیم دیتای دریافتی PDM.onReceive(onPDMdata); // optionally set the gain, defaults to 20 // PDM.setGain(30); // initialize PDM with: // - one channel (mono mode) // - a 16 kHz sample rate if (!PDM.begin(1, 16000)) { Serial.println("Failed to start PDM!"); //فعال سازی PDM while (1); } } void loop() { // منتظر میمانیم تا سمپل خوانده شود if (samplesRead) { // نمایش سمپل ها در سریال مانیتور for (int i = 0; i < samplesRead; i++) { Serial.println(sampleBuffer[i]); // اگه شدت صدای دریافتی از ۵۰۰ بیتشر شد if (sampleBuffer[i]>=500){ digitalWrite(LEDR,LOW); digitalWrite(LEDG,HIGH); digitalWrite(LEDB,HIGH); } //اگر شدت صدای دریافتی بین ۲۵۰ تا ۵۰۰ بود if (sampleBuffer[i]>=250 && sampleBuffer[i] < 500){ digitalWrite(LEDB,LOW); digitalWrite(LEDR,HIGH); digitalWrite(LEDG,HIGH); } //اگر شدت صدای دریافتی از ۰ بیشتر و از ۲۵۰ کمتر بود if (sampleBuffer[i]>=0 && sampleBuffer[i] < 250){ digitalWrite(LEDG,LOW); digitalWrite(LEDR,HIGH); digitalWrite(LEDB,HIGH); } } // clear the read count samplesRead = 0; } } void onPDMdata() { // query the number of bytes available int bytesAvailable = PDM.available(); // read into the sample buffer PDM.read(sampleBuffer, bytesAvailable); // ۱۶-bit, 2 bytes per sample samplesRead = bytesAvailable / 2; }
در ابتدا دو متغیر در اول برنامه معرفی میکنیم. یکی از متغیرها SHORT و دیگری volatile int است. از متغیر SHORT برای ذخیره داده ی ۱۶ بیتی استفاده میکنیم که در این برنامه با کد زیر نوشته شده است.
short sampleBuffer[256];
متغیر دیگر VOLATILE است که با افزودن این متغیر برای کامپایلر مشخص میشود که این متغیر از THREAD های دیگر هم فرمان گرفته و ممکن است مقدار آن در طول برنامه هر لحظه تغییر کند. پس نیازی به بهینه شدن وجود ندارد و به جای ذخیره سازی در رجیستر در حافظه مقدار آن ذخیره میشود. پس کلمه کلیدی VOLATILE در ابتدای تعریف متغیر استفاده میشود تا کامپایلر عملیات بهینه سازی را روی آن انجام ندهد و در هر بار فراخوانی اسم متغیر در طول برنامه مقدار آن را از حافظه بخواند.
volatile int samplesRead;
سپس از فانکشن PDM.conReceive() برای تنظیم دیتای دریافتی استفاده میشود. در ابتدا توسط PDM.begin() دیتا از یک کانال خوانده شده و با سمپل ریت ۱۶KHZ خوانده میشوند.
void setup() { Serial.begin(9600); while (!Serial); // configure the data receive callback PDM.onReceive(onPDMdata); // optionally set the gain, defaults to 20 // PDM.setGain(30); // initialize PDM with: // - one channel (mono mode) // - a 16 kHz sample rate if (!PDM.begin(1, 16000)) { Serial.println("Failed to start PDM!"); while (1); } }
در نهایت پس از خواندن سمپل ریت برای مشاهده خروجی از همان ال ای دی RGB داخلی قرار گرفته شده بر روی برد استفاده شده است. در صورتیکه شدت صدای دریافتی بین بازه های مختلفی باشد، ترکیب رنگ ها به دلخواه برای ال ای دی تغییر خواهد کرد.
for (int i = 0; i < samplesRead; i++) { Serial.println(sampleBuffer[i]); // اگه شدت صدای دریافتی از ۵۰۰ بیتشر شد if (sampleBuffer[i]>=500){ digitalWrite(LEDR,LOW); digitalWrite(LEDG,HIGH); digitalWrite(LEDB,HIGH); } //اگر شدت صدای دریافتی بین ۲۵۰ تا ۵۰۰ بود if (sampleBuffer[i]>=250 && sampleBuffer[i] < 500){ digitalWrite(LEDB,LOW); digitalWrite(LEDR,HIGH); digitalWrite(LEDG,HIGH); } //اگر شدت صدای دریافتی از ۰ بیشتر و از ۲۵۰ کمتر بود if (sampleBuffer[i]>=0 && sampleBuffer[i] < 250){ digitalWrite(LEDG,LOW); digitalWrite(LEDR,HIGH); digitalWrite(LEDB,HIGH); } } // clear the read count samplesRead = 0; }
به همین ترتیب به دلخواه میتوانید تغییراتی در خروجی LED RGB لحاظ کنید. برای دیتای صوت از سمپل بافر استفاده میکنیم. اگر SAMPLE BUFFER بین بازه های دریافتی از میکروفن تغییر کند، رنگ ها بر اساس RED, GREEN , BLUE به ترتیب HIGH , LOW میشوند. تا این مرحله کد نوشته شده است و کافیست برنامه را آپلود و اجرا کنید. بر روی UPLOAD کلیک کنید. سپس سریال مانیتور را باز کنید.
وضعیت سریال پلاتر در آردوینو IDE2 به صورت زیر است.
جمع بندی لیدی پای
سنسور میکروفن سومین سنسوری بود که در سری آموزش های نانو ۳۳ با آن آشنا شدیم و همزمان از دو سنسور امبدد برد برای راه اندازی و بررسی آن استفاده کردیم. سنسور میکروفن صوت را تشخیص داده و صدای فیزیکی را به دیجیتال و دیتای قابل فهم برای میکروکنترلر تبدیل میکند. برای تست برنامه از یک اسپیکر کمک بگیرید و یک موزیک پخش کنید. اگر محیط ساکت باشد، رنگ LED RGB با توجه به محدوده هایی که در کد برنامه تعریف کردیم به رنگ سبز خواهد بود. با پخش صدای کم LED RGB رنگ آن تغییر میکند و در نیتجه اگر شدت صدای دریافتی بسیار زیاد باشد، تغییر رنگ و سرعت تغییر رنگ را شاهد خواهیم بود.
وسایل مورد نیاز
برد آردوینو Arduino Nano 33 Sense BLE
چنانچه در مراحل راه اندازی برد ARDUINO NANO 33 SENSE BLE و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سنسور میکروفن قابلیت ذخیره صدا دارد؟
با سلام
خیر این قابلیت را ندارد.
با سلام خوبین؟ شدت صدا یعنی صدا رو هم میشناسه؟
با سلام
شدت صدای دریافتی از محیط را تشخیص میدهد و میتوانید برای هر فرکانس دریافتی تاثیرات آن را در خروجی مشاهده کنید.
سلام
وقت بخیر
میکروفونی که روی این آردوینو قرار داره، بصورت ماژول جداگانه در بازار وجود داره؟
خیلی نیاز دارم بهش
با سلام
در این خصوص اطلاعی ندارم.
با سلام
برای تست میکروفن میشه از ال ای دی روی برد استفاده کرد؟
با سلام
بله عملکرد کدنویسی و اجرا دقیقا مشابه همان کاری است که برای برد آردوینو نانو انجام میدادیم.
برای هر سنسور که در ساختش استفاده شده دوستان کتابخانه توسعه داده شده چون همه چیز تحت لیسانس آردوینو بوده
حتما بخرید و استفاده کنید.
مرسی لیدی پای
با سلام
کاربر گرامی
سپاس از همراهی شما امیدوارم مفید واقع شده باشد.