Wstęp
Hallotron to inaczej czujnik pola magnetycznego wykorzystujący efekt Halla. Ten efekt polega w skrócie na występowaniu różnicy potencjałów w przewodniku znajdującym się w polu magnetycznym.
CS3144E dostępny w sklepie Nettigo jest hallotronem w obudowie TO-92UA. Składa się ze stabilizatora napięcia, generatora napięcia Halla, wzmacniacza różnicowego i przerzutnika Schmitta. Wyjście typu otwarty kolektor. Dokładną specyfikację można znaleźć w karcie katalogowej, w sekcji Pliki.
Nie sugerujcie się oznaczeniami – to całkiem inny układ, ale w tej samej obudowie. Po prostu nie miałem możliwości zrobienia porządnego zdjęcia w trybie makro ;) .
Czujnik podaje na wyjściu dwie wartości: V OH bliską napięciu zasilania i V OL bliską zeru. Stan wysoki występuje na wyjściu, gdy nie ma pola magnetycznego, a ściślej mówiąc, gdy pole wokół czujnika jest zbyt słabe, żeby przekroczyć wartość progową. Kiedy natężenie pola magnetycznego odpowiednio wzrośnie, napięcie na wyjściu spadnie prawie do zera. Układ wróci do poprzedniego, wysokiego stanu dopiero, gdy natężenie pola zmniejszy się, przy czym wartość progowa dla zmiany L->H jest niższa, niż dla H->L. Najlepiej zilustrować to wykresem:
Taki przebieg napięcia wyjściowego to tzw. histereza. A dlaczego nie ma po prostu jednego progu przełączania? W takim wypadku, gdyby natężenie pola było akurat bliskie temu progowi napięcie wyjściowe migotałoby podczas niewielkich jego zmian.
A tak, gdy pole magnetyczne osiągnie wartość B OP , wówczas nastąpi przełączenie ze stanu wysokiego na niski. Aby nastąpiło przełączenie w stan wysoki wartość natężenia pola magnetycznego musi spaść poniżej B HP, które jest mniejsze od B OP.
Dlatego przy natężeniu o zbliżonej do B OP wartość, następuje przełączenie w stan niski i nie ma efektu migotania, który miałby miejsce gdyby przełączenie między stanami odbywało się niezależnie od kierunku przy wartości B OP.
Najprostsza aplikacja
Hallotron ma oczywiście wiele ambitnych zastosowań, chociażby w obrotomierzu, niemniej ja ograniczę się do przedstawienia najprostszego z możliwych – diody LED włączanej za pomocą magnesu.
W związku z tym, że czujnik daje na wyjściu dwa poziomy napięć, aż się prosi, żeby podłączyć go do jednego z cyfrowych pinów Arduino. W tym celu jak zwykle trzeba zadeklarować pin jako wejście, w funkcji setup() wpisując:
pinMode(hallPin, INPUT);
gdzie hallPin oznacza numer cyfrowego pinu Arduino – ja wybrałem 8. Jeśli już jesteśmy przy konfiguracji wejścia, kolejną konieczną do zrobienia rzeczą będzie podciągnięcie go do zasilania przez wewnętrzny rezystor. Jeśli tego nie zrobimy, wejście będzie wisiało w powietrzu , zbierając zakłócenia objawiające się migotaniem diody. A więc zaraz po poprzedniej linijce dodajemy:
digitalWrite(hallPin, HIGH);
Jako wyjście wybieramy inny cyfrowy pin, przy czym najlepiej 13-ty, bo tam większość modeli Arduino ma dołączoną diodę LED. Reszta kodu nie wymaga chyba dłuższego komentowania – wejście jest odczytywane w pętli, a wyjście ustawiane w zależności od jego wartości. Cały program prezentuje się następująco:
const int hallPin = 8;
const int ledPin = 13;
int hallState = 0;
void setup(){
pinMode(hallPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(hallPin, HIGH);
}
void loop(){
hallState = digitalRead(hallPin);
if (hallState == HIGH){
digitalWrite(ledPin, LOW);
}
else{
digitalWrite(ledPin, HIGH);
}
}
Schemat połączenia (bardziej dla zasady, bowiem nie ma tu raczej żadnych niejasności):
Zewnętrzna dioda LED jest opcjonalna, o ile nasz model Arduino ma wbudowaną. W przeciwnym wypadku musi być podłączona, jak pokazano. Rezystor ograniczający prąd można zupełnie bezpiecznie pominąć.
Tak wygląda złożony w praktyce, jakże skomplikowany, układ:
A tak działa:
Jak widać, wypróbowałem dwa magnesy i różnica w zasięgu czujnika jest widoczna. Nie miałem niestety magnesu neodymowego, ale podejrzewam, że wtedy czujnik reagowałby z dużo większej odległości. Co do strony czujnika, do której należy zbliżać magnes – nie ma to znaczenia, a przynajmniej nie jest zauważalne.