آموزش, پروژه آردوینو, توصیه شده, مقاله های سیسوگ

ساخت ربات سخنگو با آردوینو و کتابخانه گفتار

ربات سخنگو سیسوگ

به نام خداوند جان آفرین، حکیم سخن در زبان آفرین.

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

با این آموزش سیسوگ همراه باشید.

 

در مورد روش‌های متداول تولید صدا در مدار، قبلاً در ابتدای مقاله “اجرای ملودی موسیقی به وسیله آردوینو و بازر (Buzzer)”  سیسوگ بحث شده است. با استفاده از کتابخانه‌ای که قرار است در این آموزش معرفی شود، شما می‌توانید از طریق واحدهای تایمر/کانتر داخلی میکروکنترلر و ایجاد فرکانس‌های PWM، حروف، کلمات، عبارات و اعداد انگلیسی از پیش تعریف شده را اجرا نمایید. اضافه کردن کلمات دیگر، همچنین تبدیل و تغییر آن برای زبان فارسی خیلی ارزش ندارد و برای این کار، بهتر است از مقاله نامبرده استفاده کنید. این کتابخانه با فریمورک آردوینو نوشته شده است. همان‌طور که پیش از این هم به آن اشاره شد، آردوینو صرفاً یک برد الکترونیکی نیست، بلکه یک فریمورک است که شما به وسیله آن قادر خواهید بود تا به جز بردهای آردوینو، برای تراشه‌های AVR و خیلی از بردهای الکترونیکی دیگر نیز کد بنویسید. اما با این حال، کدهای نوشته شده به زبان ++C هستند و شما می‌توانید با دانش برنامه نویسی خود، به راحتی آن را برای زبان C نیز ترجمه کنید.

 

دانلود و نصب کتابخانه گفتار آردوینو

از طریق منوی

Sketch -> Include Libary -> Manage Libaries…

و یا با استفاده از کلید ترکیبی Ctrl+Shift+I قسمت مدیریت کتابخانه‌ (لایبری)های آردوینو را باز کنید.

مدیریت کتابخانه ها در آردوینو

سپس در کادر جستجو، عبارت Talkie را وارد نمایید تا از طریق جستجوی اینترنتی، کتابخانه را پیدا کند. پس از یافتن تاکی، بر روی دکمه install

کلیک کنید تا فرآیند دانلود و نصب کتابخانه گفتار انجام شود.

جستجو و اضافه کردنکتابخانه گفتار آردوینو

 

آپلود کد بر روی آردوینو

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

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

تابع sayNumber از کتابخانه گفتار، یک مقدار عددی را به عنوان ورودی دریافت کرده و آن را به‌صورت گفتاری پخش می‌نماید.

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

سورس فایل‌های کتابخانه گفتار درمسیر زیر قرار دارند:

https://github.com/ArminJo/Talkie/tree/master/src

اگر از میان فایل‌های کتابخانه، فایل‌هایی که با پیشوند

Vocab_

هستند را باز کنید، می‌توانید لیستی از کلمات از قبل تعریف شده را ببینید و با اضافه کردن فایل هدر (header) مورد نظر به برنامه خود، از آن کلمات استفاده کنید.

همچنین کتابخانه گفتار، مثال‌های زیادی نیز برای اجرا دارد که می‌توانید آن‌ها را از منو زیر در آردوینو اجرا کنید:

File -> Examples -> Talkie

 

فیلتر و تقویت خروجی

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

 

مدار فیلتر و تقویت صورت از ورودی pwm

 

صدای ضبط شده از عملکرد مدار

امیدوارم این آموزش نیز برای شما مفید باشد.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

