Arduino NANO 33 IoT to nowa wersja modułu NANO z poziomami logicznymi 3.3V (uwaga na moduły rozszerzeń z 5V I/O), mikrokontrolerem ARM SAMD21G18A, łącznością WiFi i Bluetooth NINA W102, oraz 6 osiowym IMU LSM6DS3. Na PCB znajduje się bezpieczny magazyn kluczy ATECC608A wykorzystywany w bezpiecznej komunikacji z chmurą Arduino IoT. Płytka pozwala na montaż powierzchniowy SMT, lub wlutowanie i wykorzystanie złącz szpilkowych goldpin. Mikrokontroler taktowany jest zegarem do 48MHz, wyposażony jest w pamięć flash 256KB, oraz 32KB RAM. Poza wyjściami PWM dostępne są także wyjście 10b DAC. Przetworniki ADC dysponują rozdzielczością 12b. Do prób z modułem została wykorzysta wersja 1.8.9 środowiska Arduino.
Antena modułu WiFi/BT wykonana jest w postaci metalowej kształtki, zabezpieczonej przed drganiami kroplą kleju termicznego:
Dodajemy płytkę "nano 33" Narzędzia -> Płytka -> menadżer płytek:
Wybieramy płytkę i port:
Jeżeli będziemy chcieli korzystać z IMU dodajemy bibliotekę LSM6DS3:
Akcelerometr lub żyroskop może przydać się przy sterowaniu pojazdami np. dwukołowym pojazdem balansującym, ew. stabilizacją/pozycjonowaniem kamery, lub umożliwi wykrywanie ruchu i wybudzanie urządzenia, być może w aplikacjach fitnes da się zliczać ilość kroków lub rodzaj aktywności?
Przetestujmy funkcjonalność chmury Arduino IoT.
Zakładamy konto: https://www.arduino.cc/en/IoT/HomePage
po założeniu konta klikamy "NEW THING" na: https://create.arduino.cc/iot/
Wybieramy model płytki Nano 33 IoT:
Aby konfigurować płytkę z poziomu przeglądarki Chrome lub Firefox pobieramy i instalujemy wtyczkę 'Arduino Create'. Po poprawnym zainstalowaniu wtyczki zostanie ona wykryta w przeglądarce, oraz pojawi się ikona w zasobniku systemowym.
Konsola debug dostępna jest pod adresem http://127.0.0.1:8991/
Do testów wykorzystałem przeglądarkę Firefox.
Podłączamy płytkę do USB, gdy zostanie wykryta nadajemy jej nazwę.
Przechodzimy do konfiguracji płytki, pierwszy etap to automatyczna konfiguracja układu kryptograficznego.
Otrzymujemy startowy kod do wgrania na płytkę, oraz możliwość podania hasła i nazwy punktu dostępowego WiFi 2.4GHz:
Dodane urządzenie znajdziemy tutaj: https://create.arduino.cc/devices/
Dodajemy możliwość sterowania LED na płytce:
https://create.arduino.cc/iot/things
oraz przechodzimy do edycji kodu online:
https://create.arduino.cc/editor
w funkcji:
void onLedChange() {
// Do something
digitalWrite(13, led);
}
dodajemy linijkę:
digitalWrite(13, led);
co pozwoli na sterowanie LED na płytce z wykorzystaniem chmury Arduino.
W sekcji setup dodajemy także konfigurację wyjścia 13: pinMode(13, OUTPUT);
Kompilujemy i wysyłamy na płytkę, wracamy do IoT cloud.
Możemy sterować zmienną led, a następnie świeceniem LED na płytce z wykorzystaniem przeglądarki:
Interfejs web edytora oraz IoT cloud działa dość ospale, a czasami pojawiają się błędy, ale w łatwy sposób możemy przetestować właściwości urządzeń IoT.
Spróbujmy odczytać wartości z akcelerometru na PCB i przesłać je do chmury.
Dodajemy możliwość odczytu jednej z 3 wartości przyspieszenia wysyłanych przez akcelerometr:
Modyfikujemy kod w edytorze online:
Możemy obserwować w przeglądarce zmiany wartości wysyłane przez IMU:
Bezpłatny, a także płatny dostęp do edytora online i chmury ma swoje ograniczenia:
Odpocznijmy na chwilę od chmury i wracamy do edytora offline bez ograniczeń, spróbujmy wykorzystać 12b przetworniki ADC oraz 10b przetwornik DAC.
Jako przykład uruchomimy elektroniczne obciążenie o regulowanej mocy. Zwykle w takich układach mamy regulowany stały prąd wymuszany przez sztuczne obciążenie, tym razem spróbujemy wymuszać stałą moc.
Napięcie na wyjściu DAC0 (pin 4) po wzmocnieniu 3-4x wysteruje bramkę tranzystora MOSFET (wzmocnienie dobrać tak aby wykorzystać cały zakres DAC oraz zapewnić odpowiednie napięcie na bramce tranzystora).
Na wejście ADC A1 (pin 5) podamy napięcie wejściowe z obciążanego układu podane przez dzielnik 1:10, napięcie wejściowe 0-20V będzie odpowiadało 0-2V.
Na wejście ADC A2 (pin 6) podamy wzmocnione napięcie na rezystorze 0.1om, który służy do pomiaru prądu płynącego w układzie. Wzmocnienie 10X zapewni napięcia 0-2V dla prądów 0-2A.
Na wejście ADC A3 (pin 7) podamy napięcie ustawiane potencjometrem, będą to nastawy mocy jaką obciążymy podłączone źródło zasilania.
Na konsoli szeregowej będziemy obserwowali ustawioną moc, napięcie i prąd oraz traconą moc.
Napięcie i prąd wyjściowy pozwoli na obliczenie mocy P=U*I, natomiast sterowanie napięciem bramki tranzystora MOSFET pozwoli na regulację prądu.
Zmieniając algorytm sterujący można uzyskać sztuczne obciążenie o stałej rezystancji, lub o stałym prądzie, jednak stałoprądowe elektroniczne obciążenie można zbudować w oparciu o pojedynczy wzmacniacz operacyjny.
Do sterowania można wykorzystać regulator PID jednak dla uproszczenia wykorzystamy tylko blok I. Czas odpowiedzi będzie dość długi, ale układ będzie dążył do ciągłej minimalizacji błędu.
Tak wygląda prymitywny układ testowy:
Kod testowy:
W konsoli szeregowej można obserwować działanie układu:
Rezultaty są średnie, występuje zauważalny błąd pomiaru napięcia, układ ma dość długi czas odpowiedzi (przypomina nieco ręczne kręcenie gałką przyrządu), ale stara się utrzymywać stałą moc niezależnie od zmian napięcia podłączonego zasilacza. Może to być wstęp do eksperymentów tego typu, zarówno z kodem jak i z częścią układową (oba warto rozbudować).
Arduino NANO 33 IoT jest dwukrotnie droższe od poprzednio testowanego Arduino NANO Every i jest wyposażone w mikrokontroler o większych zasobach i bogatszych peryferiach. Większa rozdzielczość ADC i obecność DAC może przydać się w projektach z sygnałami analogowymi. Płytka pracuje z napięciami 3.3V. Moduł posiada układ IMU oraz łączność WiFi i BT, układ kryptograficzny, a także wsparcie dla chmury IoT Arduino. Zaskoczyły mnie ograniczenia kompilatora online od Arduino, oraz ograniczenia chmury IoT zarówno w wersji bezpłatnej i płatnej.
Jakie macie pomysły na wykorzystanie Arduino NANO 33 IoT, co myślicie o narzędziach online i chmurze IoT od Arduino?



