Rozpoczęcie pracy przy projektowaniu czujników ruchu i orientacji opartych na systemach mikroelektromechanicznych (MEMS) z wykorzystaniem płytek breakout Arduino

Przez: Clive „Max” Maxfield

Przekazane przez: Północnoamerykańscy redaktorzy DigiKey

Projektanci coraz częściej muszą wyposażać swoje systemy w funkcje pomiaru orientacji i ruchu. Na szczęście, aby im w tym pomóc, dostępne są czujniki oparte na technologiach półprzewodnikowych i systemach mikroelektromechanicznych (MEMS). Ich niewielkie rozmiary i niski koszt pozwalają na zastosowanie czujników ruchu i orientacji w szerokiej gamie systemów, w tym w dronach, robotach i oczywiście produktach przenośnych, takich jak smartfony i tablety. Czujniki te są również wykorzystywane w systemach konserwacji predykcyjnej dla przemysłowego Internetu rzeczy (IIoT), dostarczając danych do analizy z wykorzystaniem sztucznej inteligencji (AI) i uczenia maszynowego (ML) w brzegowych elementach systemu.

Główne typy czujników MEMS używanych do wykrywania ruchu i orientacji to: przyspieszeniomierze, żyroskopy, magnetometry i różne ich kombinacje. Wielu projektantów jest zainteresowanych włączeniem czujników ruchu i orientacji do swoich projektów, jednak często nie wiedzą, od czego zacząć.

Jedną z opcji pomocnych w takich rozwiązaniach jest wykorzystanie zestawów ewaluacyjnych i rozwojowych dostarczanych przez producentów czujników MEMS. Zakładając odpowiedni poziom wsparcia, jest to jak najbardziej słuszne podejście. Wymaga to jednak od projektanta ograniczenia się do korzystania wyłącznie z czujników jednego producenta, albo nauczenia się narzędzi programowania od wielu producentów czujników.

Projektanci, którzy nie mają doświadczenia w pracy z czujnikami ruchu i orientacji, mogą odnieść korzyści z eksperymentowania i prototypowania przy użyciu niedrogich, otwartoźródłowych płytek rozwojowych mikrokontrolerów Arduino, wraz z jej zintegrowanym środowiskiem deweloperskim (IDE), w połączeniu z niedrogimi, otwartoźródłowymi płytkami breakout (BOB) czujników, które zawierają czujniki wielu producentów.

Aby ułatwić projektantom rozpoczęcie pracy, niniejszy artykuł zawiera słowniczek terminologii związanej z czujnikami oraz krótkie omówienie roli czujników ruchu i orientacji. Następnie przedstawia wybór takich płytek BOB z czujnikami od firmy Adafruit i ich zastosowania.

Słowniczek terminologii czujników

Dwa terminy, które są powszechnie stosowane w odniesieniu do czujników ruchu i orientacji to „liczba osi” i „stopnie swobody” (DOF). Niestety, terminy te są często używane zamiennie, co może prowadzić do nieporozumień.

Ogólnie rzecz biorąc, termin oś (lub osie) może być używany do opisu wymiarowości danych wykorzystywanych przez system. W kontekście ruchu i orientacji interesują nas trzy osie, X, Y i Z.

Sposób wizualizacji tych osi zależy od danego systemu. Na przykład w przypadku smartfona w orientacji pionowej oś X jest pozioma w stosunku do ekranu i skierowana w prawo, oś Y jest pionowa w stosunku do ekranu i skierowana w górę, a oś Z, która jest prostopadła do pozostałych dwóch osi, jest uważana za skierowaną poza ekran (ilustracja 1).

Schemat - system fizyczny może mieć maksymalnie tylko sześć stopni swobodyIlustracja 1: system fizyczny może mieć maksymalnie tylko sześć stopni swobody, ponieważ może się on poruszać w przestrzeni trójwymiarowej tylko na sześć sposobów: trzy liniowe i trzy kątowe. (Źródło ilustracji: Max Maxfield)

W odniesieniu do urządzenia takiego jak smartfon interesują nas dwa rodzaje ruchu: liniowy i kątowy. W przypadku ruchu liniowego system może poruszać się z boku na bok wzdłuż osi X, w górę i w dół wzdłuż osi Y oraz do przodu i do tyłu wzdłuż osi Z. W przypadku ruchu kątowego system może obracać się wokół co najmniej jednej z trzech osi.

