شِفر (کود) جستجو

هوش مصنوعی یک آهنگ مینویسد و این ESP32 به شما یاد میدهد آن را بنوازید

هوش مصنوعی یک آهنگ مینویسد و این ESP32 به شما یاد میدهد آن را بنوازید

از یک هوش مصنوعی بخواهید آهنگی بنویسد، آن را بشنوید که نواخته میشود، سپس اجازه دهید برد نواختن آن را به شما آموزش دهد

یک حالت انتخاب کنید، روی WRITE ضربه بزنید، و یک هوش مصنوعی ملودی کوتاهی میسازد. برد آن را پخش میکند و هر کلید را هنگام نواختن روشن میکند. سپس روی LEARN ضربه بزنید و به یک معلم تبدیل میشود: هر بار یک کلید را روشن میکند و منتظر میماند تا شما آن را فشار دهید، نتها یکییکی، تا زمانی که کل آهنگ را خودتان نواخته باشید.

۹۲۲-این مقاله هوش مصنوعی موسیقی است (مقاله فعلی)

۹۲۳-پروژه پیانو اینجا است.

در هر لحظه همچنان یک پیانوی کامل ۲۱ کلیدی است - فقط آن را بنوازید.

آهنگساز و معلم هوش مصنوعی موسیقی در حال اجرا روی برد MaTouch AI ESP32-S3
آهنگساز و معلم هوش مصنوعی موسیقی در حال اجرا روی برد MaTouch AI ESP32-S3

صفحه نمایش

صفحه اصلی هوش مصنوعی موسیقی روی MaTouch AI ESP32-S3، با نمایش شش دکمه
صفحه اصلی هوش مصنوعی موسیقی روی MaTouch AI ESP32-S3، با نمایش شش دکمه

شش دکمه در بالا، سپس یک صفحهکلید ۲۱ کلیدی - سه ردیف هفتتایی، از C3 تا B5. برخلاف پروژه پیانو، در اینجا چیدمان سیاهوسفید وجود ندارد، زیرا هوش مصنوعی به هفت نت طبیعی محدود شده است و شبکه همان چیزی است که آن نتها به نظر میرسند.

دکمه عملکرد
STYLE حالت را تغییر میدهد: شاد، غمگین، ترسناک، محلی، لالایی. این همان چیزی است که به هوش مصنوعی ارسال میشود.
WRITE از هوش مصنوعی ملودی در آن حالت میخواهد. هنگام فکر کردن WAIT را نشان میدهد، سپس آنچه برگشته را پخش میکند.
PLAY ملودی بارگذاریشده فعلی را دوباره پخش میکند. برای توقف دوباره ضربه بزنید.
LEARN حالت آموزشی - یک کلید را روشن میکند و منتظر شما میماند.
WAVE رنگ صدا: نرم، ارگ یا روشن.
VOL برای تغییر حجم صدا از ۱ تا ۵ ضربه بزنید. برچسب سطح را نشان میدهد.

حجم صدایی که برد با آن شروع میکند توسط #define VOLUME در نزدیکی بالای اسکچ تنظیم میشود، بنابراین میتوانید سطح دلخواه را کامپایل کنید و همچنان آن را بهصورت زنده تغییر دهید.

هوش مصنوعی واقعاً چه چیزی تولید میکند

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

آنچه تولید میکند فهرستی از نتها بهصورت متن معمولی است:

[{"n":"C4","ms":300},{"n":"E4","ms":300},{"n":"G4","ms":600}]

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

makerfabs_ESP32S3_cam_music_screen-10-

چرا پرامپت هوش مصنوعی را محدود میکند

درخواست به مدل میگوید که فقط میتواند از ۲۱ نتی استفاده کند که بهصورت فیزیکی روی این صفحهکلید وجود دارند - نتهای طبیعی از C3 تا B5، بدون دیز یا بمل. این محدودیت سینتسایزر نیست، که میتواند هر فرکانسی را پخش کند. این به دو دلیل خوب وجود دارد:

  • هر نتی که مینویسد، نتی است که حالت LEARN واقعاً میتواند به شما آموزش دهد، زیرا کلیدی برای آن وجود دارد
  • ماندن در یک گام به این معنی است که نتیجه همیشه موزیکال به نظر میرسد، حتی وقتی مدل روز الهامبخشی ندارد

