SparkFun 9 Degrees of Freedom Breakout - MPU-9150

The SparkFun 9DOF MPU-9150 is the world’s first 9-axis MotionTracking MEMS device designed for the low power, low cost, and high performance requirements of consumer electronics equipment including smartphones, tablets and wearable sensors. And guess what? You get to play with it.

This breakout board makes it easy to prototype with the InvenSense MPU-9150 by breaking out all the pins you need to standard 0.1" spaced headers. The board also provides I2C pullup resistors and a solder jumper to switch the I2C address of the device.

The MPU-9150 is a System in Package (SiP) that combines two chips: the MPU-6050, which contains a 3-axis gyroscope, 3-axis accelerometer, and an onboard Digital Motion Processor™ (DMP™) capable of processing complex MotionFusion algorithms; and the AK8975, a 3-axis digital compass. The part’s integrated 6-axis MotionFusion algorithms access all internal sensors to gather a full set of sensor data.

  • Tri-Axis angular rate sensor (gyro) with a sensitivity up to 131 LSBs/dps and a full-scale range of ±250, ±500, ±1000, and ±2000dps
  • Tri-Axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g
  • Tri-axis compass with a full scale range of ±1200µT
  • Reduced settling effects and sensor drift by elimination of board-level cross-axis alignment errors between accelerometer, gyroscope, and compass
  • VDD Supply voltage range of 2.4V–3.46V; VLOGIC of 1.8V±5% or VDD
  • Gyro operating current: 3.6mA (full power, gyro at all rates)
  • Gyro + Accel operating current: 3.8mA (full power, gyro at all rates, accel at 1kHz sample rate)
  • Gyro + Accel + Compass + DMP operating current: 4.25mA (full power, gyro at all rates, accel at 1kHz sample rate, compass at 8Hz rate)
  • Accel low power mode operating current: 10uA at 1Hz, 20uA at 5Hz, 70uA at 20Hz, 140uA at 40Hz
  • Full Chip Idle Mode Supply Current: 8µA
  • 400kHz Fast Mode I²C serial host interface
  • On-chip timing generator with ±1% frequency variation over full temperature range
  • 10,000g shock tolerant
  • I2C Pullup Resistors populated on board.
  • All Pins Broken Out to Standard 0.1" Spaced Headers
  • Solder Jumper for Switching LSB of I2C Address

SparkFun 9 Degrees of Freedom Breakout - MPU-9150 Product Help and Resources

MPU-9150 Hookup Guide

August 13, 2015

A basic guide to get started with the MPU-9150 9 Degrees of Freedom Breakout.

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


Comments

Looking for answers to technical questions?

