Estou tendo problemas com os valores que obtenho do magnetômetro das placas Pololu MinIMU-9. Estou usando o Arduino-micro e a biblioteca arduino da Pololu. O sensor na placa é acelerador de 3 eixos e magnetômetro LSM303. O problema é - o valor mais alto sempre parece estar no eixo vertical, não horizontal, como seria de esperar.
Por exemplo, aqui está o dados que obtive quando coloquei o sensor na mesa e girei 360 no sentido horário no plano horizontal: (os valores são XYZ)
-6 102 -516-11 103 -515-11 103 -515 -21 102 -514-31 109 -515-40 114 -512-57 116 -509-57 116 -509-77 111 -507-93 109 -506-104 106 -507-104 106 -507-114 99 -508 -126 88 -504-131 74 -507-142 52 -507-142 52 -507-151 31 -506-150 4 -509-147 -27 -513-147 -27 -513-133 -60 -513-119 -80 -519-112 -87 -517-102 -97 -521-102 -97 -521-89 -101 -522-77 -101 -524-50 -104 -527-50 -104 -527-43 -105 -529-14 -98 -5322 -92 -53523 -92 -53523 -92 -53536 -81 -53466 -54 -53476 -32 -53176 -32 -53176 -21 -53278 -7 -53185 10 -52891 39 -52491 39 -52494 50 -52491 63 -52476 75 -52576 75 -52563 82 -52647 93 -52544 98 -52244 98 -52238 104 -52126 110 -52126 112 -51821 116 -51921 116 -51918 116 - 51812 120 -51711 120 -51511 120 -5158 120 -5175 122 -515-5 123 -514
Girar o sensor "de cabeça para baixo" e, em seguida, girá-lo no plano horisontal novamente dá resultados semelhantes , apenas o eixo Z tem valor positivo de 500+.
O magnetômetro não deveria sempre apontar na direção do campo magnético - na direção X ou Y? Eu tentei isso em diferentes salas e edifícios e consegui mesmos resultados. Girar o sensor em outros eixos produz os mesmos resultados - o eixo vertical tem o maior (e constante) valor.
Para referência, aqui está o código que usei para obter os valores.
#include <Wire.h> # include <LSM303.h>LSM303 compass; void setup () {Serial.begin (115200); Wire.begin (); compass.init (); compass.enableDefault ();} void loop () {compass.readMag (); Serial.print (compass.m.x);
Serial.print (""); Serial.print (compass.m.y); Serial.print (""); Serial.print (compass.m.z); Serial.print ("\ n"); atraso (100);}