تجزیه پاسخ از یک مدل زبانی

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

پاسخ خالی، و چگونه از آن اجتناب کنیم

اگر مدل یا پرامپت را تغییر دهید، یک نکته شما را غافلگیر خواهد کرد. DeepSeek قبل از پاسخ دادن استدلال می‌کند، و آن تفکر با همان بودجه max_tokens پاسخ حساب می‌شود. اگر چیز سختی از آن بپرسید، می‌تواند کل بودجه را صرف تفکر کند و سپس پاسخ خالی برگرداند - یک درخواست موفق که هیچ‌چیز در آن نیست.

در این پروژه، این موضوع به‌صورت شکست حالت‌های سخت‌تر در حالی که حالت‌های آسان کار می‌کردند ظاهر شد. SPOOKY و LULLABY به گام مینور نیاز دارند، که واقعاً دشوار است وقتی هر دیز و بمل ممنوع است، بنابراین مدل تأمل کرد - و بودجه تمام شد. HAPPY در دو ماژور بلافاصله پاسخ داد.

دو راه‌حل وجود دارد و این طرح از هر دو استفاده می‌کند. درخواست "thinking": {"type": "disabled"} را ارسال می‌کند که استدلال را کاملاً خاموش می‌کند تا کل بودجه به پاسخ برسد و پاسخ خیلی سریع‌تر برگردد. و پرامپت اکنون به مدل می‌گوید چگونه بدون دیز و بمل مینور به صدا درآید - ملودی را روی A یا E متمرکز کنید، که از همان نُت‌ها استفاده می‌کند.

حالت آموزش

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

هیچ فشار زمانی یا امتیازی وجود ندارد. تا هر زمان که نیاز داشته باشید منتظر شما می‌ماند، که همین آن را واقعاً برای یادگیری یک عبارت قابل استفاده می‌کند، نه فقط یک چیز تازه.

حالت LEARN در MaTouch AI ESP32-S3 - یک کلید روشن، منتظر فشار
حالت LEARN در MaTouch AI ESP32-S3 - یک کلید روشن، منتظر فشار

بدون WiFi هم کار می‌کند

یک آهنگ در طرح تعبیه شده است، بنابراین PLAY و LEARN بدون هیچ شبکه‌ای کار می‌کنند. فقط WRITE به اینترنت نیاز دارد - و فقط به یک کلید DeepSeek نیاز دارد. برای این پروژه هیچ حساب Azure یا OpenAI لازم نیست.

وقتی در حال آزمایش هستید، ابتدا PLAY را لمس کنید: این کار مسیر صوتی و صفحه‌کلید را قبل از هر شبکه‌ای تأیید می‌کند، بنابراین اگر WRITE بعداً شکست خورد، از قبل می‌دانید کجا را نگاه کنید.

پخش مجدد یک ملودی با روتر خاموش - حالا روی برد ذخیره شده است
پخش مجدد یک ملودی با روتر خاموش - حالا روی برد ذخیره شده است

ایده‌هایی برای ادامه

  • با ویرایش فهرست سبک‌ها، ملودی «در سبک ترانه‌های دریانوردی» بخواهید.
  • از آن بخواهید عبارت دومی بنویسد که پاسخگوی اولی باشد.
  • ملودی‌ها را روی کارت SD ذخیره کنید تا برد به‌مرور یک دفترچه آهنگ بسازد.
  • میکروفون‌های پروژه دستیار صوتی را اضافه کنید تا بتوانید درخواست را بگویید به‌جای لمس یک گزینه از پیش تعیین‌شده.

درباره برد MaTouch AI ESP32-S3 2.8"

هر پروژه در این صفحه روی MaTouch AI ESP32-S3 2.8" TFT ST7789V از Makerfabs اجرا می‌شود. این یک برد همه‌کاره است: یک صفحه‌لمسی رنگی، یک دوربین 3 مگاپیکسلی، دو میکروفون و یک آمپلی‌فایر واقعی بلندگو، همه با یک ESP32-S3 با 8 MB PSRAM. این ترکیب همان چیزی است که این پروژه‌های هوش مصنوعی را روی یک برد واحد بدون هیچ چیز متصل دیگر ممکن می‌سازد.

