Đũa phép AI kết hợp với TensorFlow Lite cho Vi điều khiển và Arduino

1. Giới thiệu

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, chúng ta sẽ tìm hiểu cách sử dụng TensorFlow Lite cho bộ vi điều khiển để chạy mô hình học sâu trên Arduino Nano 33 BLE. Người dùng sẽ biến bộ vi điều khiển thành một "đũa phép" kỹ thuật số để vẫy và thực hiện nhiều phép thuật. Khi người dùng di chuyển đũa phép, dữ liệu cảm biến phức tạp, đa chiều này (mà con người không thể giải mã được) sẽ được truyền dưới dạng thông tin đầu vào cho mô hình. Mô hình này sẽ đưa ra một phân loại đơn giản để cảnh báo cho chúng ta nếu một trong số các chuyển động đã xảy ra.

9208eb1207211349.gif

Công nghệ học máy trên bộ vi điều khiển

Bạn có thể sử dụng công nghệ học máy để tạo các công cụ thông minh giúp cuộc sống của người dùng trở nên dễ dàng hơn, chẳng hạn như Trợ lý Google. Tuy nhiên, những trải nghiệm này thường đòi hỏi nhiều tài nguyên hoặc khả năng tính toán, chẳng hạn như một máy chủ đám mây mạnh mẽ hoặc một máy tính. Tuy nhiên, hiện tại, bạn có thể chạy quá trình suy luận bằng công nghệ học máy trên phần cứng nhỏ, tiêu thụ ít năng lượng, chẳng hạn như bộ vi điều khiển.

Bộ vi điều khiển rất phổ biến, rẻ tiền, tiêu thụ rất ít năng lượng và rất đáng tin cậy. Chúng là một phần của tất cả các loại thiết bị gia dụng: thiết bị, ô tô và đồ chơi. Trên thực tế, mỗi năm có khoảng 30 tỷ thiết bị chạy bằng bộ vi điều khiển được sản xuất.

1914a419dfacf0b5.jpeg

Bằng cách đưa công nghệ học máy vào các bộ vi điều khiển nhỏ, chúng ta có thể tăng cường trí thông minh của hàng tỷ thiết bị mà chúng ta sử dụng trong cuộc sống, mà không cần dựa vào phần cứng đắt tiền hoặc kết nối Internet đáng tin cậy. Hãy tưởng tượng các thiết bị thông minh có thể thích ứng với quy trình hằng ngày của bạn, các cảm biến công nghiệp thông minh có thể hiểu được sự khác biệt giữa các vấn đề và hoạt động bình thường, cũng như các đồ chơi kỳ diệu có thể giúp trẻ em học tập một cách thú vị và vui vẻ.

TensorFlow Lite cho bộ vi điều khiển (Phần mềm)

864114d0c2b4c919.png

TensorFlow là khung công nghệ học máy nguồn mở của Google để huấn luyện và chạy các mô hình. TensorFlow Lite là một khung phần mềm, một phiên bản được tối ưu hoá của TensorFlow, được thiết kế để chạy các mô hình TensorFlow trên các thiết bị nhỏ, tương đối tiêu thụ ít năng lượng, chẳng hạn như điện thoại di động.

TensorFlow Lite cho bộ vi điều khiển là một khung phần mềm, một phiên bản được tối ưu hoá của TensorFlow, được thiết kế để chạy các mô hình TensorFlow trên phần cứng nhỏ, tiêu thụ ít năng lượng, chẳng hạn như bộ vi điều khiển. Khung này tuân thủ các ràng buộc bắt buộc trong các môi trường nhúng này, tức là có kích thước nhị phân nhỏ, không yêu cầu hỗ trợ hệ điều hành, bất kỳ thư viện C hoặc C++ tiêu chuẩn nào hoặc phân bổ bộ nhớ động, v.v.

Arduino Nano 33 BLE (Phần cứng)

bcd452d4d660efa9.jpeg

Arduino là một nền tảng nguồn mở phổ biến được dùng để xây dựng các dự án điện tử. Nền tảng này bao gồm:

  1. Một bảng mạch có thể lập trình vật lý (thường là một bộ vi điều khiển) chẳng hạn như Arduino Nano 33 BLE được dùng trong lớp học lập trình này.
  2. Arduino IDE (Môi trường phát triển tích hợp), phần mềm được dùng để viết và tải mã máy tính lên bảng mạch vật lý.

