نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

تشخیص ارقام روی میکروکنترلر کنترل صوتی آردوینو با پردازش و Google Speech API

در این آموزش آردوینو، نحوه استفاده از اپلیکیشن موبایل اندروید و ماژول بلوتوث HC-05 برای کنترل صوتی LED را به شما نشان خواهیم داد.

برای این آموزش به حداقل کامپوننت نیاز داریم. پس از اتمام درس، می توانید طرح را پیچیده کنید و آن را با دستگاه هایی به دلخواه تکمیل کنید.

  • آردوینو UNO
  • ماژول بلوتوث HC-05
  • تخته نان
  • سیم ها
  • مقاومت 330 اهم
  • دیودهای ساطع کننده نور (LED)

مرحله 2: اتصال ماژول بلوتوث HC-05

ماژول بلوتوث استاندارد HC-05 دارای شش پین است. با این حال، در این پروژه ما فقط از 4 استفاده خواهیم کرد.

ما از پین VCC، پین GND، پین TXD و پین RXD استفاده خواهیم کرد. پین VCC ماژول بلوتوث به + 3.3 ولت از آردوینو متصل می شود. پایه GND ماژول به آردوینو GND (زمین) متصل می شود. پایه TX ماژول بلوتوث به پین ​​دیجیتال 0 (RXD) و پایه RXD به پین ​​دیجیتال 1 (TXD) متصل می شود.

مرحله 3: اتصال LED ها

گام بعدی در ایجاد LED های کنترل صدا، اتصال LED ها به آردوینو از طریق تخته نان است.

ابتدا انتهای کوتاه LED را به زمین وصل کنید. سپس انتهای بلند هر یک از LED ها را به یک مقاومت 330 اهم وصل کنید. در نهایت مقاومت جریان ال ای دی ها را به پین ​​های دیجیتال آردوینو وصل کنید.

در این پروژه، ما یک LED را به پایه دیجیتال 2، دیگری را به پایه دیجیتال 3 و آخرین LED را به پایه دیجیتال 4 متصل می کنیم.

مرحله 4: قدرت

برای این پروژه، ما می‌توانیم آردوینو را از طریق هر منبع تغذیه + 5 ولتی تغذیه کنیم، می‌توانید از پورت USB رایانه خود برای تغذیه آردوینو استفاده کنید، اما در این پروژه از یک باتری قابل حمل 5 ولت استفاده خواهیم کرد. قبل از اینکه منبع تغذیه را به آردوینو وصل کنید، مطمئن شوید که GND آردوینو به زمین برد برد متصل است.

مرحله 5: کد

کد پروژه ما در زیر آمده است.

مرحله 6: استفاده از اپلیکیشن موبایل

می توانید با دانلود برنامه اندروید - BT Voice Control for Arduino (BT Voice Control for Arduino) که توسط SimpleLabsIN ایجاد شده است، آزمایش پروژه خود را شروع کنید.

پس از دانلود و نصب برنامه بر روی گوشی اندرویدی خود، بر روی نوار منو در گوشه سمت راست بالا کلیک کرده و گزینه “Connect a robot” را انتخاب کنید. در پنجره جدیدی که ظاهر می شود، ماژول بلوتوث HC-05 را انتخاب کرده و وصل کنید.

اکنون وقتی از طریق برنامه با دستورات خاصی از کد به دستگاه خود صحبت می کنید، LED های خاصی باید روشن و خاموش شوند. به کدی که در آن دستورات نشان داده شده است نگاه دقیق تری بیندازید و کد خود را قرار دهید. به عنوان مثال، به جای "* switch on red"، می توانید به سادگی "red" را مشخص کنید. این دستورات را سریع تر، کوتاه تر و واضح تر می کند.

مرحله 7: نتیجه نهایی

نتیجه نهایی را می توانید در ویدیوی زیر مشاهده کنید.

ما برای شما پروژه های موفق آرزو می کنیم! فراموش نکنید که نظرات خود را در مورد پروژه در ما بنویسید

در این پروژه، من یک سیستم تشخیص چهره و یک سیستم ردیابی را ترکیب کردم.

به طور خلاصه، ماهیت پروژه: یک وب کم نصب شده بر روی یک مکانیزم چرخشی به رایانه ای با سیستم عامل ویندوز و با نرم افزار نصب شده متصل می شود. Opencv... اگر برنامه یک چهره را در میدان دید وب کم تشخیص دهد، مرکز چهره محاسبه می شود. مختصات X و Y به کنترلر آردوینو منتقل می شود که از طریق USB به کامپیوتر متصل می شود. به نوبه خود، کنترل کننده آردوینو، طبق دستورات دریافتی، دو سروموتور را کنترل می کند: در مختصات X و در مختصات Y، بنابراین. یک سیستم ردیابی ارائه شده است.

کتابخانه OpenCV (Open Source Computer Vision Library) قابل دانلود است. این کتابخانه چند پلتفرمی است، در حال حاضر برای سیستم عامل های زیر وجود دارد: Windows، Linux، Android، Mac OS و حتی iOS. این کتابخانه پردازش تصویر را در زمان واقعی ارائه می دهد. نوشته شده در C / C ++.

که این پروژه ترکیبی از راه حل های نرم و سخت است. پردازش تصویر بر روی رایانه انجام می شود و کنترل سروو با استفاده از یک کنترلر انجام می شود.

بنابراین آنچه من برای پروژه استفاده کردم:

نرم افزار:
آردوینو IDE 1.0 برای ویندوز

Microsoft Visual C ++ 2010 Express SP1
کتابخانه سری C ++ برای Win32 (توسط تیری اشنایدر)

اهن:
کامپیوتر ویندوز 7 SP1
Arduino Uno یا سازگار + PSU
2 سروو
وب کم USB

پس بزن بریم.

مرحله 1. نصب نرم افزار