W kontekście ruchu stopnie swobody odnoszą się do każdego z kierunków, w którym może wystąpić niezależny ruch. W związku z tym system fizyczny może mieć maksymalnie tylko sześć stopni swobody (6DOF), ponieważ może się on poruszać w przestrzeni trójwymiarowej tylko na sześć sposobów (trzy liniowe i trzy kątowe).

Termin „orientacja” odnosi się do fizycznej pozycji lub kierunku czegoś w stosunku do czegoś innego. W przypadku smartfonów orientacja określa, czy telefon leży płasko, czy stoi na jednej krawędzi (w trybie pionowym lub poziomym), czy też jest w którymś z położeń pośrednich.

Można to rozpatrywać również w ten sposób, że orientacja urządzenia może być określona przez wartości wszystkich możliwych stopni swobody w pewnym czasie tX. Dla porównania ruch urządzenia jest określany przez różnice pomiędzy wartościami wszystkich możliwych stopni swobody w momentach t0 i t1.

Czujniki takie jak przyspieszeniomierze, żyroskopy i magnetometry są dostępne w wersjach jedno-, dwu- lub trzyosiowych. Na przykład przyspieszeniomierz 1-osiowy będzie wykrywał zmiany tylko wzdłuż jednej z trzech osi, na której jest ustawiony; czujnik 2-osiowy będzie wykrywał zmiany na dwóch z trzech osi; a czujnik 3-osiowy będzie wykrywał zmiany na wszystkich trzech osiach.

Gdy mówi się, że dana platforma czujników śledzi więcej niż sześć osi, oznacza to, że zapewnia ona wyższy stopień dokładności przez śledzenie wielu punktów danych wzdłuż (lub wokół) osi X, Y i Z. Przykładem jest 12-osiowy zestaw przyspieszeniomierzy wykorzystujący pomiary przyspieszenia liniowego z czterech 3-osiowych przyspieszeniomierzy.

Niestety często zdarza się, że stopnie swobody są mylone z liczbą osi. Na przykład, połączenie 3-osiowego przyspieszeniomierza, 3-osiowego żyroskopu i 3-osiowego magnetometru może być opisywane przez niektórych sprzedawców jako czujnik 9 stopni swobody (9DOF), chociaż bardziej poprawnie powinna być opisana jako 9-osiowy czujnik 6 stopni swobody (6DOF).

Fuzja czujników

Oprócz pomiaru przyspieszenia, przyspieszeniomierz mierzy również grawitację. Na przykład w przypadku smartfona 3-osiowy przyspieszeniomierz może określić, który kierunek jest w dół, nawet jeśli użytkownik stoi nieruchomo i urządzenie jest nieruchome.

Przyspieszeniomierz 3-osiowy może służyć również do określania pionowej i poziomej orientacji urządzenia, które może wykorzystać te informacje do prezentacji swojego wyświetlacza w trybie pionowym lub poziomym. Sam przyspieszeniomierz nie może jednak służyć do określania orientacji smartfona względem pola magnetycznego Ziemi. Ta funkcja jest niezbędna do zadań takich jak aplikacje planetarium, które pozwalają użytkownikowi zidentyfikować i zlokalizować gwiazdy, planety i konstelacje na nocnym niebie przez proste skierowanie urządzenia w kierunku obszaru zainteresowania. W tym przypadku wymagany jest magnetometr. Gdyby smartfon zawsze leżał płasko na stole, wystarczyłby magnetometr 1-osiowy. Ponieważ jednak smartfon może być używany w dowolnej orientacji, konieczne jest zastosowanie magnetometru 3-osiowego.

Na przyspieszeniomierze nie ma wpływu otaczające pole magnetyczne, ale ma na nie wpływ ruch i wibracje. Dla porównania magnetometry nie są podatne na ruch i wibracje jako takie, ale mogą na nie wpływać materiały magnetyczne i pola elektromagnetyczne znajdujące się w pobliżu.

