1. Wprowadzenie
Co utworzysz
W tym ćwiczeniu nauczymy się używać TensorFlow Lite For Microcontrollers do uruchamiania modelu deep learning na Arduino Nano 33 BLE. Mikrokontroler zamienia się w cyfrową „magiczną różdżkę”, którą użytkownik może machać i rzucać różne zaklęcia. Gdy użytkownik porusza różdżką, te złożone, wielowymiarowe dane z czujnika, które byłyby niezrozumiałe dla człowieka, są przekazywane jako dane wejściowe do modelu. Model zwraca prostą klasyfikację, która informuje nas, czy nastąpił jeden z kilku ruchów.

Uczenie maszynowe na mikrokontrolerach
Systemy uczące się mogą być wykorzystywane do tworzenia inteligentnych narzędzi, które ułatwiają użytkownikom życie, takich jak Asystent Google. Często jednak wymagają one dużej mocy obliczeniowej lub zasobów, takich jak wydajny serwer w chmurze lub komputer stacjonarny. Obecnie jednak wnioskowanie uczenia maszynowego można przeprowadzać na małych urządzeniach o niskim poborze mocy, takich jak mikrokontrolery.
Mikrokontrolery są bardzo popularne, tanie, wymagają bardzo mało energii i są bardzo niezawodne. Są one częścią różnego rodzaju urządzeń domowych, takich jak sprzęt AGD, samochody i zabawki. Każdego roku produkuje się około 30 miliardów urządzeń z mikrokontrolerami.

Dzięki zastosowaniu uczenia maszynowego w przypadku małych mikrokontrolerów możemy zwiększyć inteligencję miliardów urządzeń, których używamy w życiu codziennym, bez konieczności korzystania z drogiego sprzętu czy niezawodnych połączeń internetowych. Wyobraź sobie inteligentne urządzenia, które dostosowują się do Twojej codziennej rutyny, inteligentne czujniki przemysłowe, które odróżniają problemy od normalnej pracy, oraz magiczne zabawki, które pomagają dzieciom uczyć się w zabawny i przyjemny sposób.
TensorFlow Lite For Microcontrollers (oprogramowanie)

TensorFlow to platforma uczenia maszynowego typu open source od Google, która służy do trenowania i uruchamiania modeli. TensorFlow Lite to platforma oprogramowania, zoptymalizowana wersja TensorFlow, przeznaczona do uruchamiania modeli TensorFlow na małych, stosunkowo słabych urządzeniach, takich jak telefony komórkowe.
TensorFlow Lite For Microcontrollers to platforma oprogramowania, zoptymalizowana wersja TensorFlow, która umożliwia uruchamianie modeli TensorFlow na małych, energooszczędnych urządzeniach, takich jak mikrokontrolery. Spełnia ona wymagania dotyczące tych środowisk wbudowanych, tzn.ma mały rozmiar binarny, nie wymaga obsługi systemu operacyjnego, żadnych standardowych bibliotek C ani C++ ani dynamicznej alokacji pamięci itp.
Arduino Nano 33 BLE (sprzęt)

Arduino to popularna platforma open source używana do tworzenia projektów elektronicznych. Składa się z:
- Fizyczna programowalna płytka obwodu (często mikrokontroler), np. Arduino Nano 33 BLE używana w tym ćwiczeniu.
- Środowisko programistyczne Arduino (IDE), czyli oprogramowanie służące do pisania i przesyłania kodu komputerowego na płytkę.
Arduino Nano 33 BLE to platforma oparta na mikrokontrolerze, czyli mały komputer na jednej płytce drukowanej. Ma procesor, pamięć i sprzęt wejścia/wyjścia, który umożliwia wysyłanie i odbieranie sygnałów cyfrowych do innych urządzeń. W przeciwieństwie do komputera mikrokontroler nie jest wydajny i zwykle nie ma systemu operacyjnego. Zamiast tego mają małe procesory i niewiele pamięci, a napisane przez Ciebie programy działają bezpośrednio na sprzęcie. Ponieważ są one zaprojektowane tak, aby były jak najprostsze, mikrokontroler może zużywać bardzo mało energii.
Co musisz zrobić
- Skonfiguruj mikrokontroler Arduino Nano 33 BLE i przekształć go w cyfrową „magiczną różdżkę”.
- Skonfiguruj Arduino IDE i zainstaluj wymagane biblioteki.
- Wdrażanie programu na urządzeniu
- Rzucaj różne zaklęcia, machając magiczną różdżką, i sprawdzaj przewidywania.
Czego potrzebujesz
- laptop z systemem Linux, macOS lub Windows;
- Arduino Nano BLE Sense 33 (bez złączy)
- Kabel micro USB (jeśli masz laptopa z portem USB-C, zamiast tego kup kabel USB-C na micro USB).
- (opcjonalnie) patyk o długości około 30 cm,
- (opcjonalnie) taśma klejąca,
2. Konfigurowanie mikrokontrolera Arduino
Rozpakuj Arduino
Wyjmij go z pudełka i wyciągnij z pianki. Jest przewodzący i może powodować problemy.

Podłącz go do laptopa
- Podłącz kabel micro USB do gniazda na chipie.
- Drugi koniec kabla podłącz do gniazda USB na laptopie.
- Dioda LED w lewym dolnym rogu Arduino (w lewym górnym rogu na poniższym obrazie) powinna się zaświecić.

Zapoznaj się z przepływem pracy