1) اگر سیستم عامل ویندوز دارید، فایل OpenCV-2.3.1-win-superpack.exe (یا نسخه جدیدتر) را دانلود کرده و کتابخانه را نصب کنید.

2) Microsoft Visual C ++ 2010 Express را دانلود و نصب کنید. اگر نسخه 64 بیتی ویندوز دارید، باید Windows SDK را نیز دانلود کنید (اما برای نسخه 64 ممکن است مشکلاتی وجود داشته باشد، من هنوز نتوانستم OpenCV را تحت ویندوز 7 x64 کار کنم).

فرآیند راه اندازی OpenCV برای Visual C ++ را در وب سایت رسمی بخوانید.

مرحله 2. اتصال دوربین و سرووها

من ساختار را "بادوام" نکردم، زیرا پس از رسیدن به هدف نهایی، همه چیز را برای پروژه بعدی جدا می کنم.
من وب کم را به سروو موتور محور X وصل کردم و آن نیز به نوبه خود آن را به سروو موتور محور Y وصل کردم و کل این ساختار را در یک گیره از "دست های سوم" ثابت کردم.

مرحله 3. اتصال

اتصال سروو موتور:
پین زرد از سروو محور X به پایه 9 کنترلر آردوینو متصل می شود
پین زرد از سروو محور Y به پایه 10 کنترلر آردوینو متصل می شود
پین قرمز Vcc از سروو به پایه 5 ولت وصل می شود
پین سیاه رنگ GND از سروو به پین ​​GND کنترلر آردوینو متصل می شود

اتصال وب کم:
وب کم از طریق یک رابط USB به رایانه متصل می شود. برنامه C ++ وب کم را با شماره پورت USB شناسایی می کند. ممکن است لازم باشد پورت را در برنامه مشخص کنید.

اتصال کنترل کننده آردوینو UNO:
این کنترلر همچنین از طریق یک رابط USB به رایانه متصل می شود. یک پورت COM مجازی در سیستم ظاهر می شود که باید در کد برنامه C ++ گنجانده شود.

به نوعی ایده ایجاد کنترل صوتی آردوینو به وجود آمد، اما یک آردوینو کافی نیست، زیرا برای یک سیستم خانه هوشمند، شما همچنین باید با یک کامپیوتر و سیستم های آن ارتباط برقرار کنید.

یافتن راه حل:

BitVoicer
من با انواع مقاله‌هایی که از BitVoicer در ارتباط با آردوینو استفاده می‌کنند، برخورد کردم، اما کل مشکل این است که BitVoicer فقط روی ویندوز کار می‌کند و این اجازه نمی‌دهد از سیستم در دستگاه‌های ساده‌ای مانند Rasberry Pi در حال اجرا یونیکس استفاده کنید.
تشخیص صدای آردوینو
به لطف ماژول تشخیص صدا، آردوینو را می‌توان با صدا نیز کنترل کرد، اما تا به حال از خرید آن لذتی نبرده‌ام و هنگام استفاده از این ماژول مشکلاتی وجود دارد: تعداد محدودی دستورات، آموزش خسته‌کننده، دستورات جدید نیاز به یک چشمک زدن ماژول، که در صورت اشکال زدایی و نصب سیستم در حال حاضر یک نقطه ضعف است.

راه حل

من شروع به جستجوی یک راه حل بین پلتفرمی کردم که به سیستم اجازه دهد روی انواع سیستم عامل ها اجرا شود. این را پیدا کرد: کتابخانه گفتار به متن برای جاوا / پردازش... این مجموعه بر اساس زبان پیاده سازی شده است پردازش (جاوا)و Google Speach APIقبلاً در مورد گربه نوشته ایم. این راه حل به شما امکان می دهد صدای خود را در زمان واقعی ردیابی کنید فعال کردن خودکار ضبط ()، محدودیت حجم را مشخص کنید enableAutoThreshold ()، میکروفون های خارجی را وصل کنید getLineIn ()، زبان تشخیص را نشان می دهد setLanguage (رشته)... لیست کاملی از ویژگی ها و مشخصات در وب سایت توسعه دهنده موجود است: http://stt.getflourish.com. برای کار، به یک کلید Google Speech API نیاز داریم. نحوه دریافت آن در اینجا توضیح داده شده است: www.chromium.org/developers/how-tos/api-keys... تنها نکته منفی این است که Google Speech به شما اجازه می دهد روزانه تنها 50 درخواست را پردازش کنید، اما در عمل بیش از 500 درخواست پردازش می شود.

به منظور سهولت در پیمایش در متن در آینده، تمام منابعی را که قبلاً حاوی دستورات صوتی، اتصال به برد آردوینو، طرحی برای برد آردوینو، تأیید صوتی عبارات و هر چیز دیگری که قبلاً وجود دارد، پیوست می‌کنم. و کار: منابع. پس از دانلود، پوشه GoogleTTS در کتابخانه های پردازش قرار می گیرد "a. طرح آردوینو در پوشه GoogleTTS / ArduinoSerial است. همه چیز در Processing 3.0a4 نوشته شده است که در پیش از انتشار در وب سایت رسمی موجود است.

