Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika Fox w Dyskusje

Autorytet

w Dyskusje

8piorunów

Pracował kodował ktoś kiedyś magnetometr / kompas jak QMC5883 albo BMM150?
Kompletnie nie umiem zrobić żeby pokazywały konkretny kierunek. Jakieś pokazuje dane praktycznie nie mające większego związku z kierunkiem albo zupełnie nieliniowo. w datashit nie ma napisane jak liniowe i jakie dane wypluwa tylko wiadomo że pokazuje max 8192

Komentarze (13)

Fanatyk1piorunów

@Fox ja mam HMC5883 zamiast GMC5883, ale ja normalnie mialem przykladowy kod który zadziałał w arduino ide

void InitializeMagnetometer(){
Serial.println("Initializing Magnetometer");
if(!magnetometer.begin()){
Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
while(1);
}
Serial.println("Magnetometer initialized");
}

void PrintMagnetometer(){
sensors_event_t event;
magnetometer.getEvent(&event);

float heading = atan2(event.magnetic.y, event.magnetic.x);
float declinationAngle = 0.22;
heading += declinationAngle;

// Correct for when signs are reversed.
if(heading < 0)
heading += 2*PI;
if(heading > 2*PI)
heading -= 2*PI;
earth_angle = heading * 180/M_PI;
}

Autorytet0piorunów

@redve zobacz kod wyżej tak to zaadaptowałem

Fanatyk0piorunów

@Fox a, o tym mówisz

heading += 2*PI
oznacza "do obecnej wartości dodaj 2 pi"
analogicznie
heading -= 2*PI odejmuje od obecnej wartosci

Autorytet0piorunów

@redve ale cov znaczy + i - znaczy po prostu tak się dodaje w C?

Fanatyk0piorunów

@Fox heading to kąt jaki tworzy igla kompasu i polnoc ziemi jak rozumiem. 0 to polnoc, 180 poludnie, 90 wschod 270 zachod

Albo odwrotnie xD

Autorytet0piorunów

@redve co w tej składni oznacza heading + i heading - ?

Lider2piorunów

@Fox https://www.circuitbasics.com/how-to-setup-a-magnetometer-on-the-arduino/

How to Setup a Magnetometer on the Arduino - Circuit BasicsMagnetometers can turn your Arduino into a digital compass. They're great for navigation and guidance systems, and can even be used detect electric currents in wires.Circuit Basics
Autorytet0piorunów

@Felonious_Gru z jakiejś przyczyny ten kod mi nic nie dał. Nadal reaguje na zmianę kierunku ale nie jest to liniowe ani nic.
Jakiś śmietnik. Tak zadaptowałem w bascomie:
tu czytam i przesuam bity bo jest ich 13 użytkowych
 Xmag = Xmag_msb
   Shift Xmag , Left , 8
   Xmag = Xmag + Xmag_lsb
   Shift Xmag , Right , 3

tak samo dla osi Y
tu wzór z innej strony

Heading = Atn2(xmag , Ymag)
 Atn2res = Heading * 180
 Atn2res = Atn2res / Pi
 Heading = Atn2res + Declin
   _sec = Heading

Fenomen1piorunów

Z tego co znalazłem to jest tak:
Czyli musisz patrzeć kiedy dla X a kiedy dla Y są odpowiednio wartości dodanie, kiedy ujemne a kiedy zero.
(https://www.mouser.com/datasheet/2/783/BST-BMM150-DS001-01-786480.pdf)

Autorytet0piorunów

@Trawienny gołe wyniki nie mają żadnych ujemnych wartości. Zwykłe bajty składane do 13 bitowej wartości czyli max 8192, ALE jak przyłożę neodym to siega max 4095... to też dziwne. Nie widzę czy w nocie jest gdzieś zaznaczone że któryś np ostatni MSB bit jest minusem.