Żyroskop L3GD20 – obsługa w Arduino

Otrzymałem dziś nowy moduł z serii KAmodKAmodL3GD20, 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:

#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.