Skocz do zawartości

MPU6050 - Acceleration Y i Z są równe 0, nie ważne czy ruszam żyroskopem czy nie.


Franek100

Pomocna odpowiedź

Dzień dobry, 

Program wziąłem po częsci z tej strony: https://www.instructables.com/How-to-Make-a-Robot-Car-Drive-Straight-and-Turn-Ex/

Programuję sam żyroskop MPU6050 - nie robota,

Pomysł jest taki, żebym mógł ruszać silnikiem servo, za pomocą Serial Monitor i obserwować jak zmienia się przyspieszenie w osi X, Y i Z. W momencie gdy silnik czeka na komendę, program znajduje się w while loopie, gdzie wyświetlane są wartości przyspieszenia. Jednak wartości te są (tak sądzę) błędne, ponieważ nie zależnie w którym kierunku ruszę żyroskop - przyspiesznie Y i Z są równe 0.

Prosiłbym o wytłumaczenie mi, czy i jeśli tak, to gdzie popełniłem błąd.

#include <Servo.h>
#include <Wire.h>
#define servoPin 7
const int MPU = 0x68;
int servoPos = 0;
Servo myServo;
float AccX, AccY, AccZ; //linear acceleration

void setup() {
  myServo.attach(servoPin);
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);
  Wire.write(0x00);
  Wire.endTransmission(true);
  
}

void loop() {
  while (Serial.available() == 0){
    readAcceleration();
    }
  servoPos = Serial.parseInt();
  myServo.write(servoPos); 
}

void readAcceleration() {
  Wire.beginTransmission(MPU);
  Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
  //For a range of +-2g, we need to divide the raw values by 16384, according to the MPU6050 datasheet
  AccX = (Wire.read() << 8 | Wire.read()) / 16384.0; // X-axis value
  AccY = (Wire.read() << 8 | Wire.read()) / 16384.0; // Y-axis value
  AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0; // Z-axis value
  
  Serial.print("AccX: ");Serial.print(AccX);
  Serial.print(", AccY: ");Serial.print(AccY);
  Serial.print(", AccZ: ");Serial.println(AccZ);
}

 

Bez tytułu.png

11.png

  • Lubię! 1
Link do komentarza
Share on other sites

To ja mam inne pytanie.

Jest kilka bibliotek dla Arduino i MPU6050, od najprostszych do najbardziej rozbudowanych wykorzystujących DMP. Czy masz jakiś konkretny powód, żeby z żadnej z nich nie korzystać tylko kolejny raz wynajdywać koło (w tym przypadku nieco kwadratowe)?

Jeśli tym powodem jest chęć nauki - bardzo zacne podejście. Tyle że trzeba sobie poczytać coś na temat rejestrów MPU6050 (rozumiem że nawet nie wpadłeś na ten pomysł). Tu masz odpowiedni dokument: https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf

Moja rada: weź jakąś prostą bibliotekę, zobacz co jest w begin() czy init() (czy jak tam biblioteka rozpoczyna swą szlachetną działalność) i porównaj z tym co masz w setup.

Ew. jeśli zależy Ci tylko na odczycie akcelerometru - weź bibliotekę i zastosuj, będzie szybciej.

I przy okazji: jeśli kupiłeś MPU "gdzieś tanio" to jest duża szansa że jest walnięty - mam takie trzy w których któraś oś nie dziala.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.