Faisons simple : la boussole électronique CMPS10 contient des accéléromètres et des magnétomètres en technologie MEMS.
Cela permet d’avoir un cap (nord magnétique) mais également l’orientation. Contrairement à d’autres modèles que nous avions utilisé (HMC6343), la valeur lue par la liaison I2C pour la direction ("bearing" en anglais) n’est pas directement compensée.
Il est donc nécessaire de faire un petit algorithme que voici :
int angle(void)
{
int bear = compass.bearing();
int pitc = compass.pitch();
int rol = compass.roll();
if (bear >= 180) {
return bear - pitc - (rol / 4);
}
else {
return bear + pitc + (rol / 4);
}
}
L’angle est alors compensé et plus proche de la valeur de cap à l’horizontal.
Mise à jour
Voici un extrait de la console :
Bearing: 45.90 Pitch: -13 Roll: 1 Direction: 32
Bearing: 48.10 Pitch: -16 Roll: 1 Direction: 32
Bearing: 50.60 Pitch: -20 Roll: 1 Direction: 30
Bearing: 54.30 Pitch: -23 Roll: 0 Direction: 31
Bearing: 57.50 Pitch: -27 Roll: 1 Direction: 30
Bearing: 61.90 Pitch: -31 Roll: 1 Direction: 30
Bearing: 65.10 Pitch: -34 Roll: 1 Direction: 31
Bearing: 68.10 Pitch: -37 Roll: 0 Direction: 31
Bearing: 71.60 Pitch: -40 Roll: 0 Direction: 31
Bearing: 74.40 Pitch: -43 Roll: 0 Direction: 31
Bearing: 76.80 Pitch: -45 Roll: 0 Direction: 31
Bearing: 71.70 Pitch: -41 Roll: 0 Direction: 30
Bearing: 60.30 Pitch: -30 Roll: 0 Direction: 30
Bearing: 49.90 Pitch: -18 Roll: 0 Direction: 31