Gdy robot ma rozpoznać przechylenie, upadek albo nagły wstrząs, potrzebuje nie tylko mikrokontrolera, lecz także wiarygodnego pomiaru ruchu. ADXL345 to cyfrowy, trójosiowy akcelerometr, który można łatwo połączyć z Arduino, Raspberry Pi lub innym układem przez I²C albo SPI. Poniżej wyjaśniam jego parametry, sposób podłączenia, odczyt danych, kalibrację oraz sytuacje, w których ten czujnik sprawdza się najlepiej.
Najważniejsze informacje o czujniku ruchu
- Trzy osie pomiaru pozwalają wykrywać przechylenie, ruch, wstrząsy i swobodny spadek.
- Zakres pomiarowy można ustawić na ±2 g, ±4 g, ±8 g albo ±16 g.
- Układ obsługuje interfejsy I²C i SPI, więc współpracuje z większością popularnych płytek.
- W trybie pełnej rozdzielczości skala wynosi około 4 mg/LSB, niezależnie od wybranego zakresu.
- Najczęstsze problemy wynikają z niezgodnego napięcia, błędnego adresu I²C lub złej orientacji osi.

Czym jest ADXL345 i co właściwie mierzy
ADXL345 jest układem MEMS, czyli mikromechanicznym czujnikiem wykonanym wewnątrz struktury krzemowej. Rejestruje przyspieszenie w osiach X, Y i Z. Dzięki temu potrafi wykryć zarówno ruch urządzenia, jak i działanie grawitacji, gdy moduł pozostaje nieruchomy.
To ważne rozróżnienie. Przy leżącym module jedna z osi zwykle pokazuje około 1 g, ponieważ czujnik „widzi” przyspieszenie ziemskie. Gdy urządzenie zaczyna się poruszać, odczyt jest sumą grawitacji i przyspieszeń wynikających z ruchu. Sam akcelerometr nie wie więc, czy zmiana wynika z przechylenia, czy z gwałtownego przesunięcia.
Według danych producenta układ pracuje z napięciem zasilania od 2,0 do 3,6 V, ma dwa wyjścia przerwań, bufor FIFO na 32 próbki oraz sprzętowe funkcje wykrywania stuknięcia, aktywności, bezczynności i swobodnego spadku. Szczegółowe wartości elektryczne i ograniczenia pokazuje karta katalogowa Analog Devices.
| Parametr | Wartość | Znaczenie praktyczne |
|---|---|---|
| Liczba osi | 3 | Pomiar w kierunkach X, Y i Z |
| Zakres | ±2 g, ±4 g, ±8 g, ±16 g | Większy zakres pozwala mierzyć silniejsze wstrząsy |
| Interfejs | I²C lub SPI | Cyfrowa komunikacja z mikrokontrolerem |
| Napięcie zasilania układu | 2,0-3,6 V | Nie należy bezpośrednio zasilać go napięciem 5 V |
| Częstotliwość próbkowania | 0,1-3200 Hz | Wyższa częstotliwość lepiej rejestruje szybkie drgania |
| Bufor FIFO | 32 próbki | Ogranicza obciążenie procesora przy chwilowych zdarzeniach |
W praktycznych projektach nie traktuję go jako zamiennika żyroskopu. Akcelerometr dobrze odpowiada na pytanie, czy urządzenie przyspiesza i jak jest przechylone, ale nie zmierzy bezpośrednio obrotu wokół osi ani nie poda kierunku obrotu w poziomie.
Zakres pomiarowy i rozdzielczość mają znaczenie
Zakres wybiera się w rejestrze konfiguracji. Do pomiaru nachylenia stołu, ramienia robota albo prostego gestu zwykle wystarcza ±2 g. Jeżeli czujnik ma rejestrować uderzenia, drgania konstrukcji lub gwałtowne ruchy, rozsądniej wybrać ±8 g albo ±16 g.
| Zakres | Kiedy go wybrać | Kompromis |
|---|---|---|
| ±2 g | Nachylenie i spokojny ruch | Najmniejszy zapas przy wstrząsach |
| ±4 g | Robotyka, sterowanie gestami | Uniwersalne ustawienie do prototypów |
| ±8 g | Wibracje i dynamiczne ruchy | Mniejsza czułość na bardzo małe zmiany |
| ±16 g | Uderzenia, testy odporności, szybkie ruchy | Największy zakres, ale trudniej zauważyć delikatne przechylenia |
W trybie pełnej rozdzielczości układ utrzymuje skalę około 4 mg na bit. Oznacza to, że zmiana pojedynczego bitu odpowiada mniej więcej 0,004 g. Producent podaje rozdzielczość do 13 bitów przy zakresie ±16 g, ale w codziennym projekcie większe znaczenie ma poprawna kalibracja, stabilne zasilanie i sposób zamocowania płytki niż sama liczba bitów.
Częstotliwość próbkowania także wymaga rozsądnego ustawienia. Dla przechylenia i gestów często wystarcza 25-100 Hz. Przy pomiarze drgań można użyć wyższych wartości, jednak rośnie wtedy poziom szumu i zużycie energii. Pasmo układu jest w przybliżeniu równe połowie wybranej częstotliwości wyjściowej.
Jak podłączyć moduł do Arduino lub Raspberry Pi
Najłatwiejszy start zapewnia gotowy moduł z wyprowadzonymi pinami. Trzeba jednak sprawdzić jego schemat, ponieważ poszczególne płytki różnią się obecnością stabilizatora napięcia i konwerterów poziomów logicznych. Sam scalony czujnik wymaga zasilania około 3,3 V i nie jest odporny na bezpośrednie sygnały 5 V.
Połączenie przez I²C
W typowym układzie należy połączyć zasilanie, masę, linię SDA i SCL. Pin CS trzeba ustawić w stanie wysokim, a pin SDO wybrać zgodnie z potrzebnym adresem. Przy SDO podłączonym do masy adres wynosi 0x53, natomiast po podłączeniu do napięcia zasilania zmienia się na 0x1D.
- VCC modułu podłącz do właściwego napięcia zasilania.
- GND połącz z masą mikrokontrolera.
- SDA połącz z linią danych I²C.
- SCL połącz z linią zegara I²C.
- CS ustaw na VCC, gdy używasz I²C.
- SDO podłącz do GND albo VCC, zamiast pozostawiać go niepodłączonego.
Niepodłączony pin adresowy jest częstą przyczyną problemów. Układ nie ma wewnętrznego rezystora, który ustaliłby jego stan. Jeżeli skaner I²C nie znajduje czujnika, najpierw sprawdzam właśnie adres, masę, napięcie oraz jakość przewodów.
Prosty odczyt w Arduino
Do szybkiego prototypowania można użyć biblioteki Adafruit ADXL345 i biblioteki Unified Sensor. Przykład odczytu wartości w jednostkach przyspieszenia wygląda tak:
#include
#include
#include
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
void setup() {
Serial.begin(115200);
if (!accel.begin()) {
Serial.println("Nie znaleziono czujnika");
while (true) {}
}
accel.setRange(ADXL345_RANGE_4_G);
}
void loop() {
sensors_event_t event;
accel.getEvent(&event);
Serial.print("X: ");
Serial.print(event.acceleration.x);
Serial.print(" Y: ");
Serial.print(event.acceleration.y);
Serial.print(" Z: ");
Serial.println(event.acceleration.z);
delay(20);
}
Biblioteka zwraca wartości w m/s², a nie w g. Dla przyspieszenia ziemskiego 1 g otrzymamy około 9,81 m/s². Gdy zależy mi na porównywaniu danych z dokumentacją czujnika, dzielę wynik przez 9,80665 i pracuję w jednostkach g.
Jak obliczyć przechylenie i poprawić jakość pomiaru
Przy nieruchomym urządzeniu można wyznaczyć podstawowe kąty na podstawie wektora grawitacji. Przykładowe wzory dla popularnej orientacji osi to:
roll = atan2(ay, az) * 180.0 / PI;
pitch = atan2(-ax, sqrt(ay * ay + az * az)) * 180.0 / PI;
Takie obliczenia działają dobrze przy spokojnym ruchu. Podczas przyspieszania robota grawitacja miesza się z przyspieszeniem liniowym, więc kąt zaczyna chwilowo „pływać”. To ograniczenie fizyczne, a nie błąd biblioteki. Do stabilnej orientacji w dynamicznym ruchu lepiej połączyć akcelerometr z żyroskopem i zastosować filtr komplementarny albo filtr Kalmana.
Kalibracja w kilku prostych krokach
- Połóż moduł na stabilnej, możliwie poziomej powierzchni.
- Zbierz kilkadziesiąt lub kilkaset próbek z każdej osi.
- Oblicz średnią, aby określić przesunięcie zerowe osi X i Y.
- Na osi skierowanej pionowo porównaj wynik z wartością około 1 g.
- Zapisz poprawki w programie i powtórz pomiar w kilku orientacjach.
Najprostszy filtr uśredniający potrafi wyraźnie uspokoić odczyt. Uśrednienie 5-20 próbek jest dobrym punktem startowym dla przechyłu, ale opóźnia reakcję. Przy detekcji uderzenia taki filtr może z kolei ukryć krótki impuls, dlatego parametry trzeba dobrać do zadania.
Do czego ten akcelerometr nadaje się najlepiej
Największą zaletą układu są funkcje, które można obsłużyć sprzętowo. Czujnik potrafi wykrywać pojedyncze i podwójne stuknięcia, aktywność, bezczynność oraz swobodny spadek, a wynik może zgłosić przez wyjście przerwania. Mikrokontroler nie musi wtedy nieustannie odczytywać wszystkich próbek.
- Roboty mobilne mogą wykrywać przechylenie obudowy albo przewrócenie.
- Projekty Arduino mogą używać gestów do sterowania menu, światłem lub serwomechanizmem.
- Rejestratory drgań mogą zapisywać przeciążenia i wstrząsy w konstrukcji.
- Urządzenia przenośne mogą przechodzić w tryb oszczędzania energii po wykryciu bezczynności.
- Prototypy zabezpieczeń mogą reagować na upadek albo nagłe uderzenie.
Wbudowany bufor FIFO przechowuje do 32 próbek. To przydatne wtedy, gdy procesor ma zajmować się innymi zadaniami, a interesuje nas krótki fragment danych przed i po zdarzeniu. W prostym projekcie Arduino nie zawsze będzie potrzebny, ale w rejestratorze lub systemie bateryjnym robi realną różnicę.
Nie wybierałbym tego układu do precyzyjnej nawigacji, pomiaru pozycji po dwukrotnym całkowaniu przyspieszenia ani do określania kąta obrotu wokół osi pionowej. Błędy narastają tam bardzo szybko, a sam akcelerometr nie dostarcza informacji, które pozwoliłyby je skutecznie skorygować.
Najczęstsze błędy podczas uruchamiania
Brak odpowiedzi na magistrali
Najpierw sprawdź, czy moduł odpowiada pod adresem 0x53 lub 0x1D. Jeżeli nie, zmierz napięcie, połącz wspólną masę i upewnij się, że linie SDA oraz SCL nie zostały zamienione. Przy długich przewodach i luźnych połączeniach mogą pojawić się losowe błędy transmisji.
Podanie napięcia 5 V na goły układ
Moduł opisany jako „5 V compatible” może mieć własny stabilizator i konwerter poziomów, ale sam scalony czujnik nie ma takiej ochrony. Zawsze sprawdź schemat konkretnej płytki. Sam napis ADXL345 na laminacie nie oznacza zgodności z logiką 5 V.
Odczyty są odwrócone albo wyglądają na błędne
Każdy moduł może być zamontowany w innej orientacji. Obrót płytki o 90 stopni zmienia to, która oś reaguje na grawitację. Zamiast zakładać z góry układ osi, połóż moduł kolejno na każdej krawędzi i zapisz, która wartość zbliża się do +1 g lub -1 g.
Przeczytaj również: Czujnik indukcyjny - jak działa i kiedy go wybrać?
Za dużo szumu
Źródłem problemu może być nie tylko sam czujnik, lecz także luźne przewody, drgania płytki, zbyt wysoka częstotliwość próbkowania albo rezonans mechaniczny. Pomaga krótsze połączenie, solidne przykręcenie modułu i filtr dobrany do zadania. Nie przyklejałbym go miękką warstwą pianki, jeśli celem jest pomiar drgań, ponieważ materiał zmieni charakterystykę mechaniczną całego układu.
Kiedy ADXL345 będzie dobrym wyborem do projektu
Ten akcelerometr jest dobrym wyborem, gdy potrzebujesz trzech osi, cyfrowej komunikacji, małego poboru energii i gotowych funkcji detekcji ruchu. Szczególnie dobrze pasuje do projektów edukacyjnych, robotyki, prostych rejestratorów i urządzeń zasilanych bateryjnie.
Przed zakupem modułu sprawdź trzy rzeczy: zakres przyspieszeń, napięcie logiczne oraz wymagany interfejs. Do spokojnego pomiaru przechylenia zacząłbym od zakresu ±2 g i częstotliwości 100 Hz. Do wstrząsów wybrałbym większy zakres, ale zachowałbym ostrożność z filtrowaniem, aby nie wygładzić zdarzenia, które próbuję wykryć.
Największy błąd początkujących polega na oczekiwaniu, że sam czujnik „rozpozna położenie” w każdej sytuacji. Gdy pamiętasz o wpływie grawitacji, poprawnie ustawisz osie i wykonasz prostą kalibrację, ADXL345 staje się bardzo praktycznym elementem układu pomiarowego, a nie tylko kolejnym modułem do odczytania kilku liczb.