SantyagoSantyago
YouTube RSS Google+ Facebook GitHub

Newsletter Arduino

Zapisz się do Newslettera, aby otrzymać informację o nowych wpsiach w dziale Arduino!

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Sprzęt dostarczają

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Popularne wpisy

Facebook

Google+

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

3-osiowy żyroskop i akcelerometr MPU6050

MPU6050 jest układem, który łączy w sobie 3-osiowy żyroskop, 3-osiowy akcelerometr oraz cyfrowy termometr. Z powodzeniem może zastąpić opisywane już wcześniej układy ADXL345 oraz L3G4200D. Jego szczególną cechą jest wbudowana sprzętowa jednostka DMP (Digital Motion Processor), która ułatwia przeliczanie przetwarzanych danych z wszystkich trzech czujników na konkretne położenie względem Ziemi, odciążając tym samym mikrokontroler. Jednostkę DMP można zaprogramować tak, aby wykorzystywała do swoich obliczeń również zewnętrzny magnetometr.

W odróżnieniu od opisywanego już żyroskopu L3G4200D, oprócz możliwości pracy w zakresach pomiarowych ±250°/s, ±500°/s oraz ±2000°/s posiada dodatkowy tryb ±1000°/s, co czyni go bardziej uniwersalnym rozwiązaniem. Za przetwarzanie danych odpowiada również 16 bitowy przetwornik. Przewagą MPU6050 nad ADXL345 jest również dokładniejszy 16-bitowy przetwornik zamiast 13-bitowego. Praktycznie MPU6050 posiada takie same funkcje jak ADXL345 oraz L3G4200D, jednak rozszerza swoje właściwości o programowalny filtr dolnoprzepustowy, dodatkową szynę do komunikacji z innymi układami oraz dodatkowe tryby oszczędzania energii. Wszystko to przy maksymalnym poborze prądu 4.1mA (w duecie L3G4200D oraz ADXL345 potrafi przekroczyć 6mA)

Napięcie zasilania może mieścić się w zakresie od 2.375V ÷ 3.46V, natomiast poziomy logiczne mogą mieścić się w zakresie od 1.71V do wartości napięcia zasilania

Wyprowadzania linii układu oraz orientacja osi

Podłączenie MPU6050 do Arduino

Układ MPU6050 toleruje zasilanie z przedziału 2.375V ÷ 3.46V, więc jeśli planujemy podłączyć go do Arduino UNO, nie zapomnijmy o konwerterze napięć poziomów logicznych. W przypadku modułu IMU GY-86 oraz IMU GY-87, możemy skorzystać z 5V zasilania. Pin oznaczony SCL (adapter) podłączamy do pinu A5 (Arduino), natomiast pin SDA (adapter) do pinu A4 (Arduino). W moim układzie wykorzystałem również dwie diody z rezystorami 220Ω, sterowane wyjściami cyfrowymi Arduino (4,7) do sygnalizacji przerwań.

Do obsługi modułów z układami MPU6050 przygotowałem również odpowiednią do nich bibliotekę dla Arduino, którą można pobrać z repozytorium Git: https://github.com/jarzebski/Arduino-MPU6050

Odczyt danych z żyroskopu

Odczyt z żyroskopu realizowany jest w podobny sposób jak w L3G4200D. Mamy możliwość odczytu danych bezpośrednich za pomocą funkcji readRawGyro() oraz przeliczonych na jednostkę dps za pomocą funkcji readNormalizeGyro(). Praktycznie jedyną różnicą jest inicjalizacja układu, gdzie konfigurujemy jednocześnie akcelerometr jak i żyroskop.

  1. #include <Wire.h>
  2. #include <MPU6050.h>
  3.  
  4. MPU6050 mpu;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(115200);
  9.  
  10.   Serial.println("Inicjalizacja MPU6050");
  11.   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  12.   {
  13.     Serial.println("Nie mozna znalezc MPU6050 - sprawdz polaczenie!");
  14.     delay(500);
  15.   }
  16.  
  17.   // Kalibracja żyroskopu
  18.   mpu.calibrateGyro();
  19.  
  20.   // Ustawienie czułości
  21.   mpu.setThreshold(3);
  22. }
  23.  
  24. void loop()
  25. {
  26.   Vector rawGyro = mpu.readRawGyro();
  27.   Vector normGyro = mpu.readNormalizeGyro();
  28.  
  29.   Serial.print(" Xraw = ");
  30.   Serial.print(rawGyro.XAxis);
  31.   Serial.print(" Yraw = ");
  32.   Serial.print(rawGyro.YAxis);
  33.   Serial.print(" Zraw = ");
  34.   Serial.println(rawGyro.ZAxis);
  35.  
  36.   Serial.print(" Xnorm = ");
  37.   Serial.print(normGyro.XAxis);
  38.   Serial.print(" Ynorm = ");
  39.   Serial.print(normGyro.YAxis);
  40.   Serial.print(" Znorm = ");
  41.   Serial.println(normGyro.ZAxis);
  42.  
  43.   delay(10);
  44. }