Antena modułu WiFi/BT wykonana jest w postaci metalowej kształtki, zabezpieczonej przed drganiami kroplą kleju termicznego:

Dodajemy płytkę "nano 33" Narzędzia -> Płytka -> menadżer płytek:

Wybieramy płytkę i port:

Jeżeli będziemy chcieli korzystać z IMU dodajemy bibliotekę LSM6DS3:

Akcelerometr lub żyroskop może przydać się przy sterowaniu pojazdami np. dwukołowym pojazdem balansującym, ew. stabilizacją/pozycjonowaniem kamery, lub umożliwi wykrywanie ruchu i wybudzanie urządzenia, być może w aplikacjach fitnes da się zliczać ilość kroków lub rodzaj aktywności?
Przetestujmy funkcjonalność chmury Arduino IoT.
Zakładamy konto: https://www.arduino.cc/en/IoT/HomePage
po założeniu konta klikamy "NEW THING" na: https://create.arduino.cc/iot/
Wybieramy model płytki Nano 33 IoT:

Aby konfigurować płytkę z poziomu przeglądarki Chrome lub Firefox pobieramy i instalujemy wtyczkę 'Arduino Create'. Po poprawnym zainstalowaniu wtyczki zostanie ona wykryta w przeglądarce, oraz pojawi się ikona w zasobniku systemowym.
Konsola debug dostępna jest pod adresem http://127.0.0.1:8991/
Do testów wykorzystałem przeglądarkę Firefox.

Podłączamy płytkę do USB, gdy zostanie wykryta nadajemy jej nazwę.
Przechodzimy do konfiguracji płytki, pierwszy etap to automatyczna konfiguracja układu kryptograficznego.
Otrzymujemy startowy kod do wgrania na płytkę, oraz możliwość podania hasła i nazwy punktu dostępowego WiFi 2.4GHz:

Dodane urządzenie znajdziemy tutaj: https://create.arduino.cc/devices/
Dodajemy możliwość sterowania LED na płytce:
https://create.arduino.cc/iot/things


