adafruit / Adafruit_Learning_System_Guides

Programs and scripts to display "inline" in Adafruit Learning System guides

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

feather_sense_sensor_demo.ino (using Adafruit_LIS3MDL.h)

MdeLv opened this issue · comments

commented

Board: FeatherSense
Magnetometer : LIS3MDL.
SW: feather_sense_sensor_demo.ino
Library: Adafruit_LIS3MDL.h

The sw (.ino) computes with this board and library a maximum "magnetic field" of approx 2,000 uT, while this should be 20,000-40,000 uT depending on the orientation of the board/sensor (horizontal towards North, vertical).

You read x, y, z which are raw measures:
Adafruit_LIS3MDL.h#L106

int16_t x,     ///< The last read X mag in raw units
      y,         ///< The last read Y mag in raw units
      z;         ///< The last read Z mag in raw units
  float x_gauss, ///< The last read X mag in 'gauss'
      y_gauss,   ///< The last read Y mag in 'gauss'
      z_gauss;   ///< The last read Z mag in 'gauss'

While you use x, y, z in uT:
feather_sense_sensor_demo.ino L60

  lis3mdl.read();
  magnetic_x = lis3mdl.x;
  magnetic_y = lis3mdl.y;
  magnetic_z = lis3mdl.z;

See feather_sense_sensor_demo.ino#L101

  Serial.print("Magnetic: ");
  Serial.print(magnetic_x);
  Serial.print(" ");
  Serial.print(magnetic_y);
  Serial.print(" ");
  Serial.print(magnetic_z);

1/ Can you check how you came to write mag field unit in uTesla?
2/ How do you convert raw sensor measures (that are used) to measures in uT (while measures are in Gauss, according to the ST technical documentation and according to the library)?

In fact, it appears that the .ino program should simply use x_gauss, y_gauss, z_gauss instead of x, y, z, and should convert measures from G to uT (* 10E-4 * 10E6 i.e. * 10E2 uT).
I'll check that these two changes provide realistic as well as accurate measurements.

Anyway, the .ino program needs to be updated to display measures in uT.
Waiting for your feedback.

PS: about the calibration procedure I was looking for, I can see in the data sheet that "the sensor is factory calibrated" and does need to be calibrated. While there is also a "1-point or 3-point tumble sensor calibration"... This information about the sensor needs to be clarified.

commented

Two changes done.
Now "magnetic field" measures in uT are more realistic with known local mag field.

But :

1/ measures are still inaccurate ( ex: up to 70 uT for vertical mag field when 40 uT expected)
I can see only the solution of "1-point or 3-point tumble sensor calibration".
-> What is your experience with that calibration procedure?
Can we gain accuracy to reach 40 +/-5%? Or is this magnetometer a toy?

2/ measures are moving within a +/-1 uT range while sensor is not moving and mag field is not varying .
Using a rolling average on 2-3 s may stabilize the value displayed at the price of less reactivity when moving quickly.