Skocz do zawartości

Kompas HMC5883l daje błędne wyniki...


farmaceuta

Pomocna odpowiedź

Witam... próbuję uruchomić kompas jak w tytule, bez powodzenia niestety...wypróbowałem już z 6 bibliotek i do tego jeszcze "goły" kod bez libsa...bez rezultatu😢 efekt taki że np na jednym libsie mam odczyt od 190-260 stopni kręcąc do okoła, na innym libsie mam kilka odczytów np 40°/ 83° i tyle...gdy odczytuje raw'owe dane (int złożony z dwóch bajtów danych) to wartości są bardzo wysokie.. osiągają prawie pełny zakres liczby 16 bitowej (ponad 60k) a z tego co już widziałem to wartości te powinny być dużo niższe w okolicach 1k...czy ktoś ma na stanie kompas żeby sprawdzić lub ma jakąś sprawdzoną bibliotekę? 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

8 minut temu, orb777 napisał:

Może ten moduł wymaga kalibracji i jakichś specjalnych warunków, np. z dala od źródeł pól magnetycznych?

Kalibruje się, ale nawet bez kalibracji powinien coś normalniejsze go pokazywać...😢

Link do komentarza
Share on other sites

(edytowany)

@farmaceuta, a może pokaż kod, którego używasz i dokładny wydruk do niego, a także zdjęcie samego modułu? Czy czip (nie płytka) ma faktycznie napis "HMC5883L"? 

Jest chiński odpowiednik "QMC5883L", ale w zależności od wersji działa na tym samym adresie co oryginał (0x1E) lub na 0x0D, wspomniane tu, natomiast z rejestrami może być coś pogmatwane.

Edytowano przez orb777
  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, orb777 napisał:

@farmaceuta, a może pokaż kod, którego używasz i dokładny wydruk do niego, a także zdjęcie samego modułu? Czy czip (nie płytka) ma faktycznie napis "HMC5883L"? 

Jest chiński odpowiednik "QMC5883L", ale w zależności od wersji działa na tym samym adresie co oryginał (0x1E) lub na 0x0D, wspomniane tu, natomiast z rejestrami może być coś pogmatwane.

Miałem dawniej również QMC...oryginalny HMC ma mieć nadruk na chipie "L883" i mój tak ma... 

39 minut temu, kostuch napisał:

Tak pobieżnie...to był pierwszy kod którego użyłem, akurat ten nie daje mi nic w Serialu 😢 (kod się wgrywa normalnie) 

Zaraz dorzucę kod...

Link do komentarza
Share on other sites

#include <Wire.h>                                 //biblioteka I2C
#define address 0x1E                               //adres modułu HMC5883L dla I2C
void setup(){
  Serial.begin(9600);                              //inicjalizacja komunikacji szeregowej
  Wire.begin();                                    //inicjalizacja modułu
  
                                       //Ustawienie odpowiedniego trybu czujnika
  Wire.beginTransmission(address);                 //otwarcie komunikacji
  Wire.write(0x02);                                //wybór rejestru trybu         
  Wire.write(0x00);                                //tryb ciągłego pomiaru
  Wire.endTransmission();
}
void loop(){
  
  int x,y,z;                                      //zmienne dla trzech osi
                                      //Ustawienie adresu do odczytu danych
  Wire.beginTransmission(address);
  Wire.write(0x03);                               //wybór rejestru 3, rejestr MSB osi X
  Wire.endTransmission();
  
 
                                     //Odczyt danych dla każdej z osi, dwa rejestry na jedną oś
  Wire.requestFrom(address, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8;                           //MSB osi X
    x |= Wire.read();                             //LSB osi X
    z = Wire.read()<<8;                           //MSB osi Z
    z |= Wire.read();                             //LSB osi Z
    y = Wire.read()<<8;                           //MSB osi Y
    y |= Wire.read();                             //LSB osi Y
  }
  
                                                  //Wyświetlenie danych na monitorze szeregowym
  Serial.print("x: ");
  Serial.print(x);
  Serial.print("  y: ");
  Serial.print(y);
  Serial.print("  z: ");
  Serial.println(z);
  
  delay(250);                                     //opóźnienie między pomiarami 250 ms
}

 

Link do komentarza
Share on other sites

Wg dokumentacji (HMC5883L.zip) kod jest poprawny (co za odkrycie!), więc może masz trefny moduł? Pytanie czy to faktycznie oryginał i zwraca rejestry tak jak powinien? Czy możesz pokazać potomnym jak wygląda? Internety mówią, że HMC5883L nie jest produkowany od około 9-10 lat.

23 godziny temu, farmaceuta napisał:

Miałem dawniej również QMC...oryginalny HMC ma mieć nadruk na chipie "L883" i mój tak ma... 

I co z nim było nie tak, że postanowiłeś zmienić? Z ciekawości pytam, dla kolegi. Przymierzam się z do czegoś takiego, też dla kolegi (teoretycznie adres 0x1E).

GY-273.thumb.jpg.67aeee31ccbad66fc848cc9cd486ea75.jpg

  • Lubię! 1
Link do komentarza
Share on other sites

2 godziny temu, orb777 napisał:

 co z nim było nie tak, że postanowiłeś zmienić? Z ciekawości pytam, dla kolegi. Przymierzam się z do czegoś takiego, też dla kolegi (teoretycznie adres 0x1E).

 

Nic... kiedyś kupiłem QMC bo był opisany jako HMC...to było do modelu RC, ale autopilot nie trawił QMC więc kupiłem już oryginalny HMC...

Spróbuję jeszcze na bibliotece do QMC...może chińczyki się wycwanily i dają również opis na uc jak dla HMC

  • Lubię! 1
Link do komentarza
Share on other sites

@farmaceuta , czaję. Przy okazji znalazłem jeszcze kawałek takiego kodu i porównanie HMC z QMC na zdjęciu. Jak chcesz możesz sprawdzić co ci pokazuje, chociaż nic pewnie nie zmieni. Dawno temu kupiłeś moduł?

kompas.thumb.jpg.e1f82e5544d7a65819b4d0ed29558a8b.jpg

 

  • Lubię! 1
Link do komentarza
Share on other sites

Moduł teraz na czasie kupiłem...mój moduł to ten po lewej na zdjęciu czyli "L883"...niby ma być oryginalny bo w komentarzach też wyczytałem...no nic kupię jeszcze QMC, bo w sumie teraz mi różnicy nie robi czy to będzie QMC czy HMC...

  • Lubię! 1
Link do komentarza
Share on other sites

@farmaceuta , i co tam w temacie słychać?

Wlutowałem do GY-273 nóżki, które nie reagują na magnes i udało się odpalić za pomocą tej biblioteki. W kierunku północy wartości X, Y, Z (nieoznaczonej) są zbliżone do "0" lub dodatnie, ale jak odchylę kompas w prawo/lewo od północy, to czemuś szybko pojawiają się wartości ujemne (typ nie jest "unsigned", więc nie ma liczb ponad 60000). Próbowałem z dala od elektroniki i metalowych przedmiotów, bez kalibracji, itd. Nie wiem w sumie jak to dokładnie powinno działać, odpaliłem po raz pierwszy, ale kompas chyba zachowuje się trochę jak ten twój. Chip "QMC5883L" ma oznaczenie "DB5883", adres I2C: 0x0D.

GY-273.thumb.jpg.bec9797c4eb0b3836e1ddc9f5538647a.jpg

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...