Creative Commons images are CC BY-NC-SA 3.0

34.95

added to your
shopping cart

quantity
In stock 165 in stock
34.95 1+ units
31.46 10+ units
27.96 100+ units

Description: The 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, and 3-axis accelerometer. The part is offered in a 4x4x1mm LGA package and is upgrade-compatible with the MPU-6050 integrated 6-axis MotionTracking device, providing a simple upgrade path and making it easy to fit on space constrained boards.

Features:

  • 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

Documents:

Comments 130 comments

  • 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!!

    • 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.

      • 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

      • 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.

        • 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!

          • 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.

            • The old Pansenti GitHub repos are indeed vanishing but MPU9150Lib and linux-mpu9150 are now available at https://github.com/richards-tech/MPU9150Lib and https://github.com/richards-tech/linux-mpu9150. There’ll very soon be a new and improved version intended for the Raspberry Pi called RTIMULib.

              • RTIMULib is now available at https://github.com/richards-tech/RTIMULib. There are also a couple of other related apps in the Syntro repos: https://github.com/richards-tech/SyntroApps/tree/master/SyntroNavView (an OpenGL based 3D visualization tool) and https://github.com/richards-tech/SyntroPiApps/tree/master/SyntroPiNav (the Syntro wrapper for RTIMULib). The old linux-mpu9150 uses the MPU9150’s DMP while RTIMULib uses its own Kalman filter for sensor fusion. Measured results show 7% CPU utilization at 100 samples per second with a maximum of 1000 samples per second and 30% CPU utilization.

  • 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.

    • 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.

      • 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.

        • 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!

      • 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.

        • 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.

          • 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.

            • 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.

            • 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)

  • 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.

    • 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.

      • 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

  • 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…

    • 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.

  • 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.

    • 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.

  • 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.

      • 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.

  • 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.

  • 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.

  • 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.

    • 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.

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

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

            • 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.

              • 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.

                • 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

                  • 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.

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

  • 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..

    • 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!

      • 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..

  • Any update on getting DMP with i2c ?

    • Check out i2cdevlib. I don’t think there is support for the 9150 yet, but you could use the DMP code for the 6050 as a starting point.

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

  • 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!

  • 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.

  • 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.

  • 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.

  • 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!

  • 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?

  • 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.

  • Does anyone know how to sync the clock on this?

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

  • 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

  • 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?

  • 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.

    • 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

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

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

  • 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

    • 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

  • 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?

  • 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);

  • 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.

    • 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.

    • 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.

    • 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).

      • 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.

        • 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?

    • 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.

      • 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.

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

          • 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.

  • 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

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

      • 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?)

        • 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).

          • 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.

    • 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.

  • 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?

  • 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

  • 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.

  • 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.

      • 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.

          • 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!

            • 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).

  • 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)

    • 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.

  • 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.

    • 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.

  • Yes, please please please do a tutorial!!!

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

  • 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?

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

  • 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?

    • 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.

  • 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.

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

      • 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. :)

  • Any thoughts on making an SPI version of this?

  • hi,

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

    Thanks in advance

  • 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/

  • 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

    • 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.

  • 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.

  • How would you calculate velocity with this board?

    • Integrate acceleration over time to get velocity.

      • Is this possible with an Arduino?

        • 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!

  • Any Arduino code samples?

  • 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

    • 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).

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

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

  • 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


Related Products