SparkFun IMU Breakout - MPU-9250

The SparkFun MPU-9250 IMU Breakout features the latest 9-axis MEMS sensor from InvenSense. Each of these 9DoF breakouts feature an MPU-9250 with a System in Package (SiP) that combines two chips: the MPU-6500, which contains a 3-axis gyroscope as well as a 3-axis accelerometer, and the AK8963, which features a 3-axis magnetometer. This breakout has been designed to be smaller than some of our other offerings to fit in smaller projects. However, if you plan to use a breadboard, or secure the IMU board to a project with something like epoxy, the mounting holes can be easily snapped off.

To achieve its smaller size, the MPU-9250 Breakout features PTH pins that have been wrapped around the border of the PCB in three rows of three or four. The top row (J1) is all one needs to get the most functionality out of the IMU. These include the I2C and power interface. The second most likely to be used set of PTHs are found along the bottom (J3). This includes the address pin, the interrupt pin, and the IO voltage supply for easy interface with a more modern 1.8V processor. The third, a non-breadboard-compatible row (J2), is used for features like running other I2C devices as slaves to this one. For prototyping with these connections, throw your connections on top as you would with an Arduino Pro Mini or similar product.

The MPU-9250 replaces the popular EOL MPU-9150 and decreases power consumption by 44 percent. According to InvenSense, “Gyro noise performance is 3x better, and compass full-scale range is over 4x better than competitive offerings.” The MPU-9250 uses 16-bit Analog-to-Digital Converters (ADCs) for digitizing all nine axes, making it a very stable 9 Degrees of Freedom board.

Get Started with the MPU-9250 Breakout Guide

  • Digital-output X-, Y-, and Z-axis angular rate sensors (gyroscopes) with a user-programmable full-scale range of ±250, ±500, ±1,000 and ±2,000°/sec and integrated 16-bit ADCs
  • Digital-output triple-axis accelerometer with a programmable full-scale range of ±2g, ±4g, ±8g and ±16g and integrated 16-bit ADCs
  • 3-axis silicon monolithic Hall-effect magnetic sensor with magnetic concentrator
  • Digitally programmable low-pass Gyroscope filter
  • Gyroscope operating current: 3.2mA
  • Accelerometer normal operating current: 450µA
  • Magnetometer normal operating current: 280µA at 8Hz repetition rate
  • VDD supply voltage range of 2.4 – 3.6V
  • Small board design
  • Detachable mounting holes

SparkFun IMU Breakout - MPU-9250 Product Help and Resources

9DoF Razor IMU M0 Hookup Guide

December 1, 2016

How to use and re-program the 9DoF Razor IMU M0, a combination of ATSAMD21 ARM Cortex-M0 microprocessor and MPU-9250 9DoF-in-a-chip.

MPU-9250 Hookup Guide

July 28, 2016

Get up and running with the MPU-9250 9-axis MEMS sensor.

I2C Address Issues with "MPU9250BasicAHRS_I2C” sketch

If you are having address conflict issues running the Basic I2C sketch, try editing this line of code:

if (d != 0x48) 

to:

if (d != 0xFF) 

It seems certain versions of Arduino do not agree with the syntax but changing this line in the example sketch should fix the I2C address issue.


Use with the Raspberry Pi?

There is Python example code for the MPU-9250 for a Raspberry Pi.

Try looking at this tutorial http://kingtidesailing.blogspot.com/2016/02/how-to-setup-mpu-9250-on-raspberry-pi_25.html . Also, try looking at this blog [ http://blog.pistuffing.co.uk/mpu-9250-first-impressions/ ].


Gyroscope Fun with NeoPixel Ring

danionescu

In this project, we'll combine a gyroscope and NeoPixels to build a device that lights LEDs corresponding to the angle of inclination.

3D-Printed, Internet-Controlled, Self-Balancing...

Alicja Jakubas

Open source telepresence robot that keeps its balance on two wheels. Controlled from UI in the web browser.

Carfox: A Device to Find Them All

Luis Roda Sánchez

It makes your car smarter detecting accidents to help you where nobody can.

Using the MPU9250 to get Real-time Motion Data

Samhita Ganguly

Code and explanation for getting directional and motion data from the raw sensor outputs.

Core Skill: Soldering

This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.

1 Soldering

Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels


Core Skill: Programming

If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.

3 Programming

Skill Level: Competent - The toolchain for programming is a bit more complex and will examples may not be explicitly provided for you. You will be required to have a fundamental knowledge of programming and be required to provide your own code. You may need to modify existing libraries or code to work with your specific hardware. Sensor and hardware interfaces will be SPI or I2C.
See all skill levels


Core Skill: Electrical Prototyping

If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.

3 Electrical Prototyping

Skill Level: Competent - You will be required to reference a datasheet or schematic to know how to use a component. Your knowledge of a datasheet will only require basic features like power requirements, pinouts, or communications type. Also, you may need a power supply that?s greater than 12V or more than 1A worth of current.
See all skill levels