Jak widać na powyższym diagramie, interpreter TFLite na Arduino okresowo uruchamia wnioskowanie na podstawie modelu. Model wykorzystuje przetworzone dane z akcelerometru jako dane wejściowe i zwraca prognozę, która wskazuje najbardziej prawdopodobny gest. Następnie drukowany jest pożądany wynik i zapala się odpowiednia dioda LED.
3. Konfigurowanie Arduino IDE
1. Pobierz Arduino IDE
Aby wdrożyć program na mikrokontrolerze Arduino, używamy środowiska Arduino IDE.
Po pobraniu zainstaluj i otwórz Arduino IDE, klikając aplikację, której ikona wygląda tak: 
Początkowa strona docelowa otworzy się w ten sposób:

2. Konfigurowanie Menedżera tablic
- W menu Arduino wybierz
Tools -> Board: "Arduino .." —> Boards Manager. - Wyszukaj
"Arduino Nano 33 BLE"i zainstalujArduino nRF528x Boards (Mbed OS). Dzięki temu nasz mikrokontroler Arduino Nano 33 BLE będzie obsługiwany przez Arduino IDE.
- W menu Arduino wybierz
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

- Na koniec sprawdź, czy w prawym dolnym rogu środowiska IDE wybrano płytkę „Arduino Nano 33 BLE”.

3. Skonfiguruj Port
W menu Arduino wybierz Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Powinien pojawić się ekran podobny do tego:

4. Sprawdź połączenie z tablicą
W menu Arduino wybierz Tools -> Get Board Info. Powinien pojawić się ekran podobny do tego:

4. Instalowanie bibliotek
1. Biblioteka TensorFlow Arduino
Ta biblioteka zawiera wszystkie przykłady TensorFlow Lite dla mikrokontrolerów, w tym kod źródłowy magicznej różdżki wymagany w tym ćwiczeniu.
- W menu Arduino wybierz
Sketch -> Include Library -> Add .ZIP Library.... - Dodaj pobraną bibliotekę TensorFlow Arduino Library
.zip.
2. LSM9DS1 Arduino Library
Ta biblioteka umożliwia odczytywanie wartości akcelerometru, magnetometru i żyroskopu z jednostki IMU LSM9DS1 na płytce Arduino Nano 33 BLE Sense.
- W menu Arduino wybierz
Sketch -> Include -> Manage Libraries.... - Wyszukaj i zainstaluj
"Arduino_LSM9DS1".
5. Wczytywanie i kompilowanie przykładu
1. Wczytaj przykład
W menu Arduino wybierz File -> Examples -> Arduino_TensorFlowLite -> magic_wand, aby wczytać przykładowy kod.

Spowoduje to wczytanie kodu źródłowego magicznej różdżki.

2. Tworzenie przykładu
W oknie szkicu kliknij przycisk Upload.

Po kilku minutach powinien pojawić się czerwony tekst informujący o zakończeniu flashowania. Podczas przesyłania prawa dioda LED powinna pulsować, a po zakończeniu przesyłania zgasnąć.

6. Prezentacja
Magiczna różdżka może obecnie wykrywać 3 gesty, jak pokazano poniżej: 
- Skrzydło: zacznij od lewego górnego rogu i przez 2 sekundy rysuj literę „W”.
- Okrąg: zacznij w pozycji wyprostowanej i przez sekundę wykonuj różdżką okrężne ruchy zgodnie z ruchem wskazówek zegara.
- Pochylenie: zacznij od trzymania urządzenia skierowanego do góry, z diodami LED skierowanymi w Twoją stronę. Przesuń różdżkę w dół pod kątem w lewo, a następnie poziomo w prawo przez sekundę.
Ilustracja poniżej przedstawia 2 gesty. Najpierw Slope, a potem Wing (użyj tego jako punktu odniesienia w demonstracji).

Aby uruchomić wersję demonstracyjną, wykonaj te czynności:
- Po podłączeniu USB wybierz
Tools -> Serial Monitorw menu Arduino. Początkowo otworzy się pusty ekran bez żadnych danych wyjściowych.

- Przesuń mikrokontroler Arduino, aby dokładnie odtworzyć każdy z powyższych kształtów, i sprawdź, czy monitor szeregowy wykrywa gest.

- Z danych wyjściowych w monitorze szeregowym widać, że magiczna różdżka wykryła wszystkie kształty. Zauważysz też, że prawa dioda LED się zaświeci.
7. Następne kroki
Gratulacje! Udało Ci się zbudować pierwszą „magiczną różdżkę” rozpoznającą gesty na mikrokontrolerze Arduino.
Mamy nadzieję, że to krótkie wprowadzenie do programowania z użyciem TensorFlow Lite dla mikrokontrolerów było dla Ciebie przydatne. Koncepcja deep learningu na mikrokontrolerach jest nowa i ekscytująca, dlatego zachęcamy do eksperymentowania.
Dokumentacja
- Wytrenuj własny model, gdy już opanujesz podstawy programu.
- Więcej informacji o TensorFlow Lite dla mikrokontrolerów znajdziesz na stronie internetowej i w GitHub.
- Wypróbuj inne przykłady i uruchom je na Arduino, jeśli jest obsługiwane.
- Wypróbuj inne ćwiczenia z programowania: AI na mikrokontrolerze z TensorFlow Lite i SparkFun Edge
- Zapoznaj się z książką O’Reilly TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers, która wprowadza w tematykę uczenia maszynowego na małych urządzeniach i zawiera opis kilku ciekawych projektów. Ten codelab jest oparty na rozdziale 11 tej książki.

Dziękujemy i życzymy udanego budowania!