Moduł kompasu HMC5883L – podstawy

GY-273 cena ok. 3$
 Cześć i czołem!

Przeglądając Aliexpress natrafiłem na wiele różnych modułów, o które możemy wzbogacić swoje projekty. Od żyroskopów, przez czujniki ultradźwiękowe aż po magnetometry. Jest tego. Zdecydowałem się na rozkminienie magnetometru HMC5883L znanego też pod nazwą GY-273, urządzenia do pomiaru pola magnetycznego ziemi. Komunikacja bez zbędnych dodatków, za pomocą I2C, czy jak kto woli TWI. Podłączone, musi działać.

Ma dwie podstawowe wady:

– duża wrażliwość na przechył, najdrobniejszy powoduje przekłamania rzędu 10 stopni
– nieproporcjonalność wyświetlanego wyniku, w rzeczywistym zakresie 0-180 pokazuje 0-240, oraz rzeczywiste 180-360 pokazuje jako 240-360. Da się to poprawić, zapraszając odrobinę matematyki do naszego programu, co też uczyniłem.

LCD kompatybilny z Nokia 3310/5510
Moduł zwraca wartości trzech wektorów, x,y,z – do kompasu potrzebne są x i y. Nie zagłębiałem się w dalszą teorie, w sumie na lekcjach geografii aż tak głębokich rozkmin nie było.
Po wykonaniu paru obliczeń, arcus tangensów i wypowiedzeniu zaklęcia zwraca nam się wartość kąta odchylenia od kierunku północy. Posiłkując się wiedzą i bibliotekami z googla zacząłem działać.
Tak się prezentuje prototyp

Miałem wizję zrobić mały prototyp, który mógłby pokazywać wstępnie wartość cyfrową, a później jakąś graficzną. W połączeniu z małym ekranikiem kompatybilnym ze lcd od Nokii 3310/5510, powstało małe urządzenie. I wyświetlacz i magnetometr nie tolerują napięcia 5V, zalecane jest 3V. Zamontowałem na prototypową płytkę baterię 3V CR2025 wraz z podstawką, co sprawiło że urządzenie stało się mobilne. Mikrokontroler Atmega8A który użyłem może pracować w zakresach napięć 2.7-5.5V, więc i on także nadaje się do tego projektu. Wyświetlacz pracuje przez programowe SPI, tak aby nie gryzł się z ISP procka podczas programowania. Dlaczego miałby się gryźć? Odsyłam tu do poradnika mistrza Yody Kardasia: https://www.youtube.com/watch?v=CX9r0GwkFU0

Rozwój jego niestety stanął na braku pamięci w procku, nie wiem czy da się coś zmniejszyć, ale rachuj nie rachuj, operacje na liczbach zmiennoprzecinkowych zabierają sporo pamięci. Może przy okazji następnego zamówienia elektroniki, wezmę Atmegę168, która ma 2x więcej pamięci od klasycznej megi8. Na tą chwilę pozostanie taki zalążek projektu.

Proces obliczania kąta można znaleźć w linku który podałem powyżej, nie chcę robić copy-paste, a pragnę się skupić na tym co sam opracowałem.

Jak poradzić sobie nie nieproporcjonalnością wyniku? W C++ odnajdziemy gotową funkcję map(), jako że pracuję w czystym C pokusiłem się o własne obliczenie.

Schemat (bez złącza KANDA ISP)

 Dla wartością kąta mniejszej od 240°:

kąt poprawiony = 179 * (kąt / 240);
Dla wartości kąta większej od 240° (tutaj posiedziałem nieco zanim rozkminiłem):
kąt poprawiony = (((kąt-240)/120)* 180)+180;

 

Co do kompasu, zapewne skończę za tym zabawę, niemniej co do wyświetlacza graficznego Nokia 3310/5510 nie powiedziałem ostatniego słowa. Mały, prosty w implementacji, niedrogi, jak na mój gust ma potencjał, który postaram się w nim obudzić.

Dla zainteresowanych wrzucam źródła programu, w miarę ogarnięte, jako że wszystkie są otwarte i ogólnodostępne nie powinni mnie za to udostępnianie zamknąć. Jeśli dorwę bogatszego w pamięć proca zgodnego pinowo z Atmega8, będę je rozwijał dalej. Tymczasem mam na głowie jeszcze co najmniej 3 (większe niż ten) projekty, które postaram się jeszcze w lipcu opisiać 🙂
Źródła -> http://goo.gl/VczIdt
Schemat -> http://goo.gl/a6WkPt

Jeszcze na koniec dorzucę reklamę, jeśli nie lajkujesz fanpage’a tego bloga, zapraszam do polubienia:
https://www.facebook.com/avr4fun
3 lajki do stu, jeśli będą chętni i będzie stówka, zorganizuje konkurs w którym będą do wygrania moduły nRF24l01 i przetworniki cyfrowo-analogowe TDA1543. Jaki to będzie konkurs, jeszcze nie wiem, jednakże mam zbyt dużą tendencje do chomikowania elektroniki. I to by było na tyle, do następnego!

Pozdrawiam