Gebruik MPU-9250 9-DOF Gyro

Hardware geleverd door Arduino
Gebruikers-avatar
Berichten: 39
Geregistreerd: 04 Dec 2016, 22:32

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor ruud-572 » 08 Feb 2017, 13:07

het ligt aan mijn sensor, dat is duidelijk...
Software engineer industriële automatisering

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor shooter » 08 Feb 2017, 15:47

zet er eens een delay tussen, dat de sensor even tijd heeft om te starten.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor Koepel » 09 Feb 2017, 07:16

@MarcelWierda, stel gewone vragen altijd op het forum.
De I2C-bus zijn digitale signalen. De 222 weerstanden op het GY-91 board betekent een '2', nog een '2' met 2 nullen, dus 2200, dus 2k2. Er zitten er vier, aan beide kanten van de level shifters. De I2C is gespecificeerd voor maximaal 3mA naar GND. Dus 5/2k2 + 3.3V/2k2 = 3.7mA. Dat werkt prima maar is eigenlijk al buiten de specificaties.
De magnetometer is het compass. Dat wordt bij iedere (Kalman of kriswiner) berekening meegenomen om de Yaw te berekenen.

Berichten: 4
Geregistreerd: 01 Feb 2017, 15:49

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor MarcelWierda » 20 Feb 2017, 21:29

De // Waterpas 2
is prachtige code Koepel, eea deed het meteen.
Ik ben nu eerst aan het uitdokteren wat de Waterpas code allemaal doet
en zal kijken of er iets te vinden/te doen is over de timing en filtering,
een walking window filter oid. Ondertussen doet het pitch en roll het prima!

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor Koepel » 20 Feb 2017, 21:48

Er staat voldoende commentaar bij en links volgens mij. Als iets niet duidelijk is, vraag gerust hoor.

Zie je dit:
Code: Alles selecteren
x = 0.99 * x + 0.01 * float( xi);
De 'x' is een globale variabele, en 'xi' komt van de sensor. Dus ik neem daar 99% van de oude waarde van 'x' en 1% van de sensor. De waarde van de sensor wordt dus maar voor 1% toegevoegd. Dat is het filter.

Als je dat sneller wilt, dan kun je natuurlijk ook 0.98 en 0.02 doen.

Gebruikers-avatar
Berichten: 39
Geregistreerd: 04 Dec 2016, 22:32

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor ruud-572 » 20 Feb 2017, 22:47

Nieuwe sensor is al tijdje geleden besteld, maar nog steeds niet binnen... :|
Software engineer industriële automatisering

Berichten: 7
Geregistreerd: 02 Okt 2017, 18:57

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor FritsOv » 02 Okt 2017, 19:30

Hallo,

Ik zat naar deze post te kijken en probeerde de code ook bij mij uit.
Mijn sensor geeft als ik hem op een waterpas leg de volgende waarde aan:

1.708, 1.230

Moet de MPU eerst gecallibreerd worden?
In mijn beleving is het toch zo dat het eerste getal 0 moet zijn voor een waterpas op de x lijn en om een buble waterpas te krijgen het tweede getal ook 0 moet zijn?

Ik hoor graag pointers.

Alvast bedankt
Frits

Berichten: 4
Geregistreerd: 01 Feb 2017, 15:49

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor MarcelWierda » 02 Okt 2017, 20:01

Hoi Frits,
Wat ik me zo herinner: het zijn waardes op een willekeurige schaal?, nul calibratie en schaling zul je zelf moeten doen in de code,
daar zijn vast voorbeelden van.
succes, Marcel

Berichten: 1
Geregistreerd: 08 Okt 2020, 14:37

Re: Gebruik MPU-9250 9-DOF Gyro

Berichtdoor NWN078 » 08 Okt 2020, 14:39

Hee,
Voor een projectje ben ik bezig met het maken van een hoekmeter. Hierbij maak ik gebruik van de MPU 9250 accelerometer. Op het moment heb ik deze aangesloten op mijn Arduino NANO en een OLED display. met de volgende sketch:

#include <Arduino.h>
#include <Adafruit_SSD1306.h>
#include "Wire.h"
#define MPU9250_ADDRESS 0x68
#define ACC_FULL_SCALE_2_G 0x00
Adafruit_SSD1306 display = Adafruit_SSD1306();
uint8_t Buf[14];
float yangle;


void I2Cread(uint8_t Address, uint8_t Register, uint8_t Nbytes, uint8_t* Data)
{
// Set register address
Wire.beginTransmission(Address);
Wire.write(Register);
Wire.endTransmission();


// Read Nbytes
Wire.requestFrom(Address, Nbytes);
uint8_t index = 0;
while (Wire.available())
Data[index++] = Wire.read();
}


void I2CwriteByte(uint8_t Address, uint8_t Register, uint8_t Data)
{
// Set register address
Wire.beginTransmission(Address);
Wire.write(Register);
Wire.write(Data);
Wire.endTransmission();
}


void setup() {
Wire.begin();
I2CwriteByte(MPU9250_ADDRESS, 29, 0x06);
I2CwriteByte(MPU9250_ADDRESS, 28, ACC_FULL_SCALE_2_G);
I2CwriteByte(MPU9250_ADDRESS, 108, 0x2F);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
}


void loop() {
I2Cread(MPU9250_ADDRESS, 0x3B, 14, Buf);
int16_t ay = -(Buf[2] << 8 | Buf[3]);
yangle = ay / 182.04;
display.clearDisplay();
display.setCursor(0, 10);
display.print(yangle);
display.display();
delay(100);


}



Echter, wanneer de accelerometer vlak op de tafel licht geeft het display standaard een hoek van ongeveer 16 graden aan. Heeft iemand enig idee wat er niet klopt aan mijn code of moet ik de meter nog op een of andere manier kalibreren?

Vorige

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten