Spisu treści:

Magnetometr Arduino: 5 kroków (ze zdjęciami)
Magnetometr Arduino: 5 kroków (ze zdjęciami)

Wideo: Magnetometr Arduino: 5 kroków (ze zdjęciami)

Wideo: Magnetometr Arduino: 5 kroków (ze zdjęciami)
Wideo: Ups. 2024, Listopad
Anonim
Magnetometr Arduino
Magnetometr Arduino

Co budujemy?

Ludzie nie potrafią wykryć pól magnetycznych, ale używamy urządzeń, które cały czas opierają się na magnesach. Na przykład silniki, kompasy, czujniki obrotu i turbiny wiatrowe wymagają do działania magnesów. Ten samouczek opisuje, jak zbudować magnetometr oparty na Arduino, który wykrywa pole magnetyczne za pomocą trzech czujników Halla. Wektor pola magnetycznego w danej lokalizacji jest wyświetlany na małym ekranie za pomocą rzutu izometrycznego.

Co to jest Arduino?

Arduino to mały, przyjazny dla użytkownika mikrokontroler typu open source. Posiada cyfrowe piny wejściowe i wyjściowe. Posiada również piny wejścia analogowego, które są przydatne do odczytu danych z czujników. Dostępne są różne modele Arduino. Ten samouczek opisuje, jak używać Arduino Uno lub Arduino MKR1010. Można jednak stosować również inne modele.

Przed rozpoczęciem tego samouczka pobierz środowisko programistyczne Arduino, a także wszelkie biblioteki potrzebne do konkretnego modelu. Środowisko programistyczne jest dostępne pod adresem https://www.arduino.cc/en/main/software, a instrukcje instalacji są dostępne pod adresem

Co to jest pole magnetyczne?

Magnesy trwałe wywierają siły na inne magnesy trwałe. Przewody przewodzące prąd wywierają siły na inne przewody przewodzące prąd. Magnesy trwałe i przewody przewodzące prąd również wywierają na siebie siły. Ta siła na jednostkę prądu testowego jest polem magnetycznym.

Jeśli zmierzymy objętość obiektu, otrzymamy pojedynczą liczbę skalarną. Jednak magnetyzm jest opisany przez pole wektorowe, bardziej skomplikowaną wielkość. Po pierwsze, zmienia się w zależności od położenia w całej przestrzeni. Na przykład pole magnetyczne w odległości jednego centymetra od magnesu trwałego jest prawdopodobnie większe niż pole magnetyczne oddalone o dziesięć centymetrów.

Następnie pole magnetyczne w każdym punkcie przestrzeni jest reprezentowane przez wektor. Wielkość wektora reprezentuje siłę pola magnetycznego. Kierunek jest prostopadły zarówno do kierunku siły, jak i kierunku prądu testowego.

Możemy zobrazować pole magnetyczne w jednym miejscu jako strzałkę. Możemy zobrazować pole magnetyczne w przestrzeni za pomocą szeregu strzałek w różnych miejscach, prawdopodobnie o różnych rozmiarach i skierowanych w różnych kierunkach. Ładna wizualizacja dostępna jest na https://www.falstad.com/vector3dm/. Budowany przez nas magnetometr wyświetla pole magnetyczne w miejscu położenia czujników w postaci strzałki na wyświetlaczu.

Co to jest czujnik Halla i jak działa?

Czujnik Halla to małe, niedrogie urządzenie, które mierzy siłę pola magnetycznego w określonym kierunku. Wykonany jest z kawałka półprzewodnika domieszkowanego nadmiarem ładunków. Wyjściem niektórych czujników Halla jest napięcie analogowe. Inne czujniki Halla mają zintegrowany komparator i wytwarzają wyjście cyfrowe. Inne czujniki Halla są zintegrowane z większymi przyrządami, które mierzą natężenie przepływu, prędkość obrotową lub inne wielkości.

Fizykę kryjącą się za efektem Halla podsumowuje równanie siły Lorentza. To równanie opisuje siłę działającą na poruszający się ładunek wywołaną zewnętrznym polem elektrycznym i magnetycznym.

Obraz
Obraz

Poniższy rysunek ilustruje efekt Halla. Załóżmy, że chcemy zmierzyć siłę pola magnetycznego w kierunku niebieskiej strzałki. Jak pokazano w lewej części rysunku, przykładamy prąd przez kawałek półprzewodnika prostopadle do kierunku mierzonego pola. Prąd to przepływ ładunków, więc ładunek w półprzewodniku porusza się z pewną prędkością. Ładunek ten odczuje siłę z powodu pola zewnętrznego, jak pokazano w środkowej części rysunku. Ładunki poruszają się pod wpływem siły i gromadzą się na krawędziach półprzewodnika. Ładunki gromadzą się, aż siła wywołana nagromadzonymi ładunkami zrównoważy siłę wywołaną zewnętrznym polem magnetycznym. Możemy zmierzyć napięcie na półprzewodniku, jak pokazano w prawej części rysunku. Mierzone napięcie jest proporcjonalne do natężenia pola magnetycznego i przebiega w kierunku prostopadłym do prądu i kierunku pola magnetycznego.

