1. מבוא
מה תפַתחו
ב-Codelab הזה נלמד איך להשתמש ב-TensorFlow Lite For Microcontrollers כדי להפעיל מודל למידה עמוקה ב-Arduino Nano 33 BLE. המשתמש הופך את המיקרו-בקר ל "מטה קסמים" דיגיטלי, ומנופף בו כדי להטיל מגוון לחשים. כשהמשתמש מזיז את השרביט, נתוני החיישן המורכבים והרב-ממדיים האלה, שאי אפשר לפענח אותם בלי עזרה, מועברים כקלט למודל. המודל מחזיר סיווג פשוט שמתריע אם התרחשה אחת מכמה תנועות.

למידת מכונה במיקרו-בקרים
אפשר להשתמש בלמידת מכונה כדי ליצור כלים חכמים שמקלים על חיי המשתמשים, כמו Google Assistant. אבל הרבה פעמים הפעילויות האלה דורשות הרבה חישובים או משאבים, שיכולים לכלול שרת ענן חזק או מחשב שולחני. עם זאת, עכשיו אפשר להריץ הסקה של למידת מכונה על חומרה קטנה וחלשה, כמו מיקרו-בקרים.
מיקרו-בקרים נפוצים מאוד, זולים, צורכים מעט מאוד אנרגיה ואמינים מאוד. הם חלק מכל מיני מכשירים ביתיים: מכשירי חשמל, מכוניות וצעצועים. למעשה, מדי שנה מיוצרים כ-30 מיליארד מכשירים שמבוססים על מיקרו-בקרים.

הוספת למידת מכונה למיקרו-בקרים קטנים מאפשרת לנו לשפר את האינטליגנציה של מיליארדי מכשירים שאנחנו משתמשים בהם בחיי היום-יום, בלי להסתמך על חומרה יקרה או על חיבורים אמינים לאינטרנט. תארו לעצמכם מכשירי חשמל חכמים שיכולים להתאים את עצמם לשגרה היומיומית שלכם, חיישנים תעשייתיים חכמים שמבינים את ההבדל בין בעיות לבין פעולה רגילה, וצעצועים קסומים שיכולים לעזור לילדים ללמוד בדרכים מהנות ומרתקות.
TensorFlow Lite For Microcontrollers (תוכנה)

TensorFlow היא מסגרת קוד פתוח של Google ללמידת מכונה, לאימון מודלים ולהרצתם. TensorFlow Lite הוא מסגרת תוכנה, גרסה שעברה אופטימיזציה של TensorFlow, שמיועדת להרצת מודלים של TensorFlow במכשירים קטנים יחסית עם צריכת חשמל נמוכה, כמו טלפונים ניידים.
TensorFlow Lite For Microcontrollers היא מסגרת תוכנה, גרסה שעברה אופטימיזציה של TensorFlow, שמיועדת להרצת מודלים של TensorFlow על חומרה קטנה וחלשה כמו מיקרו-בקרים. הוא עומד במגבלות הנדרשות בסביבות המוטמעות האלה, כלומר, גודל הבינארי שלו קטן, הוא לא דורש תמיכה במערכת ההפעלה, בספריות C או C++ רגילות או בהקצאת זיכרון דינמית וכו'.
Arduino Nano 33 BLE (חומרה)

