ไม้กายสิทธิ์ AI พร้อม TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์และ Arduino

1. บทนำ

สิ่งที่คุณจะสร้าง

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

9208eb1207211349.gif

แมชชีนเลิร์นนิงในไมโครคอนโทรลเลอร์

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

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

1914a419dfacf0b5.jpeg

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

TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ (ซอฟต์แวร์)

864114d0c2b4c919.png

TensorFlow คือเฟรมเวิร์กแมชชีนเลิร์นนิงโอเพนซอร์สของ Google สำหรับการฝึกและการเรียกใช้โมเดล TensorFlow Lite เป็นเฟรมเวิร์กซอฟต์แวร์ซึ่งเป็น TensorFlow เวอร์ชันที่ได้รับการเพิ่มประสิทธิภาพซึ่งกำหนดเป้าหมายเพื่อเรียกใช้โมเดล tensorflow ในอุปกรณ์ขนาดเล็กที่ใช้พลังงานต่ำ เช่น โทรศัพท์มือถือ

TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์คือเฟรมเวิร์กซอฟต์แวร์ซึ่งเป็น TensorFlow เวอร์ชันที่เพิ่มประสิทธิภาพซึ่งกำหนดเป้าหมายเพื่อเรียกใช้โมเดล tensorflow บนฮาร์ดแวร์ขนาดจิ๋วที่ใช้พลังงานต่ำ เช่น ไมโครคอนโทรลเลอร์ และเป็นไปตามข้อจำกัดที่จำเป็นในสภาพแวดล้อมแบบฝังเหล่านี้ กล่าวคือมีไบนารีขนาดเล็ก ไม่จำเป็นต้องมีการรองรับระบบปฏิบัติการ ไลบรารี C หรือ C++ มาตรฐานใดๆ หรือการจัดสรรหน่วยความจำแบบไดนามิก ฯลฯ

Arduino Nano 33 BLE (ฮาร์ดแวร์)

bcd452d4d660efa9.jpeg

Arduino เป็นแพลตฟอร์มโอเพนซอร์สยอดนิยมที่ใช้สำหรับการสร้างโครงการอิเล็กทรอนิกส์ ซึ่งประกอบด้วย

  1. แผงวงจรที่ตั้งโปรแกรมได้จริง (มักเป็นไมโครคอนโทรลเลอร์) เช่น Arduino Nano 33 BLE ที่ใช้ใน Codelab นี้
  2. Arduino IDE (สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบบูรณาการ) คือซอฟต์แวร์ที่ใช้ในการเขียนและอัปโหลดโค้ดคอมพิวเตอร์ไปยังบอร์ดจริง

Arduino Nano 33 BLE เป็นแพลตฟอร์มที่ใช้ไมโครคอนโทรลเลอร์: คอมพิวเตอร์ขนาดเล็กบนแผงวงจรเดียว โดยมีโปรเซสเซอร์ หน่วยความจำ และฮาร์ดแวร์ I/O ที่ช่วยให้อุปกรณ์รับส่งสัญญาณดิจิทัลไปยังอุปกรณ์อื่นๆ ได้ ไมโครคอนโทรลเลอร์ต่างจากคอมพิวเตอร์ตรงที่ไม่มีประสิทธิภาพและมักไม่ได้ใช้ระบบปฏิบัติการ แต่จะมีตัวประมวลผลขนาดเล็ก ไม่มีหน่วยความจำมาก และโปรแกรมที่คุณเขียนจะทำงานบนฮาร์ดแวร์โดยตรง แต่เนื่องจากไมโครคอนโทรลเลอร์ออกแบบมาให้เรียบง่ายที่สุด ทำให้ไมโครคอนโทรลเลอร์ใช้พลังงานน้อยมาก

สิ่งที่คุณจะต้องทำ

  • ตั้งค่าไมโครคอนโทรลเลอร์ Arduino Nano 33 BLE และเปลี่ยนให้เป็น "ไม้กายสิทธิ์" แบบดิจิทัล
  • ตั้งค่า Arduino IDE และติดตั้งไลบรารีที่จำเป็น
  • นำโปรแกรมไปใช้กับอุปกรณ์
  • เสกคาถาต่างๆ ด้วยการโบกไม้กายสิทธิ์และดูคำทำนาย

สิ่งที่คุณต้องมี

  • แล็ปท็อป Linux, MacOS หรือ Windows
  • Arduino Nano BLE Sense 33 (ไม่มีส่วนหัว)
  • สายไมโคร USB (หากใช้แล็ปท็อป USB-C ให้ใช้สาย USB-C กับไมโคร USB แทน)
  • (ไม่บังคับ) แบบแท่ง ยาวประมาณ 12 นิ้ว (30 ซม.)
  • (ไม่บังคับ) เทปติดหนึบ

2. ตั้งค่าไมโครคอนโทรลเลอร์ Arduino

คลายแพ็ก Arduino

นำอุปกรณ์ออกจากกล่องและดึงออกจากโฟมบรรจุหีบห่อ ไฟนี้นำไฟฟ้าและอาจสร้างปัญหาไม่ได้

6ed84a651c871a58.jpeg

เสียบเข้ากับแล็ปท็อป

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

c6936696f9659104.jpeg

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

99852afbed7e78b0.png

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

3. ตั้งค่า Arduino IDE

1. ดาวน์โหลด Arduino IDE

ในการทําให้โปรแกรมใช้งานได้ในไมโครคอนโทรลเลอร์ Arduino เราใช้ Arduino IDE