Chociaż 3-osiowy przyspieszeniomierz może być również wykorzystany do uzyskania danych o ruchu obrotowym, 3-osiowy żyroskop zapewnia dokładniejsze dane dotyczące momentu pędu. Żyroskopy dobrze sprawdzają się przy pomiarze prędkości obrotowej, a przyspieszenie liniowe i pola magnetyczne nie mają na nie wpływu. Żyroskopy mają jednak tendencję do generowania niewielkiej „szczątkowej” prędkości obrotowej, nawet gdy są nieruchome. Jest to znane jako „przesunięcie dryftu zerowego”. Problem pojawia się, gdy użytkownik próbuje określić kąt bezwzględny za pomocą żyroskopu. W takim przypadku do uzyskania położenia kątowego konieczne jest całkowanie prędkości obrotowej. Problem z całkowaniem w tym scenariuszu polega na tym, że błędy mogą się kumulować. Mały błąd wynoszący zaledwie 0,01 stopnia w pierwszym pomiarze może wzrosnąć do pełnego stopnia na przykład po 100 pomiarach. Jest to znane jako „dryft żyroskopu”.

Termin „fuzja czujników” odnosi się do łączenia danych pomiarowych pochodzących z różnych źródeł w taki sposób, że otrzymana informacja obarczona jest mniejszą niepewnością, niż byłoby to możliwe, gdyby dane z tych źródeł były wykorzystywane oddzielnie.

Na przykład w przypadku układu czujników składającego się z 3-osiowego przyspieszeniomierza, 3-osiowego żyroskopu i 3-osiowego magnetometru, dane z przyspieszeniomierza i magnetometru można wykorzystać do zniwelowania dryftu żyroskopu. Dane z żyroskopu mogą zaś być wykorzystane do kompensacji wszelkich zakłóceń wywołanych wibracjami przyspieszeniomierza oraz zakłóceń magnetometru wywołanych materiałem magnetycznym lub polem magnetycznym.

Dzięki zastosowaniu fuzji czujników dokładność danych wyjściowych przekracza dokładność poszczególnych czujników.

Kilka typowych czujników

W zależności od zastosowania projektant może zdecydować się na wykorzystanie tylko jednego typu czujnika ruchu lub orientacji w postaci przyspieszeniomierza, żyroskopu lub magnetometru.

Dobrym przyspieszeniomierzem na początek jest płytka breakout (BOB) 2019 firmy Adafruit, która zawiera przyspieszeniomierz 3-osiowy z 14-bitowym przetwornikiem analogowo-cyfrowym (ADC) (ilustracja 2).

Wygląd płytki breakout (BOB) 2019 firmy AdafruitIlustracja 2: płytka breakout (BOB) 2019 firmy Adafruit zawiera przyspieszeniomierz 3-osiowy, służący do wykrywania ruchu, przechyłu i podstawowej orientacji. (Źródło ilustracji: Adafruit)

Czujnik 3-osiowy o wysokiej precyzji ma szeroki zakres od ±2g do ±8g i może służyć do wykrywania ruchu, pochylenia i podstawowej orientacji. Czujnik wymaga zasilania 3,3V, ale płytka breakout BOB zawiera regulator LDO 3,3V oraz układy przełączania poziomów, dzięki czemu można ją bezpiecznie używać z zasilaniem i układami logicznymi o napięciu 3V lub 5V. Komunikacja między płytką BOB i Arduino (lub innym mikrokontrolerem) odbywa się za pomocą interfejsu I2C.

W zastosowaniach wymagających tylko czujnika żyroskopowego do wykrywania ruchów skrętnych i obrotowych dobrą płytką wprowadzającą jest płytka BOB 1032 firmy Adafruit z 3-osiowym żyroskopem L3GD20H firmy STMicroelectronics. Obsługując interfejsy I2C i SPI do Arduino (lub innego mikrokontrolera), żyroskop L3GD20H może być ustawiony na skalę ±250, ±500 lub ±2000 stopni na sekundę, co zapewnia duży zakres czułości. Również ten czujnik wymaga zasilania 3,3V, ale płytka breakout (BOB) zawiera regulator 3,3V i układy przełączania poziomów, pozwalające na używanie go z zasilaniem i układami logicznymi o napięciu 3V lub 5V.

Podobnie w zastosowaniach wymagających tylko czujnika magnetycznego dobrą opcją jest płytka BOB 4479 firmy Adafruit, która zawiera 3-osiowy magnetometr LIS3MDL firmy STMicroelectronics. Magnetometr LIS3MDL może wykrywać zakresy od ±4Gs (±400 µT) do ±16Gs (±1600µT lub 1,6mT). Komunikacja między płytką BOB i Arduino (lub innym mikrokontrolerem) odbywa się za pomocą interfejsu I2C. Także ta płytka breakout (BOB) zawiera regulator 3,3V i układy przełączania poziomów, dzięki czemu można jej bezpiecznie używać z zasilaniem i układami logicznymi o napięciu 3V lub 5V.