Arduino היא פלטפורמה פופולרית בקוד פתוח שמשמשת לפיתוח פרויקטים אלקטרוניים. היא כוללת:
- לוח מעגלים פיזי שניתן לתכנות (לרוב מיקרו-בקר), כמו Arduino Nano 33 BLE שמשמש ב-Codelab הזו.
- סביבת הפיתוח המשולבת (IDE) של Arduino, תוכנה שמשמשת לכתיבה ולהעלאה של קוד מחשב ללוח הפיזי.
Arduino Nano 33 BLE היא פלטפורמה שמבוססת על מיקרו-בקר: מחשב קטן על לוח מעגלים יחיד. יש לו מעבד, זיכרון וחומרה של קלט/פלט שמאפשרים לו לשלוח ולקבל אותות דיגיטליים למכשירים אחרים. בניגוד למחשב, מיקרו-בקר הוא לא חזק ובדרך כלל לא מריץ מערכת הפעלה. במקום זאת, יש להם מעבדים קטנים, לא הרבה זיכרון והתוכניות שאתם כותבים פועלות ישירות על החומרה. אבל מכיוון שהם מתוכננים להיות פשוטים ככל האפשר, מיקרו-בקר יכול להשתמש במעט מאוד אנרגיה.
מה תעשו
- הגדרת המיקרו-בקר Arduino Nano 33 BLE והפיכתו ל "מטה קסמים" דיגיטלי
- מגדירים את Arduino IDE ומתקינים את הספריות הנדרשות
- פריסת התוכנית במכשיר
- מטילים מגוון לחשים באמצעות שרביט הקסם ורואים את התחזיות
מה תצטרכו
- מחשב נייד עם Linux, MacOS או Windows
- Arduino Nano BLE Sense 33 (ללא מחברים)
- כבל מיקרו USB (אם יש לכם מחשב נייד עם USB-C, תצטרכו כבל USB-C למיקרו USB)
- (אופציונלי) מקל באורך של כ-30 ס"מ
- (אופציונלי) סרט דביק
2. הגדרת המיקרו-בקר של Arduino
פירוק של Arduino
מוציאים אותו מהקופסה ומושכים אותו מקצף האריזה. הוא מוליך, ועלול לגרום לבעיות אם לא תעשו את זה!

מחברים אותו למחשב הנייד.
- מחברים את כבל המיקרו USB לשקע שבשבב.
- מחברים את הקצה השני של הכבל לשקע USB במחשב הנייד.
- נורית ה-LED בפינה הימנית התחתונה ב-Arduino (בפינה הימנית העליונה בתמונה שלמטה) אמורה להידלק.

היכרות עם תהליך העבודה

כפי שמוצג בתרשים שלמעלה, המפענח של TFLite ב-Arduino מריץ מדי פעם היקש על המודל. המודל משתמש בנתונים המעובדים של מד התאוצה כקלט, ומפיק חיזוי שמצביע על התנועה שהתרחשה בסבירות הגבוהה ביותר. בנוסף, פלט רצוי יודפס ונוריות ה-LED המתאימות יידלקו.
3. הגדרת Arduino IDE
1. הורדה של Arduino IDE
כדי לפרוס את התוכנית למיקרו-בקר של ארדואינו, אנחנו משתמשים ב-Arduino IDE.
אחרי שמורידים את Arduino IDE, מתקינים ופותחים אותו על ידי לחיצה על האפליקציה שהסמל שלה נראה כך: 
דף הנחיתה הראשוני ייפתח באופן הבא:

2. הגדרת Board Manager
- בתפריט Arduino, בוחרים באפשרות
Tools -> Board: "Arduino .." —> Boards Manager. - מחפשים את
"Arduino Nano 33 BLE"ומתקינים אתArduino nRF528x Boards (Mbed OS). כך מוודאים שהמיקרו-בקר Arduino Nano 33 BLE נתמך על ידי Arduino IDE.
- בתפריט Arduino, בוחרים באפשרות
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

- לבסוף, מוודאים שהלוח שנבחר הוא Arduino Nano 33 BLE בפינה השמאלית התחתונה של סביבת הפיתוח המשולבת.

3. הגדרת היציאה
בתפריט Arduino, בוחרים באפשרות Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). הפלט אמור להיראות כך:

4. בדיקת החיבור של הלוח
בתפריט Arduino, בוחרים באפשרות Tools -> Get Board Info. הפלט אמור להיראות כך:

