کنترل وسایل با تشخیص صدا آردوینو (خانه هوشمند با گفتار)

محتویات
سلام. کنترل وسایل با تشخیص صدا آردوینو (خانه هوشمند با گفتار) را آماده کردیم.
پروژه خانه هوشمند با تشخیص صدا آردوینو
فن آوری تشخیص گفتار در هوشمند سازی بسیار مفید است که نه تنها به شما امکان کنترل دستگاه ها را می دهد بلکه امنیت بیشتری به پروژه شما میده. جدا از کنترل کردن وسایل با صدا، این فناوری برای افراد دارای محدودیت بسیار مفید است. در این پروژه ما قصد داریم با استفاده از استودیوی Edge Impulse، از سه دستور NOISE، LIGHT ON، LIGHT OFF استفاده کنیم. این پروژه به عنوان پروژه خانه هوشمند بسیار جذاب محسوب میشود.
فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.
پروژه های دیگر ما مربوط به صدا و آردوینو :
- پروژه آردوینو تبدیل متن به گفتار + آموزش پروژه TTS آردوینو
- پروژه آردوینو سوئیچ با استفاده از کف زدن (روشن و خاموش کردن وسایل Arduino)
مدار پروژه کنترل وسایل با تشخیص صدا آردوینو
شماتیک مدار برای تشخیص صدا با استفاده از آردوینو در زیر آورده شده است. در Fritzing برای Arduino 33 BLE کتابخانه ای در دسترس نبود ، بنابراین من از آردوینو نانو استفاده کردم زیرا هر دو دارای ظاهری یکسان هستند.
پایه مثبت LED به پین دیجیتال 5 از Arduino 33 BLE متصل شده است و پایه منفی به پین GND آردوینو متصل شده است.
قطعات مورد نیاز
- برد آردوینو 33 BLE Sense
- LED
ایجاد مجموعه داده برای تشخیص گفتار آردوینو
در اینجا استودیوی Edge Impulse برای آموزش پروژه تشخیص گفتار استفاده می شود. از آنجا که هدف ما کنترل یک LED با دستور صوتی است، ما نیاز به جمع آوری نمونه های صوتی برای همه دستورات و نویزها داریم تا بتواند بین فرامین صوتی و سایر صداها تمایز قایل شود.
ما یک مجموعه داده با سه کلاس “LED ON” ، “LED OFF” و “NOISE” ایجاد خواهیم کرد. برای ایجاد یک مجموعه داده ، یک حساب Edge Impulse ایجاد کنید (ورود به سایت Edge Impulse) ، حساب خود را تأیید کنید و سپس یک پروژه جدید شروع کنید. می توانید نمونه ها را با استفاده از موبایل ، برد Arduino یا وارد کردن داده ها وارد کنید. آسانترین راه بارگیری نمونه ها به حساب کاربری شما استفاده از تلفن همراه شما است. برای این کار موبایل خود را به Edge Impulse وصل کنید.
برای اتصال تلفن همراه روی “Devices” کلیک کرده و سپس روی “Connect a New Device” کلیک کنید.
اکنون در پنجره بعدی روی “Use your Mobile Phone” کلیک کرده و یک کد QR ظاهر می شود. کد QR را با تلفن همراه خود اسکن کرده یا URL داده شده را وارد کنید.
این کار تلفن شما را به استودیوی Edge Impulse متصل می کند.
با اتصال تلفن خود به استودیوی Edge Impulse ، اکنون می توانید نمونه های خود را بارگیری کنید. برای بارگیری نمونه ها روی “Data acquisition” کلیک کنید. اکنون در صفحه Data acquisition نام برچسب را وارد کنید ، میکروفون را به عنوان یک سنسور انتخاب کرده و طول نمونه را وارد کنید. روی “Start sampling” کلیک کنید ، دستگاه شما یک نمونه 2 ثانیه ای را ضبط می کند. در شرایط مختلف میتوانید 10 تا 12 نمونه صوتی را ضبط کنید.
پس از بارگذاری نمونه ها، برچسب تغییر را تنظیم کرده و نمونه ها را برای کلاس “light off” و “light off” تنظیم کنید.
در مراحل بعدی ، داده های تست را جمع آوری خواهیم کرد. داده های آزمون باید حداقل 30٪ از داده های آموزش باشد ، بنابراین 4 نمونه از “Noise” و 4 تا 5 نمونه را برای “LIGHT ON” و “LIGHT OFF” وارد کنید.
مدل آموزش فرمان های صوتی
به صفحه “Create impulse” بروید. تنظیمات پیش فرض اندازه ویندوز 1000 ms را به 1200 ms و 500 ms را به 50ms افزایش یابد.
اکنون در صفحه “Create impulse” روی “Add a processing block” کلیک کنید. در پنجره بعدی بلوک Audio MFCC را انتخاب کنید. پس از آن بر روی “Add a learning block” کلیک کنید و بلوک Neural Network Keras را انتخاب کنید. سپس بر روی “Save Impulse” کلیک کنید.
در مرحله بعد به صفحه MFCC بروید و سپس روی “Generate Features” کلیک کنید. این بلوک MFCC را برای همه پنجره های صوتی ما تولید می کند.
پس از آن به صفحه NN Classifier بروید و بر روی سه نقطه در گوشه سمت راست بالای «Neural Network settings» کلیک کنید و « Switch to Keras (expert) mode» را انتخاب کنید.
کد زیر را جایگزین کنید و “Minimum confidence rating” را به 0.70 تغییر دهید. سپس بر روی دکمه “Start training” کلیک کنید. این کار آموزش مدل شما را آغاز می کند.
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers import Adam from tensorflow.keras.constraints import MaxNorm # model architecture model = Sequential() model.add(InputLayer(input_shape=(X_train.shape[1], ), name='x_input')) model.add(Reshape((int(X_train.shape[1] / 13), 13, 1), input_shape=(X_train.shape[1], ))) model.add(Conv2D(10, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3))) model.add(AveragePooling2D(pool_size=2, padding='same')) model.add(Conv2D(5, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3))) model.add(AveragePooling2D(pool_size=2, padding='same')) model.add(Flatten()) model.add(Dense(classes, activation='softmax', name='y_pred', kernel_constraint=MaxNorm(3))) # this controls the learning rate opt = Adam(lr=0.005, beta_1=0.9, beta_2=0.999) # train the neural network model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), verbose=2)
پس از آموزش مدل ، عملکرد آموزش (مطابقت صدای شما) را نشان می دهد. برای من، دقت 81.1٪ بود که عملکرد ایده آل نیست اما می توانیم با آن پیش برویم. با ایجاد یک مجموعه داده گسترده می توانید عملکرد مدل خود را افزایش دهید.
سپس پس از آماده کردن دستورات خود، باید فایل کتابخانه آردوینو صداهای خود را دریافت کنیم. قبل از آن میتوانید به صفحه Live Classification بروید و عملکرد خود را تست کنید. این ویژگی به شما کمک میکند تا مدت را با داده های آزمایشی تست کنید.
برای آزمایش داده ها با تلفن خود ، “Switch to Classification Mode” را از طریق تلفن خود انتخاب کنید.
حال برای بارگیری مدل به عنوان کتابخانه Arduino، به صفحه “Deployment” بروید و “Arduino Library” را انتخاب کنید. اکنون به پایین بروید و بر روی “Build” کلیک کنید تا مراحل شروع شود. این کار یک کتابخانه Arduino برای پروژه شما ایجاد می کند.
اکنون کتابخانه را در Arduino IDE خود اضافه کنید. برای نصب کتابخانه، Arduino IDE را باز کرده و Sketch > Include Library > Add.ZIP library بروید.
سپس با رفتن به File > Examples > Your project name – Edge Impulse > nano_ble33_sense_microphone یک نمونه بارگیری کنید.
کد تشخیص صدا با آردوینو
کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را توضیح میدهیم. برای کنترل LED باید تمام احتمالات فرمان را در سه متغیر مختلف ذخیره کنیم تا بتوانیم عبارات شرطی را بر روی آنها قرار دهیم. بنابراین با توجه به کد جدید اگر احتمال “Light On” بیشتر از 0.50 باشد ، LED را روشن می کند و اگر احتمال فرمان “Light Off” بیشتر از 0.50 باشد ، چراغ را خاموش می کند.
for (size_t ix = 2; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { noise = result.classification[ix].value; Serial.println("Noise: "); Serial.println(noise); } for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix--) { lightoff = result.classification[ix].value; Serial.println("Light Off: "); Serial.print(lightoff); } lighton = 1- (noise +lightoff); Serial.println("Light ON: "); Serial.print(lighton); if (lighton > 0.50){ digitalWrite(led, HIGH); } if (lightoff > 0.50){ digitalWrite(led, LOW); }
پس از ایجاد تغییرات ، کد را در Arduino خود بارگذاری کنید. مانیتور سریال را با نرخ 115200 baud باز کنید.
اینگونه است که می توانید با استفاده از آردوینو سیستم تشخیص گفتار را بسازید و دستوراتی را برای کنترل دستگاهها بدهید.
موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
چجوری می تونم کتابخانه pdm.h رو دانلود کنم
سلام
میشه فایل های خودتون رو بزارید
سلام عزیز
فایل ها در انتهای مظلب قرار گرفته
سلام خسته نباشید خدمت شما سوال داشتم میخواستم بدونم چه کاری انجام بدیم که نیازی به گرفتن صدا توسط لپ تاپ نداشته باشیم مثلا یه وقت میخوایم اردوینو رو جایی نصب کنیم که دسترسی به لپ تاپ نیست میشه لطفا جواب بدید
سلام عزیز
متوجه منظورتون نشدم
سلام ممنون بابت پروژه و اینکه میشه آموزش ساخت ال ای دی بارانی با میکرو کنترلر ای وی آر رو بزارید
سلام عزیز
خوشحالم که براتون مفید بوده. سعی میکنیم در آینده قرار بدیم
سلام 32 کاناله باشه لطفا
سلام pdm.h در کتابخانه آردوینو نیست
سلام عزیز
در گوگل سرچ کنید
Pdm.h library download
سلام با آردوینو uno هم میشه
سلام عزیز
بله
میشه از برد arduino uno r3 استفاده کرد؟
سلام وقت بخیر
آیا امکان صحبت فارسی هم هست ؟ مثلا شماره بگیم و اون تشخیص بده
سلام و خسته نباشید. من میخوام چراغ ها پذیرایی یک خانه هنگام گفتن کلمه on روشن و هنگام گفتن کلمه off چراغ ها خاموش باشه و از برد Leonardo-R3 استفاده میخوام بکنم میشه یه توضیح بدید یا اگه آموزش خاص دیگه داره لینکش رو قرار بدید.خیلی ممنون
سوال منم هست
سلام من مسیر رو کامل رفتم ولی هنگام کامپایل کردن ارور زیر رو به من میده
Arduino: 1.8.13 (Windows 8.1), Board: “Arduino Nano, ATmega328P”
nano_ble33_sense_microphone:3:10: fatal error: PDM.h: No such file or directory
#include
^~~~~~~
compilation terminated.
exit status 1
PDM.h: No such file or directory
Board at COM3 is not available
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
منظور ارور pdm رو متوجه نمیشم و ممنون میشم راهنمایی کنید
سلام جناب، باید کتابخانه PDM.h رو نصب کنید.
سلام.خسته نباشید.چطور می شه این پروژه رو با اردوینوی معمولی انجام داد؟ ممنون می شم جواب بدین.با تشکر
سلام جناب، باید خودتون تست کنید به احتمال زیاد مشکلی پیش نمیاد
با سلام
وقتتون بخیر
من برای یک پروژه نیاز دارم تا از پردازش صوت و ارتباط اون با آردوینو استفاده کنم.
برای استفاده از میکروفون شما چه پیشنهادی رو به من میدید؟(به جز voice recognition module)
ممنون