Arduino Nano 33 BLE là một nền tảng dựa trên bộ vi điều khiển: một máy tính nhỏ trên một bảng mạch duy nhất. Nền tảng này có bộ xử lý, bộ nhớ và phần cứng I/O cho phép gửi và nhận tín hiệu kỹ thuật số đến các thiết bị khác. Không giống như máy tính, bộ vi điều khiển không mạnh mẽ và thường không chạy hệ điều hành. Thay vào đó, chúng có bộ xử lý nhỏ, không có nhiều bộ nhớ và các chương trình bạn viết sẽ chạy trực tiếp trên phần cứng. Tuy nhiên, vì được thiết kế để đơn giản nhất có thể, nên bộ vi điều khiển có thể tiêu thụ rất ít năng lượng.

Bạn sẽ thực hiện

  • Thiết lập bộ vi điều khiển Arduino Nano 33 BLE và biến bộ vi điều khiển này thành một "đũa phép" kỹ thuật số
  • Thiết lập Arduino IDE và cài đặt các thư viện bắt buộc
  • Triển khai chương trình trên thiết bị
  • Thực hiện nhiều phép thuật bằng cách vẫy đũa phép và xem các dự đoán

Bạn cần có

  • Máy tính xách tay chạy Linux, MacOS hoặc Windows
  • Arduino Nano BLE Sense 33 (không có tiêu đề)
  • Cáp Micro USB (Nếu bạn đang dùng máy tính xách tay có cổng USB-C, hãy thay bằng cáp USB-C sang Micro USB)
  • (không bắt buộc) Gậy, dài khoảng 30 cm (12 inch)
  • (không bắt buộc) Băng dính

2. Thiết lập bộ vi điều khiển Arduino

Mở hộp Arduino

Lấy bộ vi điều khiển ra khỏi hộp và kéo ra khỏi bọt xốp đóng gói. Bộ vi điều khiển này có tính dẫn điện và có thể gây ra vấn đề nếu không được đóng gói đúng cách!

6ed84a651c871a58.jpeg

Cắm vào máy tính xách tay

  • Cắm cáp MicroUSB vào ổ cắm trong chip.
  • Cắm đầu kia của cáp vào ổ cắm USB trên máy tính xách tay.
  • Đèn LED ở dưới cùng bên trái trên Arduino (trên cùng bên trái trong hình bên dưới) sẽ sáng lên.

c6936696f9659104.jpeg

Làm quen với quy trình làm việc

99852afbed7e78b0.png

Như minh hoạ trong sơ đồ ở trên, trình thông dịch TFLite trên Arduino định kỳ chạy quá trình suy luận trên mô hình. Mô hình này sử dụng dữ liệu gia tốc kế đã xử lý làm thông tin đầu vào và đưa ra một dự đoán cho biết cử chỉ có khả năng xảy ra nhất. Hơn nữa, một kết quả đầu ra mong muốn sẽ được in và các đèn LED phù hợp sẽ sáng lên.

3. Thiết lập Arduino IDE

1. Tải Arduino IDE xuống

Để triển khai chương trình trên bộ vi điều khiển Arduino, chúng ta sử dụng Arduino IDE.

Sau khi tải xuống, hãy cài đặt và mở Arduino IDE bằng cách nhấp vào ứng dụng có biểu tượng như sau: 75717f13527f36b9.png

Trang đích ban đầu sẽ mở ra như sau:

933c91e6e1997c61.png

2. Thiết lập Trình quản lý bo mạch

  1. Trên trình đơn Arduino, hãy chọn Tools -> Board: "Arduino .." —> Boards Manager
  2. Tìm kiếm "Arduino Nano 33 BLE" và cài đặt Arduino nRF528x Boards (Mbed OS). Điều này sẽ đảm bảo rằng Arduino IDE hỗ trợ Bộ vi điều khiển Arduino Nano 33 BLE. 817c63346152eda9.png
  1. Trên trình đơn Arduino, hãy chọn Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

9357691e1a1348eb.png

  1. Cuối cùng, hãy xác minh rằng bo mạch bạn đã chọn là "Arduino Nano 33 BLE" ở dưới cùng bên phải của IDE.

aa08706bb84fa9b2.png

3. Thiết lập Cổng

Trên trình đơn Arduino, hãy chọn Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Bạn sẽ thấy một nội dung tương tự như sau:

8c25990d0c6fb6f8.png

4. Kiểm tra kết nối bo mạch

