Hey, I’m quite a new at electronics, Im working with a group using the IMU3000 breakout. We tried figuring out ourselves how to connect the IMU3000 with our arduino Uno, but we failed to do so…
This IMU is a 3.3V part. Your Uno is 5V. Any direct connections will fry the IMU. You will need a 3.3V regulator and bi-directional I2C level converters to connect it up. Otherwise, its pretty simple, power (Vcc), ground (GND), I2C clock (SCL) and data (SDA). Other pins not needed unless you want the I2C passthough and the interrupt pin from the IMU.
I2C level shifting is not trivial. You might be better of switching to a processor that runs at 3.3V. Some Arduino’s do.
At first we wanted to use MOSFET transistors, but we discovered that you can do this internally on the arduino.
We went into the arduino libraries, and disabled the internal pull-up on the analog pins we needed to use, which means it wont be pulled up to the 5volts thereby saving work and components.
Great idea! I had forgotten about the disable-able pull ups. So I assume you used external pull ups to 3.3V and got it fixed.
This works as long as your I2C bus is 3.3V parts or your higher voltage parts respond properly to a 3.3V signal (many do). Just can’t mix any lower voltage parts unless they are 3.3V tolerant.
I have a question regarding the results we get from our IMU. When we first plugged it in, we stupidly plugged the arduino to 5V for a short amount of time. Could this have damaged the chip, so that the readings could be way off?
Our problem is that our output starts at 0degrees, then slowly goes to 360degrees and then starts over. We can’t quite understand why, it may be the chip drifting a lot and the “deadzone”(threshold piece of the code) that should ignore small changes doesn’t work.
When you say slowly, are you talking about a few seconds or minutes? Any bias will integrate to cause a slowly increasing or decreasing heading angle.
At rest, a gyro will rarely give a zero result. It will have a bias that you will need to subtract. Also note that the bias is often a function of temperature and previous shocks to the unit. It may be needed to provide a calibration mode where you tell the unit it is not moving, capture the reading from the gyro and then subtract that value from it for then on.
By using this sketch, the gyro isn’t even responding to when we move it, so it’s just the code not working properly with the IMU. Its about 30seconds-1minute.
We know that it’s a digital interface, but it has to be connected to the analog pins? can you explain this a bit more thoroughly??
The data is transfered across the I2C interface, using the SDA and SCL pins. You’ll need a different sketch, one that reads data using the I2C interface not using the analog/digital converter. The wiki will do a better job of explaining how the I2C bus works than I will.
You still need Vcc and ground (GND) and the above SDA and SCL connections. You can ignore the auxilliary pins (AxSCL, AxSDA) and the INT pin. The SDA and SCL are connected to your Arduino as follows.