We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.

  • Eric5 / about 8 years ago / 1

    Hey, the MPU-9150 chip is obsolete, so I imagine you won't be able to make these anymore, is sparkfun planning to release an MPU-9250 version of this board?

    • M-Short / about 8 years ago / 1

      Last I checked the MPU-9150 was not yet End of Life and there is no end date set. But the MPU-9250 is out and we do plan on building a board for this chip.

      • Applicable Robotics / about 8 years ago / 1

        Can you provide an estimate of when the MPU-9250 breakout will be availiable?

        • M-Short / about 8 years ago / 1

          Sorry, it is taking longer than expected. I believe we are currently working on verifying that the hardware works the way we expect and the board can do everything we want it to. Assuming we don't run into any problems I'd guess 2-3 months, but I never assume.

          • Applicable Robotics / about 8 years ago / 1

            Is there any chance the new breakout will be released in the next week? There are breakouts on ebay I can use if I have to, but I would prefer to use another high quality, reliable board from Sparkfun.

            • M-Short / about 8 years ago / 1

              Sorry, the current plan is to release next month, but between delays in components and creating a workable release schedule things are subject to change.

      • Eric5 / about 8 years ago / 1

        Digikey lists it as obsolete and out of stock: http://www.digikey.com/product-detail/en/MPU-9150/1428-1009-1-ND/4038014

        And now I see you are out of stock as well :-)

  • SVFeingold / about 11 years ago * / 9

    I think it's time to inject some much needed information into this discussion.

    I recently attended the Invensense Developer's Conference in San Francisco. While there I met a surprising number of fellow engineers with similar questions as I (and you) are asking. Namely, does the DMP function actually exist? I spoke directly with some of the Invensense technical team members and asked them this question.

    So, can this IMU perform 9 axis sensor fusion? The short and final answer is NO. The IMU and breakout board here cannot do 9 axis sensor fusion. The hardware is not capable of doing it. And it's about time SparkFun finally corrects the information here and stops misleading its customers. I understand that the blame here largely rests with Invensense, who have been very cagey about releasing this information. But, it is out now, so the description should be fixed.

    This IMU is identical to the 6150, in fact it IS the 6150 with the addition of a magnetometer. The DMP function on this IMU can do 6 axis sensor fusion if you can manage to initialize it properly and load the DMP code onto the chip. It can ONLY do 6 axis fusion. If you want 9 axis, it must be done on another MCU. Here you have a few options:

    1) Get an MSP430 like the one on the MotionFit Wireless development board (out of stock on Invensense), log into the Invensense Developer's Corner, and download the MotionApps driver. Modify from there. This is more or less the only sure way to get 9 axis sensor fusion from Invensense directly. However, the TI development tool chain requires you use Code Composer, and if you want to use the Invensense library you will have to buy it as the free version has a code size limitation. It's about $400-500.

    2) Port the code yourself to the MCU of your choice and integrate the magnetometer data yourself. They have, I believe, 3 versions in the aforementioned developer's corner. There is a version for the MSP430, a version for the Atmel UC3 development board, and a "general" version that is intended to be ported to various platforms. However, the only one that has full 9 axis sensor fusion is the one for the MSP430. The UC3 and general libraries are 6 axis only. You have to build the 9 axis functionality on top of this yourself, if you want it. This was confirmed by a developer at the conference. To get 9 axis you pretty much have to either use the TI toolchain with the MSP430 and Invensense code, or roll it yourself.

    3) Code the sensor fusion algorithms yourself. Or find an open source version and adapt it to your application.

    That's it! This breakout board, as it contains only the IMU and supporting circuitry, IS NOT PHYSICALLY CAPABLE of doing 9 axis sensor fusion. That can ONLY be done onboard an MCU. If you want 9 axis, it has to run on an external MCU. If you don't want to pay for the MSP430 toolchain, you can either find open source libraries or do it yourself. This is information coming directly from the Invensense team and exhibitors at the conference using the 9150 in their applications.

    There is a 9250 planned, which will also not be capable of onboard 9 axis fusion. There is then a 9350 planned, with the same story. Only after the 9350 is there a possibility of the IMU performing full 9 axis sensor fusion onboard. But that is going to arrive late 2014, at the earliest.

    Sparkfun, is this enough yet? Surely the text on this site is not carved into stone somewhere. The very first feature listed here is NOT a function that the 9150 can offer.

    • MikeGrusin / about 11 years ago * / 6

      We will look into this, and it would help speed things along if you can point us towards Invensense documentation to support your findings. But please be fair; in choosing to develop this breakout board, and in our description above, we have only quoted Invensense as to the capabilities of this chip. We are certainly not trying to mislead anyone. The chip does have 3 x 3-axis sensors on it, and from that standpoint is a remarkable part. The rub seems to be the fusion processing, which has been found by customers to be unpleasantly proprietary, and according to your research, deficient. One of our goals is to bring cutting-edge parts to our customers who are frankly better experts in their domains than we are. To do this we have to trust the manufacturer's claims, as we all do when using any component. Resistors and capacitors are easy enough to verify, but the performance specs of chips this complex are often beyond our experience. We truly do appreciate the work our customers do to wring out these parts; posting useful how-to information when they get them to work, and letting us know if they don't. If this chip doesn't live up to the performance specs that are claimed of it, we'll certainly change the description to match reality. But we could use some more information, and we appreciate the benefit of the doubt.

      • SVFeingold / about 11 years ago / 3

        I'm not sure what kind of documentation I could give you, as you will agree their documentation about this has not been the best. However, I can provide the contact info for the Invensense team members that I spoke with. The topic of the DMP has been causing confusion for everyone. Like I said, several of the fellow attendees I spoke with had the exact same question, and we all got the same answers from the team.

        The DMP code itself is proprietary and encrypted, but if you look on the developer's corner you can find the libraries I spoke of. Examining them, there is mention that they are for 6 axis sensor fusion - with the exception of the MSP 430 libraries. But, it is not so simple for a lot of hobbyists to drop $300 on the development tools and another $450 on the compiler. So that is not much help for most of us.

        The MPU-9150 does contain all 3 sensors of course, but the magnetometer is separate silicon within the chip and on a separate bus. I would venture a guess that the DMP processor does not have direct access to the magnetometer and that complicates things. However from talking to some of the Invensense guys there is also the issue that the mag calibration is rather involved and not something they're comfortable doing internally with no user input. That was the gist of it.

        So I can offer the contact info for those I spoke with. I'd rather not post it publicly. Everyone I spoke with told the same story, and that's information that I wish Invensense had given long ago to save us all the trouble. I do understand your position however, and it's a shame Invensense hasn't been forthright in their docs and marketing.

        • MikeGrusin / about 11 years ago / 1

          That sounds good. If you'd like to write me privately, my address is mike.grusin at sparkfun. I'll also note that our resident IMU expert recently left Sparkfun for bigger and better things, so the rest of us are currently trying to climb that learning curve. We really do appreciate your extensive research into this, and the outside expertise!

      • Member #503287 / about 10 years ago / 1

        After buying it based on the description, and then reading the comments, I definitely feel misled, and becauseof this item will be switching to Adafruit.

        • bdwyer / about 10 years ago / 1

          In my opinion this should still motivate Sparkfun to modify the text-description to include a disclaimer; there is no DMP support if you buy this device. It should not be a selling point, because the buyer will not have the information required to utilize the DMP with this purchase (unless it gets released to the public by Invensense)

          When choosing my first IMU from Sparkfun, the on-chip DMP is also why I chose the MPU9150, but after a lot (and I mean a lot) of research with invensense, I came to the same dead-end conclusion; 'no DMP for you'.

          I am still using this chip, as its still a very useful 3 x 3axis system (and don't forget it measures temperature). However, it doesn't take an IMU expert to understand which portions of this product are publicly available, and which portion is not.

          • MikeGrusin / about 10 years ago / 1

            We've updated the description, thank you everyone for your input and patience. We too are disappointed by the reality vs. datasheet for this part, and will more closely monitor manufacturer's claims in the future.

            • wam / about 10 years ago * / 1

              You should look at the AD parts: http://www.analog.com/en/mems-sensors/mems-inertial-measurement-units/products/index.html#iSensor_MEMS_Inertial_Measurement_Units

              Decent in-run bias specs... expensive tho.

              Great write up comparing more traditional discrete FOG-based and MEMS: http://www.insidegnss.com/node/3123

              PDF - http://www.insidegnss.com/auto/julyaug12-Goodall.pdf

              Stability is a big deal with these lower cost units - we added a small Peltier to get the invenSense a bit better - pain to do tho and still not so great.

              Another great article on IMU's here: http://www.memsjournal.com/2010/12/high-performance-mems-gyroscopes-current-status-and-emerging-trends.html

              Note where he mentions RLG and FOG's are about 1,000 better than these MEMs units.

            • bdwyer / about 10 years ago / 1

              Thanks! Don't get me wrong, there's no way you could have known unless you too bugged the manufacturer to get the same result. It's just the way trying new products go. As long as you pay attention to your community of supporters who are willing to try new products and provide feedback.

              Invensense wants to target big buyers regarding the use of their "DMP", and that's their choice. I just hope it's not too far from now when someone releases a similar device opensource ;0)

  • Dave_RI / about 11 years ago / 8

    It would really be awesome if we could get Pete/Nick (or both) to do a tutorial or project with this breakout board. There seems to be a lot of unanswered questions. Keep up all the great work!!

    • giantsfan3 / about 11 years ago / 6

      Although no one has made a tutorial yet, here is something that might be useful: Pansenti has just put up an Arduino library for the MPU-9150, along with implementation of 9-axis fusion. Link to Github repo. Link to blog page.

      • Member #237447 / about 10 years ago * / 1

        Thanks! This (well the mirror at https://github.com/richards-tech/MPU9150Lib ) was the only code that worked with the DMP for me. However their example does have huge latency (maybe 1 second) which makes it rather useless.

        Anyone know why?

        Edit: Never mind. There is a bug in the polling delay code in Due9150.ino. Hacky fix but it demonstrates where the problem is, change:

        pollInterval = (1000 / MPU_UPDATE_RATE) - 1; // a bit less than the minimum interval

        to

        pollInterval = (500 / MPU_UPDATE_RATE) - 1; // a bit less than the minimum interval

      • Dave_RI / about 11 years ago / 1

        Thank you Giantsfan3 for finding and posting!! Also, thanks to Pansenti! I'll be checking out this info further. I'm closer to justifying experimenting with one of these 9dof's now. I have no programming experience so I'd rather use something that is open and works. In the meantime I bought a cheaper accelerometer to "play" with. Still hopeful for a Sparkfun IMU demo though.

        • Pansenti / about 11 years ago / 1

          We've tried to make it as easy as possible to use the MPU-9150 on the Arduino (and now the Raspberry Pi too). The user sketch just needs two function calls - init() and read(). It's as simple as that!

          • Member #405641 / about 10 years ago / 1

            Anyone know why the pansenti library has vanished from the internet. I have an old copy but all references on github and pansenti blog have been pulled.

            • Member #537064 / about 10 years ago * / 1

              removed

              • Member #537064 / about 10 years ago * / 1

                removed

                • A1 / about 10 years ago / 1

                  richards-tech, I have found your library to be... beautiful! However, I am struggling to figure out a way to implement it for an Arduino Fio V3, but for a simple reason - the sketch size is too big. Could anyone suggest a way to decrease the sketch size for 1.) the MagCal9150 calibration and 2.)Arduino9150 sample code? This is primarily needed to the calibration, so that I can utilize the 9150 on a FioV3 further...

    • Swift / about 10 years ago / 1

      I should do one but I don't know how to.... A pdf file would do the tricks? to whom I should send it?

  • OK, here is the deal with the DMP. Invensense isn't releasing a lot of information on how to use the DMP. You can signup on their dev site and get some drivers/applications, but you will not find a datasheet/register map explaining how to get DMP output. Bummer, so the only option is to work with what Invensense is going to give us. The 6 axis version of this chip, the MPU-6150 has DMP support, because the developers at i2cdevlib.com sniffed the I2C traffic from an MPU eval board and figured out how to program the DMP. The same should eventually get done for the MPU-9150. Someone has already sniffed the traffic for the 9DOF DMP. All of the I2C register information is there, all we need is someone to parse through it, which isn't an easy task. If you notice in the data dump, after the DMP is programmed, you can get 12 bytes of quaternion output (2-3 bytes per axis). Thank the devs at i2cdevlib.com for sharing how to do this!

    I know this isn't ideal and we apologize that Invensense is not very clear about how to use the DMP when they overtly advertise it in the datasheets.

    Strictly speaking, in terms of hardware, this chip has 3 sensors in one package and they are very high quality. We choose Invensense gyros for the UDB over a few other manufacturers due to their vibration tolerance for quad applications. Barring the DMP, this is a very useful and quality sensor, if you want to save space and cost.

    • nixpulvis / about 11 years ago / 1

      I've noticed that with the code provided from the guys at i2cdev, the DMP quaternion works great until there is almost any hang in the main loop between update reads to the FIFO buffer. I'm not sure what exactly is going on there, but it's making me want to just implement a filter myself.

      • Neon22 / about 10 years ago / 1

        This is probably because the Wire.h lib is not up to it (drops in comms and if you need double start messages). I suggest you replace with this lib instead for all i2c comms: http://dsscircuits.com/articles/arduino-i2c-master-library.html

  • bdwyer / about 11 years ago / 5

    Hmm..There doesn't seem to be any information on the DMP (digital motion processing) portion of this chip. I've even signed up for an account on the Invensense site to see what the developer section offers...nothing more on the MPU9150.

    Perhaps we should try asking InvenSense? They only provide information on the MPU6050, and nothing really on the DMP...

    • Member #395742 / about 11 years ago / 2

      I signed up for a dev account, too. Check the FAQs. They give some insight into what the github 6050 code is doing.

      Basically, you upload this encrypted block of code from InvenSense on reset. It uses the FIFO buffer to output 48-byte buffers of quaternion integrated orientation info, and raw sensor feeds.

      I reckon the DMP is programmable. But, I also reckon they want you to license the thing.

  • Member #98977 / about 10 years ago / 3

    I just did some googling and it looks like they finally released the registry map with descriptions!!!! YAY!!! http://www.invensense.com/mems/gyro/documents/RM-MPU-9150A-00v4_2.pdf Now we just need to turn it into a library. I'll be working on this in my free time. I'll post if I get anywhere.

    • Member #237447 / about 10 years ago / 1

      This does not include any documentation for the DMP which is what everyone is annoyed about.

    • AWESOME! Thanks for letting us know! Best of luck as you hack on it :)

  • Gav / about 11 years ago / 3

    I'm pretty disappointed that the breakout and example code won't allow us to do what the features say, and the DMP for this chip seems to be locked up secret info from invensense.

    Top of the list is: "Digital-output 9-axis MotionFusion data in rotation matrix, quaternion, Euler Angle, or raw data format"

    Sparkfun, can I suggest you either: * Provide info on how to enable the DMP for this chip (not another in the series) or * Either Remove the references to DMP features on your product page or put in a disclaimer that they aren't currently available.

    I'm pretty cheesed that I purchased two of these breakout modules (specifically because they were supposed to do the heavy work on the DMP, not my microcontroller), and it looks like i would have been better off with another solution.

    • giantsfan3 / about 11 years ago * / 2

      Indeed. And I vote for the former of the two options - "Provide info on how to enable/use the DMP for this particular chip". I would buy Half a dozen more of these for my present project, if I could exploit the DMP feature, which would supposedly differentiate this chip from discrete solutions like the Razor.

  • Member #34135 / about 11 years ago / 3

    Having been disappointed by the lack of DMP usefulness on the ArduIMU, could someone point out where in the Invensense documentation quaternion or Euler angle output is even mentioned? I sure can't find it.

    • I'd check out the i2cdev repo for the MPU-6050 here.

      The 6050 doesn't include the magnetometer, but you can see how to use the DMP to get Euler and quaternions from this library.

      • Member #34135 / about 11 years ago / 5

        Yeah.....no way I'm spending another $50 on a IMU I have to go traipsing around the internet to find code to make it work. Sparkfun shouldn't lead off with the feature "Digital-output 9-axis MotionFusion data in rotation matrix, quaternion, Euler Angle, or raw data format" when none of the given documentation even mentions it.

  • Member #182792 / about 11 years ago / 2

    After I downloaded the 'example code' for this device, I noticed that the compass information was a bit strange. It turns out it is LOW ENDIAN, and not HIGH ENDIAN. So 'getMotion9' returns wrong information. OK you get what you pay for (free open source lib has bugs). Additionally, the code needs a serious review and re-factor. Hasn't anyone heard of "struct"? Using individual byte array indices is primitive and hard to read. And passing 9 integer pointers uses up a LOT of code on an Arduino. Try passing a structure pointer instead. You'll still need room for an SD library if you want to log data, after all, and the structure can be an integral part of the data you log. And using byte indices also obfuscates the fact that the magnetic values were incorrectly byte-swapped. And use 'protected', not 'private', so that people can easily derive a custom class without editing the library first ['private' should have NEVER been invented for C++]. OTHER THAN THIS, I'm happy with the 9150 (I'm doing some contract work related to that chip). It solves a lot of problems. And, of course, the breakout board lets you experiment with it. 'SO WHAT' if you need to write a program to integrate the information. At least you can collect the data without compensating for chip positions on the board. One thing worthy of note, is that it appears that the only way to get the motion interrupt to work is to EXACTLY follow the flowchart example in the data sheet. Otherwise you seem to get 'data ready' interrupts all the time. If you want to wake something up if it's moved, you'll need to use the low power accelerometer only mode with periodic wakeups, and tolerate one or two 'false hits' at the beginning of your sleep state. Then it works JUST fine. So thanks, Sparkfun, for making this available.

  • giantsfan3 / about 11 years ago * / 2

    Great news everyone! It seems Pansenti has been gracious enough to create and Github-upload an Arduino library for the MPU-9150, including 9-axis fusion. Check the Github page for the library. Also this blog page.

    • Member #423280 / about 11 years ago / 1

      I can get the examples to work for only a few seconds, and then the 9150 seems to stop responding. When resetting the arduino it spews out data for a few more seconds and then dies again. Anyone else having this problem?

      • Check and make sure all of your solder/wire connections are solid.

        • Member #423280 / about 11 years ago / 1

          Checked and double-checked - it dies sitting still on the table. Anyone having full success with this?

          • Pansenti / about 11 years ago / 1

            Just to clarify, are you using MPU9150Lib? If so, can you give a few more details of your setup?

            • Member #423280 / about 11 years ago / 1

              Yes, I am. Disconnecting INT to Arduino digital pin 2 seems to do the trick. It now works. Thank you very much, and sorry for the inconvenience.

              • Pansenti / about 11 years ago / 3

                Glad it's working and thanks for that information. We don't use the interrupt pin in this library at the moment but optional support for that could be added.

                • Member #425341 / about 11 years ago / 1

                  i've been implemented this code to mpu9150 and arduino uno, emm,if connection had a trouble, this device stop responding, and arduino must be resetting, so is there any suggestion to resolve this problem? thank you

                  • Pansenti / about 11 years ago / 1

                    We would never describe the code as production-ready so error handling is descriptive rather than bullet-proof. If you look at the source of the library, however, it should be possible to handle the error conditions more intelligently and achieve the results you want.

                    • Neon22 / about 10 years ago / 1

                      Suggest you use improved Wire.h which doe snot die when comms are lost: http://dsscircuits.com/articles/arduino-i2c-master-library.html

  • Member #405641 / about 11 years ago / 2

    For those that are not aware. I was getting pretty much garbage from the magnetometer. It drove me nuts. Then I found out that the magnetometer needs to be calibrated before the output is useful. You can roughly calibrate by rotating the magnetometer around each axis while logging the data to a file. Then plot raw values x vs y, z vs x, z vs y. Add an offset to each raw output value to center the circles on 0,0.. Hope helps someone else. There are more sophisticated ellipsoid fit methods but the above method will get you going..

    • Member #424489 / about 11 years ago / 1

      Hi, I've tried calibrating the magnetometer and it seems like the values don't lie on a sphere. It's more like 2D ellipse approximately along the line y = x. Any idea what is wrong? Thanks!

      • Member #405641 / about 11 years ago / 1

        Yep mine did as well. You need to multiply and add offsets to the values to get a sphere. I have an old spreadsheet that ran a regression to get the offsets and factors..

  • gumush / about 11 years ago / 2

    Any update on getting DMP with i2c ?

  • Calif / about 11 years ago / 2

    Anyone succeed in getting the DMP output, using a bare microcontroller? It seemed to require uploading a binary blob over I2C.

  • GraysonR / about 9 years ago * / 1

    I wish Sparkfun would make a hookup tutorial on this as well as how program your master. I can't figure out how to get it to work. I just get zeros on the serial port. I have GND, VCC, SDA, and SCL hooked up. Am I missing something?

    EDIT:

    Nevermind.

  • Member #616422 / about 9 years ago / 1

    hi,

    i'm looking for an arduino sketch which is working on arduino due and with sensor fusion . can anyone help me ?

    thanks

    rik

  • Member #616422 / about 9 years ago / 1

    hi, i tryed to search in these comments a solution to not open another discussion and waste your time but i saw all the links below are giving me error

    i'm just looking for an "arduino due" sketch to use this MPU9150 .. i'm using something that is giving me "raw data" but i need something else with a calibration algorithm inside to have "real data" obviously if you have something with even sensors fusion 6 or 9 will be appreciate

    can anyone help me ?

    thanks a lot

  • Member #636533 / about 9 years ago / 1

    Hi, I did a 3d wireless mouse using a MPU9150, an atmega328 with arduino bootloader and RN42 v6.15 bluetooth module, and it had been working well, until a few days ago. It looks like the MPU9150 has stop sensing and now all that I get are zeros from gyro and accel. The sensor does not appear to be damage because the Who_I_Am register and mag responds well, and I dont get any I2C reaging errors. So if you have any idea of hoe to solve this I would appreciate it very much!!

  • Member #74840 / about 9 years ago / 1

    Just a heads up for Sparkfun and everyone else: I was looking at this datasheet on the invensense website (rev 4.3) and they no longer show the clkout line on their pinout and description (it is still on the block diagram, though). Pin 22 on the 9150 is labeled as RESV (reserved, do not connect). Just FYI.

  • Member #612678 / about 9 years ago / 1

    I have this connected to an arduino fio (3.3v), am running the newest sketch from github, but am getting a connection error and all zeros in the output.

    Testing device connections... MPU6050 connection failed a/g/m: 0 0 0 0 0 0 0 0 0 a/g/m: 0 0 0 0 0 0 0 0 0

    The wiring is really simple, as no resistors should be needed: 3v3 to vcc gnd to gnd a4 to sda a5 to scl

    Using the i2c scanner, I detect the device on 0x68.

    Any ideas?

  • Member #112810 / about 10 years ago / 1

    There is a problem with description. "that combines two chips: the MPU-6050, which contains a 3-axis gyroscope, and 3-axis accelerometer." You are only describing the one chip that it contains. Also and contains the AK8975, a 3-axis digital compass

  • A1 / about 10 years ago / 1

    As of about a month and a half ago, Invensense release Embedded MotionDriver 6.1 which claims to be 9-axis solution. I am beginning to work on this, but will need some time. Anyone with any resources or input on this release be much appreciated!

  • Howard Chen / about 10 years ago * / 1

    I just wanted to say that the MPU9150 works great if you just want access to raw accelerometer, gyroscope, and magnetometer measurements to implement your own motion fusion algorithm on a micro controller. However, one of the main appeals of this chip and its sister, the MPU6050, is on-board data fusion. In short, Invensense (reluctantly) provided official support for on-board data fusion through their MotionDriver 5.1 library. The library is available through their developer corner, which is accessible through a free account.

    I received an e-mail from Invensense on July 9th saying that they have released their MotionDriver 6.0, capable of doing 9DOF sensor fusion. I was under the impression that the library enabled on-board 9DOF sensor fusion. However, I came to the conclusion that the 6DOF motion fusion was handled on the chip, and fused with magnetometer sensor data using a pre-compiled library provided in the MotionDriver 6.0 software. This library only works with TI MSP430 and ARM Cortex Chips. This is the same approach that Pansenti (now Richards-Tech) took to enable 9DOF sensor fusion through his MPU9150 Arduino Library but with probably a slightly different motion fusion algorithm.

  • Swift / about 10 years ago / 1

    Working with Example code. Using AtMega328p to communicate. Thank you SparkFun!

  • Sean M. / about 10 years ago / 1

    SparkFun: Please isolate VLOGIC (pin 8) so that a separate supply can be fed in if desired. Something like a separate set of decoupling caps with a zero-ohm jumper to VDD. That way the zero-ohm can be depopulated and a flying lead attached with a 1.8V line.

  • Member #266399 / about 10 years ago * / 1

    I'm having a issue with this IMU. I'm connected to a Rabbit RCM4300. The maximum I2C speed I can read is about 80Hz. Any read operation takes 5-6 milliseconds for the IMU to respond to. I have a pair of ADXL345 accels and I can read those at greater than 100 Hz so I don't believe it's an issue with I2C comms. I was originally reading directly from the registers and also tried setting it up for FIFO using the same configuration as in the Richards Tech IMU library (https://github.com/richards-tech/RTIMULib), and then modified to update at 100Hz (their notes mention they have run this at close to 1000 Hz) and am having the same issue (not even trying to read from the mag right now). I also have a MPU-6050 breakout board and I'm having the same issue with that.

    Any ideas why the MPU-9150/MPU-6050 is taking 5-6 ms to respond to a read request?

  • Member #471204 / about 10 years ago / 1

    I wired one of these up with a PIC18 and an XBee to transmit to a PC, communicating to the MPU-9150 with I2C. I made the code available in a google code project. Here is a link to the youtube video and that links to a tutorial that links to the google code project:
    https://www.youtube.com/watch?v=MJ3O1hsJ2XM

  • Member #430682 / about 10 years ago / 1

    Raspberry Pi user with the MPU9150 here with a question.

    I've been working with this and the MPU6050 for a long time now, probably around 4 different units so I'm sure the units are not defective as using different ones give me the same certain problem.

    I'm taking readings from the MPU9150 (magnetometer and gyroscope), hooked up by jumper wires, and I occasionally get an error "IOError: [Errno 5] Input/output error" at one of the lines of code that either attempts to read or write to the device. It's exactly what would happen if I disconnected one of the jumper wires and the device disappeared. It only happens if I'm moving the device, not if it's just sitting still and taking sample readings. The jumper wires look like they're on securely. Thanks for any help.

    • Member #471855 / about 10 years ago / 1

      Are you using the i2c.h library? I had similar problems using a Pro Mini. When I switched to Wire.h, they went away.

      • Member #430682 / about 10 years ago / 1

        I'm writing software from scratch to read data using python on the R-pi. The class I use for read/write is SMBUS.

        Thanks for the info.

  • Member #471855 / about 10 years ago / 1

    I created a simple sketch using a modification of Jeff Rowberg's MPU6050 library that reads the MPU9150 gyroscope, accelerometer, and magnetometer data using the readAcceleration(), readRotation(), and readMag() functions checking for data updates using the data ready status register. For now it is at https://github.com/kriswiner/MPU-9150_Breakout. I hope it will soon be pulled to the Sparkfun repository. The sketch demos: * How to display output at a rate different from the sensor data update and fusion filter update rates * How to specify the accelerometer and gyro sampling and bandwidth rates * How to use the data from the MPU9150 to fuse the sensor data into a quaternion representation of the sensor frame orientation relative to a fixed Earth frame providing absolute orientation information for subsequent use. * How to use the quaternion data to generate standard aircraft orientation data in the form of Tait-Bryan angles representing the sensor yaw, pitch, and roll angles suitable for any vehicle stablization control application. Running the sketch on a 3.3 V 8 MHz Pro Mini Arduino microcontroller results in filter update rates of between 145 and 200 Hz for the open-source Madgwick and Mahony sensor fusion algorithms, respectively. This is about the same as one would get if a 9 DoF sensor fusion algorithm were functional in the on-board Digital Motion Processor, which it is not. Not too bad for the little Pro Mini!

  • Member #515294 / about 10 years ago / 1

    I'm confused, does this chip have dmp or not? My reading is that it has dmp, but only 6 dof using the gyro and accelerometer. I've looked at the sparkfun, invensence, and some stm32f code that's on the internet. They all indicate to me that the same 6 dof dmp used on the mpu 6050 is on this chip. The data sheet indicates the same thing. I feel I wasted money on this item. Say it ain't so.

  • Member #148175 / about 10 years ago / 1

    Does any body notice that SDA and SCL are inverted in the scematic ? On the PCB the SDA is pin 9 and SCL is pin 8. On the schematic SDA is pin 8 and SCL is pin 9.

  • Dave1234567890 / about 10 years ago / 1

    Hi All: Is there any way to get either the delta t (time between measurements) or a time stamp for each data set (ie: XYZ gyro, XYZ Accel reading) out of the DMP as I need it for my application.

  • Member #507981 / about 10 years ago / 1

    Hi There, I was wondering If anyone else found large offsets in the Z axis of the accelerometer before calibration? The tolerance levels for the chips are supposed to be +/- 15% but I am getting offsets around 30%. The X and Y axis are more or less okay but the Z axis accuracy is horrible. Anyone found a similar problem? Thanks!

  • Col.Angus / about 10 years ago / 1

    Maybe someone can help... I'm having trouble reading anything else than 0's from the magnetometer... i2c bypass is enabled and I can read compass device id, but ASA registers come back and 0 (it's in fuse rom access mode) and hx, hy and hz are always 0. What am I missing?

  • Member #488917 / about 10 years ago / 1

    We are trying to connect the MPU-9150 break board to arduino micro and we have used the example code suggested in the sparkfun document to read the raw data. Our Vcc was always 3.3V. And our Baud rate is 9600. Here is what serial port monitor shows.

    a/g/m: 0 0 0 0 0 0 0 0 0 a/g/m: 0 0 0 0 0 0 0 0 0 a/g/m: 0 0 0 0 0 0 0 0 0 a/g/m: 0 0 0 0 0 0 0 0 0 a/g/m: 0 0 0 0 0 0 0 0 0 ...

    When we use the code suggested in Arduino playground: http://playground.arduino.cc//Main/MPU-9150 Here is what we get:

    -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 36.50 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...

    We really have no idea where we are wrong. any comment would be appreciated.

  • ians / about 10 years ago / 1

    Does anyone know how to sync the clock on this?

  • Joel_Q / about 11 years ago / 1

    Does anyone know how much this IMU weighs? (preferably in grams)

  • WhiZZ / about 11 years ago / 1

    Forgive my ignorance, but can anyone give comparison between the positional accuracy of 6 axis (without magneto) vs 9 axis? I plan to built motion capture glove (hand tracking), but I can't quite grasp whether absolute yaw (i.e magnetometer) is indeed essential for hand tracking. I'm going to use it for gripping VR objects. Thank

    • Member #471855 / about 10 years ago / 1

      Take a look at https://github.com/kriswiner/MPU-6050/wiki/Affordable-9-DoF-Sensor-Fusion for a comparison between 6 DoF and 9 DoF sensor fusion results.

  • Member #5588 / about 11 years ago / 1

    Does anyone have an interconnect schematic for this breakout and a ATMEGA 328P (with arduino boot loader)?

  • Why on earth is the Magnetometer X and Y axis flipped from the Accelerometer and Gyro's axis?

    • Member #471855 / about 10 years ago / 1

      While it is conventional for the accel/mag z-axes to be opposed, the x- and y-axis orientations would be better aligned. It is a choice that Invensense made; it is only a minor inconvenience for 9 DoF sensor fusion.

  • Akshar / about 11 years ago / 1

    I am having problems communicating the MPU9150 to the Arduino Micro. I am using a logic level converter as the Arduino runs at 5V while the sensor runs at 3.3V. I read in some places that I might not need it but I thought it's just better to have one in place.

    Logic Level Converter - https://www.sparkfun.com/products/8745 MPU9150 IMU Sensor - https://www.sparkfun.com/products/11486 Arduino Micro - http://arduino.cc/en/Main/arduinoBoardMicro

    Here are my connections:

    ARDUINO Logic Level Converter MPU9150 5V HV N/A 3.3V LV N/A GND GND (Both) N/A A4 Chan1 Tx SDA A5 Chan2 Tx SCL GND N/A GND 3.3V N/A VCC

    I also have two 4.7k pull up resistors on the A4 and A5 on the Arduino connected to 5V and two 10k pull up resistors on the SCL and SDA on the IMU connected to 3.3V.

    I have NOT connected anything on the IMU INT or AD0 pins.

    I am running a standard I2C scanner code found here: http://playground.arduino.cc/Main/I2cScanner

    My Arduino is unable to talk to the IMU I also tried this config with a friends IMU (which was confirmed to work) and it did not work with that either.

    Is there something I am missing here? Please advise.

    • M-Short / about 10 years ago / 1

      Hi, 2 things I noticed right away. The first is that the board already has pull-up resistors, adding your own is likely to make things worse. Also, keep in mind that the Arduino only pulls the pin low, otherwise the pins are pulled high by the pullup resistors meaning the Arduino never pulls the pins high so you probably don't need a level shifter. Second is that the I2C lines are not on A4 and A5 on the Micro, they are on D2 and D3. Make sure you have the board connected to the correct pins. If you still have questions feel free to email techsupport@sparkfun.com

  • Member #405386 / about 11 years ago / 1

    I managed to make the example code work on Arduino duo board. However, there is drifting in Quaternion readings. Anybody got this problem?

  • Member #406195 / about 11 years ago / 1

    Could someone tell me how to make vibration noise reduction filter for this IMU, and how can i get the more accurate data possible

    • Member #471855 / about 10 years ago / 1

      You can always get more accuracy via proper calibration of the sensors, including the gyro and accelerometers. Proper calibration means readings of zero at rest on the gyros to +/-0.1 degree/s and accelerometer to +/- 1 milli-g. This is easily achievable with this sensor. Magnetic calibration is less straightforward since it is environment dependent. But simple averaging of min/max values for each axis should get you absolute accuracy of yaw, pitch, and roll to within two or three degrees. Here is an example of using the MPU-9150 FIFO for gyro and accelerometer calibration: https://github.com/kriswiner/MPU-9150

  • Just to clarify: this board does not need a logic level converter.

    Forgive me if I'm wrong, but it works fine on the Uno's 3.3V

    • M-Short / about 11 years ago / 1

      This board runs at 3.3V, so if you are connecting it to a 5V device you will want a logic level converter. The Arduino Uno runs at 5V, not 3.3V so you will want a logic level converter to connect this board to the Uno

  • Member #442677 / about 11 years ago / 1

    I'm considering purchase of this breakout, but I have two questions:

    • as I'm more .Net, rather than micros, developer, I consider it for usage with .Net Gadgeteer mainboard, as it's I2C, seems natural to conect it to Gadgeteer I socket, but what about COUT, CIN, AD0, FSYNC, INT, shall they be just left unconnected or connected to some of the pins left available in socket?

    • another thing, is it possible to calculate, with this breakout, speed and direction of movement over time? Calculating it on my micro, or doing it somewhat automagically using DMP?

  • Member #428576 / about 11 years ago / 1

    Hi guys, Recently I buy the MPU9150 boards and want to get raw data from the on-board acc, gyro and compass. However the problem is that I am able to read acc and gyro data through primary I2C bus but cannot get any data from compass. Based on the datasheet, I first enabled the I2C bypass mode and then set the compass to single measurement mode. Also I have tried all slave addresses of magnetometer from 0x0C to 0x0E and tried to read many magnetometers' registers like WIA, INFO and HXL to HZH, but the compass never responded. Then instead of connecting to primary I2C, we tried to read magnetometer through Aux I2C bus(ESD, ESC), but didn't work. Then I used another MPU9150 board and tried the above methods again, but still compass never worked. Based on the above attempts, I was wondering that maybe something is missing in the compass setting. Our part of code related to magnetometer is shown below. Could you guys provide any suggestion? It's really in hurry! Many thanks for your kind help!

    //Read Mag writeByte(add_slave, MPU6050_RA_USER_CTRL, 0x00); // clear I2C_MST_EN bit to drive Aux I2C bus line by the primary I2C bus msDelay(10); writeByte(add_slave, MPU6050_RA_INT_PIN_CFG, 0x02); //Enable I2C bypass mode to allow MCU to access Mag directly msDelay(10); writeByte(MPU9150_RA_MAG_ADDRESS, MPU9150_RA_MAG_CNTL, 0x01); //Enable Mag to single measurement mode msDelay(10); readBytes(MPU9150_RA_MAG_ADDRESS, MPU9150_RA_MAG_XOUT_L, 6, buffer2);

  • SVFeingold / about 11 years ago / 1

    This is a nice sensor, but...

    Sparkfun: Holy hell, are you ever going to do anything about your abso-ludicrous prices? This chip costs $17 straight from the manufacturer in single-unit quantities. That means that this tiny, 2-layer, simple breakout board (minus chip) costs $33!!! Even with (extremely minor) assembly THAT IS ABSOLUTELY INSANE. That is how much it costs per unit to pop over to Advanced Circuits and order several 2 layer boards with silkscreen and soldermask.

    I really am having a hard time even comprehending the psychotic prices that you charge for breakout boards, especially this one. You seem to trying to demonstrate that the more expensive/complex the IC, the more expensive the breakout board must be? I hope you change your ways before people start to realize how ridiculous that is and leave you for your competitors.

    • M-Short / about 10 years ago / 2

      Keep in mind its probably closer to $17 for the chip, $13 for the board and assembly, and $20 to keep the lights on. I wish we could sell boards at cost, but that's not possible. You forget the engineer who designed the breakout, techsupport, who answers questions, IT who builds our website, production who assembles and tests each board, packaging who put these in little antistatic bags, shipping who boxes everything up, rent, electricity, etc. It is almost always going to be cheaper for you to design a PCB, order the parts and solder them on, and for some cases this is a great idea. But sometimes its nice to have someone else do the design work, solder the tiny pins, test the design as well as the individual board, and provide support in case it doesn't work or you have questions about it. We try to find the sweet spot between making our boards as cheap as possible, and not paying our employees. Its not always an easy decision to decide the retail costs of a board while balancing that fine line, but we do try.

    • Member #1230 / about 10 years ago / 1

      Yeah, the price might be a little high...BUT NEVER POP ANYTHING OVER TO ADVANCED CIRCUITS. Those guys will charge you 10x what sparkfun might charge. Advanced Circuits has not done anything to help me out, unless your design is fully perfected for manufacturing, be careful! They ripped me off hard, and look around on the net...they rip LOTS of people off.

    • giantsfan3 / about 11 years ago / 1

      50 bucks for a breakout board is a little crazy (as fantastic as the MPU-9150 is). But as far as Sparkfun prices go, I think this particular board is an exception rather than the norm; wouldn't you say so? For example, some Sparkfun breakout boards are even cheaper than the original manufacturer-provided evaluation boards (granted an evaluation board has a bit more functionality).

      • SVFeingold / about 11 years ago / 1

        Yep that's true. I felt slightly bad about this because there is a lot of stuff on here that's reasonably priced. But also a lot of stuff that is inexplicably way overpriced. I guess they have to make money somehow. Though I don't think that Sparkfun has any special difficulties that other such suppliers don't have that account for the price. So it's still confusing. Unless they assemble each board by hand for some reason.

        • Member #182792 / about 11 years ago / 1

          the 9150 is somewhat difficult to solder by hand though an automated process would simplify this a bit. Small quantity assembly could be a bit expensive. And if demand is high (but not TOO high) with the price 'as-is' you leave the price where it is. Business 101.

  • Can anyone give a short summary of the challenges related to this board? Pros and cons vs. buying and assembling separate sensors?

    • giantsfan3 / about 11 years ago / 1

      Well, the main advantage of the MPU-9150 is that as a system-on-chip combining all three separate sensors (accel, gyro, and mag), it makes it possible to do sensor fusion, which shifts the computation away from the external microcontroller and presumably should provide a more accurate result.

      • bdwyer / about 11 years ago / 1

        But...Invensense does not provide any information on using the onboard DMP, so basically you are buying a 3axial accelero/gyro/magneto - meter all on 1 pcb. Having them all on one PCB as close together as possible reduces the error of motion computations quite considerably. My idea of 'buying separate sensors' means they are all on separate PCBs and must be aligned as best as humanly possible (not very hopeful in my case). This would most likely end up costing you more than purchasing one which has integrated them already onto one pcb.

        • giantsfan3 / about 11 years ago / 1

          Right. However, note that Pansenti's library (linked in earlier comments) provides sensor fusion using the onboard DMP as far as I'm aware.

          • Pansenti / about 11 years ago / 1

            That's true for the accels and gyros anyway - mag fusion is done in software. However, even if the DMP isn't used, it's still a very compact hardware solution. Sometimes it does feel more like fighting against the DMP than with it and there are many situations where it's better to just get the sensor data and perform the fusion in software externally.

  • Member #432904 / about 11 years ago / 1

    Hi! Im working with MPU-9150 and have its working well on an Arduino Nano. Im using a library package "MPU9150Lib-master". Its a large package containing many libraries but it is working well. I`m in need of using two 9 degrees of freedom on one Arduino Nano board. Is that easy to accomplish? I know that wire library is used for I2C buss communication but it seams hard to find a solution because so many libraries are involved. Can any one please help me manage this in a pretty easy way? Regards Marcus

    • Pansenti / about 11 years ago / 3

      We've just updated the MPU9150Lib library and it now supports dual MPU-9150s.

      • giantsfan3 / about 11 years ago / 1

        Hi Pansenti, Thanks for all the constant development on this library. Also, just curious since you added the dual support: What kind of applications are there that demand using multiple 9DOFs on the same board? (Wouldn't they both have roughly the same output if two MPU-9150s were on the same PCB?)

        • Pansenti / about 11 years ago / 1

          The more likely case is where the IMU chips are mounted on separately moving parts and they connect back via flexible cables. In this way you can calculate the relative orientation of the parts. However, there could be a reason for multiple IMUs on the same pcb and this concerns accuracy and noise. It is possible to combine the outputs from several IMUs and get much more accurate results (at least as far as the gyros and accelerometers go - magnetometers will always be a pain).

          • bzerk / about 11 years ago / 1

            This is just awesome. I'm glad to see you really taking DMP usability to the next level. I've had my head up my ass, still using my original hack, and I never released my dual MPU solution. Your work is especially beautiful because it actually uses the official eMPL code. Kudos on doing it right. I'll be using your stuff from now on.

    • Pansenti / about 11 years ago / 1

      The MPU9150Lib library wasn't written for multiple devices on the same processor as we didn't know if anyone else was doing this. The MotionDriver part of the library uses global structures and so needs modification for multiple devices. In theory you can put two MPU9150s on the same I2C bus but we have had problems with that although some users have reported success (take a look at our blog http://pansenti.wordpress.com for updates). Using a version of the code written for a different system we have successfully used four of these via an I2C switch. If there's interest we might do a future release of the library with multi-IMU support.

  • Member #419204 / about 11 years ago / 1

    Somehow I made it work with Raspberry pi. http://veshnu.com/blogs/raspberrypi_mpu9150. But there is a lot of noise. How do u suppress it?

  • Member #397741 / about 11 years ago / 1

    I'm interfacing this 9150 to a TI Stellaris Launchpad, which has a LM4F120. I'm trying to set the pull-ups for best results. This is my first time working with I2C buses and open-drain lines. I wasn't sure but the 10Kohm pull-ups on the breakout are not sufficient. And, when I engage the LM4F120's internal pull-ups, using either the weak or regular (I can't fine what the real difference is) I don't get good enough results to read data consistently. Through experimentation and use of a DSO, I've come upon a value of 500ohms place externally, i.e. essentially in parallel with, the 10K and I get what appears to be a very nice waveform on both data and clock. So the effective pull-up is a little lower than 500ohms. Any other experience out there on this? Does this seem right? Any suggestions on this process or else? Thanks

  • Neuralian / about 11 years ago / 1

    Pansenti over at

    http://pansenti.wordpress.com/2013/03/06/an-arduino-driver-for-the-invensense-mpu-9150-what-fun/

    says they have an Arduino driver for the 9150 that they will consider making available to the Sparkfun community "if there is enough interest". I suggest that you wander over that way and express interest.

  • Member #360267 / about 11 years ago / 1

    When I run this example code, the gyro/accel work fine, but the magnetometer does not. I2Cdev reports that 0 bytes are read from the magnetometer. Any idea why this might happen? I've been checking and double-checking connections and code all day, and I'm all out of ideas.

    • Be sure to use my modified MPU6105 library found here, not the one off of I2Cdev.

      • Member #360267 / about 11 years ago * / 1

        Yeah, that's the code I've been using. When I run it as-is, the magnetometer values look like they are working at first glance, but then I realized that what is displaying is the old data in the buffer, and the magnetometer is not actually sending anything. The magnetometer output displayed exactly matches the accelerometer data because they share the buffer.

        I also can't read the WIA register which should return 0x48. I just get zero.

        • The first version of the code had that bug. Be sure you are using the most recent version of the Arduino sketch. I am testing the code now and the mag is working.

          Also keep in mind the axis labels for the mag are different than the accel and gyro.

          • thehammstr / about 11 years ago / 1

            Can anyone comment on the long delay built into the magnetometer reading in the getMotion9() function call? is it really necessary to wait 5 ms before every call to the mag? Can it be programmed such that the gyro/accel reads it as an I2C slave like on the old IMU3000 ADXL345 combo board? I've looked through the manuals but so far have come up empty handed. I'm trying to use this on a quadrotor on a 10ms control loop, and that delay is killing me. Thanks!

            • Member #182792 / about 11 years ago / 1

              getMotion9 has bugs in it (I commented earlier). One of the things it's doing wrong is every! single! call! enables! the! alternate! I2C! communication!. If you do this ONCE during your initialization, you shouldn't have to do it again. (set bit 1 in that one control register, basically). It also sets the REST of the bits to zero, which is a bit ignorant of anything ELSE you might have configured. THEN, of course, it enables the magnetometer readings. I'm not convinced that THIS step needs to be done every! single! time! either. So you might experiment with this, write your own overloaded getMotion9 call (I did, change 'private' to 'protected' in the class def first, another complaint I made already). And don't forget to fix the byte-swap on the magnetic data (it's LOW endian, not high endian - see the register docs - everything else is high endian, though).

              • Member #471855 / about 10 years ago / 1

                Agree about the bypass enable. Once is enough. And ensure the correct byte order, please. It turns out that the AK8975A does not have a continuous read mode. It only has power down and one-time read. So, sadly, you have to put the device in one-time read mode every! single! time! you want to read the data registers, after which it automatically returns to power down mode. Clunky? Yes. This 'problem' is fixed in the MPU-9250 whose AK8963 has two continuous read modes, one at 8 Hz and one at 100 Hz.

  • robot_logic / about 11 years ago / 1

    I finally got the i2c working on a Xmega128a1U but I am trying to understand how I can read all 9 value at the same time? By same time I mean that the values were all clocked in from the ADC's at the same time. So I don't want values for another time interval. I will be reading the sensor data one right after another.ax->ay->az->gx->gy->gz->mx->my->mz(unless there is a better way please point out my errors)

    • Member #369123 / about 11 years ago / 1

      If you look at the burst read sequence in the documentation, it seems like if you continue to transmit ACK (rather than NACK to terminate the communication), the IMU should keep transmitting registers with increasing address.

      • robot_logic / about 11 years ago / 1

        True but the mag and accel are not right next to each other

  • LooseTooth / about 11 years ago / 1

    I love the chip though I have not tried Sparkfun's breakout board. I have it as a part of a autopilot that I have developed. The DMP stuff was also interesting to me, and I joined the developers site and so forth, but found it easier to write my own sensor fusion stuff. I would love to pit my own 7 state Kalman against the MPU algorithms on my shaker table, however.

    • LooseTooth / about 11 years ago / 1

      Man, is the mag junk though compared to the Honeywell units. I had to reconfigure my filter from some of the earlier breadboard mechanizations. I have flown a ton of competing MEMs sensors on my breadbord over the last few years. The 9150 is the one that made it to PCB however.

  • Member #399627 / about 11 years ago / 1

    Yes, please please please do a tutorial!!!

  • giantsfan3 / about 11 years ago / 1

    Another request for either code/tutorial/example of using the DMP!

  • Syndicate / about 11 years ago / 1

    I'm having trouble understanding the app notes, and or how to read acceleration data from this device. Is this a simple request acceleration, response = acceleration data? How do you use the DMP?

  • gumush / about 11 years ago / 1

    Yes , but when trying dmp example it has no mag. and it has a drift...

  • Member #374681 / about 11 years ago / 1

    I'm trying to connect this to an Arduino Uno. Here's what I've done but it's not working:

    GND - Arduino GND
    VCC - Arduino 3.3v
    SDA - Arduino SDA (dedicated pin or Analog 4)
    SCL - Arduino SCL (dedicated pin or Analog 5)
    INT - Arduino digital pin 2
    

    Everything else is disconnected. I'm just trying to get the sample arduino code to show sensor reads. With this configuration it's just returning "connection failed" and 0's for reads. Anybody know what's wrong?

    • Beyo / about 11 years ago / 1

      This device wotk with logic level of 3.3v (VDD), Arfuino uno work with 5v. You need logic level convertor and not connect the SDA and SCL direct to arduino uno.

  • robot_logic / about 11 years ago / 1

    does this chip work with 3.3v logic? datasheet says (VDD = 2.375V-3.465V, VLOGIC= 1.8V±5% or VDD) I'm guessing this means 3.3 logic(if VDD=3.3) or 1.8 logic.

    • Beyo / about 11 years ago / 1

      It's work with 3.3v (VDD) logic. the VLOGIC pin is attach to VDD.

      • rasko / about 11 years ago * / 1

        If there are no option to adjust the VLOGIC on your breakout board, then why do you write this on the list of features? I would much rather be able to use different voltage levels than read or change the address pin on-the-fly. :)

  • Chippey / about 11 years ago / 1

    Any thoughts on making an SPI version of this?

    • robot_logic / about 11 years ago / 1

      The manufacturer of the chip is making one Q@ 2012 MPU-9250

  • Member #322420 / about 11 years ago / 1

    hi,

    I am trying to connect this sensor with Ardupilot Mega, can someone help me with this?

    Thanks in advance

  • Korken / about 11 years ago / 1

    Are SparkFun going to sell these ICs separate soon? I'd really like to have this guy in a project but needs it on my own board. Or is there another supplier?

    • According to their website, Invensense will sill single qty samples. CDI also has this part in stock http://www.cdiweb.com/ProductDetail/MPU9150-InvenSense-Inc/73953/

  • Member #39238 / about 11 years ago / 1

    Straight up questions- -does this sensor fusion stuff mean the chip puts out a stable yaw/roll/pitch referred to the local magnetic field vector? At the least can I get a stabilised roll/pitch referred to the local gravity vector? -is there a licence fee to be paid to get the sensor fusion stuff on board? If so how much -whats the rigmarole in getting sensor fusion onto the chip...can it come pre-fusioned, does each unit have to undergo a programming process? -with the sensor fusion....what's the update rate?

    reason I ask is I've got a product that's currently got rate sensor/mag/acc sensors in three chips and logs all three. A post processing program downloads the sensor data and does the math. Two problems there....my math is buggy and I'd prefer to have it just working out of the chip and the other is that all the raw log data takes up memory....logging the yaw/roll/pitch only would save a lot.

    Phil

    • Member #471855 / about 10 years ago / 1

      No. Yes. No license fee, but its painful to use. Update rate is fixed at 200 Hz on the DMP. There is one platform that Invensense claims is currently supported for 9 DoF sensor fusion but the magnetometer data does not make it into the DMP so this solution must be done in software. Invensense is going to announce 9 DoF solutions that run on a variety of microcontrollers at their upcoming Developer's Conference June 11-12, 2014. Until then, the DMP will put out stable 6 DoF fused Roll and Pitch, and pretty stable Yaw with drift rates of ~0.5 degrees per minute. True 9 DoF sensor fusion must be done on the microcontroller until Invensense offers user-friendly 9DoF sensor fusion on their DMP. This is actually pretty straightforward using open-source sensor fusion filters. Rates of ~150 Hz can be achieved with a 3.3 V 8 MHz Pro Mini, and more than 1000 Hz on a Teensy 3.1. See https://github.com/kriswiner/MPU-9150.

    • Member #34135 / about 11 years ago / 1

      In theory, yeah, but in practice, I don't see anything in the documentation that even hints at Euler angle output. Someone posted a github link about with code that works with the 6050, but it probably needs some tweaking to work with this new chip.

  • Amundsen / about 11 years ago / 1

    5V VDD compatibility would have been nice...

    • This is the bare bones breakout board, simple as it can get. If you want 5V compatibility, you will need a regulator and level shifter.

  • singerng / about 11 years ago / 1

    How would you calculate velocity with this board?

    • Integrate acceleration over time to get velocity.

      • singerng / about 11 years ago / 1

        Is this possible with an Arduino?

        • Aditya / about 11 years ago / 2

          This is possible with any microcontroller as long as you can either control the loop time or get the current system time (like http://arduino.cc/en/Reference/millis or something). You find out how much time has passed since the last read. What the acceleration is currently. And then add the velocity increase/decrease in the last iteration of the loop to a "velocity" variable. You are of course assuming that the acceleration is constant between iterations of loops. This comes from v = v0 + at.

          Code might be clearer.

          void setup() {
              lastMs = millis();
          }
          void loop() {
              accel = readAccel();
              ms = millis();
              deltaMs = ms - lastMs;
              velocity += (accel * (deltaMs / 1000));
              lastMs = ms;
          }
          

      • awww I was logging in to respond!

  • KirAsh4 / about 11 years ago / 1

    Any Arduino code samples?

  • Toborguru / about 11 years ago / 1

    Is there a reason why you list: VDD Supply voltage range of 2.4V–3.46V; VLOGIC of 1.8V±5% or VDD

    When the data sheet says: Supply Voltage, VDD -0.5V to +6V VLOGIC Input Voltage Level -0.5V to VDD + 0.5V

    • MikeGrusin / about 11 years ago / 3

      Those numbers from the datasheet are the "absolute maximum ratings" beyond which the chip will be damaged, not the operating numbers (e.g. you can't put -0.5V into VDD and expect it to run).

    • HungryMaggot / about 11 years ago / 1

      datasheet speaks about the chip itself, sparkfun speaks about the breakout board

  • tz / about 11 years ago / 1

    The datasheet doesn't seem to describe the registers, settings, etc, only how to talk with them over I2C.

    • You need to check out: http://www.invensense.com/mems/gyro/documents/RM-MPU-9150A-00.pdf I'm sure the Spark folks will post this in a bit

      • nixpulvis / about 11 years ago / 1

        Sparkfun, you guys should add this link to the description.

        • xkcdFan1011011101111 / about 11 years ago / 3

          sparkfun, please add the register map document to your list of documents in the description

  • We got this breakout and started testing it, namely the magnetometer. We compared the magnetometer in this chip with the HMC5883. You can check it out on our blog.

    We also have performed a simple correction to the Example Code, that Sparkfun links here, in order to read the correct magnetometer values.

    Feel free to give us your opinion and comments!

    Cheers

Customer Reviews

4.8 out of 5

Based on 6 ratings:

Currently viewing all customer reviews.

5 of 6 found this helpful:

Well designed part.

It's easy to use. Everything worked after only a few minutes of effort. I have gotten onto another extensive project, so have not applied it to anything yet, but am looking forward to getting back to it. There are certainly some interesting possibilities here.

Solid performer

I own a bunch of these guys and use them for everything from digital protractors to experimental UAV control.

The breakout is good with decent mounting and the obvious breadboard friendly pins. The ability to change the I2C address is nice too.

This IC isn't quite deprecated, but it will be soon. Just beware if working on an IMU system that the new variant of this chip is able to actually muster the onboard fusion which may negate your need for an MCU.

A great board for the prie

This unit is a great deal at its cost. There are a few complaints I have against it but nothing major enough to change my rating by much. The documentation is a bit poorly organized and it was a bit of a headache to get everything hooked up. It is two different IC's on a single chip. So there are two i2c addresses. One for the magnetometer and one for the gyro/accel. Once I figured that out it was mostly smooth sailing.

Great Product! One glitch, but not certain it is user or hardware error.

I am using this board to collect orientation data for a school quadcopter project of mine. So far, this board has served me very well! I am having one small issue where the yaw and pitch data are nonsensically skewed when the board is rotated past 45 degrees on the y axis, but I am still unsure if this is a hardware problem or a problem with how I am interpreting the DMP raw data.

All in all, a good product for this price!

Excellent price/quality

Reliable, easy to use and a good Reg Map doc. I bought my 1st one some years ago and was great. With the price fall since the MPU-9250 came out it's a must have.

As a newb this is the best

The documentation and libraries already available about this board are so useful.