Obraz
Obraz

Co to jest rzut izometryczny?

W każdym punkcie przestrzeni pole magnetyczne jest opisane przez trójwymiarowy wektor. Jednak nasz ekran wyświetlacza jest dwuwymiarowy. Możemy rzutować trójwymiarowy wektor na dwuwymiarową płaszczyznę, aby móc go narysować na ekranie. Można to osiągnąć na wiele sposobów, takich jak rzut izometryczny, rzut prostokątny lub rzut ukośny.

W rzucie izometrycznym osie x, y i z są oddalone od siebie o 120 stopni i są one jednakowo skrócone. Dodatkowe informacje o rzucie izometrycznym, a także potrzebne wzory, można znaleźć na stronie Wikipedii na ten temat.

Krok 1: Zbierz zapasy

Arduino i kabel

Arduino to mózg magnetometru. Te instrukcje opisują, jak używać Arduino Uno lub Arduino MKR1010. W obu przypadkach do podłączenia go do komputera potrzebny jest kabel.

Opcja 1: Arduino Uno i kabel USB AB

www.digikey.com/product-detail/en/arduino/A000066/1050-1024-ND/2784006

www.digikey.com/product-detail/en/stewart-connector/SC-2ABE003F/380-1424-ND/8544570

Opcja 2: Arduino MKR1010 i kabel microUSB

www.digikey.com/product-detail/en/arduino/ABX00023/1050-1162-ND/9486713

www.digikey.com/product-detail/en/stewart-connector/SC-2AMK003F/380-1431-ND/8544577

Wyświetlacz TFT

TFT oznacza tranzystor cienkowarstwowy. Ten wyświetlacz o przekątnej 1,44 cala zawiera 128 na 128 pikseli. Jest mały, jasny i kolorowy. Jest przymocowany do płytki zaciskowej. Jednak styki nagłówka są dostarczane osobno, więc trzeba je przylutować. (Lut i lutownica są potrzebne.)

www.digikey.com/product-detail/en/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Obraz
    Obraz
  • Analogowe czujniki Halla

Wymagane są trzy czujniki Halla. Poniższy link dotyczy numeru części Allegro A1324LUA-T. W przypadku tego czujnika pin 1 to napięcie zasilania, pin 2 to masa, a pin 3 to wyjście. Inne czujniki Halla również powinny działać, ale upewnij się, że są analogowe, a nie cyfrowe. Jeśli używasz innego czujnika, sprawdź pinout i w razie potrzeby wyreguluj okablowanie. (Właściwie do testów użyłem innego czujnika tej samej firmy. Jednak ten, którego użyłem, jest przestarzały, a ten czujnik jest jego zamiennikiem.)

www.digikey.com/product-detail/en/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Mała deska do krojenia chleba i drut

www.digikey.com/product-detail/en/adafruit-industries-llc/239/1528-2143-ND/7244929

Magnesy trwałe do testowania

Magnesy na lodówkę będą działać dobrze.

Krok 2: Okablowanie

Okablowanie
Okablowanie

Przylutuj nagłówki na wyświetlaczu.

Obraz
Obraz

Umieść czujniki na jednym końcu płytki stykowej, a wyświetlacz i Arduino na drugim końcu. Prąd w przewodach Arduino i wyświetlacza generuje pola magnetyczne, których nie chcemy, aby czujniki odczytały. Dodatkowo możemy chcieć umieścić czujniki w pobliżu magnesów trwałych, co może niekorzystnie wpłynąć na prąd w przewodach wyświetlacza i czujnika. Z tych powodów chcemy, aby czujniki były oddalone od wyświetlacza i Arduino. Również z tych powodów magnetometr ten powinien być trzymany z dala od bardzo silnych pól magnetycznych.

Umieść czujniki prostopadle do siebie, ale jak najbliżej siebie. Delikatnie wygnij czujniki, aby ustawić je prostopadle. Każdy pin każdego czujnika musi znajdować się w osobnym rzędzie płytki stykowej, aby można go było podłączyć osobno.

Obraz
Obraz