Odczyt danych z akcelerometru

W przypadku odczytu danych z akcelerometru, analogicznie posługujemy się funkcjami readRawAccel() oraz readNormalizeAccel(). Znormalizowaną jednostką są tutaj m/s.

  1. #include <Wire.h>
  2. #include <MPU6050.h>
  3.  
  4. MPU6050 mpu;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(115200);
  9.  
  10.   Serial.println("Inicjalizacja MPU6050");
  11.  
  12.   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  13.   {
  14.     Serial.println("Nie mozna znalezc MPU6050 - sprawdz polaczenie!");
  15.     delay(500);
  16.   }
  17. }
  18.  
  19. void loop()
  20. {
  21.   Vector rawAccel = mpu.readRawAccel();
  22.   Vector normAccel = mpu.readNormalizeAccel();
  23.  
  24.   Serial.print(" Xraw = ");
  25.   Serial.print(rawAccel.XAxis);
  26.   Serial.print(" Yraw = ");
  27.   Serial.print(rawAccel.YAxis);
  28.   Serial.print(" Zraw = ");
  29.  
  30.   Serial.println(rawAccel.ZAxis);
  31.   Serial.print(" Xnorm = ");
  32.   Serial.print(normAccel.XAxis);
  33.   Serial.print(" Ynorm = ");
  34.   Serial.print(normAccel.YAxis);
  35.   Serial.print(" Znorm = ");
  36.   Serial.println(normAccel.ZAxis);
  37.  
  38.   delay(10);
  39. }

Odczyt temperatury

Jeśli chodzi odczyt temperatury, realizujemy ją za pomocą funkcji readTemperature().

  1. #include <Wire.h>
  2. #include <MPU6050.h>
  3.  
  4. MPU6050 mpu;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(115200);
  9.  
  10.   Serial.println("Inicjalizacja MPU6050");
  11.  
  12.   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  13.   {
  14.     Serial.println("Nie mozna znalezc MPU6050 - sprawdz polaczenie!");
  15.     delay(500);
  16.   }
  17. }
  18.  
  19. void loop()
  20. {
  21.   float temp = mpu.readTemperature();
  22.  
  23.   Serial.print(" Temp = ");
  24.   Serial.print(temp);
  25.   Serial.println(" *C");
  26.  
  27.   delay(500);
  28. }

Filtr Kalmana

Układ MPU6050 z racji posiadania zarówno akcelerometru jak i żyroskopu, pozwala na zastoswanie filtru Kalmana, inaczej mówiąc algorytmu rekurencyjnego. Ponieważ nie jestem wybitnym matematykiem, nie odważę się dokładnie tłumaczyć zasady jego działania, ale w ogólnym uproszczeniu wykorzystuje on dane żyroskopu do korekcji odczytanych danych z akcelerometru, dzięki czemu całość działa wyjątkowo stabilnie. Jeśli masz ochotę, możesz poczytać o nim tutaj: Odczyty Pitch & Roll oraz filtr Kalmana

Detekcja ruchu i bezruchu