33 دیدگاه در “ساخت ربات سخنگو با آردوینو و کتابخانه گفتار

  1. Avatar for فاطمه فاطمه گفت:

    سلام میشه تو محیط های شبیه سازی مثل(پروتوس) انجام داد ؟

    1. Avatar photo Digi Boy گفت:

      درود بر شما.
      لایبری آردوینو برای پروتئوس هست، فکر می‌کنم شدنی باشه.

      1. Avatar for فاطمه فاطمه گفت:

        مهندس میشه سخت افزارهای مورد نیازشو بنویسید من این پروژرو تو محیط شبیه سازی میخوام پیاده سازی کنم

        1. Avatar photo Digi Boy گفت:

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

  2. Avatar for متین متین گفت:

    سلام.
    ببخشید من سه چهار بار مدار تقویت کننده رو بستم ولی کار نمی کنه اما بدون تقویت کنده کار می کنه. یه سوال اینکه اون vcc برای کانکتور شماره 3 چه می خوره؟ اخه به هیج جا وصل نیست.
    با تشکر

    1. Avatar photo Digi Boy گفت:

      درود بر شما.
      هر جا در مدار که برچسب VCC وجود دارد، بهم دیگر متصل هستند.

  3. Avatar for شروین شروین گفت:

    سلام.لطفا می شه بگین خازن های مدار باید چند ولت باشن؟

    1. Avatar photo Digi Boy گفت:

      درود بر شما، ولتاژ خازن، حداکثر ولتاژی است که می‌تواند آن خازن تحمل کند. از آنجایی که حداکثر ولتاژ این مدار 5 ولت می‌باشد، فکر می‌کنم اکثر خازن‌های موجود معمولاً تحمل بیشتر ازین مقدار را داشته باشند.
      اگر دوست داشتید، این پروژه رو هم بسازید و نتیجه اش رو هم بگید.
      ممنون.
      https://sisoog.com/2019/11/11/%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d9%85%d9%84%d9%88%d8%af%db%8c-%d9%85%d9%88%d8%b3%db%8c%d9%82%db%8c-%d8%a8%d9%87-%d9%88%d8%b3%db%8c%d9%84%d9%87-%d8%a2%d8%b1%d8%af%d9%88%db%8c%d9%86%d9%88-%d9%88-%d8%a8/

  4. Avatar for تسلا تسلا گفت:

    سلام.ببخشید چطور می شه کاری کرد که مثلا اگه یه سنسور جسمی رو تشخیص داد مثلا یه حرفی زده بشه؟ ممنون

    1. Avatar photo Digi Boy گفت:

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

  5. Avatar for شهریار شهریار گفت:

    سلام.ببخشید توی این مدار از بلند گو استفاده نمی شه؟ بعد اینکه این کانکتور به کجا وصل می شن؟ باتشکر

    1. Avatar photo Digi Boy گفت:

      درود بر شما.
      توی متن، اگر دقت کنید نوشته شده که:
      “مقدار ولتاژ از طریق پایه شماره 3 آردوینو پخش می‌شود.”
      یعنی اینکه آردوینو صدا رو روی این پایه تولید می کنه، اما شما بهتره این خروجی رو از یه فیلتر هم رد کنید و به یک تقویت کننده هم بدید که مدارش رسم شده. شماره 3 که VCC هست و برق مداره، باید به +5 ولت متصل بشه. شماره دو هم به پایه شماره 3 آردوینو و کانکتور شماره 1 هم به زمین.
      فکر می‌کنم به کمک یک بازر و بدون نیاز به این مدار هم بتونید صدا رو بشنوید، اما تست نکردم. احتمالاً این مطلب بنده هم به دردتون بخوره:
      https://sisoog.com/2019/11/11/%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d9%85%d9%84%d9%88%d8%af%db%8c-%d9%85%d9%88%d8%b3%db%8c%d9%82%db%8c-%d8%a8%d9%87-%d9%88%d8%b3%db%8c%d9%84%d9%87-%d8%a2%d8%b1%d8%af%d9%88%db%8c%d9%86%d9%88-%d9%88-%d8%a8/

  6. Avatar for متین متین گفت:

    سلام.ببخشید اون jp توی شماتیک چی هستن؟ با تشکر

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      کانکتور هستند برای وصل کردن اتصالات خارجی است

  7. Avatar for شهریار شهریار گفت:

    سلام.ببخشید توی شماتیمک،jp چی هست؟ با تشکر

    1. Avatar photo Digi Boy گفت:

      این قسمت محل کانکتور هست، اگر روی برد برد می‌بندید، ازین قسمت باید برق مورد نیاز مدار فیلتر و تقویت کننده و همین طور ورودی صدا رو بهش بدید و طرف دیگه هم یه خروجی هست که باید به بلندگو متصل به شه.
      توی اون یکی کامنت بیشتر براتون توضیح دادم.
      بازم اگر سؤالی بود بپرسید.

  8. Avatar for سبحان سبحان گفت:

    سلام .اون ایف های اول برنامه که قبل از ووید ستاپ اومده بود برا چی بود؟؟

    1. Avatar photo Digi Boy گفت:

      درود بر شما.
      از اونجایی که داخل کتابخونه صدای تعدادی از اعداد انگلیسی پایه‌ای به‌صورت از پیش ضبط شده وجود داره، برنامه سعی میکنه تا بقیه اعداد را با کمک ترکیبی از اون ها به سازه. مثلاً برای اینکه بتونه عدد 1003 رو بگه، میاد یکبار هزار رو میگه، یک بار 3 رو و بقیه صداهایی که لازمه بینش گفته بشه رو هم پخش میکنه. چون عملاً نمیشه گفتار تمام اعداد رو داخل حافظه کم آردوینو ضبط کرد. برای همین، قبل از تابع setup، اومده یک تابعی به نام sayNumber تعریف کرده.
      ورودی این تابع یه عدد بزرگه که به کمک اون ایف ها داخل تابع به اعداد ریزتر برای اجرا تبدیل می‌شن. داخل برنامه اصلی، وقتی که می‌خواهیم عددی رو دستگاه بخونه، این تابع رو صدا می‌زنیم.?

  9. Avatar for علیرضا علیرضا گفت:

    سلام نیاز به بلنگو دارد

  10. Avatar for مهدی احمدی مهدی احمدی گفت:

    سلام
    برای فارسی گویی چطور باید عمل کنیم؟

    ممنون

    1. Avatar photo Digi Boy گفت:

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

  11. Avatar for mahdi mahdi گفت:

    سلام
    میتونید کامل بگید که برای استفاده از صدا های دیگه در برنامه باید چیکار کنم و کد رو کجا قرار بدم.

    مثلا میخوام همین صدا رو در برنامه استفاده کنم:

    extern const uint8_t sp4_OFF[] PROGMEM={0x69,0xFB}

    1. Avatar photo Digi Boy گفت:

      شما هر کجا که میخواهید تابع پخش صدا رو صدا بزنید، میتونید این آرایه رو تعریف بکنید. اما بهتره در خطوط اولیه برنامه (قبل از setup آردوینو) باشه. اگه قصد دارید صدا های زیای رو تعریف کنید، یک فایل جدید بسازید و اون رو داخل برنامتون صدا بزنید. ولی توصیه میکنم از این لایبری فقط برای همان عبارات از پیش تعریف شده استفاده کنید، چون اضافه کردن صدا به این لایبری خیلی سخت هست. لینک زیر رو هم ببینید:
      https://github.com/going-digital/Talkie/issues/4
      به نظر من برای صدا های دیگه، از آرایه WAV استفاده کنید.

  12. Avatar for دهقان دهقان گفت:

    بنام خدا
    سلام بر همگی
    برنامه ها و کتابخانه هایی که برای نرم افزار آردینو می‌گذارید. برای vs code نیز اجرا کنید.
    ممنون میشم.

    1. Avatar photo Digi Boy گفت:

      درود بر شما. اگه آموزش بعدی روی آردوینو بود، حتما در محیط VSCODE اون رو اجرا می‌کنم.

  13. Avatar for Mr.Ahmad Mr.Ahmad گفت:

    خیلی عالی بود مرسی
    واقعا خسته نباشید

    1. Avatar photo Digi Boy گفت:

      درود بر شما. خوشحال هستم که مقاله برای شما مفید بوده.

  14. Avatar for محمد صادق محمد صادق گفت:

    بسیار عالی
    واقعا مطالبتون جذاب و بروز هست

    1. Avatar photo Digi Boy گفت:

      درود بر شما.
      سپاس گزارم.

  15. Avatar for کامبیز کامبیز گفت:

    خیلی جالب بود ممنون

    1. Avatar photo Digi Boy گفت:

      خواهش می‌کنم.

  16. Avatar for مسعود مسعود گفت:

    چه کارایی که ازین آردوینو بر نمیاد!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *