Analogowa czujka pola magnetycznego SS49E
SS49E to bardzo fajny układ do mierzenia wartości pola magnetycznego w zakresie -1500..0..+1500 Gs. Warto zwrócić uwagę, że czujka ta mierzy zarówno „plusy” jak i „minusy”, czyli jest bibolarna – w odróżnieniu od układów unipolarnych (które reagują jedynie na konkretną polaryzację magnesu, czyli tylko biegun N lub tylko biegun S). Wartość zmierzonego pola tłumaczona jest na napięcie na pinie OUT z zakresu od 0.86V do 4.21V w sposób liniowy. Tę liniowość wykorzystamy za chwilę.
Analogowa czy cyfrowa?
Jest dużo podobnych układów. Inne czujki (szczególnie te unipolarne) są nazywane switczami (ang. switche) i są cyfrowe. Unipolarność wyjaśniłem wyżej, natomiast cyfrowość oznacza tu, że układy te reagują jedynie na jakąś konkretną wartość pola magnetycznego (wartość progową). I tak w przypadku przekroczenia tego progu czujka zwraca napięcie wysokie, a jeśli próg nie został przekroczony – napięcie niskie. Świetnie to się sprawdza w wielu sytuacjach (inteligentne domy – okno zamknięte/otwarte, lub do mierzenia obrotów wszelakiego rodzaju kół). Przykładem takiej czujki jest TLE4905L. Jest też z reguły o połowę tańsza. Ale nie o niej dziś będzie (wspomnianą pobawimy się na innych zajęciach) – my mamy czujkę analogową. Jak więc jej używać?
Pinologia (aka. podłączenie)
Jak zawsze należy pobrań z internetu notę katalogową (szukamy frazy SS49E datasheet lub podobnie) i przeglądamy całość. Nie musimy wszystkiego rozumieć, zwracamy uwagę na opis ogólny układu i sposób podłączenia. Poniżej zamieszczam wycinek z tego dokumentu:
i już wiemy, która nóżka tego układu co oznacza. Dalej doczytujemy, że napięcie zasilające (Vdd) musi być z przedziału 4-6V, czyli Arduino UNO jak najbardziej się nada. Przy podłączeniu dbamy o odpowiednie ustawienie układu!
Odczyt wartości pola
Specyfikacja podaje, że SS49E zwraca wartość 0.86V gdy pole wyosi -1500 Gs, oraz 4.21V gdy pole wynosi +1500 Gs. Jak więc obliczać co wskazuje czujka? Musimy podłączyć układ do zasilania (nóżki 1 i 2) a także nóżkę 3 (nazwaną OUT) do woltomierza (miernika uniwersalnego) lub do Arduino i portu analogowego (np. A0). Oczywiście zachęcam do rozpoczęcia zabawy z miernikiem i magnesem, aby sprawdzić jak to działa. Po tej czynności wracamy do Arduino i podłączamy nóżkę OUT do portu analogowego A0 w Arduino. Potrzebujemy przelicznika.
(układ SS49E + Arduino UNO + magnes + płytka stykowa).
Czujka liniowa
Oznacza to, że wartości napięcia z pinu OUT odpowiadają wartościom pola w sposób liniowy, czyli jak funkcja y=a*x+b. Traktujemy więc x jako napięcie z pinu OUT, a y jako wskazywane pole. Dlatego zapisujemy układ równań na nieznane jeszcze współczynniki prostej a i b. Są to:
-1500 = a*0.86 + b (1)
oraz
1500 = a*4.21 + b. (2)
Te dwa równania należy rozwiązać wyznaczając współczynniki prostej a i b a następnie dla każdego odczytanego napięcia z pinu OUT (oznaczmy to x) obliczać natężenie pola według przepisy
y=a*x+b,
gdzie y to właśnie wartość pola.
float a=....;//policz samodzielnie, rozwiązując (1) i (2) float b=....;//policz samodzielnie void setup(){ Serial.begin(9600); } void loop(){ int odczyt=analogRead(A0); float x=odczyt*4.56/1023; Serial.print("napięcie OUT [V] = "); Serial.print(x); Serial.print(" ,pole magnetyczne [Gs] = "); Serial.println(a*x+b); }
Uwaga
Kluczowe jest odpowiednie odczytanie napięcia z nóżki OUT układu SS49E – bardzo przydatny okaże się woltomierz (multimetr w trybie woltomierza). Zwróć uwagę na program powyżej, gdzie moje Arduino jest już lekko uszkodzone i zamiast książkowych 5V otrzymuję jedynie 4.56V z pinu oznaczonego 5V – dlatego moje przeliczenie odczyt <—> x jest w taki, a nie inny sposób.
Rozdzielczość czujnika
Ze specyfikacji czujnika wynika, że na 1 Gs przypada napięcie 0.001116666 V, czyli 1.116 mV (obliczone jako iloraz 4.21-0.86 — caly zakres napięcia — i liczby 3000 — cały zakres pola, od -1500 do 1500). Natomiast rozdzielczość wejścia analogowego to 4.457 mV na 1 jednostkę w funkcji analogRead (obliczone jako iloraz 4.56 i 1023). Oznacza to, że nie jesteśmy w stanie mierzyć Aruinem tak dokładnie, jak by się chciało, ale tylko z dokładnością plus/minus 4 Gs. Dochodzą do tego jeszcze fluktuacje samego przetwornika analogowo-cyfrowego w Arduino – przyznacie, że widzicie czasami skoki odczytów o plus/minus 1? może nawet 2? Dlatego zmierzona w ten sposób wartość pola to raczej plus/minus 8 Gs.
Ziemskie pole magnetyczne
Na powierzchni Ziemi, bez magnesów i innych zewnętrznych pól powinniśmy otrzymać około 0.5 Gs — z naszą dokładnością każdy wynik <10 Gs jest OK.
Zabawa magnesem
Jak najbardziej! Próbujemy odczyty z obu biegunów magnesu, sprawdzamy zależność od odległości od czujki. W przypadku mocnych magnesów (np. neodymowych) uważamy, aby ich nie zbliżać do mikrokonktrolera Atmega na płytce Arduino — możemy go uszkodzić!
Okazuje się, że w zależności od napięcia zasilania czujka podaj zero pola magnetycznego różnymi wartościami napięcia z pinu OUT — opisane jest to w specyfikacji. Wrócimy do tego zagadnienia później.