Model: 6726
Realizacja zamówienia: 1 dni
Koszt wysyłki od: 5.90 PLN

3-osiowy żyroskop GY-50 na L3G4200D - miernik przyspieszenia na I2C

3-osiowy żyroskop GY-50 na L3G4200D - miernik przyspieszenia na I2C

 Opis

Jest to przełomowa płyta dla L3G4200D. L3G4200D jest małej mocy, trójosiowym czujnikiem prędkości kątowej. Zawiera element pomiarowy oraz inferejs cyfrowy, który dostarcza określonej prędkosci kątowej do świata zewnętrznego poprzez interfejs cyfrowy (I2C / SPI).


L3G3200D ma pełną skalę +/- 250 / +/- 500 / +/- 2000 dps i jest zdolne do pomiaru stawki z wybranych przez użytkownika przepustowości. Działa świetnie z w grach i urządzeniach wejściowych zawierających rzeczywistość wirtualną, systemach nawigacji GPS i w robotyce.

 Cechy produktu

  • Do wyboru trzy skale (250/500/2000 DPS)
  • Cyfrowy inferejs wyjsciowy I2C/SPI
  • 16 bitowe wyjście danych
  • 8 bitowe wyjście danych temperatury
  • Szerokie napięcie zasilania: od 2,4V do 3,6V
  • Niskie napięcie kompatybilne: OI (1,8 V)
  • Wbudowany wyłącznik oraz tryb uśpienia
  • Wbudowany czujnik temperatury
  • Wysoka odporność na "szok"

 Wymiary

3-osiowy żyroskop GY-50 na L3G4200D - miernik przyspieszenia na I2C

 Schemat modułu

3-osiowy żyroskop GY-50 na L3G4200D - miernik przyspieszenia na I2C

 Przydatne linki

Biblioteki Arduino - http://www.haoyuelectronics.com/Attachment/GY-50/L3G4200D_Example.zip

Dokument .PDF - L3G4200D Datasheet - link 

Dokument .PDF - TA0343 - link 

Dokument .PDF - L3G4200_AN3393 - link

 Pełny artykuł o: 3-osiowy żyroskop L3G4200D

Żyroskop to urządzenie służące do pomiaru lub utrzymania położenia kątowego, który działa w oparciu o zasadę zachowania momentu pędu. Układ L3G4200D stanowi osobną grupę żyroskopów prędkościowych, które nie utrzymują stałego kierunku, ale wskazują prędkość kątową obiektu, na którym się znajduje. Żyroskopy są głównie wykorzystywane do budowy żyrokompasów, stosowanych przy budowie samobalansujących robotów oraz multicopterów.

Żyroskop sam w sobie nie znajdzie zbyt dużego zastsowania, jednak idealnie nadaje się do wspomagania pomiarów z innych czujnków  np.:akcelerometrów, które oprócz wskazania przyśpieszenia obiektu względem wybranej osi, dają możlwiość określenia jego konfiguracji trzech osi: nachylenia (Pitch), przechylenia (Roll) oraz obrotu (Yaw). Praktycznie wyznaczenie tych osi jest możliwe za pomocą samego żyroskopu, jednak może okazać się niewystarczające.

Innym problemem jest wyznaczenie parametrów PitchRoll i Yaw za pomocą samegoakcelerometru, który w miarę dokładnie poradzi sobie z wyznaczeniem tylko pierwszych dwóch (Pitch i Roll) - o ile nasz obiekt nie będzie się przemieszczał. Kompletnie nie nada się natomiast do wyznaczenia parametru Yaw. Tak jak wspomniałem wcześniej - idealnym rozwiązaniem jest uwzględenienie pomiarów zarówno z akcelerometru i żyroskopu, który skompensuje błędy wynikające z ruchu.

Pomimo wykorzystania akcelerometru i żyroskopu, kłopotliwy okaże się wciąż Yaw, który docelowo powinno się określać za pomocą magnetometru (kompasu), ale również z uwzględnieniem pomiarów z akcelerometru. Koniec, końców - najlepsze rezultaty dadzą wszystkie trzy czujniki. Do tego tematu powrócę jeszcze w artykułach o akcelerometrach i magnetometrachoraz testu inercyjnych zespółów pomiarowy IMU.

Wróćmy jednak do naszego żyroskopu. Zobaczmy jak przedstawiają się wybrane osie obrotów względem samego układu.


Jeśli chodzi o parametry L3G4200D to pozwala on na wybór jednego z trzech zakresów pomiarowych: ±250°/s, ±500°/s lub ±2000°/s. Czujnik obsługuje zarówno komunikację I2C jak i SPI, jednak najczęściej spotkamy się modułami przystosowanymi jedynie do magistrali  I2C

L3G4200D posiada również  wyjścia cyfrowe (INT1 i INT2) mogące sygnalizować (w zależności od konfiguracji rejestrów) pojawienie się nowego pomiaru, przepełnienie FIFO lub zbyt niskiej/wysokiej prędkości obrotu. Układ może być zasilany napięciem z zakresu 2,4 - 3.6 V, natomiast logika we/wy do 1,71 V. Typowy pobór prądu podczas pomiaru to zaledwie 6mA. Należy zwrócić więc szczególną uwagę czy nasz moduł będzie tolerował zasilanie 5V, gdyż nieodpowiedni jego poziom może uszkodzić układ.

Pełna dokumentacja techniczna: http://www.jarzebski.pl/datasheets/L3G4200D.pdf

Osobiście posiadam moduł IMU GY-80, który pozwala na zasilanie napięciem 5V. Pin oznaczonySCL (adapter) podłączamy do pinu A5 (Arduino), natomiast pin SDA (adapter) do pinu A4 (Arduino).

