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

