Franek100 Napisano Styczeń 30, 2023 Udostępnij Napisano Styczeń 30, 2023 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); } 1 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Styczeń 30, 2023 Udostępnij Styczeń 30, 2023 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. 1 Cytuj Link do komentarza Share on other sites More sharing options...
BananWszyscy Styczeń 30, 2023 Udostępnij Styczeń 30, 2023 jeżeli ci upadł z biurka to też kaput 😉 Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Styczeń 30, 2023 Udostępnij Styczeń 30, 2023 Tak, to w każdym telefonie by nie działał 😄 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Pomocna odpowiedź
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!