Étape 6: En utilisant un matériel différent
La même technique peut être utilisée avec un magnétomètre différent et ce n’est pas limité à un Arduino, mais vous devrez l’adapter et traduire éventuellement de C en une autre langue.
Si l’adaptation du code pour un magnétomètre différent, sachez que le MPU-9150 utilise différents systèmes de coordonnées pour le magnétomètre et un accéléromètre. Permutation de l’un à l’autre exige que vous échanger les valeurs X et Y et Z de nier. Cela se fait dans la fonction readMag() pour que le reste du code peut fonctionner exclusivement dans le système de coordonnées de l’accéléromètre. Les décalages, une fois calculés, sont reconverties à magnétomètre coordonnées pour le stockage.
À l’aide d’un magnétomètre différent, en principe, que vous devez simplement remplacer la fonction readMag().
Trois tableaux, [mx], mon [] et mz [] chacun des 5 éléments, maintenez les lectures de magnétomètre aux 5 positions, à savoir horizontales, pivoté de 45 degrés un sens puis l’autre sur l’axe des X et de même sur Y. À chaque position (sauf le premier), les sorties de l’accéléromètre pivotent afin que la fonction displayCal() n’a qu’à calculer les variables « angle » et « up » sous l’angle de la direction et l’orientation désirée (comme un flottement point nombre de pixels) de la plus grande pente. L’ampleur de l’erreur est convertie en une échelle logarithmique pour donner la plus grande sensibilité lorsque l’erreur est faible. La fonction displayCal() retourne une valeur booléenne true lorsque l’erreur est dans les limites, et une fois qu’il a fait un nombre défini de fois d’affilée Calibrate() stocke les lectures du magnétomètre.
Le calcul de la compensation a pris plusieurs pages de l’algèbre et la trigonométrie pour calculer mais s’incarnent dans seulement 4 lignes de code. Vous pouvez reconnaître le nombre magique 0.7071 comme la moitié la racine carrée de 2, ou cos(45⁰). Cela soustraire 1 et vous obtenez le deuxième numéro de magie 0.29289 et double pour obtenir la 3e 0.58579. Magic pas après tout.
Il n’y a rien de spécial au sujet de l’inclinaison de 45 degrés qui sert à l’étalonnage, mais il ne simplifie pas les maths considérablement. En principe, vous pourriez rouler l’appareil autour de la verticale, en permanence, effectuer des lectures de l’accéléromètre et magnétomètre et les décalages de calcul jusqu'à ce que les valeurs moyennes calculées se sont installés autour d’un résultat fiable, mais les maths serait beaucoup plus compliqué. L’application Compass iOS fait ceci, qui est où j’ai eu l’idée de calibrage automatique.