Okablowanie jest nieco inne między MKR1010 a Uno z dwóch powodów. Po pierwsze, Arduino i wyświetlacz komunikują się przez SPI. Różne modele Arduino mają różne dedykowane piny dla niektórych linii SPI. Po drugie, wejścia analogowe Uno mogą przyjmować do 5 V, podczas gdy wejścia analogowe MKR1010 tylko do 3,3 V. Zalecane napięcie zasilania czujników Halla to 5 V. Wyjścia czujników są podłączone do wejść analogowych Arduino, a te mogą być tak duże jak napięcia zasilania. W przypadku Uno należy użyć zalecanego zasilania czujników 5 V. W przypadku MKR1010 użyj 3,3 V, aby wejście analogowe Arduino nigdy nie widziało napięcia większego niż jest w stanie obsłużyć.

Postępuj zgodnie z poniższymi schematami i instrukcjami dla Arduino, którego używasz.

Okablowanie z Arduino Uno

Obraz
Obraz

Wyświetlacz posiada 11 pinów. Podłącz je do Arduino Uno w następujący sposób. (NC oznacza brak połączenia.)

  • Vin →5V
  • 3.3 →NC
  • Masa →GND
  • SCK →13
  • SO → NC
  • SI →11
  • TCS →10
  • RST →9
  • D/C →8
  • CCS → NC
  • Lite → NC

Podłącz Vin czujników do 5V Arduino. Podłącz masę czujnika do masy Arduino. Podłącz wyjścia czujników do wejść analogowych A1, A2 i A3 Arduino.

Obraz
Obraz

Okablowanie z Arduino MKR1010

Obraz
Obraz

Wyświetlacz posiada 11 pinów. Podłącz je do Arduino w następujący sposób. (NC oznacza brak połączenia.)

  • Vin →5V
  • 3.3 →NC
  • Masa →GND
  • SCK → SCK 9
  • SO → NC
  • SI →MOSI 8
  • TCS →5
  • RST →4
  • D/C →3
  • CCS → NC
  • Lite → NC

Podłącz Vin czujników do Vcc Arduino. Ten pin ma napięcie 3,3 V, a nie 5 V. Podłącz masę czujnika do masy Arduino. Podłącz wyjścia czujników do wejść analogowych A1, A2 i A3 Arduino.

Obraz
Obraz

Krok 3: Przetestuj wyświetlacz

Uruchommy wyświetlacz TFT. Na szczęście Adafruit ma kilka przyjaznych dla użytkownika bibliotek i doskonały samouczek, z którym można się z nimi zapoznać. Te instrukcje są ściśle zgodne z samouczkiem, Otwórz środowisko programistyczne Arduino. Przejdź do Narzędzia → Zarządzaj bibliotekami. Zainstaluj biblioteki Adafruit_GFX, Adafruit_ZeroDMA i Adafruit_ST7735. Uruchom ponownie środowisko programistyczne Androida.

Przykładowy test graficzny jest dołączony do bibliotek. Otwórz to. Plik → Przykłady → Biblioteka Adafruit ST7735 i ST7789 → test graficzny. Aby wybrać wyświetlacz o przekątnej 1,44 cala, należy skomentować linię 95 i odkomentować linię 98.

Orginalna wersja:

94 // Użyj tego inicjatora, jeśli używasz ekranu TFT 1,8 cala:

95 tft.initR(INITR_BLACKTAB); //Układ Init ST7735S, czarna zakładka 96 97 //LUB użyj tego inicjatora (odkomentuj), jeśli używasz TFT 1,44 cala: 98 //tft.initR(INITR_144GREENTAB); // Układ Init ST7735R, zielona zakładka

Prawidłowa wersja dla wyświetlacza 1,44 cala:

94 // Użyj tego inicjatora, jeśli używasz ekranu TFT 1,8 cala:

95 //tft.initR(INIT_BLACKTAB); //Układ Init ST7735S, czarna zakładka 96 97 //LUB użyj tego inicjatora (odkomentuj), jeśli używasz TFT 1,44 cala: 98 tft.initR(INITR_144GREENTAB); //Układ Init SST35R, zielona zakładka

Wyświetlacz komunikuje się za pomocą SPI, a różne modele Arduino używają różnych dedykowanych pinów dla niektórych linii komunikacyjnych. Przykładowy test grafiki jest skonfigurowany do pracy z pinami Uno. Jeśli używasz MKR1010, dodaj następujące wiersze między wierszami 80 i 81.

Poprawki dla MKR1010:

80

#define TFT_CS 5 #define TFT_RST 4 #define TFT_DC 3 #define TFT_MOSI 8 #define TFT_SCLK 9 Adafruit_ST7735 tft=Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); 81 pływak p=3,1415926;

Zapisz zmodyfikowany przykład testu graficznego. Podłącz Arduino do komputera, jeśli jeszcze tego nie zrobiłeś. Przejdź do Narzędzia → Płytka i narzędzia → Port, aby sprawdzić, czy komputer może znaleźć Arduino. Przejdź do Szkic → Prześlij. Jeśli przykład działa, wyświetlacz pokaże linie, prostokąty, tekst i pełną wersję demonstracyjną. Samouczek Adafruit zawiera więcej szczegółów, jeśli potrzebne jest rozwiązywanie problemów.

