1. บทนำ
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ เราจะเรียนรู้วิธีใช้ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์เพื่อเรียกใช้โมเดลการเรียนรู้เชิงลึกใน Arduino Nano 33 BLE ผู้ใช้จะเปลี่ยนไมโครคอนโทรลเลอร์ให้เป็น "ไม้กายสิทธิ์" ดิจิทัลเพื่อโบกและร่ายเวทมนตร์ต่างๆ เมื่อผู้ใช้ขยับไม้กายสิทธิ์ ระบบจะส่งข้อมูลเซ็นเซอร์ที่ซับซ้อนและมีหลายมิติซึ่งมนุษย์ไม่สามารถเข้าใจได้เป็นอินพุตไปยังโมเดล ซึ่งจะแสดงผลการจัดประเภทอย่างง่ายที่แจ้งเตือนเราหากมีการเคลื่อนไหวอย่างใดอย่างหนึ่ง

แมชชีนเลิร์นนิงในไมโครคอนโทรลเลอร์
แมชชีนเลิร์นนิงสามารถใช้สร้างเครื่องมืออัจฉริยะที่ช่วยให้ชีวิตของผู้ใช้สะดวกสบายขึ้น เช่น Google Assistant แต่บ่อยครั้งที่ประสบการณ์เหล่านี้ต้องใช้การคำนวณหรือทรัพยากรจำนวนมาก ซึ่งอาจรวมถึงเซิร์ฟเวอร์ระบบคลาวด์หรือเดสก์ท็อปที่มีประสิทธิภาพ แต่ปัจจุบันเราสามารถเรียกใช้การอนุมานแมชชีนเลิร์นนิงบนฮาร์ดแวร์ขนาดเล็กและใช้พลังงานต่ำ เช่น ไมโครคอนโทรลเลอร์
ไมโครคอนโทรลเลอร์เป็นอุปกรณ์ที่พบได้ทั่วไป ราคาถูก ใช้พลังงานน้อยมาก และมีความน่าเชื่อถือสูง ซึ่งเป็นส่วนหนึ่งของอุปกรณ์ในบ้านทุกประเภท ไม่ว่าจะเป็นเครื่องใช้ไฟฟ้า รถยนต์ และของเล่น ในแต่ละปีมีการผลิตอุปกรณ์ที่ใช้ไมโครคอนโทรลเลอร์ประมาณ 3 หมื่นล้านเครื่อง

การนำแมชชีนเลิร์นนิงมาใช้กับไมโครคอนโทรลเลอร์ขนาดเล็กช่วยเพิ่มความอัจฉริยะให้กับอุปกรณ์หลายพันล้านชิ้นที่เราใช้ในชีวิตประจำวันได้โดยไม่ต้องพึ่งพาฮาร์ดแวร์ราคาแพงหรือการเชื่อมต่ออินเทอร์เน็ตที่เสถียร ลองนึกภาพเครื่องใช้ไฟฟ้าอัจฉริยะที่ปรับเปลี่ยนให้เข้ากับกิจวัตรประจำวันของคุณ เซ็นเซอร์อุตสาหกรรมอัจฉริยะที่เข้าใจความแตกต่างระหว่างปัญหาและการทำงานปกติ รวมถึงของเล่นมหัศจรรย์ที่ช่วยให้เด็กๆ เรียนรู้ได้อย่างสนุกสนานและเพลิดเพลิน
TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ (ซอฟต์แวร์)

TensorFlow คือเฟรมเวิร์กแมชชีนเลิร์นนิงแบบโอเพนซอร์สของ Google สำหรับการฝึกและเรียกใช้โมเดล TensorFlow Lite เป็นเฟรมเวิร์กซอฟต์แวร์ ซึ่งเป็น TensorFlow เวอร์ชันที่เพิ่มประสิทธิภาพแล้ว โดยมีเป้าหมายเพื่อเรียกใช้โมเดล TensorFlow บนอุปกรณ์ขนาดเล็กที่มีกำลังค่อนข้างต่ำ เช่น โทรศัพท์มือถือ
TensorFlow Lite For Microcontrollers เป็นเฟรมเวิร์กซอฟต์แวร์ ซึ่งเป็น TensorFlow เวอร์ชันที่เพิ่มประสิทธิภาพแล้ว โดยมีเป้าหมายเพื่อเรียกใช้โมเดล TensorFlow บนฮาร์ดแวร์ขนาดเล็กและใช้พลังงานต่ำ เช่น ไมโครคอนโทรลเลอร์ โดยเป็นไปตามข้อจำกัดที่จำเป็นในสภาพแวดล้อมแบบฝังเหล่านี้ กล่าวคือ มีไบนารีขนาดเล็ก ไม่ต้องใช้การรองรับระบบปฏิบัติการ ไลบรารี C หรือ C++ มาตรฐาน หรือการจัดสรรหน่วยความจำแบบไดนามิก เป็นต้น
Arduino Nano 33 BLE (ฮาร์ดแวร์)

