۱. مقدمه
آنچه خواهید ساخت
در این آزمایشگاه کد، یاد خواهیم گرفت که از TensorFlow Lite برای میکروکنترلرها برای اجرای یک مدل یادگیری عمیق روی Arduino Nano 33 BLE استفاده کنیم. میکروکنترلر توسط کاربر به یک "عصای جادویی" دیجیتال تبدیل میشود تا انواع طلسمها را تکان دهد و اجرا کند. با حرکت دادن عصا توسط کاربر، این دادههای حسگر پیچیده و چندبعدی که برای انسان غیرقابل درک است، به عنوان ورودی به مدل منتقل میشود که خروجی آن یک طبقهبندی ساده است که در صورت وقوع یکی از چندین حرکت، به ما هشدار میدهد.

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

با آوردن یادگیری ماشینی به میکروکنترلرهای کوچک، میتوانیم هوش میلیاردها دستگاهی را که در زندگی خود استفاده میکنیم، بدون تکیه بر سختافزارهای گرانقیمت یا اتصالات اینترنتی قابل اعتماد، افزایش دهیم. لوازم خانگی هوشمندی را تصور کنید که میتوانند با روال روزانه شما سازگار شوند، حسگرهای صنعتی هوشمندی که تفاوت بین مشکلات و عملکرد عادی را درک میکنند و اسباببازیهای جادویی که میتوانند به کودکان کمک کنند تا به روشهای سرگرمکننده و لذتبخش یاد بگیرند.
TensorFlow Lite برای میکروکنترلرها (نرمافزار)

TensorFlow چارچوب یادگیری ماشین متنباز گوگل برای آموزش و اجرای مدلها است. TensorFlow Lite یک چارچوب نرمافزاری و نسخهای بهینهشده از TensorFlow است که برای اجرای مدلهای Tensorflow روی دستگاههای کوچک و نسبتاً کممصرف مانند تلفنهای همراه طراحی شده است.
TensorFlow Lite برای میکروکنترلرها یک چارچوب نرمافزاری، نسخهای بهینهشده از TensorFlow است که برای اجرای مدلهای Tensorflow روی سختافزارهای کوچک و کممصرف مانند میکروکنترلرها طراحی شده است. این چارچوب به محدودیتهای مورد نیاز در این محیطهای تعبیهشده پایبند است، یعنی اندازه دودویی کوچکی دارد، به پشتیبانی سیستم عامل، هیچ کتابخانه استاندارد C یا C++ یا تخصیص حافظه پویا و غیره نیاز ندارد.
آردوینو نانو ۳۳ BLE (سختافزار)

آردوینو یک پلتفرم متنباز محبوب است که برای ساخت پروژههای الکترونیکی استفاده میشود. این پلتفرم شامل موارد زیر است:
- یک برد مدار فیزیکی قابل برنامهریزی (اغلب یک میکروکنترلر) مانند Arduino Nano 33 BLE که در این آزمایشگاه کد استفاده شده است.
- محیط توسعه یکپارچه آردوینو (IDE) نرمافزاری است که برای نوشتن و آپلود کد کامپیوتری روی برد فیزیکی استفاده میشود.
آردوینو نانو ۳۳ BLE یک پلتفرم مبتنی بر میکروکنترلر است: یک کامپیوتر کوچک روی یک برد مدار چاپی. این برد دارای پردازنده، حافظه و سختافزار ورودی/خروجی است که به آن امکان ارسال و دریافت سیگنالهای دیجیتال به دستگاههای دیگر را میدهد. برخلاف کامپیوتر، میکروکنترلر قدرتمند نیست و معمولاً سیستم عاملی را اجرا نمیکند. در عوض، آنها پردازندههای کوچکی دارند، حافظه زیادی ندارند و برنامههایی که مینویسید مستقیماً روی سختافزار اجرا میشوند. اما از آنجا که آنها به سادهترین شکل ممکن طراحی شدهاند، میکروکنترلر میتواند انرژی بسیار کمی مصرف کند.
کاری که انجام خواهید داد
- میکروکنترلر Arduino Nano 33 BLE را راهاندازی کنید و آن را به یک "عصای جادویی" دیجیتال تبدیل کنید
- راهاندازی IDE آردوینو و نصب کتابخانههای مورد نیاز
- برنامه را روی دستگاه نصب کنید
- با تکان دادن عصای جادویی، انواع طلسمها را اجرا کنید و پیشبینیها را مشاهده کنید
آنچه نیاز دارید
- لپتاپ لینوکس، مکاواس یا ویندوز
- آردوینو نانو BLE Sense 33 (بدون هدر)
- کابل میکرو USB (اگر از لپتاپ USB-C استفاده میکنید، به جای آن یک کابل USB-C به میکرو USB تهیه کنید)
- (اختیاری) چوب، حدود ۱۲ اینچ (۳۰ سانتیمتر)
- (اختیاری) نوار چسب
۲. میکروکنترلر آردوینو را راهاندازی کنید
آردوینو خود را از بستهبندی خارج کنید
آن را از جعبه خارج کرده و از فوم بستهبندی بیرون بکشید. رسانا است و در غیر این صورت میتواند مشکل ایجاد کند!

آن را به لپتاپ خود وصل کنید
- کابل MicroUSB را به سوکت موجود در تراشه وصل کنید.
- سر دیگر کابل را به سوکت USB لپتاپ خود وصل کنید.
- LED پایین سمت چپ روی آردوینو (بالا سمت چپ در تصویر زیر) باید روشن شود.