Biblioteka i program testowy

Niestety - przeszukując sieć, nie natrafiłem na w żadną dobrą bibliotekę dla Arduino, dlatego zbierając szczątkowe implementacje, postanowiłem napisać własną. W odróżnieniu od dostępnych bibliotek, moja biblioteka pozwala na kalibrację układu w spoczynku (do kompensacji późniejszych pomiarów), wybór zakresu pomiarowego i normalizowanie danych, a także ustawienie współczynnika progu czułości. Oczywiście jest to pierwsza wersja, więc na pewno będzie jeszcze rozwiajana. Biblioteka posiada również przykłady wykorzystania oraz program do wizualizacji pomiarów. Bibliotekę można pobrać stąd: https://github.com/jarzebski/Arduino-L3G4200D

  1. #include
  2. #include
  3.  
  4. L3G4200D gyroscope;
  5.  
  6. void setup()
  7. {{|/span>
  8.   Serial.begin(9600);
  9.  
  10.   // Inicjalizacja L3G4200D
  11.   // 250 dps: L3G4200D_250DPS
  12.   // 500 dps: L3G4200D_500DPS
  13.   // 2000 dps: L3G4200D_2000DPS
  14.   while(!gyroscope.begin(L3G4200D_2000DPS))
  15.   {{|/span>
  16.     Serial.println("Nie odnaleziono L3G4200D. Sprawdz polaczenie.");
  17.     delay(500);
  18.   }
  19.  
  20.   // Sprawdzamy skalę
  21.   Serial.print("Wybrana skala: ");
  22.  
  23.   switch(gyroscope.getScale())
  24.   {{|/span>
  25.     case L3G4200D_SCALE_250DPS:
  26.       Serial.println ("250 dps");
  27.       break;
  28.     case L3G4200D_SCALE_500DPS:
  29.       Serial.println ("500 dps");
  30.       break;
  31.     case L3G4200D_SCALE_2000DPS:
  32.       Serial.println ("2000 dps");
  33.       break;
  34.   }
  35.  
  36.   // Kalibracja żyroskopu. Powinna odbywać się w spoczynku zerowym
  37.   gyroscope.calibrate();
  38.  
  39.   // Ustawiamy próg czułości na 3.
  40.   gyroscope.setThreshold(3);
  41.  
  42. void loop()
  43. {{|/span>
  44.   // Odczytujemy surowe dane z zyroskopu
  45.   Vector raw = gyroscope.readRaw();
  46.  
  47.   // Odczytujemy znormalizowane wyniki w °/s
  48.   Vector norm = gyroscope.readNormalize();
  49.  
  50.   // Wyświetlamy wyniki
  51.   Serial.print(" Xraw = ");
  52.   Serial.print(raw.XAxis);
  53.   Serial.print(" Yraw = ");
  54.   Serial.print(raw.XAxis);
  55.   Serial.print(" Zraw = ");
  56.   Serial.print(raw.ZAxis);
  57.   Serial.print(" Xnorm = ");
  58.   Serial.print(norm.XAxis);
  59.   Serial.print(" Ynorm = ");
  60.   Serial.print(norm.YAxis);
  61.   Serial.print(" ZNorm = ");
  62.   Serial.print(norm.ZAxis);
  63.  
  64.   Serial.println();

Wynik działania

Wizualizacja w Processing.org

Lekko zmodyfikowany program przedstawia się następująco:

  1. #include
  2. #include
  3.  
  4. L3G4200D gyroscope;
  5.  
  6. int LED = 13;
  7. boolean Blink = false
  8.  
  9. void setup()
  10. {{|/span>
  11.   Serial.begin(9600);
  12.   pinMode(LED, OUTPUT);
  13.  
  14.   // Inicjalizacja L3G4200D
  15.   while (!gyroscope.begin(L3G4200D_SCALE_2000DPS))
  16.   {{|/span>
  17.     if (Blink)
  18.     {{|/span>
  19.       digitalWrite(LED, HIGH);
  20.      else
  21.     {{|/span>
  22.       digitalWrite(LED, LOW);
  23.     }
  24.  
  25.     Blink = !Blink;
  26.  
  27.     delay(500);
  28.   }
  29.  
  30.   digitalWrite(LED, HIGH);
  31.  
  32.   // Kalibracja żyroskopu. Powinna odbywać się w spoczynku zerowym
  33.   gyroscope.calibrate();
  34.  
  35.   // Ustawiamy próg czułości na 3.
  36.   gyroscope.setThreshold(3);
  37.   digitalWrite(LED, LOW);
  38.  
  39. void loop()
  40. {{|/span>
  41.   // Odczytujemy znormalizowane wyniki w °/s
  42.   Vector  norm = gyroscope.readNormalize();
  43.  
  44.   // Output
  45.   Serial.print(norm.XAxis);
  46.   Serial.print(":");
  47.   Serial.print(norm.YAxis);
  48.   Serial.print(":");
  49.   Serial.print(norm.ZAxis);
  50.   Serial.println();

Program dla Processing znajdziecie w archwium biblioteki, dzięki któremu możemy obserwować wyniki pomiarów. Dla ułatwienia stopnie zostały zamienione na radiany:

Materiały dodatkowe

Biblioteka L3G4200Dhttps://github.com/jarzebski/Arduino-L3G4200D
Dokumentacja techniczna: http://www.jarzebski.pl/datasheets/L3G4200D.pdf

Artykul pochodzi ze strony: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-zyroskop-l3g4200d.html

Sprawdź też te pozycje
Klienci, którzy kupili ten produkt wybrali również...