Hallotron – czujnik pola magnetycznego
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.
Budowa wewnętrzna czujnika:
Z zewnątrz natomiast wygląda to tak:
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: VOH bliską napięciu zasilania i VOL 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ść BOP, 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 BHP, które jest mniejsze od BOP.
Dlatego przy natężeniu o zbliżonej do BOP 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 BOP.
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.
Dziwna sprawa, zamówiłem ten hallotron ale mam z nim problem napięcie na wyjściu ok 0,3v w pobliżu magnesu 0v. Myślałem, że hallotron jest uszkodzony więc zamówiłem inny z allegro ale efekt podobny. układa jest banalny do złożenia, więc nie biorę pod uwagę, że jest źle złożony czy ktoś mi podpowie o co chodzi?
coś musi być źle w tym poradniku bo u mnie też nie działa. Napisałem najpierw swój program, który też z niewiadomych przyczyn nie działał, a potem wykonałem wg. tej instrukcji i dalej nic. Mój kod:
void setup(){
pinMode(11,INPUT );
pinMode(13,OUTPUT);
}
void loop(){
if(digitalRead(8)){
digitalWrite(13, HIGH);
}
else{
digitalWrite(13, LOW);
}
}
w każdym bądź razie kod z tej strony też nie działa…nie wiem co jest
@Marek
A jak zmienisz w setup
pinMode(11,INPUT);
na
pinMode(8,INPUT);
to coś zmienia?
ok, już działa. Coś musiałem, źle podłączać, bo dziś zrobiłem wydaje mi się tak samo jak wczoraj ale dziś działa a wczoraj nie :D
Strony magnesu, który jest przykładany do hallotronu, ma znaczenie. Trzeba magnes ustawić odpowiednim biegunem do hallotronu.
Przetestowałem to dziś z magnesem neodymowym (8x8mm). Niby ok, ale zasięg ma tylko około 1.5 cm. Średnio się nadaje do wykrywania magnesów na odległość…
Rozumiem, że można zbliżając magnes zapalać diodę (filmik), lub po zmianie w/w kodu zbliżając magnes gasić diodę?
Rozumiem, że hallotron może się zachowywać jak na w/w filmie (zapalać diodę po zbliżeniu magnesu), a po zmianie kodu może gasić diodę w momencie zbliżenia magnesu?
Hmmmm, czyżby nikt nie wpadł na to że można podłączyć tę diodę bezpośrednio do wyjścia hallotronu i wtedy żadne arduino nie będzie potrzebne? Obniży to koszty projektu o jakieś 99,9% :)
a jak ktoś chce odwrócić sygnał to można to zrobic wstawiając zamiast arduino jeden tranzystor z rezystorem – wtedy koszty projektu spadną tylko o 99,8% a ilość użytych w projekcie tranzystorów – ok 20 tys razy – to sporo zwiększa niezawodnośc układu :)
@bujnos
Oczywiście, masz 100% racji. Ten wpis nie miał zrealizować migania diodą pod wpływem ruchu magnesu tylko miał pokazać jak podłączyć hallotron do Arduino. Dlatego przykład jest „nieżyciowy”, tylko dla maksymalnej przejrzystości bardzo uproszczony.
Klasyczny przykład jak można skomplikować całkiem prosty układ. Jeszcze trochę i aby włączyć oświetlenie w pomieszczeniu trzeba będzie napisać program, skompilować go i być może uda nam się wtedy to światło włączyć.
@hilfe-elektronik
Ale jeszcze raz powtórzę – to jest przykład jak podłączyć hallotron do Arduino i jak wykryć zbliżenie magnesu. Nie jest tutaj celem zapalanie diody, tylko pokazanie jak odczytać zbliżenie się magnesu. Jak to Czytelnicy w swoich projektach użyją to inna historia. Tutejsze wpisy często prezentują przykład uproszczony do maksymalnego stopnia.
Czyli jest to prosty włącznik typu on-off za pomocą czujnika halla
Czasami brak wyobrazni mnie przeraza, a traktowanie takich poradnikow jako gotowy uklad jeszcze bardziej.
Poradnik moim zdaniem jest bardzo dobry i wyczerpuje w sposob podstawowy zagadnienie
czujnika halla.
@cyberduck dokładnie tak jak piszesz.
Ale ja mam pytanie: w układach pomiaru prędkości obrotowej (np. w samochodach) opartych o czujnik halla do wzbudzenia czujnika nie używa się magnesów tylko metalowych elementów (wieńców zębatych itp.). Czy ten czujnik zadziała jeśli będziemy go wzbudzać zwykłym metalem?
Zobacz tutaj:
https://www.hella.com/techworld/pl/Technologia/Czujniki-i-podzespoly-wykonawcze/Przeglad-i-wymiana-czujnika-ABS-4074/
Moim zdaniem poradnik świetny. W najbliższym czasie sprawdzę działanie hallotronu jako licznika. Pozdrawiam!
Cześć, dwa pytania:
1) czy ma znaczenie jaki model arduino wybrać do tego zestawu? może jakiś link ze sklepu?
2) co czyta digitalRead(hallPin)? napięcie, natężenie? bo rozumiem, że moge je sobie wypisać w programie?
Wiem, że trochę czasu minęło, ale:
ad 1) Nie, każde popularne Arduino będzie się do tego nadawało, byle 5V- bo minimalne napiecie zasilana tego czujnika to 3.8V i takie będzie podawał na „włączonym” wyjściu. Z układami dziłającymi w 3.3V będzie to komplikacja (nie że się nie da, ale dodatkowe elementy potrzebujesz, choćby dzielnik napięcia)
ad 2) digitalRead czyta wartość 0/1 z pinu. Przy zasilaniu 5V gdy włączy się czujnik, wtedy na wyjściu będzie 5V – Arduino odczyta to jako „1”