Bardzo często zdarza się, że wiele czujników jest używanych łącznie. Na przykład, przyspieszeniomierza można używać w połączeniu z żyroskopem do wykonywania zadań takich jak przechwytywanie ruchu w trzech wymiarach i pomiar inercyjny - to znaczy, aby umożliwić użytkownikowi określenie, jak obiekt porusza się w przestrzeni trójwymiarowej. Jednym z przykładów takiego połączenia jest płytka BOB 4480 firmy Adafruit (ilustracja 3), która zawiera układ czujników LSM6DS33 firmy STMicroelectronics.

Wygląd płytki breakout (BOB) 4480 firmy AdafruitIlustracja 3: płytka breakout (BOB) 4480 firmy Adafruit zawiera 3-osiowy przyspieszeniomierz LSM6DS33TR oraz 3-osiowy żyroskop, które mogą być wykorzystywane do wykonywania zadań takich jak przechwytywanie ruchu w trzech wymiarach i pomiary inercyjne. (Źródło ilustracji: Adafruit)

Przyspieszeniomierz 3-osiowy może dostarczyć danych o tym, który kierunek jest w stronę Ziemi przez pomiar grawitacji, oraz jak szybko płytka przyspiesza w przestrzeni trójwymiarowej. Żyroskop 3-osiowy mierzy jednocześnie obrót i skręt. Podobnie jak w przypadku wcześniej przedstawionych płytek BOB z czujnikami, płytka BOB 4480 zawiera regulator 3,3V i układy przełączania poziomów, dzięki czemu można jej bezpiecznie używać z zasilaniem i układami logicznymi o napięciu 3V lub 5V. Ponadto, dane z czujnika mogą być dostępne zarówno za pomocą interfejsu I2C jak i interfejsu szeregowego SPI, co pozwala na użycie go z Arduino (lub innym mikrokontrolerem) bez skomplikowanej konfiguracji sprzętowej.

Innym przykładem dwuczujnikowej płytki BOB jest płytka 1120 firmy Adafruit, która zawiera kombinację 3-osiowego przyspieszeniomierza i 3-osiowego magnetometru w postaci układu czujników LSM303 firmy STMicroelectronics. Komunikacja między mikrokontrolerem a płytką 1120 odbywa się za pośrednictwem interfejsu I2C, a sama płytka BOB zawiera regulator 3,3V i układy przełączania poziomów, dzięki czemu można ją bezpiecznie stosować z zasilaniem i układami logicznymi o napięciu 3V lub 5V.

Niektóre zastosowania wymagają użycia przyspieszeniomierzy, żyroskopów i magnetometrów. W tym przypadku przydatną płytką BOB na początek będzie płytka 3463 firmy Adafruit, która posiada dwa układy czujników: 3-osiowy żyroskop oraz 3-osiowy przyspieszeniomierz z 3-osiowy magnetometrem. Komunikacja pomiędzy płytką BOB a mikrokontrolerem realizowana jest za pomocą interfejsu SPI. Regulator 3,3V i układy przełączania poziomów również są dołączone, dzięki czemu można bezpiecznie używać płytki z zasilaniem i układami logicznymi o napięciu 3V lub 5V.

Jedną z zalet płytki 3463 jest to, że projektant ma dostęp do danych nieprzetworzonych z trzech czujników. Powiązaną z tym wadą jest to, że korzystanie z tego czujnika (manipulowanie i przetwarzanie jego danych) wymaga około 15 kilobajtów (KB) pamięci flash mikrokontrolera i zużywa dużo cykli zegara.

Alternatywna płytka breakout (BOB) 2472 zawiera układ czujników BNO055 firmy Bosch. Układ BNO055 zawiera w jednej obudowie 3-osiowy przyspieszeniomierz, 3 osiowy żyroskop i 3-osiowy magnetometr (ilustracja 4).

Wygląd czujnika BNO055 na płytce breakout (BOB) 2472 firmy AdafruitIlustracja 4: oprócz 3-osiowego przyspieszeniomierza 3-osiowego żyroskopu i 3-osiowego magnetometru czujnik BNO055 na płytce breakout (BOB) 2472 firmy Adafruit zawiera również procesor Arm Cortex-M0 realizujący fuzję czujników. (Źródło ilustracji: Adafruit)