4. התקנת ספריות
1. TensorFlow Arduino Library
הספרייה הזו מכילה את כל הדוגמאות של TensorFlow Lite for Microcontroller, כולל קוד המקור של שרביט הקסם שנדרש ל-codelab הזה.
- בתפריט Arduino, בוחרים באפשרות
Sketch -> Include Library -> Add .ZIP Library.... - מוסיפים את ספריית TensorFlow Arduino
.zipשהורדתם.
2. LSM9DS1 Arduino Library
הספרייה הזו מאפשרת לקרוא את הערכים של מד התאוצה, המגנטומטר והג'ירוסקופ מ-LSM9DS1 IMU ב-Arduino Nano 33 BLE Sense.
- בתפריט Arduino, בוחרים באפשרות
Sketch -> Include -> Manage Libraries.... - מחפשים את
"Arduino_LSM9DS1"ומתקינים אותו.
5. טעינה ובנייה של הדוגמה
1. טעינת הדוגמה
בתפריט Arduino, בוחרים באפשרות File -> Examples -> Arduino_TensorFlowLite -> magic_wand כדי לטעון את קוד הדוגמה.

קוד המקור של שרביט הקסם ייטען.

2. בניית הדוגמה
לוחצים על הלחצן Upload בחלון הסקיצה.

אחרי כמה דקות אמור להופיע טקסט אדום שמציין שהצריבה הסתיימה. במהלך ההעלאה, נורית ה-LED הימנית צריכה להבהב ואז להפוך לכהה בסוף.

6. הדגמה (דמו)
נכון לעכשיו, שרביט הקסם יכול לזהות 3 תנועות ידיים שמוצגות כאן: 
- כנף: מתחילים בפינה הימנית העליונה ומשרטטים בזהירות את האות W במשך שתי שניות.
- טבעת: מתחילים כשהמטה זקוף, מזיזים את המטה בתנועה מעגלית עם כיוון השעון למשך שנייה אחת.
- שיפוע: מתחילים להחזיק את המקל כשהוא פונה כלפי מעלה והנוריות פונות אליכם. מזיזים את השרביט למטה בשיפוע שמאלה ואז אופקית ימינה למשך שנייה אחת.
בתמונה הבאה מוצגות שתי תנועות. קודם, שיפוע ואז כנף (אפשר להשתמש בזה כהפניה להדגמה).

כדי להפעיל את ההדגמה, פועלים לפי ההוראות הבאות:
- כשכונן ה-USB מחובר, בוחרים באפשרות
Tools -> Serial Monitorבתפריט Arduino. בהתחלה ייפתח מסך ריק ללא פלט.

- מעבירים את המיקרו-בקר של Arduino כדי לשרטט בזהירות כל אחת מהצורות שלמעלה, ובודקים אם הצג הטורי מזהה את התנועה.

- מהפלט במוניטור הטורי, אפשר לראות ששרביט הקסם אכן זיהה את כל הצורות. תראו גם שהנורית הימנית נדלקת.
7. השלבים הבאים
מזל טוב, הצלחת ליצור את ה"שרביט הקסמים" הראשון שלך שמזהה תנועות, במיקרו-בקר של Arduino!
אנחנו מקווים שנהניתם מהמבוא הקצר הזה לפיתוח באמצעות TensorFlow Lite למיקרו-בקרים. הרעיון של למידה עמוקה במיקרו-בקרים הוא חדש ומלהיב, ואנחנו ממליצים לכם לנסות אותו!
מאמרי עזרה
- מאמנים מודל משלכם, עכשיו שיש לכם ניסיון בעבודה עם התוכנית הבסיסית.
- מידע נוסף על TensorFlow Lite for Microcontrollers ( אתר, GitHub).
- אפשר לנסות דוגמאות אחרות ולהריץ אותן ב-Arduino, אם הוא נתמך.
- אפשר לנסות את מדריך ה-Codelab השני: AI on a microcontroller with TensorFlow Lite and SparkFun Edge (AI במיקרו-בקר עם TensorFlow Lite ו-SparkFun Edge)
- מומלץ לעיין בספר של O'Reilly TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers, שבו מוצגת למידת מכונה במכשירים קטנים ומוסבר על כמה פרויקטים מעניינים. ה-Codelab הזה מבוסס על פרק 11 בספר הזה.

תודה, ובהצלחה בבנייה!