Otrzymałem dziś nowy moduł z serii KAmod – KAmodL3GD20, który ma na pokładzie popularny żyroskop L3GD20 firmy ST. W artykule przedstawię przykładowy program dla Arduino, który odczyta wartości przyspieszeń kątowych odczytane z czujnika. W tym celu wykorzystam biblioteki dostępne na GitHubie, musimy pobrać pliki Adafruit_L3GD20.h i Adafruit_L3GD20.cpp, następnie umieszczamy te pliki w katalogu <katalog Arduino>/libraries/l3gd20/, teraz uruchamiamy Arduino (lub je restartujemy, jeśli było uruchomione wcześniej). Z sensorem L3GD20 można komunikować się przez interfejsy I2C oraz SPI, ja użyłem I2C, sposób połączenia widać w tabelce poniżej:
KAmodL3GD20 | Arduino UNO |
---|---|
+VIN | +5V |
GND | GND |
SCL | SCL |
SDA | SDA |
Program odczytujący wskazania czujnika przez interfejs I2C i wysyłający je przez UART do komputera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <Wire.h> #include <Adafruit_L3GD20.h> Adafruit_L3GD20 gyro; void showError() { pinMode(13, OUTPUT); while(1) { digitalWrite(13, LOW); delay(100); digitalWrite(13, HIGH); delay(100); } } void setup() { Serial.begin(9600); // proba inicjalizacji żyroskopu, parametr określa czułość, // możliwe wartości to // gyro.L3DS20_RANGE_250DPS // gyro.L3DS20_RANGE_500DPS // gyro.L3DS20_RANGE_2000DPS if (!gyro.begin(gyro.L3DS20_RANGE_500DPS)) { showError(); } } void loop() { char buf[30]; gyro.read(); sprintf(buf, "x=%d, y=%d, z=%d", (int)gyro.data.x, (int)gyro.data.y, (int)gyro.data.z); Serial.println(buf); delay(50); } |
Metoda Adafruit_L3GD20::begin sprawdza między innymi, czy czujnik L3GD20 jest dołączony do mikrokontrolera, w tym celu odczytuje rejestr WHO_AM_I, jeśli odczytana wartość jest nieprawidłowa to metoda zwraca wartość false, a progam wywołuje funkcję showError i sygnalizuje błąd miganiem diody.
W funkcji loop program uruchamia odczyt rejestrów czujnika (metoda read), następnie odczytane dane (gyro.data.x, gyro.data.y, gyro.data.z) wysyła portem szeregowym do komputera.