Krok 4: Kod magnetometru

Pobierz załączony kod i otwórz go w środowisku programistycznym Arduino.

Ten program wykorzystuje sześć funkcji:

Setup() inicjuje wyświetlacz

Loop() zawiera główną pętlę programu. Zaciemnia ekran, rysuje osie, odczytuje dane wejściowe i rysuje strzałkę reprezentującą wektor pola magnetycznego. Ma częstotliwość odświeżania wynoszącą jedną sekundę, którą można zmienić, modyfikując linię 127

DrawAxes3d() rysuje i oznacza osie x, y i z

DrawArrow3d() przyjmuje dane wejściowe x, y i z z zakresu od 0 do 1023. Na podstawie tych wartości oblicza punkty końcowe strzałki w przestrzeni. Następnie używa funkcji isometricxx() i isometricyy() do obliczania punktów końcowych na ekranie. Na koniec rysuje strzałkę i drukuje napięcia na dole ekranu

Isometricxx() znajduje współrzędną x rzutu izometrycznego. Pobiera współrzędne x, y i z punktu i zwraca odpowiednią lokalizację w pikselach x na ekranie

Isometricyy() znajduje współrzędną y rzutu izometrycznego. Pobiera współrzędne x, y i z punktu i zwraca odpowiednią lokalizację w pikselach y na ekranie

Przed uruchomieniem kodu musimy określić, których pinów użyć do komunikacji SPI z wyświetlaczem oraz określić napięcie źródła dla czujników. Jeśli używasz MKR1010, zakomentuj wiersze 92-96 oraz wiersz 110. Następnie odkomentuj wiersze 85-89 oraz wiersz 108. Jeśli używasz Uno, zakomentuj wiersze 85-89 oraz wiersz 108 Następnie odkomentuj wiersze 92-96 oraz wiersz 110.

Prześlij kod, Szkic → Prześlij.

Powinieneś zobaczyć osie x, y i z na czerwono. Zielona strzałka z niebieskim kółkiem dla końcówki reprezentuje wektor pola magnetycznego na czujnikach. Odczyty napięcia są wyświetlane w lewym dolnym rogu. W miarę zbliżania magnesu do czujników odczyty napięcia powinny się zmieniać, a rozmiar strzałki powinien rosnąć.

Obraz
Obraz

Krok 5: Przyszła praca

Przyszła praca
Przyszła praca

Następnym krokiem będzie kalibracja urządzenia. Karta danych czujnika zawiera informacje o tym, jak przekonwertować surowe wartości napięcia czujnika na natężenie pola magnetycznego. Kalibrację można zweryfikować, porównując z dokładniejszym magnetometrem.

Magnesy trwałe oddziałują z przewodami przewodzącymi prąd. Przewody w pobliżu wyświetlacza oraz w Arduino generują pola magnetyczne, które mogą wpływać na odczyty czujników. Dodatkowo, jeśli to urządzenie jest używane do pomiaru w pobliżu silnego magnesu trwałego, pole magnetyczne z testowanego urządzenia będzie oddziaływać, wprowadzać zakłócenia i prawdopodobnie uszkadzać Arduino i wyświetlacz. Ekranowanie może sprawić, że ten magnetometr będzie bardziej wytrzymały. Arduino może wytrzymać większe pola magnetyczne, jeśli jest ekranowany w metalowym pudełku, a mniej szumów zostanie wprowadzonych, jeśli ekranowane kable połączą czujniki zamiast gołych przewodów.

Pole magnetyczne jest funkcją położenia, więc jest inne w każdym punkcie przestrzeni. To urządzenie wykorzystuje trzy czujniki, jeden do pomiaru składowej x, y i z pola magnetycznego w punkcie. Czujniki są blisko siebie, ale nie w jednym punkcie, co ogranicza rozdzielczość magnetometru. Fajnie byłoby zapisać odczyty pola magnetycznego w różnych punktach, a następnie wyświetlić je jako szereg strzałek w odpowiednich miejscach. To jednak projekt na inny dzień.

Bibliografia

Informacje o bibliotekach graficznych Adafruit Arduino Graphics

https://learn.adafruit.com/adafruit-1-44-color-tft-with-micro-sd-socket/przegląd

Wizualizacja pola magnetycznego

https://www.falstad.com/vector3dm/

Informacje o czujnikach efektu Halla i Halla

  • https://sensing.honeywell.com/index.php?ci_id=47847
  • https://www.allegromicro.com/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx

Informacje o rzucie izometrycznym

  • https://en.wikipedia.org/wiki/3D_projection
  • https://en.wikipedia.org/wiki/Isometric_projection

Zalecana: