10 - Arduino Nano 33 BLE Sense

Systemy Wbudowane i Przetwarzanie Brzegowe

Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej

Ćwiczenie laboratoryjne 10: Arduino Nano 33 BLE Sense

Powrót do spisu treści ćwiczeń laboratoryjnych

Wstęp

Podczas obecnych i najbliższych zajęć laboratoryjnych zapoznamy się z możliwościami mikrokontrolera Arduino Nano 33 BLE Sense. Mikrokontroler wyposażony jest w moduł U-blox NINA B306, bazujący na wydajnym i energooszczędnym SoC (ang. System-on-Chip) nRF52480. Rdzeń urządzenia oparty jest o 32-bitowy układ obliczeniowy ARM® Cortex™-M4. Arduino Nano 33 BLE Sense posiada 256 kB pamięci RAM oraz 1 MB pamięci flash. W wykorzystywanej wersji (Sense) moduł został wyposażony w szereg sensorów, między innymi: układ inercyjny, czujnik pola magnetycznego, cyfrowy mikrofon, sensor gestów, kolorów i natężenia światła, termometr, czujnik ciśnienia oraz wilgotności. Dodatkowo rozmiar Arduino Nano 33 BLE Sense jest zgodny z rozmiarem innych modułów z serii Nano i posiada:

Wszystkie wyżej wymienione piny wspierają PWM (ang. Pulse Width Modulation). Dodatkowo urządzenie obsługuje interfejsy I2C, SPI oraz UART. Ponadto do komunikacji można wykorzystać wbudowany moduł Bluetooth 5.0 o niskim poborze energii. Pełen układ pinów razem z ich przeznaczeniem został przedstawiony na poniższym schemacie. Do zaprogramowania i konfiguracji mikrokontrolera wykorzystamy środowisko Arduino IDE w najnowszej wersji.

Uwaga: W przypadku wystąpienia błędu No device found ... podczas przesyłania programu do mikrokontrolera, należy upewnić się, że użytkownik należy do odpowiedniej grupy uprawniającej korzystanie z portów USB. Wykonując poniższe polecenie, a następnie resetując komputer można nadać użytkownikowi wymagane uprawnienia:

sudo usermod -a -G dialout $USER

Interfejs GPIO


Zadanie 1.
Zapoznaj się z opisem obsługi pinów cyfrowych w dokumentacji Arduino, a następnie przygotuj sterowanie dołączoną do zestawu diodą LED, na dowolnym pinie cyfrowym, tak aby jej stan zmieniał się co 1 sekundę.

Bluetooth Low Energy (BLE)


Zadanie 2.
Bazując na instrukcji przygotuj aplikację, która pozwoli na sterowanie diodą LED z poziomu telefonu komórkowego (korzystając np. z aplikacji LightBlue dostepnej w Google Play Store). Pamiętaj o ustawieniu odpowiedniej nazwy urządzenia przy pomocy komendy BLE.setLocalName (np. SWPB <numer urządzenia>). Program powinien nasłuchiwać w funkcji loop i ustawiać wyjście cyfrowe diody LED na wysokie dla wartości niezerowych, a niskie dla wiadomości równej 0.

Uwaga: Do poprawnego działania aplikacji komunikującej się z mikrokontrolerem przy pomocy modułu BLE należy zezwolić na udostępnienie lokalizacji.

Wbudowane sensory

W czasie laboratorium zapoznamy się z częścią czujników dostępnych bezpośrednio na platformie Arduino Nano 33 BLE Sense. Opis wszystkich sensorów wraz z przykładowym odczytem danych dostępny jest w Nano 33 BLE Sense Cheat Sheet.

APDS9960 - czujnik światła, koloru i gestów


Zadanie 3.
Bazując na dokumentacji biblioteki Arduino_APDS9960 przygotuj skrypt, który będzie wykrywał jeden z czterech ruchów: góra, dół, prawo, lewo. Zaimplementuj sterowanie diodą LED w oparciu o wykryty ruch, wyjście analogowe i metodę modulacji szerokości impulsów (PWM, ang. Pulse-Width Modulation):

Moduł inercyjny LSM9DS1

Moduł inercyjny LSM9DS1 pozwala na pomiar w przestrzeni wartości przyspieszenia, prędkości kątowej, a także zmian pola magnetycznego umożliwiając wykrywanie orientacji urządzenia, śledzenia ruchu, a także monitorowanie wibracji np. w zastosowaniu detekcji anomalii.

TensorFlow Lite Micro

TensorFlow Lite Micro jest to biblioteka wspierająca uruchamianie algorytmów opartych o sieci neuronowe na urządzeniach o bardzo ograniczonych zasobach, nieposiadających systemu operacyjnego. Wymagane jest natomiast wsparcie standardowych bibliotek C/C++ oraz dynamicznej alokacji pamięci. Głównym założeniem twórców biblioteki było ,,zwiększenie inteligencji" małych urządzeń i systemów wchodzących w skład Internetu Rzeczy (IoT) bez zwiększania kosztów sprzętowych oraz wydatków związanych z przesyłem informacji. Biblioteka TensorFlow Lite Micro wspiera większość warstw i operacji dostępnych w pakiecie TensorFlow, pełną listę można sprawdzić w pliku all_ops_resolver.cc dostępnym w repozytorium tflite-micro.


Zadanie 4.
W zadaniu tym wykorzystany zostanie model klasyfikacji gestów odwzorowujących cyfry w oparciu o dane z sensora LSM9DS1 oraz wytrenowany model dostępny w repozytorium TensorFlow Lite Micro Library for Arduino. W tym celu należy zainstalować bibliotekę Arduino_TensorflowLite zgodnie z sekcją How to Install z odnośnika w poprzedim zdaniu. Następnie z File -> Examples -> Arduino_TensorflowLite wybrać przykład magic_wand i skompilować go dla Arduino Nano 33 BLE Sense. Po uruchomieniu programu można odwzorować gesty i obserwować w monitorze portu szeregowego wizualizację oraz predykcję modelu. Wyjaśnienie podstawowych parametrów i funkcji wykorzystywanych do przygotowania danych oraz wczytania i uruchomienia modelu z wykorzystaniem biblioteki TensorFlow Lite Micro można znaleźć w dokumentacji.

Zadanie domowe

Założyć konto w serwisie Edge Impulse oraz zapoznać się z opisem platformy dostępnym w następnej instrukcji. Dodatkowo, ze względu na ograniczony czas na wykonanie ćwiczenia oraz jakość zbieranych danych zalecane jest wcześniejsze wykonanie sekcji Zbieranie danych. Zadanie można zrealizować wykorzystując platformę Arduino Nano 33 BLE Sense, inne wspierane urządzenie z wbudowanym mikrofonem lub telefon.