Arduino เป็นแพลตฟอร์มโอเพนซอร์สยอดนิยมที่ใช้สร้างโปรเจ็กต์อิเล็กทรอนิกส์ โดยประกอบด้วย
- แผงวงจรที่ตั้งโปรแกรมได้จริง (มักจะเป็นไมโครคอนโทรลเลอร์) เช่น Arduino Nano 33 BLE ที่ใช้ในโค้ดแล็บนี้
- IDE (สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบผสานรวม) ของ Arduino ซึ่งเป็นซอฟต์แวร์ที่ใช้เขียนและอัปโหลดโค้ดคอมพิวเตอร์ไปยังบอร์ดจริง
Arduino Nano 33 BLE เป็นแพลตฟอร์มที่ใช้ไมโครคอนโทรลเลอร์ ซึ่งเป็นคอมพิวเตอร์ขนาดเล็กบนแผงวงจรเดียว โดยมีโปรเซสเซอร์ หน่วยความจำ และฮาร์ดแวร์ I/O ที่ช่วยให้ส่งและรับสัญญาณดิจิทัลไปยังอุปกรณ์อื่นๆ ได้ ไมโครคอนโทรลเลอร์ไม่เหมือนคอมพิวเตอร์ตรงที่ไม่มีประสิทธิภาพและมักไม่ได้เรียกใช้ระบบปฏิบัติการ แต่จะมีโปรเซสเซอร์ขนาดเล็ก หน่วยความจำไม่มาก และโปรแกรมที่คุณเขียนจะทำงานบนฮาร์ดแวร์โดยตรง แต่เนื่องจากออกแบบมาให้ใช้งานง่ายที่สุด ไมโครคอนโทรลเลอร์จึงใช้พลังงานน้อยมาก
สิ่งที่คุณต้องทำ
- ตั้งค่าไมโครคอนโทรลเลอร์ Arduino Nano 33 BLE แล้วเปลี่ยนให้เป็น "ไม้กายสิทธิ์" ดิจิทัล
- ตั้งค่า Arduino IDE และติดตั้งไลบรารีที่จำเป็น
- ทำให้โปรแกรมใช้งานได้ในอุปกรณ์
- เสกคาถาต่างๆ ด้วยการโบกไม้กายสิทธิ์และดูคำทำนาย
สิ่งที่คุณต้องมี
- แล็ปท็อป Linux, MacOS หรือ Windows
- Arduino Nano BLE Sense 33 (ไม่มีส่วนหัว)
- สาย Micro USB (หากใช้แล็ปท็อป USB-C ให้ใช้สาย USB-C เป็น Micro USB แทน)
- (ไม่บังคับ) ไม้ ความยาวประมาณ 12 นิ้ว (30 ซม.)
- (ไม่บังคับ) เทปกาว
2. ตั้งค่าไมโครคอนโทรลเลอร์ Arduino
แกะกล่อง Arduino
นำออกจากกล่องและดึงออกจากโฟมกันกระแทก เพราะเป็นตัวนำไฟฟ้าและอาจทำให้เกิดปัญหาได้

เสียบเข้ากับแล็ปท็อป
- เสียบสาย MicroUSB เข้ากับซ็อกเก็ตในชิป
- เสียบปลายสายอีกด้านเข้ากับเต้ารับ USB ในแล็ปท็อป
- ไฟ LED ด้านซ้ายล่างบน Arduino (ด้านซ้ายบนในรูปภาพด้านล่าง) ควรติดสว่าง

ทำความคุ้นเคยกับเวิร์กโฟลว์

ดังที่แสดงในแผนภาพด้านบน ตัวแปล TFLite ใน Arduino จะเรียกใช้การอนุมานในโมเดลเป็นระยะๆ โมเดลใช้ข้อมูลมาตรวัดความเร่งที่ประมวลผลแล้วเป็นอินพุต และแสดงผลการคาดการณ์ซึ่งแนะนำท่าทางสัมผัสที่น่าจะเกิดขึ้นมากที่สุด นอกจากนี้ ระบบจะพิมพ์เอาต์พุตที่ต้องการและไฟ LED ด้านขวาจะสว่างขึ้น
3. ตั้งค่า Arduino IDE
1. ดาวน์โหลด Arduino IDE
เราใช้ Arduino IDE เพื่อติดตั้งโปรแกรมลงในไมโครคอนโทรลเลอร์ Arduino
หลังจากดาวน์โหลดแล้ว ให้ติดตั้งและเปิด Arduino IDE โดยคลิกแอปพลิเคชันที่มีไอคอนลักษณะดังนี้ 
หน้า Landing Page เริ่มต้นจะเปิดขึ้นดังนี้

