SL.pro
Blog · · 9 minut czytania

Jak działają aplikacje poziomic: Przyspieszeniomierze wyjaśnione

Twój telefon wie, który kierunek jest w dół, ponieważ zawiera przyspieszeniomierz MEMS — mikroskopijny czujnik mechaniczny, który mierzy przyspieszenie grawitacyjne na trzech osiach równocześnie. Aplikacje poziomic odczytują te trzy liczby, stosują trygonometrię i wyświetlają wynik jako kąt. Cały proces zachodzi setki razy na sekundę, bezgłośnie, wewnątrz chip'u mniejszego niż ziarno piasku. Oto dokładnie, jak to działa.

Główne wnioski
  • Przyspieszeniomierze MEMS kosztują około 0,50 USD w masowej produkcji, osiągając dokładność ±0,1-0,3° po kalibracji.
  • Pitch i roll są obliczane przy użyciu formuł arctan zastosowanych do odczytów grawitacji z trzema osiami.
  • Spirit Level Pro stosuje exponential moving average (alpha=0,15) w celu wygładzenia szumów czujnika o 60-80%.
  • Zmiany temperatury 10°C mogą przesunąć odczyt czujnika MEMS o 0,1-0,5°, co czyni kalibrację na miejscu ważną.
  • W przypadku pomiarów statycznych przyspieszeniomierz sam w sobie jest wystarczający — żyroskop nie jest wymagany.
Zblizenie makro chip'u przyspieszeniomierza trójosi MEMS Kionix z urządzenia mobilnego
Chip'u przyspieszeniomierza MEMS wewnątrz telefonu jest mniejszy niż ziarno ryżu, ale mierzy grawitację precyzyjnie.

Co to jest przyspieszeniomierz MEMS?

MEMS oznacza Micro-Electro-Mechanical Systems. Według STMicroelectronics, jednego z największych na świecie producentów MEMS, element czujnika wewnątrz nowoczesnego przyspieszeniomierza smartfona ma wymiary około 300 mikronów × 300 mikronów — mniejszy niż ziarno soli (STMicroelectronics, 2024). Te chip'i kosztują około 0,50 USD każdy przy produkcji w dużych ilościach, a jednak osiągają dokładność kątową, która konkuruje ze sprzętem kosztującym znacznie więcej.

Mechanizm jest elegancki. Mikroskopijną masę zawieszono na malutkich sprężynach krzemowych, wytrawionych bezpośrednio na powierzchni chip'u przy użyciu tego samego procesu litografii, który jest używany do produkcji tranzystorów. Gdy chip się przechyla, siła grawitacji Ziemi odchyla zawieszoną masę. To odchylenie zmienia pojemność między małymi elektrodami przebiającymi się jak grzebień. Chip mierzy tę zmianę pojemności i konwertuje ją na wartość przyspieszenia w jednostkach g (siła grawitacyjna).

Gdy trzymasz telefon nieruchomo, przyspieszeniomierz nie mierzy ruchu — mierzy składową grawitacji działającą na każdej z jej trzech osi. To jest kluczowy wgląd za każdą aplikacją poziomic. Grawitacja to stała, znana siła. Jeśli wiesz, ile z niej działa na każdej osi, możesz obliczyć dokładną orientację telefonu.

Element czujnika przyspieszeniomierza MEMS w flagowym smartfonie mierzy około 300 mikronów × 300 mikronów, kosztuje około 0,50 USD w masowej produkcji i osiąga rozdzielczość kątową 14-16 bitów. Chip'i te są wytwarzane na plasterkach krzemowych przy użyciu tego samego procesu litografii, który jest używany do produkcji tranzystorów, umożliwiając masową produkcję po cenach elektroniki konsumenckiej. (Portfolio produktów MEMS STMicroelectronics, 2024) Źródło: STMicroelectronics, 2024

Jak przyspieszeniomierz 3-osiowy mierzy przechylenie?

