Automatisk Magnetometer kalibrering (6 / 6 steg)
Steg 6: Använda olika hårdvara
Samma teknik kan användas med en annan magnetometer, och det är inte begränsad till en Arduino, men du måste anpassa det och eventuellt översätta det från C till ett annat språk.
Om anpassa koden till en annan magnetometer, vara medveten om att MPU-9150 använder olika koordinatsystem för magnetometer och accelerometer. Byta från en till en annan måste du byta X och Y-värdena och förneka Z. Detta görs i funktionen readMag() så att resten av koden kan arbeta uteslutande i den accelerometer koordinatsystem. Förskjutningarna, en gång beräknas, konverteras tillbaka till magnetometer koordinater för lagring.
Med hjälp av en annan magnetometer, i princip ska du bara behöva ersätta funktionen readMag().
Tre matriser, mx [], [min] och mz [] varje 5 element, hålla magnetometer avläsningarna i 5 positioner, nämligen horisontella, roteras av 45 grader ett sätt sedan den andra om X-axeln, och likaså om Y. På varje position (utom först) accelerometer utgångarna roteras så att funktionen displayCal() bara har att beräkna variablerna "vinkel" och "upp" som vinkeln från önskad orientering och riktningen (som en flytande punkt pixel nummer) av största sluttningen. Omfattningen av felet konverteras till en logaritmisk skala för att ge störst känslighet när felet är liten. Funktionen displayCal() returnerar ett booleskt värde True när felet ligger inom gränserna, och när det har gjort så ett antal gånger i rad Calibrate() lagrar magnetometer avläsningarna.
Faktiska beräkningen av förskjutningarna tog flera sidor av algebra och trigonometri att härleda men förkroppsligas i bara 4 rader kod. Du kan redovisa det magiska numret 0.7071 som halva kvadratroten ur 2 eller cos(45⁰). Subtrahera detta från 1 och du får det andra magiska numret 0.29289 och dubbla den för att få den 3: e 0.58579. Inte magic trots allt.
Det finns inget speciellt med 45 graders lutning som används vid kalibreringen men det förenkla matematik betydligt. I princip kan du rulla enheten runt den vertikala, kontinuerligt tar avläsningar från accelerometer och magnetometer och beräkning av förskjutningarna tills de medelvärden som beräknas bosatte sig runt ett tillförlitligt resultat, men matematik skulle vara mycket mer komplicerat. IOS kompass app gör detta, vilket är där jag fick idén för automatisk kalibrering.