หลังจากดาวน์โหลดแล้ว ให้ติดตั้งและเปิด Arduino IDE โดยคลิกที่แอปพลิเคชันที่มีไอคอนดังนี้ 75717f13527f36b9.png

หน้า Landing Page เริ่มต้นจะเปิดขึ้นดังนี้

933c91e6e1997c61.png

2. ตั้งค่า Board Manager

  1. จากเมนู Arduino ให้เลือก Tools -> Board: "Arduino .." —> Boards Manager
  2. ค้นหา "Arduino Nano 33 BLE" และติดตั้ง Arduino nRF528x Boards (Mbed OS) การดำเนินการนี้จะช่วยให้มั่นใจว่า Arduino Nano 33 BLE Microcontroller ของเรารองรับ Arduino IDE 817c63346152eda9.png
  1. จากเมนู Arduino ให้เลือก Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

9357691e1a1348eb.png

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

aa08706bb84fa9b2.png

3. ตั้งค่าพอร์ต

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

8c25990d0c6fb6f8.png

4. ตรวจสอบการเชื่อมต่อกระดาน

จากเมนู Arduino ให้เลือก Tools -> Get Board Info คุณจะเห็นข้อมูลที่มีลักษณะคล้ายคลึงกันนี้

ccd8f5305be6cf59.png

4. ติดตั้งไลบรารี

1. ไลบรารี TensorFlow Arduino

ไลบรารีนี้มีตัวอย่าง TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ทั้งหมด ซึ่งรวมถึงซอร์สโค้ดไม้กายสิทธิ์ที่จำเป็นสำหรับ Codelab นี้

  1. จากเมนู Arduino ให้เลือก Sketch -> Include Library -> Add .ZIP Library...
  2. เพิ่มไลบรารี TensorFlow Arduino .zip ที่คุณดาวน์โหลดไว้

2. ไลบรารี LSM9DS1 Arduino

ไลบรารีนี้ช่วยให้คุณอ่านค่าของตัวตรวจวัดความเร่ง เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก และเครื่องวัดการหมุนจาก LSM9DS1 IMU ใน Arduino Nano 33 BLE Sense ได้

  1. จากเมนู Arduino ให้เลือก Sketch -> Include -> Manage Libraries...
  2. ค้นหาและติดตั้ง "Arduino_LSM9DS1" ac2f78a737c5f233.png

5. โหลดและสร้างตัวอย่าง

1. โหลดตัวอย่าง

จากเมนู Arduino ให้เลือก File -> Examples -> Arduino_TensorFlowLite -> magic_wand เพื่อโหลดโค้ดตัวอย่าง

de349f2d3cb49b98.png

ซึ่งจะเป็นการโหลดซอร์สโค้ดของไม้กายสิทธิ์

cda8c35a597b0798.png

2. สร้างตัวอย่าง

คลิกปุ่ม Upload ในหน้าต่างร่างภาพ

71cb1474d5e14669.png

หลังจากนั้นสักครู่ คุณจะเห็นข้อความสีแดงที่ระบุว่ากะพริบเสร็จแล้ว ในระหว่างการอัปโหลด ไฟ LED ด้านขวาควรกะพริบและดับไปในตอนท้าย

3df1d0858c6e40a4.png

6. สาธิต

ขณะนี้ไม้กายสิทธิ์ตรวจพบท่าทางสัมผัสได้ 3 แบบตามที่แสดงด้านล่าง 99a607da66af9fc8.png

  1. Wing: เริ่มจากมุมซ้ายบนและค่อยๆ ตีตัวอักษร "W" 2 วินาที
  2. วงแหวน: เริ่มต้นตั้งตรง ขยับไม้กายสิทธิ์เป็นวงกลมตามเข็มนาฬิกา 1 วินาที
  3. ความชัน: เริ่มต้นด้วยการถือไม้กายสิทธิ์ขึ้นด้านบน พร้อมไฟ LED ส่องเข้าหาตัวคุณ ขยับไม้กายสิทธิ์ลงภายในแนวเอียงไปทางซ้าย แล้วเคลื่อนไปทางขวาเป็นเวลา 1 วินาที

ภาพต่อไปนี้แสดงท่าทางสัมผัส 2 แบบ โดยเริ่มจาก Slope แล้วตามด้วย Wing (ใช้ส่วนนี้เป็นข้อมูลอ้างอิงในการสาธิต)

9208eb1207211349.gif

หากต้องการเรียกใช้การสาธิต โปรดทำตามวิธีการด้านล่าง

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

38e8d53652eb28f2.png

  1. ขยับไมโครคอนโทรลเลอร์ Arduino เพื่อติดตามรูปทรงต่างๆ ข้างต้นอย่างละเอียด และดูว่าจอภาพอนุกรมตรวจพบท่าทางสัมผัสหรือไม่

60b8a0017bcae419.png

  1. จากเอาต์พุตในหน้าจออนุกรม เราจะสังเกตเห็นว่าไม้กายสิทธิ์ตรวจพบรูปทรงทั้งหมดจริงๆ! นอกจากนี้ คุณจะเห็นว่าไฟ LED ด้านขวาสว่างขึ้นด้วย

7. ขั้นตอนถัดไป

ขอแสดงความยินดี คุณสร้างท่าทางจดจำ "ไม้กายสิทธิ์" แรกได้สำเร็จ บนไมโครคอนโทรลเลอร์ Arduino

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

เอกสารอ้างอิง

647c3ef0dc103804.png

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