Przyspieszeniomierz 3-osiowy przypisuje systemowi współrzędnych do telefonu: X biegnie od lewej do prawej, Y od góry do dołu, a Z od przodu do tyłu. Gdy telefon leży płasko na stole, grawitacja działa w całości na osi Z, więc czujnik odczytuje około 9,81 m/s² na Z i 0 zarówno na X, jak i na Y. Przechyl telefon, a grawitacja redystrybuuje — mniej na Z, więcej na X i Y, w dokładnej proporcji do kąta.

Trygonometria do konwersji tych trzech odczytów na kąty jest prosta. Pitch (przechylenie przód-tył) i roll (przechylenie lewo-prawo) oblicza się za pomocą funkcji tangensa odwrotnego:

Pitch = arctan( Y / sqrt(X² + Z²) ) Roll = arctan( X / sqrt(Y² + Z²) )

Te dwie formuły są całym matematycznym jądrem aplikacji poziomic. Podaj trzy surowe wartości przyspieszeniomierza, uruchom obliczenia i otrzymasz pitch i roll w radianach. Pomnóż przez 180/π, aby przeliczyć na stopnie. To jest liczba wyświetlana na ekranie.

Dlaczego używać pierwiastka kwadratowego z pozostałych dwóch osi w mianowniku zamiast tylko jednej? Utrzymuje formułę dokładną w całym zakresie obrotów 360°. Użycie mianownika jednej osi powoduje błędy, gdy telefon zbliża się do pionu, ponieważ jedna oś zmierza do zera, a dzielenie staje się niestabilne. Wielkość wektora w mianowniku całkowicie to unika.

Płyta Freescale Semiconductor 3-osiowy przyspieszeniomierz MEMS na białym tle
Przyspieszeniomierz 3-osiowy mierzy grawitację na osiach X, Y i Z jednocześnie.
Zobacz fizykę w akcji w czasie rzeczywistym

Spirit Level Pro wyświetla kąty pitch i roll na żywo z wygładzaniem EMA, pięcioma presetami tolerancji i kalibracją jednym dotknięciem. Nie potrzeba pobierania.

Spróbuj Spirit Level Pro za darmo

Dlaczego surowe dane czujnika są tak hałaśliwe?

Surowe wyjście przyspieszeniomierza MEMS jest zaskakująco szumne. Doskonale nieruchomy telefon wytwarza odczyt przyspieszeniomierza, który waha się ±0,02-0,05 g od momentu do momentu, napędzany szumem termicznym w elektronice czujnika, drgnięciami budynku i błędem kwantyzacji w przetwornika analog-cyfrowego. Bez filtrowania, bąbelek poziomic byłby nieustannie drżący, czynąc go bezużytecznym do precyzyjnej pracy.

Trzy rodzaje szumu wpływają na odczyt przyspieszeniomierza. Szum termiczny to losowa fluktuacja elektryczna spowodowana ciepłem — jest to nieuniknione i ustawia ostateczną granicę szumu dla czujnika. Szum wibracyjny pochodzi ze środowiska: sprężarka lodówki, kroki, ruch. Niestabilność obciążenia to dryf niskiej częstotliwości, gdzie punkt zerowy czujnika powoli się zmienia. Każdy wymaga innego podejścia do zarządzania.

Standardowe rozwiązanie oprogramowania to filtr dolnoprzepustowy, który przepuszcza powolne zmiany (jak prawdziwe przechylenie) podczas blokowania szybkich zmian (jak wibracja). Najpowszechniejszą implementacją jest exponential moving average (EMA). Każdy nowy odczyt wnosi frakcję alfa do wyjścia; reszta jest przenoszona z poprzedniej wartości filtrowanej:

filtered = alpha × new_reading + (1 - alpha) × previous_filtered

