Stap 6: Gebruik verschillende hardware
Dezelfde techniek kan worden gebruikt met een verschillende magnetometer, en het is niet beperkt tot een Arduino, maar je moet het aanpassen en eventueel vertalen van C naar een andere taal.
Als de code naar een verschillende magnetometer wilt aanpassen, worden zich ervan bewust dat de MPU-9150 verschillende coördinatensystemen voor de magnetometer en versnellingsmeter gebruikt. Verwisselen van de ene naar de andere vereist dat u ruilen van de X- en Y-waarden en Z ontkennen. Dit wordt gedaan in de readMag() functie, zodat de rest van de code uitsluitend in het coördinatensysteem van de versnellingsmeter werken kunt. De offsets, eenmaal berekend, worden geconverteerd naar magnetometer coördinaten voor opslag.
Met behulp van een verschillende magnetometer, in principe, dat u hoeft alleen ter vervanging van de readMag() functie.
Drie arrays, mx [], mijn [] en mz [, lid], elk van de 5 elementen, houden de magnetometer lezingen op de 5 posities, namelijk horizontaal, gedraaid door 45 graden unidirectioneel dan de andere over de X-as, en evenzo over Y. Op elke positie (behalve de eerste) de versnellingsmeter uitgangen worden geroteerd zodat de displayCal() functie alleen is voor het berekenen van de variabelen "hoek" en "up" als de hoek van de gewenste oriëntatie en de richting (als een drijvende komma van de pixel) van de grootste helling. De omvang van de fout wordt geconverteerd naar een logaritmische schaal tot de grootste gevoeligheid geven wanneer de fout klein is. De displayCal()-functie retourneert een Boolean-waarde true wanneer de fout is binnen, en zodra het heeft gedaan, zodat een bepaald aantal keren in een rij Calibrate() slaat de magnetometer lezingen.
De eigenlijke berekening van de offsets nam meerdere pagina's van de algebra en trigonometriefuncties voor het afleiden van maar in slechts 4 lijnen van code zijn vastgelegd. Je kan het magische getal 0.7071 herkennen als de helft de vierkantswortel van 2 of cos(45⁰). Dit aftrekken van 1 en je krijgt het tweede magische getal 0.29289 en dubbele te krijgen van de 3de 0.58579. Immers niet magie.
Er is niets speciaal over de 45 graden schuine stand die in de kalibratie wordt gebruikt, maar het de wiskunde aanzienlijk vereenvoudigen. In principe kan je het apparaat rond de verticale, voortdurend lezingen van de versnellingsmeter en magnetometer nemen en berekening van de compensaties tot de gemiddelde waarden die zijn berekend vestigden zich rond een betrouwbaar resultaat, rollen, maar de wiskunde zou veel ingewikkelder. Het kompas-app van iOS doet dit, dat is waar ik kreeg het idee voor automatische kalibratie.