MPU6050 pozwala na detekcję ruchu i bezruchu całego układu z wykorzystaniem przerwań. Na potrzeby tego przykładu, nie będziemy jednak obsługiwali sprzętowej obsługi przerwania, a jedynie programowej. Zasada działania została opisana w programie poniżej.

  1. #include <Wire.h>
  2. #include <MPU6050.h>
  3.  
  4. MPU6050 mpu;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(115200);
  9.  
  10.   Serial.println("Inicjalizacja MPU6050");
  11.  
  12.   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_16G))
  13.   {
  14.     Serial.println("Nie mozna znalezc MPU6050 - sprawdz polaczenie!");
  15.     delay(500);
  16.   }
  17.  
  18.   // Dodatkowe opoznienie zasilania akcelerometru 3ms
  19.   mpu.setAccelPowerOnDelay(MPU6050_DELAY_3MS);
  20.  
  21.   // Wylaczamy sprzetowe przerwania dla wybranych zdarzen
  22.   mpu.setIntFreeFallEnabled(false);  
  23.   mpu.setIntZeroMotionEnabled(false);
  24.   mpu.setIntMotionEnabled(false);
  25.  
  26.   // Ustawiamy filtr gorno-przepustowy
  27.   mpu.setDHPFMode(MPU6050_DHPF_5HZ);
  28.  
  29.   // Ustawiamy granice wykrywania ruchu na 4mg (zadana wartosc dzielimy przez 2)
  30.   // oraz minimalny czas trwania na 5ms
  31.   mpu.setMotionDetectionThreshold(2);
  32.   mpu.setMotionDetectionDuration(5);
  33.  
  34.   // Ustawiamy granice wykrywania bezruchu na 8mg (zadana wartosc dzielimy przez 2)
  35.   // oraz minimalny czas trwania na 2ms
  36.   mpu.setZeroMotionDetectionThreshold(4);
  37.   mpu.setZeroMotionDetectionDuration(2);    
  38.  
  39.   // Ustawiamy piny 4 i 5 na wyjscia w stanie niskim.
  40.   // Diody podlaczone do tych wyjsc beda sygnalizowaly nasze stany
  41.   pinMode(4, OUTPUT);
  42.   digitalWrite(4, LOW);
  43.  
  44.   pinMode(7, OUTPUT);
  45.   digitalWrite(7, LOW);  
  46. }
  47.  
  48. void loop()
  49. {
  50.   Vector rawAccel = mpu.readRawAccel();
  51.   Activites act = mpu.readActivites();
  52.  
  53.   // Jesli wyrkryto ruch - zapal diode na pinie 4
  54.   if (act.isActivity)
  55.   {
  56.     digitalWrite(4, HIGH);
  57.   } else
  58.   {
  59.     digitalWrite(4, LOW);
  60.   }
  61.  
  62.   // Jesli wyrkryto bezruch - zapal diode na pinie 7
  63.   if (act.isInactivity)
  64.   {
  65.     digitalWrite(7, HIGH);
  66.   } else
  67.   {
  68.     digitalWrite(7, LOW);
  69.   }
  70.  
  71.   delay(50);
  72.  
  73.   digitalWrite(4, LOW);
  74. }

Detekcja upadku swobodnego