Ponadto czujnik BNO055 zawiera również 32-bitowy procesor Arm Cortex-M0, który pobiera dane nieprzetworzone z trzech czujników, realizuje zaawansowaną fuzję czujników i udostępnia projektantom przetworzone dane w postaci gotowej do wykorzystania: kwaternionów, kątów Eulera i wektorów. Przez interfejs I2C płytki BOB 2472 projektanci mogą szybko i łatwo uzyskać dostęp w szczególności do następujących funkcji:

  • Orientacja bezwzględna (wektor Eulera, 100Hz): trzyosiowe dane o orientacji oparte na sferze 360°.
  • Orientacja bezwzględna (kwaternion, 100Hz): czteropunktowy kwaternion dla dokładniejszej manipulacji danymi.
  • Wektor prędkości kątowej (100Hz): trzyosiowa „prędkość obrotowa” w rad/s.
  • Wektor przyspieszenia (100Hz): trzyosiowe przyspieszenie (grawitacja + ruch liniowy) w metrach na sekundę do kwadratu (m/s2).
  • Wektor natężenia pola magnetycznego (20Hz): trzyosiowy pomiar pola magnetycznego (w µT).
  • Liniowy wektor przyspieszenia (100Hz): dane dotyczące trzyosiowego przyspieszenia liniowego (przyspieszenie minus grawitacja) w m/s2.
  • Wektor grawitacji (100Hz): dane dotyczące trzyosiowego przyspieszenia grawitacyjnego (minus ruch) w m/s2.
  • Temperatura (1Hz): temperatura otoczenia w stopniach Celsjusza.

Realizacja fuzji czujników wewnątrz układu zwalnia pamięć i cykle obliczeniowe głównego mikrokontrolera, co jest idealnym rozwiązaniem dla projektantów tworzących tanie systemy czasu rzeczywistego. Ponadto algorytmy fuzji czujników mogą być trudne i czasochłonne do opanowania. Dzięki temu, że fuzja czujników jest realizowana w układzie scalonym, deweloperzy systemów mogą rozpocząć pracę w ciągu kilku minut, w przeciwieństwie do dni lub tygodni, gdyby algorytmy wdrażane były od podstaw.

Podsumowanie

Wielu projektantów jest zainteresowanych włączeniem czujników ruchu i orientacji do swoich projektów, jednak nie wiedzą, od czego zacząć. W przypadku projektantów, którzy nie maja doświadczenia w pracy z tymi urządzeniami, zapoznanie się z czujnikami różnych producentów może stanowić wyzwanie. Jednym ze sposobów na rozpoczęcie eksperymentów i prototypowania jest użycie niedrogich, otwartoźródłowych płytek rozwojowych mikrokontrolerów, takich jak Arduino, wraz z niedrogimi, otwartoźródłowymi płytkami breakout (BOB) zawierającymi czujniki pochodzące od wielu producentów.

Materiały dodatkowe:

  1. Szybka ewaluacja czujników i peryferiów dzięki płytkom breakout (BOB) Arduino
  2. IoT, IIoT, AIoT i dlaczego są one przyszłością automatyki przemysłowej
  3. Prosty sposób na wprowadzenie sztucznej inteligencji do każdego systemu przemysłowego
DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Informacje o autorze

Image of Max Maxfield

Clive „Max” Maxfield

Clive „Max” Maxfield otrzymał tytuł licencjacki w dziedzinie inżynierii sterowania w 1980 na uniwersytecie Sheffield Hallam w Anglii i rozpoczął pracę jako projektant procesorów centralnych (CPU) dla komputerów typu mainframe. Z biegiem lat Max projektował wszystko - od mikroukładów krzemowych do płytek drukowanych, od wzmacniaczy fal mózgowych do steampunkowych aparatów prognostycznych (nie pytajcie co to). Od ponad 30 lat ma swoje miejsce w awangardzie automatyzacji projektowania elektroniki (EDA).

Max jest autorem i współautorem wielu książek, takich jak np. „Designus Maximus Unleashed (banned in Alabama)”, „Bebop to the Boolean Boogie (An Unconventional Guide to Electronics)”, „EDA: Where Electronics Begins”, „FPGAs: Instant Access, and How Computers Do Math”. Zajrzyj na jego bloga: „Max’s Cool Beans”.

Informacje o wydawcy

Północnoamerykańscy redaktorzy DigiKey