8 MB PSRAM بیشتر از هر عدد دیگری در اینجا اهمیت دارد. این همان چیزی است که به برد اجازه می‌دهد یک فریم دوربین، چند ثانیه صدای ضبط‌شده، یا یک عکس کدگذاری‌شده base64 را همزمان در حافظه نگه دارد - هیچ‌کدام در RAM عادی ESP32 جا نمی‌شوند.

مستندات سازنده: صفحه ویکی Makerfabs.

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

مشخصات کلیدی

  • پردازنده: ESP32-S3، دو هسته 240 MHz، WiFi 2.4 GHz + بلوتوث 5.0
  • حافظه: 16 MB فلش، 8 MB PSRAM (تقریباً برای هر پروژه اینجا ضروری است)
  • نمایشگر: 2.8" IPS، 320×240، درایور ST7789V، SPI
  • لمس: GT911 خازنی، ردیابی 5 انگشت همزمان
  • دوربین: OV3660، 3 مگاپیکسل، تا 2048×1536
  • میکروفون‌ها: دو میکروفون دیجیتال I2S INMP441 (یک جفت استریوی واقعی)
  • بلندگو: آمپلی‌فایر کلاس D MAX98357A، 3.2 W در 4 Ω
  • ذخیره‌سازی: اسلات کارت microSD (حالت SPI)
  • برق: USB-C، کانکتور باتری JST، شارژر TP4056، کلید برق
  • همچنین روی برد: LED RGB WS2812B، ساعت واقعی با باتری PCF8563T، و گیج باتری MAX17048 که در مشخصات رسمی ذکر نشده است

آیا از باتری تغذیه می‌کنید؟ دو سوکت USB-C، شارژر TP4056 و کلید برق به طور کامل، همراه با شماتیک، در مقاله امتحان برد توضیح داده شده‌اند — از جمله اینکه کدام سوکت شارژ می‌کند و آیا کلید باید روشن یا خاموش باشد.

تنظیمات Arduino IDE

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

تنظیم مقدار
برد ESP32S3 Dev Module
نسخه هسته ESP32 2.0.17
PSRAM OPI PSRAM
اندازه فلش 16MB (128Mb)
طرح پارتیشن 16M Flash (3MB APP/9.9MB FATFS)
USB CDC On Boot Disabled
سرعت آپلود 921600
پاک کردن همه فلش قبل از آپلود Disabled
پورت پورت USB-C CH340K

اگر آپلود ناموفق بود: قرار دادن برد در حالت دانلود به صورت دستی

بیشتر اوقات فقط دکمه Upload را فشار می‌دهید و کار می‌کند. گاهی اوقات اینطور نیست - IDE در Connecting...... می‌ماند و سپس با خطای Failed to connect to ESP32-S3: No serial data received تسلیم می‌شود.

این اتفاق می‌افتد زیرا IO0 سه کار را همزمان روی این برد انجام می‌دهد: دکمه BOOT است، خط بازنشانی خودکار از CH340K است، و خط داده برای LED RGB است. وقتی برنامه‌ای که از قبل روی برد در حال اجراست آن LED را هدایت می‌کند، می‌تواند با بازنشانی خودکار درگیر شود، بنابراین تراشه به جای بوت‌لودر، به برنامه قدیمی شما راه‌اندازی مجدد می‌شود.

راه حل پنج ثانیه طول می‌کشد. خودتان آن را در حالت دانلود قرار دهید:

  1. دکمه BOOT را فشار دهید و نگه دارید.
  2. در حالی که هنوز BOOT را نگه داشته‌اید، RESET را فشار دهید و RESET را رها کنید.
  3. حالا BOOT را رها کنید. صفحه خالی می‌شود - این بوت‌لودر است که منتظر است.
  4. روی Upload کلیک کنید.
  5. وقتی تمام شد، یک بار RESET را فشار دهید تا برنامه جدید اجرا شود.

اگر هنوز وصل نشد، Upload Speed را به 115200 کاهش دهید و دوباره تلاش کنید. و بررسی کنید که کلید برق برد روشن باشد - CH340K حتی وقتی خود برد خاموش است شمارش می‌کند و یک پورت COM به شما می‌دهد، که افراد را گول می‌زند.

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