Poniższy przykład pokazuje w jaki sposób za pomocą MPU6050 można wykryć upadek swobodny. Tym razem wykorzystamy już przerwanie sprzętowe.

  1. #include <Wire.h>
  2. #include <MPU6050.h>
  3.  
  4. MPU6050 mpu;
  5.  
  6. boolean ledState = false; // aktualny stan diody LED
  7. boolean freefallDetected = false; // czy wykryto upadek swobodny
  8. boolean freefallBlinkCount = 0; // liczba mrugniec diody LED
  9.  
  10. void setup()
  11. {
  12.   Serial.begin(115200);
  13.  
  14.   Serial.println("Inicjalizacja MPU6050");
  15.  
  16.   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_16G))
  17.   {
  18.     Serial.println("Nie mozna znalezc MPU6050 - sprawdz polaczenie!");
  19.     delay(500);
  20.   }
  21.  
  22.   // Dodatkowe opoznienie zasilania akcelerometru 3ms
  23.   mpu.setAccelPowerOnDelay(MPU6050_DELAY_3MS);
  24.  
  25.   // Wlaczamy obsluge przerwania sprzetowego dla akcji upadku swobodnego 
  26.   mpu.setIntFreeFallEnabled(true);
  27.   mpu.setIntZeroMotionEnabled(false);
  28.   mpu.setIntMotionEnabled(false);
  29.  
  30.   // Ustawiamy filtr gorno-przepustowy
  31.   mpu.setDHPFMode(MPU6050_DHPF_5HZ);
  32.  
  33.   // Aby ruch zostal wykryty jako upadek swobodny, musi wystapic przeciazenie minimum 34mg w czasie 3ms.
  34.   mpu.setFreeFallDetectionThreshold(17);
  35.   mpu.setFreeFallDetectionDuration(2);    
  36.  
  37.   // Dioda podlaczona do pinu 4 bedzie sygnalizowac wykryty stan
  38.   pinMode(4, OUTPUT);
  39.   digitalWrite(4, LOW);
  40.  
  41.   // Aktywujemy obsuge przerwania na pinie 2, aktywne na zbocze narastajace
  42.   attachInterrupt(0, doInt, RISING);
  43. }
  44.  
  45. // Funkcja obslugi przerwania
  46. void doInt()
  47. {
  48.   // resetujemy licznik mrugniec i informujemy program, ze akcja zostala rozponana
  49.   freefallBlinkCount = 0;
  50.   freefallDetected = true;  
  51. }
  52.  
  53. void loop()
  54. {
  55.   Vector rawAccel = mpu.readRawAccel();
  56.   Activites act = mpu.readActivites();
  57.  
  58.   // Jesli wykryto upadek swobodny, dioda LED bedzie mrugac okreslona liczbe razy
  59.   if (freefallDetected)
  60.   {
  61.     ledState = !ledState;
  62.  
  63.     digitalWrite(4, ledState);
  64.  
  65.     freefallBlinkCount++;
  66.  
  67.     if (freefallBlinkCount == 20)
  68.     {
  69.       freefallDetected = false;
  70.       ledState = false;
  71.       digitalWrite(4, ledState);
  72.     }
  73.   }
  74.  
  75.   delay(100);
  76. }

Prezentacja działania

Materiały dodatkowe

Biblioteka MPU6050: https://github.com/jarzebski/Arduino-MPU6050

Filtr Kalmana: https://github.com/jarzebski/Arduino-KalmanFilter

MPU6050 rev 3.2: http://www.jarzebski.pl/datasheets/MPU6050_rev32.pdf

MPU6050 rev 3.4: http://www.jarzebski.pl/datasheets/MPU6050_rev34.pdf

MPU6050 rev 4.0: http://www.jarzebski.pl/datasheets/MPU6050_rev40.pdf

MPU6050 rev 4.2: http://www.jarzebski.pl/datasheets/MPU6050_rev42.pdf

Udpstępnij dalej!

http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-zyroskop-i-akcelerometr-mpu6050.html

Reklama

Komentarze Komentarze
Avatar 1
Qba Linux Ubuntu / Mozilla Firefox 30.0
21 październik 2014 - 22:52 Brzesko

Robiłem na magisterkę robota i szukałem taniego akcelerometru na I2C, trafiłem na płytkę z MPU-6050. Jak się okazało, ten układ to prawdziwy kombajn(to ma w środku nawet procesor do obróbki danych) biblioteki do tego niestety chyba nie dostępne nie komercyjnie. Dostępne są binarne zrzuty oprogramowania.
Do wyznaczenia orientacji w przestrzeni korzystałem z kodu tego Pana:
http://davidegironi.blogspot.com/2013/02/avr-atmega-mpu6050-gyroscope-and.html
Do fuzji odczytów stosuje się tam filtr proporcjonalno-całkujący mahonnego tu w miarę omówiony:
http://www.olliw.eu/2013/imu-data-fusing/
Wykorzystano tam kwateriony i dzięki temu nie ma problemu gimball lock.
Ode mnie wielki szacunek dla autorów tego algorytmu, wygląda to na mega skomplikowane, ale jak się wczytać w kod, to w rzeczywistości kilka operacji. W dodatku w drugim linku na końcu strony są implementacje w C dla 6 i 9 stopi swobody(z magnetometrem).
Piszę o tym, bo to najlepszy sposób na w miarę wydajną estymację obrotów w przestrzeni, jeszcze lepiej wykorzystać wewnętrzny procesor i czytać współrzędne kwateriona wprost ze scalaka.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 31.0
22 październik 2014 - 00:15 Bytom

Kapitalne odnośniki! Wielkie dzięki Qba - jutro zabieram się do czytania :)

Avatar 1
tomek Windows / Safari 537.36
24 listopad 2014 - 00:55 Warszawa

