3-osiowy magnetometr HMC5883L
HMC5883L jest cyfrowym, 3-osiowym magnetometrem pozwalającym na pomiar szerokiego zakresu wielkości pola magnetycznego Ziemi wynoszącego ±8 gausa. Jego rozdzielczość 12 bitów umożliwia pomiar z dokładnością do 2 miligausów przy poborze prądu zaledwie 100µA. HMC5883L komunikuje się z mikrokontrolerem za pomocą szyny I2C z maksymalną częstotliwością pomiarów wynoszącą 75 Hz w trybie ciągłym.
Zakres pomiarowy | Rozdzielczość | Wzmocnienie |
± 0.88 Ga | 0.73 mG | 1370 |
± 1.3 Ga | 0.92 mG | 1090 |
± 1.9 Ga | 1.22 mG | 820 |
± 2.5 Ga | 1.52 mG | 660 |
± 4 Ga | 2.27 mG | 440 |
± 4.7 Ga | 2.56 mG | 390 |
± 5.6 Ga | 3.03 mG | 330 |
± 8.1 Ga | 4.35 mG | 230 |
HMC5883L pozwala na osiągnięcie częstotliwości pomiarów nawet do 160 Hz, jeśli skorzystamy z trybu pojedyńczego pomiaru oraz monitorowania przerwania DRDY. Ciekawą możliwością jaką daje ten układ, to wybór ilości próbek (1, 2, 4 lub 8), które podlegają uśrednieniu końcowego wyniku.
Napięcie zasilania mieści się w zakresie od 2.0 do 3.6V, dlatego układ również nie toleruje zasilania wyższego (5V) - należy zwrócić szczególną uwagę na to, czy nasz moduł posiada możliwość zasilania takim napięciem. Układ jest zamknięty w obudowie LCC o wymiarach 3mm x 3mm i wysokości 0.91mm .
Pełna dokumentacja techniczna: https://www.jarzebski.pl/datasheets/HMC5883L.pdf
Podłączenie HMC5883L do Arduino
W przypadku moduł IMU GY-80, możemy skorzystać z 5V zasilania. Pin oznaczony SCL (adapter) podłączamy do pinu A5 (Arduino), natomiast pin SDA (adapter) do pinu A4 (Arduino).
Do obsługi modułów z układami HMC5883L skorzystamy z przygotowanej na tą okazję biblioteki dla Arduino, którą można pobrać z repozytorium Git: https://github.com/jarzebski/Arduino-HMC5883L
Prosty przykład
Pierwszym przykładem będzie odczyt surowych wartości oraz znormalizowanych (mg):
- #include <Wire.h>
- #include <HMC5883L.h>
- HMC5883L compass;
- void setup()
- {
- Serial.begin(9600);
- // Inicjalizacja HMC5883L
- Serial.println("Initialize HMC5883L");
- while (!compass.begin())
- {
- Serial.println("Nie odnaleziono HMC5883L, sprawdz polaczenie!");
- delay(500);
- }
- // Ustawienie zakresu pomiarowego
- // +/- 0.88 Ga: HMC5883L_RANGE_0_88GA
- // +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (domyslny)
- // +/- 1.90 Ga: HMC5883L_RANGE_1_9GA
- // +/- 2.50 Ga: HMC5883L_RANGE_2_5GA
- // +/- 4.00 Ga: HMC5883L_RANGE_4GA
- // +/- 4.70 Ga: HMC5883L_RANGE_4_7GA
- // +/- 5.60 Ga: HMC5883L_RANGE_5_6GA
- // +/- 8.10 Ga: HMC5883L_RANGE_8_1GA
- compass.setRange(HMC5883L_RANGE_1_3GA);
- // Ustawienie trybu pracy
- // Uspienie: HMC5883L_IDLE
- // Pojedynczy pomiar: HMC5883L_SINGLE
- // Ciagly pomiar: HMC5883L_CONTINOUS (domyslny)
- compass.setMeasurementMode(HMC5883L_CONTINOUS);
- // Ustawienie czestotliwosci pomiarow
- // 0.75Hz: HMC5883L_DATARATE_0_75HZ
- // 1.50Hz: HMC5883L_DATARATE_1_5HZ
- // 3.00Hz: HMC5883L_DATARATE_3HZ
- // 7.50Hz: HMC5883L_DATARATE_7_50HZ
- // 15.00Hz: HMC5883L_DATARATE_15HZ (domyslny)
- // 30.00Hz: HMC5883L_DATARATE_30HZ
- // 75.00Hz: HMC5883L_DATARATE_75HZ
- compass.setDataRate(HMC5883L_DATARATE_15HZ);
- // Liczba usrednionych probek
- // 1 probka: HMC5883L_SAMPLES_1 (domyslny)
- // 2 probki: HMC5883L_SAMPLES_2
- // 4 probki: HMC5883L_SAMPLES_4
- // 8 probki: HMC5883L_SAMPLES_8
- compass.setSamples(HMC5883L_SAMPLES_1);
- }
- void loop()
- {
- // Pobranie pomiarow surowych
- Vector raw = compass.readRaw();
- // Pobranie pomiarow znormalizowanych
- Vector norm = compass.readNormalize();
- // Wyswielnie wynikow
- Serial.print(" Xraw = ");
- Serial.print(raw.XAxis);
- Serial.print(" Yraw = ");
- Serial.print(raw.YAxis);
- Serial.print(" Zraw = ");
- Serial.print(raw.ZAxis);
- Serial.print(" Xnorm = ");
- Serial.print(norm.XAxis);
- Serial.print(" Ynorm = ");
- Serial.print(norm.YAxis);
- Serial.print(" ZNorm = ");
- Serial.print(norm.ZAxis);
- Serial.println();
- delay(100);
- }
Wynik działania
HMC5883L jako kompas cyfrowy
Znajomość wartości pola magnetycznego Ziemi (wektor X i wektor Y) pozwala na określenie bieżącego kierunku południka magnetycznego, a tym samym uzyskanie cyfrowego kompasu. Kierunek południka magnetycznego można obliczyć z prostej zależności:
kierunek_pomiaru (rad) = atan( wektor_y, wektor_x );
Aby poprawnie wyznaczyć kierunek, konieczne jest również uwzględnienie czynnika błędu - deklinacji magnetycznej. Deklinacja magnetyczna spowodowana jest zarówno położeniem bieguna magnetycznego Ziemi w innym miejscu niż biegun geograficzny oraz zróżnicowanymi warunkami magnetycznymi w miejscu pomiaru (np. poprzez występowaniem dużej ilości rud żelaza). Warto zauważyć, że deklinacja magnetyczna jest parametrem zmiennym w czasie, bowiem biegun magnetyczny Ziemi stale się przemieszcza. Wartość aktualnej deklinacji magnetycznej znajdziemy na specjalnych mapach magnetycznych, a także na mapach nawigacyjnych.
Na szczęście żyjemy w czasach Internetu i odpowiednią mapę znajdziemy pod adresem: http://magnetic-declination.com/
Deklinacja magnetyczna dla Bytomia
Jak widzimy, deklinacja magnetyczna dla mojej lokalizacji wynosi plus 4 stopnie i 26 minut (wschód). Wartość tą musimy przeliczyć na radiany:
kąt_deklinacji = (stopnie + (minuty / 60.0)) / (180 / Pi);
kąt_deklinacji = (4.0 + (26.0 / 60.0)) / (180 / Pi);
Obliczoną wartość kąta deklinacji dodajemy (wynik POSITIVE) lub odejmujemy (wynik NEGATIVE) od wartości zmierzonej z magnetometru:
kierunek = kierunek_pomiaru ± kąt_deklinacji
Jeśli nie znamy kąta deklinacji, możemy przyjąć wartość zero. W następnej kolejności musimy zadbać o to, aby otrzymany wynik kierunku bieguna magnetycznego mieścił się w zakresie 0π - 2π (chyba, że chcemy mieć kompas, który pokazuje na przykład 370° zamiast 10°).
jeśli kierunek < 0 to dodajemy do niego 2π
jeśli kierunek > 2π to odejmujemy od niego 2π
Teraz możemy zamienić już radiany na stopnie:
kierunek (deg) = kierunek (rad) * (180 / π)
Istotnym problemem (brzydką cechą) magnetometru HMC5883L jest nierównomierny pomiar pola magnetycznego w zakresie od 1° ÷ 180° oraz od 180° ÷ 360°. Dla pierwszego przedziału nasz magnetometr będzie generował przekłamane wyniki od 1° ÷ 240°, natomiast dla drugiego od 240° ÷ 360°. Można w łatwy sposób to skorygować funkcją map() (patrz poniższy przykład programu). Do pełni szczęścia możemy jeszcze wygładzić wskazania naszego kompasu, ustawiajać jego reakcję na zmianę o 3°.
Nasz program przedstawia się więc następująco:
- #include <Wire.h>
- #include <HMC5883L.h>
- HMC5883L compass;
- int previousDegree;
- void setup()
- {
- Serial.begin(9600);
- // Inicjalizacja HMC5883L
- Serial.println("Initialize HMC5883L");
- while (!compass.begin())
- {
- Serial.println("Nie odnaleziono HMC5883L, sprawdz polaczenie!");
- delay(500);
- }
- // Ustawienie zakresu pomiarowego
- compass.setRange(HMC5883L_RANGE_1_3GA);
- // Ustawienie trybu pracy
- compass.setMeasurementMode(HMC5883L_CONTINOUS);
- // Ustawienie czestotliwosci pomiarow
- compass.setDataRate(HMC5883L_DATARATE_15HZ);
- // Liczba usrednionych probek
- compass.setSamples(HMC5883L_SAMPLES_4);
- }
- void loop()
- {
- // Pobranie wektorów znormalizowanych
- Vector norm = compass.readNormalize();
- // Obliczenie kierunku (rad)
- float heading = atan2(norm.YAxis, norm.XAxis);
- // Ustawienie kata deklinacji dla Bytomia 4'26E (positive)
- // Formula: (deg + (min / 60.0)) / (180 / M_PI);
- float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
- heading += declinationAngle;
- // Korekta katow
- if (heading < 0)
- {
- heading += 2 * PI;
- }
- if (heading > 2 * PI)
- {
- heading -= 2 * PI;
- }
- // Zamiana radianow na stopnie
- float headingDegrees = heading * 180/M_PI;
- // Output
- Serial.print(" Heading = ");
- Serial.print(heading);
- Serial.print(" Degress = ");
- Serial.print(headingDegrees);
- Serial.println();
- delay(100);
- delay(100);
- }
Wynik działania:
Program do processingu znajdziecie w archwium biblioteki.
Uwaga na koniec
Niestety kompas jest wrażliwy na wszelkie przechylenia, fałszując kalkulację kierunku południka magnetycznego. Musi się więc znajdować na płaskiej powierzchni, aby wyniki były poprawne. Niepożądany efekt wpływu przechyleń można na szczęście wyeliminować za pomocą akcelerometru (na przykład ADXL345 lub MPU6050). Jak tego dokonać? Dowiesz się z tego artykułu - Komepnsacja przechyleń kompasów cyfrowych.
Demo
Materiały dodatkowe
Biblioteka HMC5883L: https://github.com/jarzebski/Arduino-HMC5883L
Dokumentacja techniczna: https://www.jarzebski.pl/datasheets/HMC5883L.pdf
Reklama
Komentarze
Gratuluje pięknej strony! Kiedy można spodziewać się projektu zawierajacego adxl345, l3g4200d i hmc5883l oraz filtr Kalmana?
Niebawem :) Jeszcze w marcu na pewno. Dzięki za miłe słowa.
Witam,
Jestem w miarę początkujący jeśli chodzi o arduino i processing. Próbuję przetestować czujnik HMC5883L na GY-271 i jak do tej pory wiele programów dostępnych w Internecie "wypluwa" mi dane, których jednak nie jestem w stanie poprawnie zinterpretować.
Widząc tak ładny projekt (i w końcu po Polsku!) chciałbym go uruchomić u siebie. Załadowałem Twój skech o nazwie HMC5883L_processing, a następnie program HMC5883L_processing z katalogu processing.
W podglądzie portu (u mnie COM5) widzę, że na prędkości 115200 lecą dane, np.:
-137.08:-16.56:-426.88:191.32:143.00:142
-135.24:-16.56:-427.80:191.41:143.00:142
-131.56:-14.72:-429.64:190.82:142.00:142
Niestety jednak, jak uruchamiam program Processing to pojawia mi się jedynie czarne okienko (bez żadnych błędów).
Czy mógłbym prosić o pomoc w uruchomieniu programu w Processing?
Pozdrawiam,
Paweł.
Czy prędkość portu w Processing jest ustawiona taka sama jak w programie wysyłającym dane?
Witam. Mam ten sam problem po odpaleniu programu w processing widzę tylko czarny ekran. W sketchu prędkość portu:
void setup(void)
{
Serial.begin(9600);
W Processing:
myPort = new Serial(this, Serial.list()[0], 115200);
jak przestawie na:
myPort = new Serial(this, Serial.list()[0], 9600); Jest nadal to samo. Gdy w obu przypadkach ustawie na 115200 jest tak samo czarny ekran.
Change label of COM-port. [0] - is hardware COM1. [1] - any Arduino virtual COM-port.
For example for COM23
// Serial
myPort = new Serial(this, Serial.list()[1], 9600);
w przykladzie z kompasem aby uzyskac dokladniejsze "fixed degress"
nalezy przemnozyc wejsciowe wartosci przez 100 a po mapowaniu podzielic wartosc wyjsciowa przez 100 i wtedy wyjdzie "fixed degress" jako float.
if (headingDegrees >= 1 && headingDegrees < 240)
{
fixedHeadingDegrees = map(headingDegrees*100, 0, 239*100, 0, 179*100)/100.00;
} else
if (headingDegrees >= 240)
{
fixedHeadingDegrees = map(headingDegrees*100, 240*100, 360*100, 180*100, 360*100)/100.00;
}
ale ogolnie genialne bibioteki do obslugi gy-80, tylko brakuje jednej, ktora wszystkie czujniki wezmie do kupy i wyprodukuje ostateczne wartosci.
Pozdrawiam
Przemek
Wielkie dzięki za sugestię, sprawdzę w boju jak to się ma do "odczuwalnych" wyników
Czy informacje o tej niejednorodności pomiaru pola wynikają z twoich obserwacji, czy to jest oficjalne podejście? gdzieś w dokumentacji jest o tym?
Antoni
Jest pełno materiałów w sieci - poczytaj o deklinacji magnetycznej
Czesc,
potrzebuje wykozystac ten 1 nie podlaczony pin, podobno to inicjowanie przerwania , ktore chcialbym wykorzystac jako element zalaczania innego modulu i obudzenia Atmegi gdzy nastapi ruch o okreslona wielkosc z okreslona czuloscia. Ma kotos pomysl gdzie znajde biblioteke ktora obsluguje ten DRDY pin i co z nim mozna zrobic, jak przeslac do HMC5883L po I2C parametry, ktore on zapamieta a bedace pozniej podstawa do wyzwolenia DRDY. Moze jest jakas inna biblioteka, chcialem HMC5883L uzyc jak tego MPU6050 dla Detekcja ruchu i bezruchu z tematu:
http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-zyroskop-i-akcelerometr-mpu6050.html
pomoze ktois ?
Pozdr,
RL
Hi. Thanks to the article. I implemented your code in my project, also the part about the "bad feature", but the measue is not correct. If I rotate the sensor to 180°, actually I view "headingDregress = 240" and "FixedHeadingDregress = 180°, according to the map() instruction, but if I rotate the sensor to 90° fixedheadingDegress show me about 130-140°.
What is the math rule behind the non-linearity? How I can solve this problem?
hola, tengo el mismo problema encontro alguna solución???
O co chodzi z tą deklinacją magnetyczną?
Dla Opola jest to 4 stopnie 29 minut. Ale dla Szczecina już ponad 5 stopni.
Więc robiąc kompas w Opolu nie będę mógł go używać w Szczecinie dopóki nie zmienię parametrów?
Trochę to, hmmm, bez sensu. To jak działa kompas cyfrowy np. w Samsungu galaxy S4? Można go używać w dowolnej części świata, ale niczego się nie modyfikuje w ustawieniach.
Proszę o jakieś wyjaśnienie tego.
:) wpływ deklinacji magnetycznej nie powoduje, że kompas nagle będzie pokazywał Ci zupełnie inny kierunku w tych miastach - owszem będzie obarczony błędem, ale niewielkim. Deklinację ustawia się, jeśli chcesz bardzo dokładne wskazanie i to północy geograficznej. Kompasy bez możliwości ustawienia poprawki wskazują północ magnetyczną. Zobacz tutaj (strona 3): http://www.timex.pl/sites/default/files/product_manual/w268_EU_PL_6.pdf
Wiele programów na smartfony wspomaga się jeszcze np. GPS i/lub pobiera z sieci deklinację dla współrzędnych, jeśli nie, to zwyczajnie pokazują północ magnetyczną.
Hello,
Thank you for this library. It is the only one that I could get to interface with my MPU-6050 and the HMC5883L to give me a tilt compensated heading. I had troubles trying to find the compatible MPU-6050 library until I discovered it was under your GitHub account. Could you please update your raeadme.md file with instructions for future users? Also, time permitting, it would be nice to put conditions for any orientation (if pitch or roll are > 45) to map them accordingly.
Thank you again,
Nick
Thanks :) I will update readme file soon
Hello,
Fisrt off thank you so much for this! Even though it\'s in Polish I could understand quite well.
Though I do have one problem.
It seems my tilt compensation only works when tilting it towards North, not relative to the sensor.
So when the sensor is pointing North it keeps pointing North when I tilt it towards North
When the sensor is pointing East, it only keeps point East as long as I tilt it towards North
And so on and so forth.
In the other directions it keeps deviating.
So my thought is I need to calibrate the MPU6050 somehow.
What do you think? Is this the case?
Can you help me with this?
Matt
I will try this soon, be patient :)
Magnetometer must be calibrated in all three axes.
For full tilt compensation must enter the offset axis Z.
In my magnetometer ( HMC5883L) offset Z axis was -180. This shift is strongly influenced tilt compensation.
I calibrated the MPU6050 and it\'s still doing the same thing. (read my post above)
Is this normal?
Mam następujący problem: obracam płytkę w prawo "heading" rośnie przykładowo od 90 do 120, potem obracam w lewo "heding" maleje z powrotem, ale po przekroczeniu "90" zaczyna znowu rosnąć. Co tu jest nie tak ?
Odzczyt z magnetometru jest przez mpu6050, czyżby moduł hmc5883l był uszkodzony ?
Czy przypadkiem w bibliotece HMC5883L.cpp nie ma błędu? W kodzie:
case HMC5883L_RANGE_0_88GA:
mgPerDigit = 0.073f;
break;
nie powinno być:
mgPerDigit = 0.73f;
(bez zera po przecinku)?
Hi Korneliuz,
Thanks for the nice repository. Realy good work.
As part of my megration with arduino to unix ( Lubuntu ) I treid your scetch for calibration the HMC5883 sensor.
I am using he GY-87 board. The teapot is working very well.
I\'am realy impressed by your compas sketch also in combination with processing.
But during compile the arduino sketch "HMC5883L_processing_MPU6050" i get the error while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
class"MPU6050 has no member named begin.
How is this error to solve?
Help is very much apreceated.
Kind regards,
Theo
Hi Korneliusz,
As I presume you had your holiday recently.
Hopefully it was relaxing for you.
In the mean time I am very excited about your articles concerning the MPU60050 & HMC5883L.
The question asked in an earlier post I have answered myself. It has all to do with the libraries.
When you mixed up libraries that can give the mentioned error ( or better lack of skills. ) Sorry for the question.
For the rest I am delighted about your software for Arduino as well as for processing.
I,am working on a windstation wind direction and force with the help of a MPU6050.
Kind regards,
Theo
Hi i have a problem, because the serial port said that the device is not recognized, i took medition of the clock signal so i think the device is okey, so i dont understand why it doesn\'t work
Dear Korneliusz,
I found this fantastic site with lots of great examples and libraries. I tried the Hmc, acc sensor and GPS. All worked perfectly fine on my Uno. The more I added the more I got into trouble with RAM and ROM. therefore I changed to the Mega 2560.
Unfortunately I can\'t get the HMC and the ADXL345 to work any more.
The I2C scanner shows that the devices are there and connected well to pin 20,21 on the mega. But your libraries don\'t work on the mega. Both devices are not detected.
Any idea is highly appreciated!
In any case, thanks for sharing all this!
Cheers
Christof
I sent you an E-mail :)
Czesc,
potrzebuje wykozystac ten 1 nie podlaczony pin, podobno to inicjowanie przerwania , ktore chcialbym wykorzystac jako element zalaczania innego modulu i obudzenia Atmegi gdzy nastapi ruch o okreslona wielkosc z okreslona czuloscia. Ma kotos pomysl gdzie znajde biblioteke ktora obsluguje ten DRDY pin i co z nim mozna zrobic, jak przeslac do HMC5883L po I2C parametry, ktore on zapamieta a bedace pozniej podstawa do wyzwolenia DRDY. Moze jest jakas inna biblioteka, chcialem HMC5883L uzyc jak tego MPU6050 dla Detekcja ruchu i bezruchu z tematu:
http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-zyroskop-i-akcelerometr-mpu6050.html
pomoze ktois ?
Pozdr,
RL
Panie Korneliuszu,
Nie uważam się za doświadczonego elektronika, ale myślałem, że z kompasem sobie poradzę. Otóż nie... Szukając w internecie różnych bibliotek i sposobów podłączania, na każdym wyskakiwały zera albo komunikat o tym abym sprawdził podłączenie... Próbowałem zarówno z arduino UNO w którym podpiąłem do A4 i A5, jak i MEGA która ma piny 20 i 21 specjalnie po to :
Mam nadzieję że moduł nie jest zepsuty a jeśli tak to czy mogę w jakikolwiek sposób się upewnić?
Z góry dziękuję i gratuluje wykonywania tak dobrej roboty ;)
Detekcja ruchu i bezruchu
czy ma ktos jakis przyklad z wyzwalaniem przerwania DRDY i budzenia arduino ze stanu uspienia.
Dzieki
How can I use the library for raspberry Pi?
Dzień dobry Panie Korneliuszu,
Zmagam się z obsługą magnetometru na mikrokontrolerze AVR Atmega8. Wzorująć się na Pana bibliotekach udało mi się odczytać dane z czujnika oraz obliczyć kąt obrotu bez kompensacji. Natomiast nie udaje mi się obliczyć kąta obrotu z kompensacją. Kąty pitch i roll obliczam na podstawie danych z MPU6050:
roll = ((atan2(ay,az))*180/M_PI);
pitch = -(atan2(ax,sqrt(ay*ay + az*az))*180)/M_PI;
Kolejno obliczam sin i cos kąta pitch i roll, zamieniając wcześniej kąty na radiany:
sinroll = sin(roll*M_PI/180);
cosroll = cos(roll*M_PI/180);
sinpitch = sin(pitch*M_PI/180);
cospitch = cos(pitch*M_PI/180);
i na końcu obliczam kąt obrotu na podstawie Pana wzoru:
yaw = atan2(kalib.mx_off*sinroll*sinpitch + kalib.my_off*cosroll - kalib.mz_off*sinroll*cospitch,kalib.mx_off*cospitch + kalib.mz_off*sinpitch)*180/M_PI;
gdzie kalib.mx_off, kalib.my_off i kalib.mx_off są przeliczonymi wartościami na mili gausy.
Gdy czujnik znajduje się w pozycji bez przechyleń to wynik jest podobny do obliczonego bez kompensacji. Natomiast jeśli czujnik przechylę to kąt "ucieka", nie działa kompensacja. Czy byłby Pan w stanie pomóc mi w rozwiązaniu tego problemu?
Nice job Mr. Jarzębski. Thank you a lot for share.
I have found a good reference to improve the magnetometer calibration in this link:
https://www.jameco.com/Jameco/Products/ProdDS/2150248.pdf
I still learning about this sensor and i have some dificulties to determine the heading at quadrant 240-360 degrees. I hope to undestand it soon.
Witam, widzę że dużo tu komentarzy osób znających się na rzeczy. Mam pytanie, używam magnetometr GY-273 HMC5883L. Bez względu jaki program wgram wartość pokazuje mi 0 albo 1. Wiem że arduino wykrywa po I2C czujnik bo pokazuje adres 0d (ale domyślnie powinno działać na 1E). Czy czujnik mógł ulec uszkodzeniu podczas lutowania goldpinów czy to jednak błąd dość powszechny ?
Thanks for your work. Please view my video of a recent test in an observatory dome.
hello,
thank you for uploading the code, but am having an error while compiling it
the error says :"class hmc5883l has no member named begin "
the error is shown in this code line "while (!compass.begin())"
thank you again