Spirit Level Pro używa EMA z alpha=0,15. Wylądowaliśmy na tej wartości po testowaniu kilku opcji. Niższe wartości (alpha=0,05) dały bardzo gładkie odczyt, ale czuły się powoli — bąbelek zauważalnie opóźniał się, gdy przesuwałeś telefon. Wyższe wartości (alpha=0,3) były bardziej responsywne, ale wystarczająco szumne, aby utrudnić złapanie precyzyjnych odczytów. Alpha=0,15 jest punktem, w którym bąbelek czuje się żywy bez uczucia nerwowości.

Kompromis: Wyższa wartość alfa sprawia, że wyświetlacz bardziej reaguje na rzeczywiste zmiany przechylenia, ale także bardziej wrażliwy na szum wibracyjny. Niższa alfa wygładza hałas bardziej agresywnie, ale tworzy opóźnienie. Alpha=0,15 Spirit Level Pro równoważy to przy efektywnym czasie osiadania 150ms.

Jaka rola żyroskop odgrywa?

Żyroskop mierzy prędkość kątową — jak szybko telefon obraca się w stopniach na sekundę — a nie jego bezwzględną orientację. To jest kluczowe rozróżnienie. Żyroskop sam w sobie nie może powiedzieć, czy telefon jest poziomy; wie tylko, czy obraca się i jak szybko. W przypadku pomiarów statycznych przyspieszeniomierz sam w sobie dostarcza wszystkiego, co potrzebne.

Tam, gdzie żyroskop staje się przydatny, to sensor fusion: łączenie danych przyspieszeniomierza i żyroskopu w celu poprawy wydajności, gdy telefon się porusza. Przyspieszeniomierze doskonale mierzą statyczne przechylenie, ale powoli i głośno reagują na szybkie ruchy. Żyroskopy doskonale śledzą szybkie obroty, ale dryfują w czasie (ich odczyt gromadzi błędy). Filtr Kalmana lub filtr komplementarny łączy oba strumienie, wykorzystując żyroskop do szybkiego śledzenia dynamicznego i przyspieszeniomierz do korygowania długoterminowego dryfu.

Większość aplikacji poziomic, w tym Spirit Level Pro, nie potrzebuje sensor fusion, ponieważ scenariusz pomiaru jest statyczny — umieszczasz telefon na powierzchni i czekasz na ustabilizowanie się. Przyspieszeniomierz obsługuje to doskonale samodzielnie. Sensor fusion ma większe znaczenie dla nawigacji inercyjnej (wiedza, dokąd zmierza dron) niż dla mierzenia, czy półka jest pozioma.

Dlaczego kalibracja ma takie znaczenie?

Każdy czujnik MEMS ma przesunięcie produkcyjne — małe uprzedzenie pieczone w trakcie produkcji. Badanie z 2017 r. w IEEE Sensors Journal wykazało, że niekalibrowane przyspieszeniomierze smartfonów wykazują średnie przesunięcie ±1,2° na próbie 20 popularnych urządzeń, z niektórymi wartościami outlier osiągającymi ±2,5° (IEEE Sensors Journal, 2017). To przesunięcie jest systematyczne: wpływa na każdy pojedynczy odczyt tą samą kwotą, w tym samym kierunku.

Kalibracja polega na pomiarze tego przesunięcia na znanej powierzchni odniesienia i jego przechowywaniu. Spirit Level Pro zapisuje wartości kalibracji w localStorage pod kluczami calibrationPitch i calibrationRoll. Każdy następny odczyt odejmuje przechowywane przesunięcia przed wyświetleniem wyniku. Przesunięcie jest skutecznie zerowane.

Bez kalibracji przesunięcie 1,5° oznacza, że każdy odczyt jest 1,5° błędny. Aplikacja może pokazać 0,0°, gdy telefon siedzi na nachyleniu 1,5°. Po kalibracji ten sam telefon trafia na dokładność ±0,1-0,3° — poprawa 5-10 razy za darmo.