Czesc, czy mógłbys dać jakiś kontakt do siebie? Siedzę już dłuższy czas nad tym i mam pewien problem. Gdy zmieniam kąt pitch o 90 stopni to kąt yaw również się zmienia. Próbowałem już chyba wszystkich dostępnych bibliotek i bez efektu. Nie miałeś takiego problemu? Używam mpu-6050 + hmc5883l

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 33.0
24 listopad 2014 - 19:00 Bytom

-> Kontakt :)

Avatar 1
ojdas Windows 7 / Safari 537.36
21 grudzień 2014 - 01:13 Warszawa

Witam,

Mam pytanie co może być powodem, iż dostaje takie komunikaty błędów?

MPU6050_accel_pitch_roll.ino: In function \'void setup()\':
MPU6050_accel_pitch_roll:20: error: \'class MPU6050\' has no member named \'begin\'
MPU6050_accel_pitch_roll:20: error: \'MPU6050_SCALE_2000DPS\' was not declared in this scope
MPU6050_accel_pitch_roll:20: error: \'MPU6050_RANGE_2G\' was not declared in this scope
MPU6050_accel_pitch_roll.ino: In function \'void loop()\':
MPU6050_accel_pitch_roll:30: error: \'Vector\' was not declared in this scope
MPU6050_accel_pitch_roll:30: error: expected `;\' before \'normAccel\'
MPU6050_accel_pitch_roll:33: error: \'normAccel\' was not declared in this scope

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 33.0
21 grudzień 2014 - 23:57 Bytom

Cześć! Na moje masz dwie biblioteki MPU6050 :)

Avatar 1
marti Windows 7 / Safari 537.36
14 marzec 2015 - 21:58 Brak informacji

Dzień dobry,
w programie KalmanFilter_processing w metodzie createGraphics brakuje argumentu string. Zadeklarowałem pusty string i podstawiłem, teraz program przynajmniej się kompiluje jednak wyświetla tylko czarne okno.
Co powinno znajdować się jako argument string ?

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
23 marzec 2015 - 19:07 Bytom

https://processing.org/reference/createGraphics_.html

Która wersja processing? Może w nowszej wersji jest wymagany trzeci, jako metoda graficzna (P2D, P3D lub PDF)

Avatar 1
bigplik Linux Ubuntu / Mozilla Firefox 36.0
17 marzec 2015 - 19:31 Lublin

Cześć Korneljusz, jak myślisz, można jakoś w prosty sposób przerobić Twój kod "tap" z ADXL 345 tak żeby działał na MPU6050? czy jest z tym więcej zabawy?

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
23 marzec 2015 - 19:03 Bytom

Zdecydowanie więcej zabawy - ADXL ma do tego specjalne mechanizmy - w MPU jest to możliwe, ale na piechotkę

Avatar 1
Jacek Windows 8 / Mozilla Firefox 38.0
02 czerwiec 2015 - 09:28 Brak informacji

Testowałem program podczas jazdy samochodem. Prawidłowe jest to, że dla pomiarów znormalizowanych żyroskopu tylko czasami zmienia się składowa Z? X i Y wynoszą cały czas 0. Pomiary surowe zmieniają się cały czas. Akcelerometru zarówno znormalizowane jak i surowe również.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
04 czerwiec 2015 - 13:35 Bytom

Żyroskop odczytuje prędkość kątową podczas obrotu

Avatar 1
Salvo Windows 7 / Safari 537.36
11 czerwiec 2015 - 11:14 Brak informacji

witam, można udostępnić źródła oprogramowania "Processing" widoczny na filmie?
dziękuję

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
13 czerwiec 2015 - 21:24 Bytom
Avatar 1
Adam Windows 7 / Safari 537.36
06 październik 2015 - 17:32 Kraków

Witam,
Po załączeniu Pańskiej biblioteki i przeklejeniu kodu:

Oryginalny obraz posiada rozmiar 1276x881

kompilator sypie błędami. Wymagał też dodania I2Cdev.h, czego nie widziałem w kodzie. Jakieś sugestie? Czy może być to związane z tym, że przedtem testowałem inną bibliotekę do tego układu?

Pozdrawiam,
A.

Avatar 1
Michał Windows 7 / Mozilla Firefox 42.0
10 grudzień 2015 - 16:17 Warszawa

Cześć,
Czy mógłbyś napisać na czym bazowałeś projektując filtr Kalmana? Chciałbym go wykorzystać i zmodyfikować, jednak potrzebuję do tego celu jakieś informacje teoretyczne (np. jakie były zmienne stanu w tym modelu, przyjęte macierze, postacie zakłóceń itp.). Ten filtr działa naprawdę dobrze stąd wolałbym go wykorzystać zamiast pisać coś niepewnego od nowa. Link, który jest wyżej przenosi do grafiki programu processing, a nie do informacji na temat filtru Kalmana.

Pozdrawiam,
Michał

Avatar 1
tomek7 Windows / Safari 537.36
15 grudzień 2015 - 05:34 Warszawa

Witam,
Świetny materiał!
Testowałem programy i wszystko działa, ale jest jedno ale ... Problem pojawia się przy podłączeniu drugiego modułu do I2C, mianowicie modułu RTC 1307. Okazało się, że korzystają z tego samego adresu 0x68. W MPU6050 można zmienić adres na 0x69 przez wprowadzenie stanu wysokiego (podpięcie 3,3V) na ADO. Wtedy oba moduły, zaczynają działać, RTC radzi sobie świetnie, natomiast MPU podaje wtedy zawyżone wartości. Ma ktoś może pomysł co jest tego powodem i jak to rozwiązać, może przeoczyłem coś oczywistego.
Dzięki za wszelką pomoc.
Pozdrawiam.

Avatar 1
KrzysiekK Linux Ubuntu / Mozilla Firefox 43.0
15 styczeń 2016 - 17:19 Kraków

Cześć!
Chciałbym zapytać w jaki sposób odczytujesz dane z MPU6050 po zmianie adresu na 0x69? Czy zmieniałeś w MPU6050.h stałą adresu MPU na 0x69? Bo na liście stałych jest już ta wartość przypisana innej - MPU6050_REG_MOT_DETECT_CTRL. W każdym razie mam problem postaci: po zmianie podłączeniu 3.3V do AD0 ani nie wyrzuca błędu ani nie pokazuje danych.

Avatar 1
Jam Windows XP / Mozilla Firefox 40.0
03 kwiecień 2016 - 19:05 Łomża

Witam,

Chciałbym pogratulować i jednoczenie podziękować za rewelacyjne artykuły ! :)
Jednak podczas uruchamiania aplikacji KalmanFilter_processing po kompilacji pojawia się pusty czarny ekran i następujące błędy:

- OpenGL error 1280 at bot beginDraw(): invalid enumerant
- OpenGL error 1286 at top endDraw(): invalid framebuffer operation
- OpenGL error 1286 at beginDraw(): invalid framebuffer operation

Szukałem pomocy jednak nigdzie nie mogłem znaleźć. Może jest Pan w stanie napisać, z jakiego aplikacja nie może się uruchomić ?
Pozdrawiam serdecznie.

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 45.0
05 kwiecień 2016 - 06:56 Bytom

Jaka wersja Processinga? Pod Windowsem chyba odrobinę inaczej obsługuje się rysowanie.

Avatar 2
konrad9292 Mac OS X / Safari 537.36
09 kwiecień 2016 - 15:48 Warszawa

Czołem:)

Po wgraniu biblioteki sypie błędem:

In file included from /Users/konradkoterba/Documents/Arduino/akcelerometr_simple/akcelerometr_simple.ino:10:0:
/Users/konradkoterba/Documents/Arduino/libraries/MPU6050/MPU6050.h:40:20: fatal error: I2Cdev.h: No such file or directory
#include "I2Cdev.h"

Czy ta biblioteka faktycznie jest potrzebna czy coś robię nie tak?
Po dodaniu tej biblioteki sypie mnóstwo błędów m. in:
error: \'Vector\' was not declared in this scope

Avatar 1
Piotrek Windows / Mozilla Firefox 46.0
13 maj 2016 - 20:45 Tychy

Witam
Pytanie, czy upadku swobodnego analizowana jest jedna oś "Z" czy działa to na zmianę przyśpieszenia we wszystkich trzech osiach ?.

Avatar 2
Korneliusz Mac OS X / Safari 537.36
14 październik 2016 - 14:33 Brak informacji

Z tego co się orientuję to we wszystkich

Avatar 1
Adrian Windows / Safari 537.36
24 czerwiec 2016 - 02:50 Szczecin

Witam, mam pytanie odnośnie błędu który mi wyskakuje. Czy koś miał problem, że kod sie kompiluje, ale podczas wgrywania za pomocą programatora wyskakuje błąd
avrdude: usbdev_open(): did not find any USB device "usb"
będę wdzięczny za szybką pomoc :)

Avatar 1
trk Windows / Safari 537.36
04 grudzień 2016 - 10:41 Brak informacji

To brak odpowiedniego sterownika - program Zadig polecam do instalacji sterownika
http://zadig.akeo.ie/

Avatar 1
Yulian Baryshnikov Windows 8 / Safari 537.36
04 październik 2016 - 18:02 Brak informacji

Thank you very much for the code!
You make my day!

Avatar 1
Emilio Machado Windows / Safari 537.36
07 październik 2016 - 18:10 Brak informacji

Hi Kornelisz, I\'m working with zeromotion interrupts in a sleep- wake-up routine in a pro mini 3,3.
I\'m using yours example code, all work fine, but sometimes when I reset or rewrite the arduino interrups work in inverse way.
When they must be a rest, is working and visceversa.
it\'s necesary reset, int, flag, etc?.
interrupt funtion is similar freefall example.
1000 thanks and sorry to bother and my eng
atte Emilio

Avatar 2
Korneliusz Mac OS X / Safari 537.36
14 październik 2016 - 14:34 Brak informacji

hmmm strange thing, i\'m not notice this problem on my mpu

Avatar 1
Domenica Windows / Safari 537.36
01 grudzień 2016 - 16:56 Brak informacji

Hi Korneliusz, i want to use accelerometer to record values over 2g. I isn\'t able to interpretare i risultati. Can you help me? if i want record values over 2g i write:
MPU. setMotionDetectionThreshold ( 1000 ) ;
MPU. setZeroMotionDetectionThreshold ( ? ) ; //I don\'t know what i have to insert;

Than i have read that the results of readNormalized.Zaxis are in m/s.what is the misure unit of offset that in this case is 1202?

Avatar 1
bedyn Windows / Safari 537.36
29 grudzień 2016 - 00:10 Poznań

Witam,
Przede wszystkim chcialbym podziekowac za super ilustracje jak dziala plytka GY-86! Z przyjemnoscia oglada sie cwiczenia i wiele juz sie stad nauczylem. Mam pytanie, gdy programuje plytke przez USB (zasilanie jest z komputera) wszystko wydaje sie dzialac ok - sensory przesylaja dane jak nalezy. Natomiast jak plytka jest podlaczona do baterii 3.6V ma inne zachowanie np. Accelerometr pokazuje 2g zamiast 1g na osi Z. A zyroskop nie podaje wartosci znormalizowanych tylko surowe w zasiegu 0 - 65000. Chcialbym zapytac czy ktos mial juz taka sytuacje i moglby pomoc.
Pozdrawiam,
Pawel

Avatar 1
Ankit Windows / Safari 537.36
03 styczeń 2017 - 07:11 Brak informacji

Hi, currently I am acquiring data from mpu6050 sensor. using https://github.com/jarzebski/Arduino-MPU6050 this library. But the problem is when I am changing the position of the sensor and bring back to its reference position the angles are not 0. It is different than 0. What is the problem? How to solve it?

Avatar 1
darek_op Windows 7 / Mozilla Firefox 50.0
05 styczeń 2017 - 22:00 Warszawa

Używałem do testow moduł MPU6050 taki jak tu http://allegro.pl/mpu-6050-3osiowy-zyroskop-akcelerometr-arduino-avr-i5082764471.html. Niestety coś jest nie tak ponieważ nie wykonuje sie kalibracja, a ponadto podczas używania filtru kalmana po kilkunastu sekundach odczytów na monitorze portu pojawiają się olbrzymie liczby i na koniec komunikat ovf.
Odczytując wartości accPitch i accRoll wszystko jest ok, przepełnienie pojawia się tylko podczas odczytu kalPitch i kalRoll

Avatar 1
darek_op Windows 7 / Mozilla Firefox 50.0
08 styczeń 2017 - 10:48 Warszawa

Wyniki sa juz OK.niestety nie działa funkcja mpu.calibrateGyro();. Czy to z powodu zastosowania niewłaściwego modułu??

Skomentuj wpis