این پروژه به هر کتابخانه‌ای در جدول زیر نیاز دارد - نه بیشتر، نه کمتر. بیشتر آنها مستقیماً از Tools → Manage Libraries در Arduino IDE نصب می‌شوند، اما GFX Library for Arduino باید از یک فایل ZIP نصب شود. شماره نسخه‌ها مهم هستند، بنابراین لطفاً دقیقاً از موارد ذکر شده استفاده کنید.

کتابخانه نسخه نویسنده نصب از
GFX Library for Arduino 1.5.6 moononournation فایل ZIP - به زیر مراجعه کنید
bb_captouch 1.3.1 Larry Bank مدیر کتابخانه
ArduinoJson 7.x Benoit Blanchon مدیر کتابخانه
Adafruit NeoPixel هر نسخه اخیر Adafruit مدیر کتابخانه

نصب کتابخانه GFX از یک فایل ZIP

  1. فایل ZIP را دانلود کنید. این فایل در دانلود همین پروژه گنجانده شده است، یا میتوانید آن را از مخزن Arduino_GFX دریافت کنید - روی دکمه سبز Code کلیک کنید، سپس Download ZIP را انتخاب کنید.
  2. آن را در جایی ذخیره کنید که دوباره بتوانید پیدا کنید. آن را از حالت فشرده خارج نکنید.
  3. در Arduino IDE، روی SketchInclude LibraryAdd .ZIP Library کلیک کنید.
  4. به فایل ZIP که دانلود کردهاید بروید و روی Open کلیک کنید.
  5. IDE آن را نصب میکند و در پایین پنجره تأیید میکند. اگر قبلاً نسخه 1.6 نصب کردهاید، ابتدا آن پوشه را از Documents/Arduino/libraries حذف کنید، در غیر این صورت این دو با هم تداخل خواهند داشت.

تنظیم secrets.h

جزئیات WiFi و هر کلید API شما در secrets.h قرار میگیرد که با مقادیر placeholder در دانلود گنجانده شده است. آن تب را در Arduino IDE باز کنید و آنها را با مقادیر خودتان جایگزین کنید.

دریافت کلیدهای API

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

DeepSeek - بخش تفکر

DeepSeek مدل زبانی است که در واقع به سؤال شما پاسخ میدهد. ارزان است - چند دلار اعتبار هزاران پاسخ را پوشش میدهد.

  1. به platform.deepseek.com بروید و یک حساب ایجاد کنید.
  2. API keys را در منو باز کنید و روی Create new API key کلیک کنید.
  3. فوراً آن را کپی کنید. فقط یک بار نمایش داده میشود و هرگز دوباره نشان داده نمیشود - اگر آن را گم کردید، آن کلید را حذف کنید و یکی دیگر بسازید.
  4. مقدار کمی اعتبار زیر Top up اضافه کنید. هیچ سطح رایگانی وجود ندارد، اما کوچکترین شارژ در این میزان استفاده بسیار طولانی دوام میآورد.

کلید را در secrets.h به عنوان DEEPSEEK_KEY قرار دهید. با sk- شروع میشود.

هزینه اجرا چقدر است

بسیار کم، اما رایگان نیست، و قبل از اینکه پروژهای را در حال اجرا بگذارید، باید تقریباً بدانید چقدر هزینه میکنید.

سرویس هزینه تقریبی
DeepSeek کسری از سنت برای هر پاسخ - هزاران پاسخ با چند دلار

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

عیبیابی

علامت علت و راهحل
صفحه سیاه میماند نسخه اشتباه کتابخانه GFX (از 1.5.6 استفاده کنید) یا تنظیمات اشتباه برد.
PSRAM alloc failed Tools → PSRAM روی OPI PSRAM تنظیم نشده است.
هیچ چیزی آپلود نمیشود / پورت COM وجود ندارد پورت USB-C اشتباه است، یا درایور CH340 نصب نشده است.

تصاویر

makerfabs_ESP32S3_cam_music_screen-1-
makerfabs_ESP32S3_cam_music_screen-1-
makerfabs_ESP32S3_cam_music_screen-4-
makerfabs_ESP32S3_cam_music_screen-4-
makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-10-
بدون شِفر (کود) پیوست شده.

مواردی که ممکن است به آن‌ها نیاز داشته باشید

منابع و مراجع

فایل‌ها📁

شِفر (کود) آردوینو (فایل .ino)

برگه مشخصات (pdf)