LSM9DS1 angular speed accuracy

As a quick experiment, I wrote a small sketch to display the angular velocity on the Z axle, with the board (Nano 33 BLE) and a small TFT spinning on the platter of a record player.

The record player speeds were previously checked using a laser tachometer.

This is what i got:

@33.33 rpm -> +-29 rpm
@45 rpm -> +-39 rpm

So, the reported speeds were about 86-87% of the real speeds.

Any idea of why this may happen ?

Post the code, using code tags.

Any idea of why this may happen ?

Yes, it needs calibration. If you keep the board still, you'll probaly find that the output is not zero either.
The magneto meter is even worse. It needs recalibrating after every little change of metal or screw near the board.

I wrote a new version of the LSM9DS1 library that includes setting offset and slope.
https://forum.arduino.cc/index.php?topic=686002.0

By the way, I like your testing method. :slight_smile: Turntables are usually pretty constant and accurate. So ideal for a household testing method.

This is actually the perfect axample why I wrote the way I did. You found a method to calibrate the slope. You can measure the offset independently by holding the sensor still.

If you want to use the library corrections, the code would be something like

#define REVSPERMINUTE 60.0/360.0
IMU.gyroUnit = REVSPERMINUTE;

Assuming that the measured value was the same on the X and Y axis, Z not measured

float measuredSlope= (45-33.33333)/(39-27);
IMU.setGyroslope(measuredSlope,measuredSlope,1);

Measure the Offset by holding the sensor still.
Suppose the outcome is X0, Y0, Z0

Setting the offset goes by
IMU.setOffset(X0, Y0, Z0);

That's it.

The setOffset procedure corrects for the changed value of the unit and for the fact that you have already calibrated the slope. It does not matter in which following order you do the two calibrations, but if you do them combined you must set the offset first.