Badanie z 2017 r. w IEEE Sensors Journal zmierzyło obciążenie przyspieszeniomierza na próbie 20 popularnych modeli smartfonów. Niekalibrowane urządzenia wykazały średnie systematyczne przesunięcie ±1,2°, z niektórymi urządzeniami budżetowymi przekraczającymi ±2,5°. Po pojedynczym przebiegu kalibracji na powierzchni średni błąd spadł poniżej ±0,3° dla wszystkich testowanych urządzeń, co pokazuje, że technika kalibracji ma większe znaczenie niż jakość sprzętu dla większości zastosowań. (IEEE Sensors Journal, 2017) Źródło: IEEE Sensors Journal, 2017

Jak temperatura wpływa na dokładność?

Czujniki MEMS są wrażliwe na temperaturę. Sprężyny krzemowe zawieszające masę dowodową rozszerzają się i kurczą wraz ze zmianami temperatury, przesuwając odczyt punktu zerowego. Większość przyspieszeniomierzy konsumenckich dryfuje 0,1-0,5° dla każdej zmiany temperatury 10°C (Analog Devices ADXL345 datasheet, 2023). Przeniesienie telefonu z ciepłego samochodu (25°C) do zimnego garażu (5°C) wprowadza potencjalny dryf 1,0° zanim czujnik się ustabilizuje.

Praktyczne konsekwencje: kalibruj w temperaturze, w której będziesz pracować. Kalibracja wykonana w ciepłym biurze nie będzie w pełni kompensować zachowanie czujnika w zimnym garażu. To nie oznacza obsesji na punkcie temperatury dla każdego zadania. Do wiszących obrazów lub sprawdzania półek dryf jest znikomy. W przypadku precyzyjnej pracy w granicach ±0,2° pozwól telefonowi ustabilizować się przez dwie minuty po każdej znaczącej zmianie temperatury przed kalibracją.

Poziomica zamontowana na aparacie pokazująca, jak działa pomiar kąta
Wiele czujników współpracuje w celu określenia dokładnej orientacji urządzenia w trzech wymiarach.

iPhone kontra Android: czy sprzęt czujnika jest inny?

Tak, i różnice mają znaczenie. Apple projektuje swój własny stos czujnika ruchu. iPhony od iPhone'a 6s wzwyż zawierają koprocesor ruchu zaprojektowany przez Apple'a (M9 i nowsze), który obsługuje dane czujnika niezależnie od głównego CPU. Samsung Galaxy flagowe używają czujników z STMicroelectronics (seria LSM6DSO), które łączą 3-osiowy przyspieszeniomierz i 3-osiowy żyroskop na jednym chipie. Telefony Google Pixel używały czujników z Bosch (BMI270) i TDK InvenSense, w zależności od generacji.

W praktyce flagowe iPhony i flagowe Androidy działają niemal identycznie po kalibracji, osiągając dokładność ±0,1-0,15°. Prawdziwy podział jest między flagowym a budżetowym Androidem. Telefony budżetowe używają MEMS o niższej specyfikacji — zazwyczaj rozdzielczość 10-12 bitów w stosunku do 14-16 bitów na flagowych — i pokazują 2-3 razy więcej szumu w surowych danych czujnika. Po kalibracji nawet telefony budżetowe zwykle osiągają ±0,3-0,4°, co jest wystarczające dla większości prac DIY.

Komponent, który najbardziej różnicuje wydajność poziomic iPhone'a, nie jest samym przyspieszeniomierzem — jest to Apple Motion Coprocessor działający obok głównego CPU. Stale gromadzi dane czujnika z wysoką szybkością próbkowania, nawet gdy aplikacja nie jest na pierwszym planie. Daje to filtrowi EMA więcej punktów danych na sekundę do pracy. Dlatego właśnie iPhony czują się szczególnie gładkie w aplikacjach poziomic, nawet gdy surowa specyfikacja czujnika wygląda porównywalnie do alternatyw Android.

Często zadawane pytania

Jak działają aplikacje poziomic na telefonie?