2. ตั้งค่า Board Manager
- จากเมนู Arduino ให้เลือก
Tools -> Board: "Arduino .." —> Boards Manager - ค้นหา
"Arduino Nano 33 BLE"แล้วติดตั้งArduino nRF528x Boards (Mbed OS)ซึ่งจะช่วยให้ Arduino IDE รองรับไมโครคอนโทรลเลอร์ Arduino Nano 33 BLE
- จากเมนู Arduino ให้เลือก
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

- สุดท้าย ให้ตรวจสอบว่าบอร์ดที่เลือกคือ "Arduino Nano 33 BLE" ที่ด้านขวาล่างของ IDE

3. ตั้งค่าพอร์ต
จากเมนู Arduino ให้เลือก Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE) คุณควรเห็นข้อมูลที่มีลักษณะคล้ายกับข้อมูลต่อไปนี้

4. ตรวจสอบการเชื่อมต่อบอร์ด
จากเมนู Arduino ให้เลือก Tools -> Get Board Info คุณควรเห็นข้อมูลที่มีลักษณะคล้ายกับข้อมูลต่อไปนี้

4. ติดตั้งไลบรารี
1. ไลบรารี TensorFlow Arduino
ไลบรารีนี้มีตัวอย่าง TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ทั้งหมด ซึ่งรวมถึงซอร์สโค้ดของคทาวิเศษที่จำเป็นสำหรับโค้ดแล็บนี้
- จากเมนู 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" อย่างระมัดระวังเป็นเวลา 2 วินาที
- วงแหวน: เริ่มจากตั้งตรง แล้วขยับไม้กายสิทธิ์เป็นวงกลมตามเข็มนาฬิกาเป็นเวลา 1 วินาที
- ลาด: เริ่มต้นด้วยการถือไม้กายสิทธิ์ให้หงายขึ้นโดยให้ไฟ LED หันเข้าหาคุณ เลื่อนไม้ลงในแนวเอียงไปทางซ้าย แล้วเลื่อนในแนวนอนไปทางขวาเป็นเวลา 1 วินาที
รูปภาพต่อไปนี้แสดงท่าทางสัมผัส 2 แบบ ขั้นแรก ให้ใช้ Slope แล้วตามด้วย Wing (ใช้เป็นข้อมูลอ้างอิงสำหรับการสาธิต)

หากต้องการเรียกใช้การสาธิต ให้ทำตามวิธีการด้านล่าง
- เมื่อเสียบ USB แล้ว ให้เลือก
Tools -> Serial Monitorจากเมนู Arduino โดยในตอนแรกจะเปิดหน้าจอว่างเปล่าที่ไม่มีเอาต์พุต

- เลื่อนไมโครคอนโทรลเลอร์ Arduino เพื่อติดตามรูปร่างแต่ละแบบข้างต้นอย่างระมัดระวัง และดูว่า Serial Monitor ตรวจพบท่าทางสัมผัสหรือไม่

- จากเอาต์พุตใน Serial Monitor เราพบว่า Magic Wand ตรวจจับรูปร่างทั้งหมดได้จริงๆ นอกจากนี้ คุณจะเห็นว่าไฟ LED ด้านขวาติดสว่างด้วย
7. ขั้นตอนถัดไป
ขอแสดงความยินดี คุณสร้าง "ไม้กายสิทธิ์" ที่จดจำท่าทางได้ตัวแรกบนไมโครคอนโทรลเลอร์ Arduino ได้สำเร็จแล้ว
เราหวังว่าคุณจะสนุกกับข้อมูลเบื้องต้นเกี่ยวกับการพัฒนาด้วย TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ แนวคิดเรื่องการเรียนรู้เชิงลึกในไมโครคอนโทรลเลอร์เป็นเรื่องใหม่และน่าตื่นเต้น เราจึงขอแนะนำให้คุณออกไปทดลองใช้
เอกสารอ้างอิง
- ฝึกโมเดลของคุณเองเมื่อคุณมีประสบการณ์ในการทำงานกับโปรแกรมพื้นฐานแล้ว
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ TensorFlow Lite for Microcontrollers ( เว็บไซต์, GitHub)
- ลองใช้ตัวอย่างอื่นๆ และลองเรียกใช้ใน Arduino หากรองรับ
- ลองใช้ Codelab อื่น: AI ในไมโครคอนโทรลเลอร์ด้วย TensorFlow Lite และ SparkFun Edge
- โปรดดูหนังสือของ O'Reilly เรื่อง TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers ซึ่งแนะนำแมชชีนเลิร์นนิงในอุปกรณ์ขนาดเล็กและอธิบายโปรเจ็กต์สนุกๆ หลายอย่าง Codelab นี้อิงตามบทที่ 11 ของหนังสือเล่มนี้

ขอขอบคุณและขอให้สนุกกับการสร้างสรรค์