Customer Comments

  • Why are the magnetic and accel/gyro sets of axis references not in sync? Is this intentional (or typical)? I guess SW can “fix” that without a problem.

    • I’m not certain why the two sensors in the package don’t have the axes aligned the same, but here is where that difference is documented orientation of axes

  • I’ve been trying to get accurate yaw data for 2 days straight ad I have no idea what is wrong. I don’t know here to start. I’m using sparkfun’s library and the yaw data is constantly shifting all over the place and has never once pointed me towards north. Also the yaw sporadically jumps when I go past (what should be) 90 degrees. There seems to be absolutely no correlation between how far I turn it and the yaw. I’m going insane trying to figure this out and it doesn’t help that I have no understanding of quaternion filters and all the crazy math going on.

  • Is an interrupt pin required? The sample code defined an intPin but didn’t really use it. I couldn’t find anywhere in the library code that uses interrupt either.

  • I have a question regarding the yaw angle. According to wikipedia, turning the nose to the right is positive yaw. According to the sparkfun tutorial, this seems to be the opposite. The mag. declination angle (east of true north being positive) is subtracted from myIMU.yaw (line 391). This means that if your device points 8.5 degrees east of true north, your magnetometer will show zero and you end up getting -8.5 degrees after the subtraction. Can someone explain the difference? Thanks.

    https://en.wikipedia.org/wiki/Aircraft_principal_axes https://learn.sparkfun.com/tutorials/mpu-9250-hookup-guide?_ga=2.41541028.747198559.1526401852-836860115.1440527768

  • What is the sampling frequency of this sensor?

  • https://www.youtube.com/watch?v=6ijArKE8vKU

    Can i do 3d tracking like above with this sensor?

    If yes means Please help me to do this?

    Thanks in advance

  • Pardon my noobness but does this also include a compass so I can get data on the orientation of the device? I plan to use this in an obstacle avoiding drone and want to make sure that the sensor to detect the obstacles is always pointed in the direction of movement.

  • I am trying to change the address of the chip in the firmware, but can’t seem to find where SparkFun defines “slave_addr”. Has anyone been able to do this?

    ***UPDATE: I found where the register address is defined. It’s hard-coded into a struct. Navigate to the inv_mpu.c file. Go to “const struct hw_s hw = {”, line 435 in my version of the code and “const struct hw_s hw = {”, line 516 of the code. The register address is stored in variable “.addr”. Not sure why the original author of the library decided to hard-code this value in vs. allow the user to pass the address as a parameter (had a good reason I guess–maybe easier to manage?? – would someone care to comment?), but that seems to be the case. Hope this helps someone else.

  • What are the dimensions of this item?

  • I see that in data sheet Figure 4 and 5, the axes are diagrammed. It appears that the axes are exactly on top of each other. Is this true, or is there slight angle deviations between axes? That is, is the X axis of accelerometer a certain angle theta off from the X axis of gyroscope? Is the X axis of accelerometer a certain angle phi off from the Y axis of the compass? If so, can this information be found anywhere? I want to know the exact theta and phi for a given IMU.

    Thanks!

  • Was reading some additional documentation on this chip (found using this search: AN-IVS-0002A-00) as well as reading though Kris Winer’s various Q&A. It says the exposed die pad should NOT be soldered to the PCB. Kris refers to this as a big no-no. Is there something I’m missing here, because it looks like your breakout does put paste there for soldering (as well as running traces beneath the device, which also is discouraged)? I am asking because I bought a couple of these and I am having a very hard time calibrating them (wondering if this could be at least part of the issue).

  • Does this board also have a dmp ?

    • The IC has DMP capabilities, but only by loading about 3kB of closed binary firmware onto it each time it’s powered on. Things are changing, but that is a little large for the more common Arduinos. InvenSense’s developer site has code for ARM processors if you need it.

  • What is the best/right logic level converter to connect the IMU to a UNO? :)

  • I hooked up the MPU-9250 SPI pins to a Teensy 3.2, but the WHO-AM-I register is incorrectly returning zero. Does the breakout board need any special treatment, like desoldering one of the jumpers or anything else?

    I prefer SPI because my robot needs a 3 foot CAT-5 cable to the IMU and SPI is less susceptible to noise and it’s way faster than I2C. I’ve done SPI for the LSM6DS3 IMU, but now I need magnetometers too.

    • Agreed, SPI jumper instruction is needed. Sparkfun, please…

      • Ok, after digging through the documentation a bit more, I figured that SJ2 jumper needs to be moved to the opposite side. Now it still didn’t work on my Teensy but then I moved over to an Arduino Due and all is good. I guess I need to understand the brand-spanking new Teensy 3.6 a bit better with its 3 SPI’s…truly amazing piece of hardware, 180MHz!!!

  • I would like to know about the sensors' uniformity. In other words, if I use 2 of these sensors to measure the same movement, how different will the 2 measurements be, compared to each other?

    • Can anyone answer my question please? If not, then could anybody think of a way to connect the IMU to a breadboard WITHOUT soldering it (so that I can check the uniformity of multiple sensors myself, before soldering them)?

      • As for the original question I’m not sure, I’d check out the datasheet for the sensor which should give you an idea of its accuracy. As for connecting them without soldering I personally would use jumper wires and hold them at an angle with a bit of pressure to make sure they don’t move. This does make debugging and things hard since you only have 1 hand free, but for a quick measurement should work fine.

  • I want to measure very small changes in a objects position. tip/tilt. direction etc. But I’m looking at fractions of a degree not large changes for example.
    is one of these appropriate for that type of measurement.? what would be a better choice if not?

    Oh and it would be placed on a large aluminum plate. would that cause interference of any kind

    • You want an Inclinometer http://www.digikey.com/product-detail/en/murata-electronics-north-america/SCA61T-FA1H1G-1/551-1005-1-ND/751309

    • Also applies to +MickeyMouse:s question

      MEMS gyros/accelerometers (and probably inclinometers too but IDK) are noisy as hell, even with relatively good kalman filtering you’re unlikely to get repeatability to fractions of degree. rotation around the “Z” axis (assuming gravity eg up<->down is Z) is especially difficult and if you rotate 180deg one way and then back the reading is likely to be off by several degrees (tilts are easier since they can be correlated with accelerometer data).

      All of the above applies to “older generation” IMUs, this one might be significantly better (but probably isn’t, there are inherent limits in MEMS technology and it will never be comparable with proper laser-gyros, but we’re not building space shuttles.)

  • Are those tattoos for real?

  • You misspelled “Gyro” on the silkscreen…

Customer Reviews

4 out of 5

Based on 12 ratings:

Currently viewing all customer reviews.

1 of 1 found this helpful:

Amazing accuracy

Just apply a kalman filter and this’ll give you near perfect orientation data.

Y-axis accel bad out of the box

Y-axis accel sensitivity only 35% of X and Z right out of the box.

Sorry to hear that, sounds like it may be a borked chip. If you contact our tech support team, they should be able to help you resolve the issue.

I am surprised how stable it is

I am still experimenting with combining all the accelerometers and gyros together, but testing just the X axis for 2 ½ minutes with the bias dialed in I got less than an inch of error when it was strapped down. I did not believe that you could buy that much stability for such a low price!

Satisfactory

This breakout board allows you to connect an MPU-9250 to a microporcessor or microcontroller board without having to create your own printed circuit board to mount the chip on. Good job.

Works well, amazing for the price

We needed to collect some accelerometer data and liked that these had adjustable G ranges. The I2C interface requires a level shifter if you want to use this board with an Arduino Uno (it would be nice if this were explicitly mentioned up front! I ordered the SparkFun Logic Level Converter - Bi-Directional BOB-12009 once I figured this out and it worked great). I used the code from http://playground.arduino.cc/Main/MPU-6050#short to get the data collection going. We’ve gotten a 4kHz data rate out of the system and the data had low noise until we tried to move the IMU about 3 meters away - didn’t work even with shielded cable. Keep the IMU and mpu close!. All in all a very good sensor.

Nice and small products.

I ordered 7 of these. Of the 7 one of them was orientated the wrong way, or at least appeared to be. Changing the SJ2 jumper was tricky and a little bit scary to do. Worked well for our project.

Cannot read Yaw and pitch

We are not able to reach pitch and yaw correctly. Too much wring reading. We need 0.1 degree accuracy. How can we fix it?

Sorry to hear about the issues with the sensor.

Have you reached out to our technical support department at Techsupport@sparkfun.com - they’re the best line of communication to use to get support for the product.

Product is great, some misses though.

The product works great and the code works out of the box. However, compared to other SparkFun break outs, this one has some issues. So it is “Okay” relative to the other SparkFun offerings. And please; maybe my expectations are off base.

The example code is not 100% straight forward. There are definitions for pins that are not used, comments that refer to deleted code, and “ifdef” sections for non-standard parts. I am used to there being an example code that gets the system started and demonstrates how to get data from the sensor. Granted that the additional implementation of the features in “quaternionFilters.h” are awesome. But, this is not the simplest demo code as I would expect.

With regard to the board, it would be nice to have labels for the pins on the top of the board. It’s a small board, so that would be a challenge, but it would be nice. Since there are no labels on the top of the board, the connection diagrams in the “Getting Started” pages are harder to follow than examples for other SparkFun products.

Fast and working

Very fast shipment and a good sensor!

Worked great first try using android example

Wow, couldn’t have been easier. Hooked it up to a Teensy, and presto, everything worked! Nice sensor and great price.

Great value for the money

Small size, I2C capability, easy to use, and relatively cheap