Aplikacje poziomic używają wbudowanego przyspieszeniomierza MEMS w telefonie, aby zmierzyć kierunek przyspieszenia grawitacyjnego na trzech osiach (X, Y, Z). Gdy telefon się przechyla, grawitacja redystrybuuje się między osiami. Aplikacja oblicza pitch i roll za pomocą formuł arctan, stosuje wygładzanie w celu zmniejszenia szumów czujnika i wyświetla wynik jako bąbelek poziomic lub odczyt kąta numerycznego. Całe obliczenie przeprowadza się setki razy na sekundę.

Jak dokładny jest przyspieszeniomierz telefonu do użytku poziomic?

Flagowe telefony osiągają ±0,1-0,3° dokładności po kalibracji. Budżetowe telefony Android mogą wykazywać ±0,5-1,5° bez kalibracji ze względu na MEMS o niższej rozdzielczości i wyższą wariancję produkcyjną. Badanie IEEE Sensors Journal z 2017 r. wykazało, że sama kalibracja zmniejsza średni błąd o ponad 70% na wszystkich szczeblach urządzeń. W przypadku większości zadań DIY i handlowych kalibrowany telefon średniej klasy jest wystarczająco dokładny (IEEE Sensors Journal, 2017).

Czy aplikacja poziomica używa żyroskopu?

W przypadku pomiarów statycznych nie. Przyspieszeniomierz sam w sobie dostarcza kątu przechylenia. Żyroskop mierzy prędkość obracania, a nie pozycję, więc nie może powiedzieć, czy telefon jest poziomy — tylko jak szybko się obraca. Niektóre aplikacje używają sensor fusion (łączenia obu czujników) do gładszych odczytów podczas ruchu, ale do wciśnięcia telefonu na ścianę lub powierzchnię i odczytania kąta przyspieszeniomierz obsługuje wszystko.

Dlaczego moja aplikacja poziomica czyta się nieco źle nawet na płaskiej powierzchni?

Najczęstszą przyczyną jest przesunięcie produkcyjne — każdy chip MEMS ma małe uprzedzenie ustawione w fabryce, które powoduje odczyt wartości niezerowej nawet na płasko. Kalibracja aplikacji na znanej płaskiej powierzchni to naprawia. Inne przyczyny to dryf temperatury (0,1-0,5° na zmianę 10°C), etui telefonu, które lekko przechyla urządzenie na powierzchni, lub zabrudzenia i pył na samej powierzchni. Kalibracja na czystym szklnym stole po każdej zmianie temperatury rozwiązuje większość problemów.

Pełny obraz

Aplikacje poziomic działają, ponieważ fizyka jest niezawodna. Grawitacja jest stała, przyspieszeniomierze mierzą ją stale, a trygonometria konwertuje trzy liczby na kąt. Łańcuch od elementu czujnika MEMS do wyświetlania bąbelka jest całkowicie deterministyczny — bez zgadywania, bez czarnej skrzynki.

To, co rozróżnia dobrą aplikację poziomic od słabej, to nie dostęp do lepszego sprzętu. Każdy flagowy telefon wysyłany z czujnikami, które są bardziej niż zdolne. Różnica polega na oprogramowaniu: jak dobrze surowy strumień czujnika jest filtrowany, jak implementowana jest i przechowywana kalibracja, jak presetów tolerancji mapują się na rzeczywiste zadania. Zrób to dobrze, a 0,50 USD chip MEMS dostarcza dokładność, która konkuruje korzystnie z dedykowanymi instrumentami kosztującymi pięćdziesiąt razy więcej.

Zrozumienie, jak działa czujnik, też czyni cię lepszym użytkownikiem. Kalibruj w temperaturze roboczej. Usuń etui do precyzyjnych odczytów. Pozwól odczytowi osiadać sekundę, zanim mu zaufasz. Te nawyki wynikają bezpośrednio z wiedzy, co sprzęt faktycznie robi.

Spróbuj Spirit Level Pro za darmo

Działa na każdym telefonie lub tablecie. Nie jest wymagane pobieranie. Funkcje Pro za 10 USD jednorazowo.

Otwórz Spirit Level Pro

Brak konta wymagane · Działa offline · 20 języków