با روند کار آشنا شوید

همانطور که در نمودار بالا نشان داده شده است، مفسر TFLite در آردوینو به صورت دورهای استنتاج را روی مدل اجرا میکند. مدل از دادههای شتابسنج پردازششده به عنوان ورودی استفاده میکند و پیشبینیای را ارائه میدهد که نشان میدهد حرکتی که به احتمال زیاد رخ داده است، کدام است. علاوه بر این، خروجی مورد نظر چاپ میشود و LEDهای مناسب روشن میشوند.
۳. نرمافزار آردوینو IDE را راهاندازی کنید
۱. نرمافزار آردوینو IDE را دانلود کنید
برای پیادهسازی برنامه روی میکروکنترلر آردوینو، از محیط برنامهنویسی آردوینو (Arduino IDE) استفاده میکنیم.
پس از دانلود، نرمافزار Arduino IDE را با کلیک روی برنامهای که آیکون آن شبیه به این است، نصب و باز کنید: 
صفحه فرود اولیه به صورت زیر باز میشود:

۲. راهاندازی مدیر هیئت مدیره
- از منوی آردوینو،
Tools -> Board: "Arduino .." —> Boards Manager - عبارت
"Arduino Nano 33 BLE"را جستجو کنید وArduino nRF528x Boards (Mbed OS)نصب کنید. این کار تضمین میکند که میکروکنترلر Arduino Nano 33 BLE ما توسط Arduino IDE پشتیبانی میشود.
- از منوی آردوینو،
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

- در نهایت، مطمئن شوید که برد انتخابی شما «Arduino Nano 33 BLE» است که در پایین سمت راست IDE قرار دارد.

۳. راهاندازی پورت
از منوی آردوینو، Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE) را انتخاب کنید. باید چیزی شبیه به این را ببینید:

۴. اتصال برد را بررسی کنید
از منوی آردوینو، Tools -> Get Board Info انتخاب کنید. باید چیزی شبیه به این را ببینید:

۴. نصب کتابخانهها
۱. کتابخانه آردوینو TensorFlow
این کتابخانه شامل تمام مثالهای TensorFlow Lite برای میکروکنترلر است، که شامل کد منبع عصای جادویی مورد نیاز برای این آزمایشگاه کد نیز میشود.
- از منوی آردوینو،
Sketch -> Include Library -> Add .ZIP Library...را انتخاب کنید. - کتابخانه آردوینوی TensorFlow
.zipکه دانلود کردهاید را اضافه کنید.
۲. کتابخانه آردوینو LSM9DS1
این کتابخانه به شما امکان میدهد مقادیر شتابسنج، مغناطیسسنج و ژیروسکوپ را از IMU LSM9DS1 روی برد آردوینو نانو 33 BLE Sense خود بخوانید.
- از منوی آردوینو،
Sketch -> Include -> Manage Libraries...را انتخاب کنید. -
"Arduino_LSM9DS1"را جستجو و نصب کنید.
۵. بارگذاری و ساخت نمونه
۱. مثال را بارگذاری کنید
از منوی آردوینو، برای بارگذاری کد نمونه، File -> Examples -> Arduino_TensorFlowLite -> magic_wand را انتخاب کنید.

این کد منبع عصای جادویی را بارگذاری میکند.

۲. مثال را بسازید
روی دکمه Upload در پنجره طرح کلیک کنید.

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

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

برای اجرای نسخه آزمایشی، دستورالعملهای زیر را دنبال کنید:
- با اتصال USB، از منوی آردوینو،
Tools -> Serial Monitorانتخاب کنید. در ابتدا یک صفحه خالی بدون هیچ خروجی باز میشود.

- میکروکنترلر آردوینو را حرکت دهید تا هر یک از شکلهای بالا را با دقت دنبال کند و ببینید آیا مانیتور سریال حرکت را تشخیص میدهد یا خیر.

- از خروجی سریال مانیتور، متوجه میشویم که عصای جادویی واقعاً همه شکلها را تشخیص داده است! همچنین متوجه خواهید شد که LED سمت راست روشن میشود.
۷. مراحل بعدی
تبریک میگویم، شما با موفقیت اولین «عصای جادویی» خود را که قابلیت تشخیص حرکات را دارد، روی میکروکنترلر آردوینو ساختید!
امیدواریم از این مقدمه کوتاه در مورد توسعه با TensorFlow Lite برای میکروکنترلرها لذت برده باشید. ایده یادگیری عمیق در میکروکنترلرها جدید و هیجانانگیز است و ما شما را تشویق میکنیم که بیرون بروید و آزمایش کنید!
اسناد مرجع
- حالا که تجربه کار با برنامه پایه را دارید، مدل خودتان را آموزش دهید .
- درباره TensorFlow Lite برای میکروکنترلرها ( وبسایت ، گیتهاب ) بیشتر بدانید.
- مثالهای دیگری را امتحان کنید و اگر آردوینو پشتیبانی میکند، آنها را روی آن اجرا کنید.
- کدلب دیگر را امتحان کنید: هوش مصنوعی روی میکروکنترلر با TensorFlow Lite و SparkFun Edge
- به کتاب O'Reilly با عنوان TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers مراجعه کنید که یادگیری ماشینی را در دستگاههای کوچک معرفی میکند و چندین پروژه سرگرمکننده را به شما آموزش میدهد. این آزمایشگاه کد بر اساس فصل ۱۱ این کتاب است.

متشکرم، و از ساختن لذت ببرید!