LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
SoM / SBC

[PRZYKŁAD] Moduł z akcelerometrem KAmodLIS35DE oraz Arduino

W niniejszym artykule zaprezentujemy moduł KAmodLIS35DE z trójosiowym akcelerometrem LIS35DE firmy STMicroelectronics. Pokażemy także prosty przykład obsługi sensora na platformie Arduino.

Do budowy przykładu użyjemy następujących elementów:

Moduł KAmodLIS35DE z akcelerometrem LIS35DE

KAmodLIS35DE to moduł z trójosiowym akcelerometrem LIS35DE firmy STMicroelectronics. Układ oferuje cyfrowe wyjście sygnału i jest w stanie komunikować się za pośrednictwem magistrali I2C lub SPI. Umożliwia pomiar przyspieszena w trzech osiach. Dzięki programowalnym wyjściom generatora przerwań możliwe jest np. wybudzanie mikrokontrolera po wykryciu swobodnego spadku czy pojedynczego lub podwójnego tapnięcia. Oferuje zakres pomiarowy ±2 g lub ±8 g.

Płytkę wyposażono w złącze w standardzie Pmod I2C (Typu 6), a także w złącze KAMAMI. Pozwalają one na łatwe dołączenie modułu do zestawów uruchomieniowych. Dzięki niewielkim wymiarom produkt może znaleźć zastosowanie w rozwoju wielu projektów, natomiast złącze przelotowe Pmod pozwala na szeregowe dołączanie kolejnych płytek Pmod z interfejsem I2C.

Rys. 1. Moduł KAmodLIS35DE z sensorem STMicroelectronics LIS35DE

Moduł umożliwia ustawienie niektórych parametrów pracy układu za pomocą zworek. Zworki te pozwalają m.in. na dołączenie do magistrali I2C rezystorów podciągających o wartości 4,7 kΩ. Umożliwiają także ustawienie adresu czujnika na 0x1C lub 0x1D. Zworka INT2 umożliwia zwarcie lub rozwarcie wyjścia przerwania akcelerometru z pinem INT złącza Pmod. Ponadto za pomocą lutowanych zworek ZW2 oraz ZW3 można ustalić interfejs komunikacyjny używany przez czujnik. Domyślnie zworka ta jest ustawiona na magistralę I2C.

Rys. 2. Schemat modułu z zaznaczonymi najważniejszymi elementami oraz wymiarami płytki

Podłączenie modułu

Moduł KAmodLIS35DE można podłączyć w sposób standardowy dla czujników I2C. Jeśli używamy złącza Pmod, to należy podłączyć do modułu napięcie 3,3 V. Sposób połączenia obu płytek zaprezentowano na poniższej fotografii, a także w tabeli.

Rys. 3. Moduł KAmodLIS35DE podłączony do płytki Cytron Maker Uno

Tabela 1. Sposób podłączenia modułu KAmodLIS35DE do Cytron Maker Uno

KAmodLIS35DE Cytron Maker Uno
VDD 3.3V
GND GND
SDA SDA
SCL SCL

Kod przykładu

Przykład prezentuje prosty sposób implementacji obsługi czujnika LIS35DE w środowisku Arduino. Program ma za zadanie zainicjalizować czujnik, odczytać dane dotyczące przyspieszenia na każdej osi, a także wypisać te dane na port szeregowy.

Na początku należy dołączyć bibliotekę do obsługi interfejsu I2C, a także zdefiniować wszystkie niezbędne stałe. Wśród tych ostatnich są adres czujnika oraz adresy potrzebnych rejestrów układu.

#include <Wire.h>
#define I2C_ADDRESS 0x1C

#define CTRL_REG1 0x20
#define OUT_X     0x29
#define OUT_Y     0x2B
#define OUT_Z     0x2D

Następnie definiujemy zmienne, które będą przechowywały wyniki pomiarów przyspieszenia na każdej z osi. Dodatkowo w zmiennej ctrl_reg1_val zapisujemy wartość, którą wpiszemy do rejestru CTRL_REG1 (0x20).

int8_t out_x;
int8_t out_y;
int8_t out_z;

byte ctrl_reg1_val = 0b01000000;

Konfiguracja tego rejestru ma na celu włączenie układu i rozpoczęcie pomiarów. Włączamy tylko bit 7 (PD), odpowiedzialny za włączenie układu. Pozostałe bity mogą pozostać wyłączone. Opis rejestru z dokumentacji układu można zobaczyć poniżej.

Rys. 4. Opis rejestru CTRL_REG1 akcelerometru LIS35DE

Funkcja setup

W funkcji setup otwieramy port szeregowy z szybkością 9600 baud oraz konfigurujemy rejestr CTRL_REG1.

void setup() {
  Serial.begin(9600);

  Wire.begin();
  Wire.beginTransmission (I2C_ADDRESS);
  Wire.write(CTRL_REG1);
  Wire.write(ctrl_reg1_val);
  Wire.endTransmission();
}

Pętla główna

W pętli głównej programu pobieramy informacje o zmierzonych przez akcelerometr przyspieszeniach na każdej osi. Aby tego dokonać pobieramy dane z 5 kolejnych rejestrów począwszy od adresu 0x29. Dane są zapisane pod następującymi adresami: oś X pod adresem 0x29, oś Y pod adresem 0x2B, natomiast oś Z pod adresem 0x2D. W związku z tym po otrzymaniu wszystkich danych zapisujemy do odpowiednich zmiennych dane z co drugiego adresu, natomiast niepotrzebne dane również pobieramy, ale nigdzie ich nie zapisujemy.

Kolejnym krokiem jest wypisanie danych na port szeregowy. Dane są znormalizowane do wielokrotności przyspieszenia ziemskiego. Typowy zakres pomiarowy akcelerometrów LIS35DE dla ustawienia 2 g wynosi ok. ±2,3 g. Surowe dane pobierane z czujnika mają dokładność 8 bitową i zawierają się w zakresie od -128 do +127. W związku z tym należy dane pomnożyć przez liczbę (2,3/127). Mniej więcej zgadza się to z prawdą.

Ostatnim krokiem jest ustawienie opóźnienia na 1000 ms. Z taką właśnie częstotliwością kod wypisuje na port szeregowy dane z czujnika.

void loop() {
 
Wire.beginTransmission((byte)I2C_ADDRESS);
Wire.write(OUT_X | 0x80);
Wire.endTransmission();
Wire.requestFrom((byte)I2C_ADDRESS, (byte)5);
 
while (Wire.available() < 5);

out_x = Wire.read();
Wire.read();
out_y = Wire.read();
Wire.read();
out_z = Wire.read();

Serial.print("X= ");
Serial.print(out_x*(2.3/127));
Serial.print("  Y= ");
Serial.print(out_y*(2.3/127));
Serial.print("  Z= ");
Serial.print(out_z*(2.3/127));
Serial.print ("\n");

delay(1000);
}

Oczywiście przykład ten jest bardzo prosty. Można znacząco poprawić dokładność pomiarów, na przykład kompensując błąd odchylenia od zera, a także precyzyjnie kalibrując czujnik do zakresu pomiarowego konkretnego układu.

Wynik pracy programu zaprezentowano na poniższym rysunku.

Rys. 5. Efekt pracy przykładu na Arduino

Pełen kod przykładu znajduje się w sekcji Do pobrania.

Moduł KAmodLIS35DE jest dostępny w ofercie sklepu internetowego Kamami.pl

Do pobrania