پیاده سازی("به فرمان من گوش کن!"):
ما در مورد شناسایی تصمیم گرفتیم. اکنون باید دستورات مورد نیاز خود را بگیریم و در مورد آنها تصمیم گیری کنیم. بخش مسئول این کار است:
دستورات void () (اگر (result.equals ("arduino")) (// در حال جستجو برای مطابقت // اجرای فرمان هنگام دریافت یک مسابقه) other if (result.equals ("چقدر")) (// اجرای فرمان هنگام دریافت مسابقه ))
پاسخ صوتی
اکنون ما به ابزاری نیاز داریم که در صورت یافتن همسانی با صدای انسان به ما پاسخ دهد. گوگل ترنسلیت یا بهتر است بگوییم ماژولی که متن را به صدا تبدیل می کند به عنوان ابزار پیاده سازی انتخاب شد. متن با یک درخواست به سرور گوگل ارسال می شود، به فایل صوتی تبدیل می شود و در قالب mp3 برای ما ارسال می شود. بخش مسئول این کار است:
void googleTTS (String txt، زبان رشته) (// متن با استفاده از دستور googleTTS ("text", "language") به صدا تبدیل می شود. String u = "http://translate.google.com/translate_tts?tl="; u = u + زبان + "& q = + txt; u = u.replace (""، "% 20")؛ امتحان کنید (URL URL = URL جدید (u)؛ امتحان کنید (URLconnection connection = url.openConnection () ؛ اتصال. setRequestProperty ("User-Agent"، "Mozilla / 4.0 (سازگار؛ MSIE 6.0؛ Windows NT 5.1؛ .NET CLR 1.0.3705;. .connect ()؛ InputStream = connection.getInputStream ()؛ فایل f = فایل جدید (sketchPath + "/" + txt + ".mp3")؛ OutputStream out = FileOutputStream جدید (f)؛ بایت buf = بایت جدید؛ int len؛ while ((len = is.read (buf))> 0) (out.write (buf, 0, len);) out.close (); is.close (); println ("فایل ایجاد شده:" + txt + ".mp3");) catch (IOException e) (e.printStackTrace ();)) catch (MalformedURLException e) (e.printStackTrace ();))

این بخش مسئول پردازش عبارات متنی به طور مستقیم است:
Void Void (String s) (// انجام شده توسط فرمان صوتی ("متن") println (s)؛ // برای نظارت بر متن استفاده می شود File f = new File (sketchPath + "/" + s + ".mp3"); // بررسی فایل // اگر فایل از قبل وجود دارد، فایل را پخش کنید اگر (f.exists ()) (println ("فایل از قبل وجود دارد! در حال پخش فایل!")؛ Player = minim.loadFile (s + ". mp3")؛ player.play ();) // اگر هنوز فایلی وجود ندارد، آن را ایجاد کنید (println ("هنوز فایلی وجود ندارد! minim.loadFile (s + ".mp3")؛ player.play ();))

نمونه ای از اجرای تشخیص و تایید صدا:
دستورات void () (اگر (نتیجه برابر است ("کامپیوتر")) (// به دنبال صداگذار منطبق ("گوش دادن")؛ // دریافت تایید صوتی // اجرای فرمان هنگام دریافت مطابقت))
او زنده است!

پردازش + آردوینو

خوب، به نظر می رسد که کار کرده است، اما چیزی کم است. حالا بیایید همه اینها را با آردوینو "دوست کنیم".
برای ارسال داده به آردوینو (برای کاربران مک و یونیکس) یک اتصال سریال را در پردازش راه اندازی کنید:
string portName = Serial.list (); myPort = سریال جدید (this, portName, 9600); myPort.bufferUntil ("\ n");

برای کاربران ویندوز:
String myPort = سریال جدید (این، "درگاه COM شما"، 9600)؛ myPort.bufferUntil ("\ n");

و هنگامی که مطابقت صدا پیدا شد، دستوری را به آنجا ارسال خواهیم کرد:
دستورات void () (if (result.equals ("روشن روشن کردن چراغ"))) (// اگر عبارت صوتی به عنوان "روشن روشن کردن چراغ" شناخته شد، سپس درخواست myPort.write ("بالا") را اجرا کنید؛ / / فرمان High را به صدابردار اتصال سریال می فرستد ("چراغ را روشن کنید")؛ // تایید صوتی اجرای فرمان) در غیر این صورت (result.equals ("نور را خاموش کنید")) (myPort.write ("کم" ")؛ // فرمان Low را به صداگذار اتصال سریال می فرستد ("چراغ را خاموش کنید")؛ // تایید // اجرای فرمان پس از دریافت مسابقه))

حال به سراغ برد آردوینو می رویم. باید به پورت سریال گوش کنیم و وقتی دستوری از لیست پیدا کردیم، طبق دستور عمل مورد نیاز را انجام دهیم. طرح بسیار ساده است:
int led = 13; // پین LED در تنظیم خالی برد () (Serial.begin (9600)؛ // راه اندازی اولیه اتصال سریال pinMode (led, OUTPUT)؛ // پین LED داده ها را منتقل می کند) حلقه خالی () (int i = 0؛ // متغیر برای تغذیه یک خط به بافر کاراکتر بافر؛ // آرایه ای از بافر برای درج یک خط در آن اگر (Serial.available ()) (// پورت سریال را برای تأخیر داده بررسی کنید (100) // خواندن را به بافر وارد کنید در حالی که (Serial.available () && i< 99) { buffer = Serial.read(); } //закрываем массив buffer="\0"; String val = buffer; if (val == "High") { // Если получили значение High Serial.println("Led is On"); // Отправляем в Serial подтверждение получения digitalWrite(led, HIGH); // Включаем светодиод } if (val == "Low") { // Если получили значение Low Serial.println("Led is Off"); // Отправляем в Serial подтверждение получения digitalWrite(led, LOW); // Выключаем светодиод } } }
همه چیز. چک کردن.

مشکلات و برنامه ها:

زیرا من قبل از این مدت هیچ برنامه نویسی انجام نداده ام، برخی از موارد را در فرآیند اشکال زدایی کاملاً درک نمی کنم. اگر کسی به من بگوید چگونه مشکلات را از لیست زیر حل کنم ممنون می شوم:

اساسی ترین مشکل این است که کل عبارت صوتی گفته نمی شود. آخرین حروف ناپدید می شوند. اگرچه فایل صوتی به شکل عادی از سرور گوگل می آید. همانطور که من وضعیت را درک می کنم: مشکل پخش کننده صوتی، اما دقیقا کجا هنوز مشخص نیست.
- قبلاً نوشتم که Google Speech API دارای محدودیت 50 درخواست در روز است ، اما در واقع بیشتر به نظر می رسد. در هر صورت این کافی نیست. من قصد دارم شناسایی محلی دستور اصلی را ثبت کنم و فقط بعد از شناسایی آن، بقیه متن را برای پردازش توسط گوگل ارسال کنم، دنبال راه حل هستم.
- فکر می کنم ارسال دستورات به سپر اترنت آردوینو ضرری ندارد، زیرا برخی از سیستم ها ممکن است در فاصله مناسبی از کامپیوتر میزبان قرار داشته باشند و اتصال سریال دیگر در اینجا کار نخواهد کرد. من با این تصمیم یکی از همین روزها، tk. من یک روتر برای اتصال آردوینو با محافظ اترنت به آن ندارم.

همین! لطفا برای خطوط کد به شدت قضاوت نکنید! من تازه شروع به مطالعه این سکوی پرشی کرده ام و اگر بینی خود را در مورد اینکه چگونه انجام آن ضروری نیست و به من نشان دهید که چگونه آن را انجام دهم بسیار سپاسگزار خواهم بود. همچنین خوشحال خواهم شد که سایر افراد علاقه مند به این پروژه بپیوندند - من همیشه برای ارتباط باز هستم!

آیا به یاد دارید که چند سال پیش (و شاید هم اکنون) ایده کنترل نور اتاق با کف زدن چگونه رایج بود؟ و بالاخره خیلی راحت است، در رختخواب دراز می کشی، خیلی تنبلی می کنی که بلند شوی و دستت را از روی نور کف بزنی یا به خانه بروی، هوا تاریک است، برای مدت طولانی سوئیچ را احساس کنی، و اینجا از همان آستانه یک یا دو کف زدن است و چراغ از قبل روشن است. به نظر من این مفهوم هنوز هم مرتبط است، اما می توان فناوری های بالاتری را در مقایسه با 5 سال، 10 سال پیش، روی آن اعمال کرد. اکنون با مبلغ نسبتاً کمی می توانید چندین قسمت را خریداری کرده و ساختار را برای عملکردهای مشابه برنامه ریزی کنید که در ادامه به آنها پرداخته خواهد شد.

امروز ما یک ماژول طراحی شده برای تشخیص دستورات صوتی (از جمله فقط یک صدا در یک فرمان صوتی ضبط شده) را در نظر خواهیم گرفت - ماژول تشخیص صدا V3.1 (V3)یا نام رمزگذاری رایج FZ0475.

مجموعه تحویل شامل خود ماژول (برد مدار چاپی با کیفیت بسیار خوب)، یک میکروفون روی پایه انعطاف پذیر با کانکتور جک 3.5 میلی متری و کنتاکت های زاویه دار PLS با گام 2.56 میلی متری برای برد ماژول (قابل استفاده نیستند). اگر از طریق دیگری به مخاطبین ماژول متصل شوید).

امروزه انواع مختلفی از ماژول ها با عملکرد مشابه از تولید کنندگان و توسعه دهندگان یا طرح های مختلف وجود دارد. این ماژول تشخیص صدا، به نظر من، تعادل خاصی بین هزینه، عملکرد، راحتی دارد. ماژول EasyVR قدرتمندتر و به طور قابل توجهی گران تر خواهد بود. ماژول‌های مبتنی بر LD3320 ارزان‌تر و ناخوشایند خواهند بود (دست‌کم به این دلیل که یافتن توضیحات معمولی روی آنها آسان نیست، اما در غیر این صورت از قبل ذهنی است).

ویژگی های ماژول تشخیص صدا V3.1 (V3):

  • ولتاژ تغذیه - 5 ولت
  • مصرف جریان - تا 40 میلی آمپر
  • رابط ها - UART، GPIO
  • دقت تشخیص - 99٪ (در شرایط ایده آل)
  • محدوده عملکرد - بستگی به میکروفون استفاده شده دارد، برای میکروفون استاندارد کیت، برد 0.5 - 1 متر از حداکثر فاصله با صدای کافی بلند است، اگر صدا آرام باشد، باید میکروفون را نزدیک کنید. به دهان شما

ماژول یک برد کوچک کوچک است که روی آن میکروکنترلر اصلی (بلک لکه)، کانکتور جک 3.5 میلی متری برای اتصال میکروفون، تراشه فلش مموری، GPIO، UART و کنتاکت های برق، یک جفت LED و بقیه بدنه لازم است. کیت لازم برای عملکرد مدار قرار دارد - مقاومت ها، خازن ها، کوارتز. اندازه جمع و جور برد به شما این امکان را می دهد که به راحتی ماژول را در طرح های خود ادغام کنید. برای افزایش دامنه فرمان های صوتی، احتمالاً استفاده از میکروفون با تقویت کننده ضروری است. با رسیدن به محدوده قابل قبول، ماژول برای استفاده در سیستم های خانه هوشمند مناسب است. بدون تغییر برای بهبود محدوده عملیاتی، ماژول را می توان در سیستم های کنترل دسکتاپ و همچنین در سیستم های امنیتی (کنترل و محدودیت دسترسی) استفاده کرد. با یک میکروفون استاندارد، به دلیل برد کوتاه، استفاده از ماژول تشخیص صدا به عنوان هدست و انتقال بی سیم دستورات به کنترل کننده ای که چیزی را با استفاده از باتری و ماژول های بی سیم (مثلا HC-05 یا HC-12) کنترل می کند، ایمن تر است. یا هر مناسب دیگری). ماژول قادر است بدون میکروکنترلر خارجی کار کند، از آنجایی که سازنده استقلال عملکردی را تعیین کرده است، فقط لازم است یک بار دستورات صوتی را ضبط کنید و تنظیمات را برای عملکرد مستقل با استفاده از یک دستگاه خارجی (PC یا MK) تنظیم کنید.

بنابراین، برای شروع کار با ماژول تشخیص صدا، باید آن را یا به یک کامپیوتر (یک آداپتور USB-UART مورد نیاز است) یا به یک میکروکنترلر متصل کنیم (برای کنترل ماژول باید یک کد برنامه ایجاد کنیم).

هیچ تفاوت اساسی در کنترل و پیکربندی ماژول بین اتصال به رایانه یا میکروکنترلر وجود ندارد، بنابراین، برای وضوح، از رایانه شخصی برای پیکربندی استفاده خواهیم کرد. دستورالعمل ها دستورات ماژول را به شکل هگزادسیمال توصیف می کنند، بنابراین، برای راحتی، شما همچنین به ترمینالی نیاز دارید که بایت ها را به شکل هگزادسیمال منتقل می کند، به عنوان مثال، AccessPort (در پایان مقاله قابل دانلود است). علاوه بر این، سازنده بر روی کاربران پلتفرم آردوینو تمرکز کرده و کتابخانه ای برای استفاده از این ماژول و دستورالعمل های استفاده از این کتابخانه ارائه می کند. با این حال، بسیاری از ما علاقه بیشتری به کار مستقیم با خود ماژول داریم تا از طریق پوشش آردوینو.

قبل از شروع کار، بیایید تابلو را مشخص کنیم. در طرفین برد در سمت راست یک کانکتور برای میکروفون وجود دارد، در طرف دیگر چهار پین رابط UART وجود دارد. در زیر هشت پین مورد استفاده برای خروجی سیگنال‌هایی وجود دارد که توسط تشخیص صدا فعال می‌شوند. در بالا، در صورت استفاده از این تابع، از چهار کنتاکت پیکربندی شده به عنوان ورودی سیگنال برای جابه‌جایی بین گروه‌ها (هر کدام هفت فرمان صوتی) از دستورات استفاده می‌شود. و شش پین دیگر در بالا احتمالا برای اتصال به حافظه ماژول استفاده می شود.

یک سیستم فرمان برای عملیات و پیکربندی ماژول استفاده می شود. نمای کلی قاب به شرح زیر است:

از چهار دستور اول 00، 01، 02، 03 برای بررسی وضعیت ماژول و تنظیمات آن استفاده می شود. شش دستور بعدی 10، 11، 12، 13، 14، 15 برای تغییر تنظیمات ماژول از جمله کنترل پورت های خروجی و تنظیمات بارگذاری خودکار استفاده می شود. علاوه بر این، از سه دستور 20،21، 22 برای ضبط دستورات صوتی استفاده می شود. سه دستور بعدی 30،31،32 برای کنترل تشخیص دستورات صوتی استفاده می شود. دستورات 0A، 0D، FF فقط هنگام برگرداندن داده ها توسط خود ماژول استفاده می شود. در واقع، دستورات زیادی وجود ندارد و همه اینها آنقدر ترسناک نیست که در نگاه اول در مستندات ماژول به نظر می رسد. بیایید نگاهی به دستورات مورد نیاز برای کار با ماژول تشخیص صدا بیاندازیم. همه تیم های موجود عملی نیستند.

قابل توجه است که ماژول می تواند بدون میکروکنترلر کنترل خارجی کار کند و همچنین به طور مستقل چیزی را با پورت های خروجی خود کنترل کند. برای انجام این کار، باید آنها را پیکربندی کنید (فرمان های 12، 13، 14).

تیم 12 - پیکربندی پورت های خروجی این دستور حالت عملکرد درگاه های خروجی ماژول تشخیص صدا را تنظیم می کند.

فرمت: | AA | 03 | 12 | حالت | 0A |

در جایی که MODE می تواند چهار مقدار داشته باشد: 0 - حالت پالس (هنگامی که یک فرمان صوتی فعال می شود، خروجی مربوط به فرمان وضعیت خود را برای زمان تعیین شده توسط فرمان 13 تغییر می دهد)، 1 - حالت سوئیچ (تغییر یا چرخش) (هر بار) یک فرمان صوتی راه اندازی می شود، خروجی مربوط به فرمان صوتی معکوس می شود)، 2 - حالت روشن (هنگامی که یک فرمان صوتی فعال می شود، خروجی به حالت یک واحد منطقی می رود و دیگر به حالت منطقی نمی رود. صفر، تنظیم مجدد با دستور 14 انجام می شود، 3 - حالت خاموش (شبیه به حالت روشن، اما برعکس، زمانی که فرمان صوتی فعال می شود، خروجی به حالت صفر منطقی می رود).

کاربردی ترین حالت سوئیچ است که به دستورات غیر ضروری نیاز ندارد. حالت پالس خوب است، اما منطق این حالت به این صورت است که وقتی یک فرمان صوتی راه اندازی می شود، یک واحد منطقی را یک بار، برای مدتی از 10 میلی ثانیه تا 1 ثانیه، خروجی می دهد. کافی نیست. هر چند بسته به نیازهای این حالت، می تواند مفید باشد. حالت های روشن و خاموش به طور نامناسبی اجرا می شوند، زیرا به اجرای دستورات اضافی نیاز دارند.

تیم 13 - تنظیم مدت زمان پالس حالت مربوطه.

فرمت: | AA | 03 | 13 | سطح | 0A |

جایی که LEVEL مقداری از 00 تا 0F را می گیرد (مطابق با مدت زمان 10 میلی ثانیه تا 1 ثانیه).

مرحله مدت زمان
0x00 10 میلی ثانیه
0x01 15 میلی ثانیه
0x02 20 میلی‌ثانیه
0x03 25 میلی‌ثانیه
0x04 30 میلی‌ثانیه
0x05 35 میلی‌ثانیه
0x06 40 میلی‌ثانیه
0x07 45 میلی‌ثانیه
0x08 50 میلی‌ثانیه
0x09 75 میلی‌ثانیه
0x0A 100 میلی‌ثانیه
0x0B 200 میلی‌ثانیه
0x0C 300 میلی‌ثانیه
0x0D 400 میلی‌ثانیه
0x0E 500 میلی‌ثانیه
0x0F 1 ثانیه

تیم 14 - بازنشانی پورت های خروجی به حالتی که توسط حالت های روشن یا خاموش مشخص شده است.

فرمت: | AA | 03 | 14 | FF | 0A | - بازنشانی تمام پورت های خروجی

| AA | 03 + n | 14 | IO0 | ... | یون | 0A | - پورت های خروجی انتخاب شده را بازنشانی کنید

جایی که n تعداد پین هایی است که به طور انتخابی بازنشانی می شوند، IO0 ... IOn فهرست این پین ها در قاب ارسال داده است.

علاوه بر این، برای اینکه دستورات صوتی اجرا شوند، باید در ماژول (آموزش ماژول) ضبط شوند. در اینجا یک محدودیت وجود دارد. تنها هفت فرمان را می توان در یک زمان تشخیص داد، اگرچه بسیاری دیگر را می توان ضبط کرد. به منظور گسترش دامنه فرمان های صوتی که تشخیص داده خواهد شد، از سیستم گروه بندی (فرمان 32) استفاده شده است که توسط پورت های ورودی ماژول کنترل می شود. با تنظیم پیکربندی سیگنال ها بر روی این کنتاکت ها، انتخاب گروهی از دستورات که شناسایی خواهند شد انجام می شود. این به دلیل عملکرد محدود ماژول کنترل کننده صوتی استفاده شده است.

تیم 20 - ضبط یک یا چند فرمان صوتی

فرمت: | AA | 03 + n | 20 | R0 | ... | Rn | 0A |

در جایی که n تعداد دستورات صوتی ضبط شده است (اگر یک دستور n = 0، دو دستور n = 1 و غیره مطابق با فرمت کلی انتقال فرمان Lenght - طول ضبط شود)، R0 ... Rn است. تعداد دستورات صوتی (AA 03 20 03 0A - فرمان ضبط سومین فرمان صوتی).

تیم 21 - ضبط یک فرمان صوتی و تنظیم امضا برای آن.

فرمت: | AA | 03 + سیگلن | 21 | ثبت | SIG | 0A |

در جایی که RECORD تعداد فرمان صوتی است، SIG امضا است (می تواند از چندین بایت تشکیل شده باشد، به طوری که در صورت لزوم هر بایت می تواند با رمزگذاری نویسه الفبا مطابقت داشته باشد)، SIGLEN تعداد بایت هایی است که امضا را تشکیل می دهند. .

تیم 22 - یک امضا برای فرمان صوتی انتخاب شده اضافه یا حذف کنید.

فرمت: | AA | 03 + سیگلن | 22 | ثبت | SIG | 0A | - اضافه کردن امضا

| AA | 03 | 22 | ثبت | 0A | - حذف امضا

در فرآیند ضبط دستورات صوتی، لازم است توسط سیگنال های LED هدایت شود. پس از وارد کردن فرمانی که فرآیند ضبط را شروع می کند، LED زرد (نارنجی) به سرعت شروع به چشمک زدن می کند. به محض روشن شدن LED قرمز، باید یک فرمان صوتی را به میکروفون بگویید. در صورت موفقیت آمیز بودن، LED زرد (نارنجی) روشن می شود و دوباره قرمز می شود - باید فرمان صوتی را تأیید کنید، دوباره آن را بگویید. در صورت موفقیت آمیز بودن، هر دو LED روشن می شوند - فرمان صوتی ذخیره می شود.

پس از ضبط دستورات صوتی در ماژول، تا زمانی که این دستورات در "Recognizer" ماژول قرار نگیرند، هیچ اتفاقی نمی افتد. برای این کار از دستور 30 ​​استفاده کنید. پس از اجرای این دستور، ماژول شروع به انتظار برای مطابقت فرمان صوتی با نمونه های ذخیره شده می کند. تنها هفت فرمان را می توان در یک زمان تشخیص داد. در این حالت، LED زرد (نارنجی) روی برد ماژول به آرامی چشمک می زند.

تیم 30 - سوابق را در "Recognizer" ماژول بارگذاری کنید.

فرمت: | AA | 2 + n | 30 | R0 | ... | Rn | 0A |

فرمت پاسخ به شرح زیر است: | AA | 07 | 0D | 00 | GRPM | R | RI | سیگلن | SIG | 0A |

در جایی که GRPM اطلاعات مربوط به گروهی است که فرمان به آن تعلق دارد (در صورت استفاده)، R فرمان صوتی شناخته شده است (اگر از امضاها استفاده نشود، می توان از این داده ها برای تشخیص فرمان از یکدیگر استفاده کرد)، RI شاخص فرمان در شناساگر، SIGLEN طول امضا بر حسب بایت است، SIG - امضا (در صورت استفاده).

و در نهایت، اگر قرار است ماژول به تنهایی کار کند، باید از دستور 15 استفاده کنید تا طبق تنظیمات از پیش تعیین شده شناساگر به طور خودکار شروع شود. در این حالت، ماژول تشخیص صدا پس از روشن شدن، بدون نیاز به مقداردهی اولیه، به تنهایی کار خواهد کرد.

تیم 15 - تنظیم autorun شناساگر در هنگام راه اندازی.

فرمت: | AA | 03 | 15 | 00 | 0A | - غیرفعال کردن عملکرد autorun

| AA | 03 + n | 15 | BITMAP | R0 | ... | Rn | 0A | - تنظیم عملکرد autorun

برای کنترل صحت اجرای دستورات، هر کدام از آنها با پاسخ خود مطابقت دارد. در صورت وجود چنین نیازی، تمام داده ها را می توان در مستندات مربوط به ماژول تشخیص صدا پیوست شده در انتهای مقاله یافت. فراموش نکنید که تمام مقادیر عددی در نمایش داده می شوند هگزادسیمالفرم.

بنابراین، با استفاده از سیستم فرمان، امکان پیکربندی انعطاف پذیر ماژول تشخیص صدا برای استفاده برای اهداف مختلف وجود دارد. اگر کنترل ساده پورت های خروجی ماژول کافی نیست، ماژول تشخیص صدا را می توان از طریق UART یا GPIO به دستگاه های دیگر متصل کرد. برای اتصال بی سیم، می توانید از ماژول هایی که قبلاً در مورد آنها صحبت شد استفاده کنید.

با استفاده از ماژول های بی سیم، می توانید ماژول تشخیص صدا را در صورت لزوم به هر دستگاهی متصل کنید. به عنوان مثال، اجازه دهید آن را به یک میکروکنترلر متصل کنیم، که LED های مربوط به داده های دریافتی در تشخیص دستورات صوتی را کنترل می کند. ماژول‌های بی‌سیم امکان انتقال داده‌ها را در دو جهت می‌دهند، بنابراین در صورت لزوم می‌توان کدی برای مقداردهی اولیه ماژول صوتی و ضبط دستورات صوتی برای میکروکنترلر نوشت. در مورد ما، چندین فرمان صوتی قبلاً در ماژول تحت کنترل رایانه شخصی ضبط شده است و شروع خودکار تشخیص با روشن شدن برق پیکربندی می شود، بنابراین، برای میکروکنترلر، ما فقط دریافت داده ها و کنترل LED ها را یادداشت می کنیم. در رابطه با این داده ها میکروکنترلر STM32F103C8T6 از USART1 برای دریافت داده و پین های PB10 ... PB15 پیکربندی شده برای خروجی استفاده می کند که توسط LED ها کنترل می شوند. کد منبع در ضمیمه انتهای مقاله قرار گرفته است.

کمی در مورد نتایج

تشخیص صدا کاملاً دقیق نیست. بستگی به دستورات انتخابی و صدای کاربر دارد. در حین تست چندین نکته منفی پیدا کردم. هنگام آموزش دستورات ماژول، دستورات صوتی "یک" و "دو" انتخاب شدند. دستور "دو" همیشه واضح بود، اما دستور "یک" اغلب به عنوان دستور "دو" تعریف می شد و بر این اساس، کد فرمان دوم اجرا می شد. علاوه بر این، هنگام تلاش برای دادن دستورات صوتی به زبان انگلیسی (و آنها در ماژول صوتی ضبط نمی شدند)، دستور "یک" تقریباً همیشه به عنوان "دو" تعریف می شد. شاید همه چیز در مورد تلفظ، لحن و سایر جنبه های صدای انسان باشد که در الگوریتم رمزگذاری ماژول صوتی دستورات گفتاری تعبیه شده است. با این حال، تولید کنندگان این اسرار را در حوزه عمومی اعلام نمی کنند. علاوه بر این، کیفیت تشخیص تحت تأثیر شرایط نویز خارجی - زمزمه خیابان، صدای فن، صداهای تصادفی و غیره قرار دارد. سازنده توجه خود را به این واقعیت جلب می کند که سطح بالایی از دقت تشخیص در شرایط ایده آل رخ می دهد. ایده استفاده از میکروفون با آمپلی‌فایر، البته برد دستگاه را افزایش می‌دهد، اما احتمال خطا را نیز افزایش می‌دهد، زیرا تقویت صدا با تقویت نویز نیز اتفاق می‌افتد.

در نهایت، اگر نیازهای کمی برای تشخیص صدا و اجرای دستورات صوتی دارید، این ماژول صادقانه پول خرج شده برای آن را محاسبه می کند.

فهرست عناصر رادیویی

تعیین یک نوع فرقه تعداد توجه داشته باشیدنمرهدفترچه من
IC1 MK STM32

STM32F103C8

1 داخل دفترچه یادداشت
VR1 تنظیم کننده خطی

AMS1117-3.3

1 داخل دفترچه یادداشت
MOD1، MOD3 ماژول بی سیمHC-122 داخل دفترچه یادداشت
MOD2 ماژول تشخیص صداVR3.11 داخل دفترچه یادداشت
Z1 کوارتز8 مگاهرتز1
  • DIY یا خودتان آن را انجام دهید
  • سلام Giktimes!

    همانطور که از نام آن پیداست، این مقاله بر روی تشخیص اعداد در میکروکنترلر تمرکز دارد. من می خواهم فوراً رزرو کنم که این مقاله کد منبع را ارائه نمی دهد، فناوری یا الگوریتم تشخیص را در نظر نمی گیرد، فقط می گویم که از ایده های یک رویکرد سیستماتیک استفاده می شود. برخی از آنها در مقالات ما توضیح داده شده است (و ببینید). این به این دلیل است که رویکرد ما به اصالت گرایش دارد، اما نیازمند روشن شدن برخی مسائل است.ممکن است کسی بگوید: "مقاله دیگری در مورد برنامه نویسی میکروکنترلرها." به‌هیچ‌وجه، جست‌وجوی چنین پروژه‌هایی به استثنای این مورد، هیچ نتیجه قابل فهمی در بر نداشت ویدئو... یک چیز از بحث های موجود در انجمن ها مشخص است: ایده دستیابی به چنین دستگاهی (دوربین + میکروکنترلر = نتیجه تشخیص در خروجی و نه فقط یک تصویر گرفته شده) به ذهن بسیاری رسید، اما بدون اجرا باقی ماند. بله، و تشخیص، طبق نظر عمومی، به منابع محاسباتی زیادی نیاز دارد و میکروکنترلرها برای این کار مناسب نیستند، به ویژه، اظهاراتی در مورد آردوینو وجود دارد که این امر به طور کلی غیرممکن است. اگه جالب شد لطفا زیر گربه.

    برای اینکه هیچ سوال واضحی وجود نداشته باشد، به آنها پاسخ خواهیم داد:

    • نه، این یک سرویس تشخیص تصویر نیست
    • نه، این OpenCV نیست
    • نه، اینها شبکه های عصبی نیستند
    • تجزیه و تحلیل مورفولوژیکی اشیاء تشکیل دهنده شکل استفاده می شود
    • بله، تشخیص توسط میکروکنترلر انجام می شود!

    اندیشه

    به طور خلاصه، همه چیز با میل به امتحان کردن و آزمایش ایده هایم در تشخیص تصویر شروع شد. در طول بحث به این نتیجه رسیدیم که می توانیم با قدرت محاسباتی کم این مشکل را حل کنیم. به دلایل واضح، جزئیات این بحث ها را شرح نمی دهیم.

    نصب و راه اندازی

    بنابراین، وظیفه تعیین شده است، اجرا مورد نیاز است. بدون انحراف از آنچه از قبل ایجاد شده است
    آنچه در دست است را می گیریم. و چند Arduino Uno، یک ماوس اپتیکال قدیمی و یک درایو CD در دسترس بود. به هر حال، از ما خواسته شد که از حسگر یک ماوس نوری به عنوان دوربین استفاده کنیم تا تصویری از آنچه مدت‌ها پیش خوانده‌ایم، و در واقع تمام مواد "موس" را به دست آوریم. تنها کاری که باید انجام می‌دادیم این بود که حسگر و تمام تسمه‌های آن را برای سهولت در استفاده از آن جدا می‌کردیم و لنز را به آن چسب می‌زدیم که با احتیاط آن را از درایو سی‌دی جدا کردیم. این برای افزایش فاصله سوژه تا دوربین ضروری بود وگرنه اعداد سایز ما مناسب نبود و فقط قسمت کوچکی قابل مشاهده بود. به هر حال، در جلوی لنز از درایو سی دی، ما سعی کردیم اپتیک را از وب کم وصل کنیم، اما به نوعی درست نشد.

    بیشتر


    سپس این سوال مطرح شد که چگونه این دوربین را روی سوژه قرار دهیم. یک میکروسکوپ قدیمی شکسته که بیکار خوابیده بود کمک زیادی به ما کرد. با احترام مکانیسم کنترل مرحله موضوع را از او حذف کرد. این مکانیسم به ما اجازه داد دوربین را فقط در امتداد دو محور حرکت دهیم و بلافاصله ایده استفاده از راهنمای لیزر سر از درایو CD به وجود آمد. همه اینها روی کیس از درایو سی دی که مدت هاست رنج می برد، ثابت شد. در نتیجه، مکانیسم موقعیت یابی دوربین جالبی را به دست آوردیم.

    بیشتر


    مجموع: ما یک دوربین به اصطلاح داریم، مکانیزم موقعیت یابی وجود دارد، باقی می ماند که یک کاغذ با یک عدد قرار دهیم و یک تصویر از دوربین بگیریم. «مشکلات» از اینجا شروع شد. از آنجایی که ویژگی های سنسور نوری "موس" برای استفاده به عنوان دوربین بسیار کمیاب است، آنها شروع به بداهه سازی با نور پس زمینه کردند.

    بیشتر


    مشخص شد که فقط برجسته کردن کار نمی کند، شدت مهم است، جهت نور خارجی نیز تنظیمات را انجام می دهد. برای کنترل شدت نور پس زمینه مجبور شدم یک "اردوینکا" دیگر را روشن کنم ( به طور طبیعی می توان آن را به روش دیگری کنترل کرد، اما بعدا و نه تنها نور پس زمینه، بلکه با تغییر اعداد روی نشانگر). در نهایت معلوم شد که عکاسی در نور بسیار بهتر است. و اگر، برای مثال، از یک نشانگر هفت بخش نورانی به عنوان هدف استفاده کنید، سنسور به طور کلی آن را کاملاً می بیند. بنابراین، اکنون یک نشانگر و یک نوار با اعداد سفید پر شده با پس‌زمینه سیاه به عنوان اشیاء تیراندازی داریم.

    در سمت چپ تصویری در مقیاس خاکستری است که از نشانگر به دست آمده است (چنین تصویری را از سنسور دریافت می کنیم)، در سمت راست باینریزه شده است.

    بیشتر


    نمای کلی مجمع


    نصب اولیه


    واحد تشخیص


    نقش مهمی در نصب ما توسط واحد به اصطلاح شناسایی (در تصویر بالا) ایفا می شود. همانطور که می بینید، از یک Arduino Uno و یک فرستنده معروف وای فای تشکیل شده است. ESP8266... بگذارید توضیح بدهم، ما به یک فرستنده وای فای نیاز داریم تا بتوانیم نتیجه تشخیص را در تبلت ببینیم. برنامه روی تبلت یک درخواست ارسال می کند، "arduinka"، درخواست را دریافت می کند، تصویر را از حسگر ماوس "گرفته"، سپس آن را باینریزه می کند. پس از باینری سازی، شناخت اتفاق می افتد و پس از اتمام آن، پاسخ شکل می گیرد. در پاسخ، ما نتیجه تشخیص و 41 بایت را برای ایجاد یک تصویر باینریزه بر روی صفحه نمایش تبلت ارسال می کنیم تا واضح باشد.

    اگر به گذشته نگاه کنید، "arduinka" دارای عملکرد خوبی است: کار با دوربین، و تشخیص، و کار با esp8266. چیزی که نمی تواند بر کار تأثیر بگذارد - مجبور بودم با کمبود حافظه کنار بیایم. هرگز فکر نمی کردم که مجبور شوم هر بایت حافظه را بازیابی کنم.

    نمایش فرآیند شناسایی

    به جای نتیجه گیری

    این همه، در واقع. هنوز کار زیادی در پیش است. و اولین کار: تشخیص اعداد (رشته اعداد) گرفته شده توسط دوربین "انسان" (نه "سنسور ماوس") و انتقال فناوری توسعه یافته به ESP8266 و کاهش شدت مبارزه برای هر بایت حافظه.

    ما خوشحال خواهیم شد که به سوالات شما پاسخ دهیم.

    مقالات مرتبط برتر