Trên trình đơn Arduino, hãy chọn Tools -> Get Board Info. Bạn sẽ thấy một nội dung tương tự như sau:

ccd8f5305be6cf59.png

4. Cài đặt thư viện

1. Thư viện TensorFlow Arduino

Thư viện này chứa tất cả các ví dụ về TensorFlow Lite cho bộ vi điều khiển, bao gồm cả mã nguồn đũa phép cần thiết cho lớp học lập trình này.

  1. Trên trình đơn Arduino, hãy chọn Sketch -> Include Library -> Add .ZIP Library...
  2. Thêm Thư viện TensorFlow Arduino .zip mà bạn đã tải xuống.

2. Thư viện Arduino LSM9DS1

Thư viện này cho phép bạn đọc các giá trị gia tốc kế, từ kế và con quay hồi chuyển từ LSM9DS1 IMU trên Arduino Nano 33 BLE Sense.

  1. Trên trình đơn Arduino, hãy chọn Sketch -> Include -> Manage Libraries...
  2. Tìm kiếm và cài đặt "Arduino_LSM9DS1". ac2f78a737c5f233.png

5. Tải và xây dựng ví dụ

1. Tải ví dụ

Trên trình đơn Arduino, hãy chọn File -> Examples -> Arduino_TensorFlowLite -> magic_wand để tải mã mẫu.

de349f2d3cb49b98.png

Thao tác này sẽ tải mã nguồn đũa phép.

cda8c35a597b0798.png

2. Xây dựng ví dụ

Nhấp vào nút Upload trong cửa sổ bản phác thảo.

71cb1474d5e14669.png

Sau vài phút, bạn sẽ thấy văn bản màu đỏ cho biết quá trình cài đặt ROM đã hoàn tất. Trong quá trình tải lên, đèn LED bên phải sẽ nhấp nháy, sau đó tắt ở cuối.

3df1d0858c6e40a4.png

6. Bản minh hoạ

Đũa phép hiện có thể phát hiện 3 cử chỉ như minh hoạ bên dưới: 99a607da66af9fc8.png

  1. Wing (Kiểu cánh): Bắt đầu từ góc trên bên trái và cẩn thận vẽ chữ "W" trong hai giây.
  2. Ring (Vòng): Bắt đầu ở vị trí thẳng đứng, di chuyển đũa phép theo vòng tròn theo chiều kim đồng hồ trong một giây.
  3. Slope (Dốc): Bắt đầu bằng cách giữ đũa phép hướng lên trên, với đèn LED hướng về phía bạn. Di chuyển đũa phép xuống theo đường dốc sang trái rồi theo chiều ngang sang phải trong một giây.

Hình ảnh sau đây minh hoạ hai cử chỉ. Đầu tiên là Slope (Dốc) rồi đến Wing (Cánh) (sử dụng hình ảnh này làm tài liệu tham khảo cho bản minh hoạ của bạn).

9208eb1207211349.gif

Để chạy bản minh hoạ, hãy làm theo hướng dẫn bên dưới:

  1. Khi đã cắm USB, hãy chọn Tools -> Serial Monitor trên trình đơn Arduino. Ban đầu, màn hình sẽ mở ra một màn hình trống không có kết quả đầu ra.

38e8d53652eb28f2.png

  1. Di chuyển bộ vi điều khiển Arduino để cẩn thận vẽ từng hình dạng ở trên và xem liệu màn hình nối tiếp có phát hiện được cử chỉ hay không.

60b8a0017bcae419.png

  1. Từ kết quả đầu ra trong màn hình nối tiếp, chúng ta nhận thấy rằng đũa phép thực sự đã phát hiện được tất cả các hình dạng! Bạn cũng sẽ nhận thấy rằng đèn LED bên phải sáng lên.

7. Các bước tiếp theo

Xin chúc mừng, bạn đã tạo thành công "đũa phép" nhận dạng cử chỉ đầu tiên trên bộ vi điều khiển Arduino!

Chúng tôi hy vọng bạn đã thích phần giới thiệu ngắn gọn này về quá trình phát triển bằng TensorFlow Lite cho bộ vi điều khiển. Ý tưởng về công nghệ học sâu trên bộ vi điều khiển là một ý tưởng mới mẻ và thú vị. Chúng tôi khuyến khích bạn hãy thử nghiệm!

Tài liệu tham khảo

647c3ef0dc103804.png

Cảm ơn bạn và chúc bạn xây dựng vui vẻ!