oraz przechodzimy do edycji kodu online:
https://create.arduino.cc/editor

Code: c
w funkcji:
void onLedChange() {
// Do something
digitalWrite(13, led);
}
dodajemy linijkę:
digitalWrite(13, led);
co pozwoli na sterowanie LED na płytce z wykorzystaniem chmury Arduino.
W sekcji setup dodajemy także konfigurację wyjścia 13: pinMode(13, OUTPUT);
Kompilujemy i wysyłamy na płytkę, wracamy do IoT cloud.
Możemy sterować zmienną led, a następnie świeceniem LED na płytce z wykorzystaniem przeglądarki:

Interfejs web edytora oraz IoT cloud działa dość ospale, a czasami pojawiają się błędy, ale w łatwy sposób możemy przetestować właściwości urządzeń IoT.
Spróbujmy odczytać wartości z akcelerometru na PCB i przesłać je do chmury.
Dodajemy możliwość odczytu jednej z 3 wartości przyspieszenia wysyłanych przez akcelerometr:

Modyfikujemy kod w edytorze online:
Code: c
Możemy obserwować w przeglądarce zmiany wartości wysyłane przez IMU:

Bezpłatny, a także płatny dostęp do edytora online i chmury ma swoje ograniczenia:

Odpocznijmy na chwilę od chmury i wracamy do edytora offline bez ograniczeń, spróbujmy wykorzystać 12b przetworniki ADC oraz 10b przetwornik DAC.
Jako przykład uruchomimy elektroniczne obciążenie o regulowanej mocy. Zwykle w takich układach mamy regulowany stały prąd wymuszany przez sztuczne obciążenie, tym razem spróbujemy wymuszać stałą moc.
Napięcie na wyjściu DAC0 (pin 4) po wzmocnieniu 3-4x wysteruje bramkę tranzystora MOSFET (wzmocnienie dobrać tak aby wykorzystać cały zakres DAC oraz zapewnić odpowiednie napięcie na bramce tranzystora).
Na wejście ADC A1 (pin 5) podamy napięcie wejściowe z obciążanego układu podane przez dzielnik 1:10, napięcie wejściowe 0-20V będzie odpowiadało 0-2V.
Na wejście ADC A2 (pin 6) podamy wzmocnione napięcie na rezystorze 0.1om, który służy do pomiaru prądu płynącego w układzie. Wzmocnienie 10X zapewni napięcia 0-2V dla prądów 0-2A.
Na wejście ADC A3 (pin 7) podamy napięcie ustawiane potencjometrem, będą to nastawy mocy jaką obciążymy podłączone źródło zasilania.
Na konsoli szeregowej będziemy obserwowali ustawioną moc, napięcie i prąd oraz traconą moc.

Napięcie i prąd wyjściowy pozwoli na obliczenie mocy P=U*I, natomiast sterowanie napięciem bramki tranzystora MOSFET pozwoli na regulację prądu.
Zmieniając algorytm sterujący można uzyskać sztuczne obciążenie o stałej rezystancji, lub o stałym prądzie, jednak stałoprądowe elektroniczne obciążenie można zbudować w oparciu o pojedynczy wzmacniacz operacyjny.
Do sterowania można wykorzystać regulator PID jednak dla uproszczenia wykorzystamy tylko blok I. Czas odpowiedzi będzie dość długi, ale układ będzie dążył do ciągłej minimalizacji błędu.
Tak wygląda prymitywny układ testowy:

Kod testowy:
Code: c
W konsoli szeregowej można obserwować działanie układu:

Rezultaty są średnie, występuje zauważalny błąd pomiaru napięcia, układ ma dość długi czas odpowiedzi (przypomina nieco ręczne kręcenie gałką przyrządu), ale stara się utrzymywać stałą moc niezależnie od zmian napięcia podłączonego zasilacza. Może to być wstęp do eksperymentów tego typu, zarówno z kodem jak i z częścią układową (oba warto rozbudować).
Arduino NANO 33 IoT jest dwukrotnie droższe od poprzednio testowanego Arduino NANO Every i jest wyposażone w mikrokontroler o większych zasobach i bogatszych peryferiach. Większa rozdzielczość ADC i obecność DAC może przydać się w projektach z sygnałami analogowymi. Płytka pracuje z napięciami 3.3V. Moduł posiada układ IMU oraz łączność WiFi i BT, układ kryptograficzny, a także wsparcie dla chmury IoT Arduino. Zaskoczyły mnie ograniczenia kompilatora online od Arduino, oraz ograniczenia chmury IoT zarówno w wersji bezpłatnej i płatnej.
Jakie macie pomysły na wykorzystanie Arduino NANO 33 IoT, co myślicie o narzędziach online i chmurze IoT od Arduino?

Cool? Ranking DIY