Hallov senzor

Hallov senzor osjeća magnet bez dodira: sklopka A3144, zasun i linearni senzor, spajanje na Arduino, dvije granice uključivanja i čelična kuglica iznad magneta.

Hallov senzor
Mali crni Hallovi senzori s tri nožice, srebrni okrugli magneti, čelične kuglice i crveno-sivi štapićasti magnet s tankim ljubičastim silnicama

Što je Hallov senzor?

Oko svakog magneta je magnetsko polje. Ne vidimo ga, ali osjetimo kad magnet privuče čavao ili drugi magnet. Polje je najjače uz polove magneta, sjeverni (N) i južni (S), a što smo dalje, to je slabije.

Hallov senzor je mali čip koji osjeća magnetsko polje. Javlja je li magnet blizu, a da ga ništa ne mora dodirnuti. Ime je dobio po američkom fizičaru Edwinu Hallu, koji je 1879. otkrio da magnetsko polje malo skrene struju u vodiču.

Gdje ih nalazimo:

  • prijenosno računalo u poklopcu ima magnet, a ispod tipkovnice Hallov senzor, pa zna kad je poklopac zatvoren;
  • mnogi automobili Hallovim senzorima mjere koliko se brzo okreću kotači i motor;
  • električni romobil njime zna koliko jako pritišćeš ručicu za gas;
  • naš fliper njima prepoznaje kuglicu u stazama.

Hallov senzor radi isto što i reed sklopka, ali nema pokretnih dijelova ni staklene cjevčice. Ne troši se, ne poskakuje i ne razbije se. Zauzvrat mu treba napajanje, pa ima tri nožice umjesto dvije.

Lijevo Hallov senzor A3144 sprijeda: malo crno kućište s natpisom 3144 i tri nožice, 1 VCC, 2 GND i 3 OUT. Desno isti senzor sa strane, a uz njegovu označenu stranu magnet okrenut južnim polom S prema njoj. Ljubičaste strelice polja prolaze kroz senzor u južni pol magneta

Naš senzor, A3144, malo je crno kućište s tri nožice. Na prednjoj strani je natpis, a nožice su, gledano sprijeda:

  1. VCC: napajanje, 5 V,
  2. GND: minus,
  3. OUT: izlaz, koji javlja Arduinu.

A3144 se uključi kad južni pol (S) magneta dođe blizu njegove prednje strane, s natpisom. Sjeverni pol ga ne uključi. Ako senzor ne reagira, okreni magnet.

Micro:bit osjeća magnet

Micro:bit ima senzor za kompas, koji također osjeća magnetsko polje. Blok magnetic force (µT) iz kategorije Input daje jakost polja u mikroteslama. Prikaži ga na zaslonu i približi micro:bitu magnet: broj naglo naraste. Zemljino magnetsko polje, koje okreće iglu kompasa, ima samo oko 50 µT.

Tri vrste Hallovih senzora

  • Sklopka (A3144): izlaz se uključi kad je polje dovoljno jako, a isključi kad magnet ode. Koristimo je za kuglicu u fliperu.
  • Zasun (na primjer US1881): uključi ga južni pol, a ostane uključen i kad magnet ode, sve dok ne dođe sjeverni pol. S prstenom u kojem se izmjenjuju polovi broji okretaje motora ili kotača.
  • Linearni senzor (na primjer 49E): ne javlja samo da ili ne, nego koliko je polje jako. Bez magneta daje oko 2,5 V, s jednim polom više, a s drugim manje. Arduino ga čita s analogRead().

Jaki magneti

Mali neodimijski magneti vrlo su jaki. Dva takva magneta naglo skoče jedan prema drugome i mogu priklještiti prst. Drži ih dalje od mobitela i kartica s magnetskom trakom. Magnete nikad ne stavljaj u usta: dva progutana magneta mogu se privući kroz stijenke crijeva i teško ih ozlijediti.

Hallov senzor na Arduino radionici

Od ovog mjesta stranica je za Arduino radionicu. Hallov senzor s magnetom i čeličnom kuglicom upoznajemo u lekciji Prepoznavanje kuglice.

Spajanje

Shema: u senzoru, crtkano, Hallov element, pojačalo s dvije granice i NPN tranzistor čiji je kolektor izlaz OUT, a emiter GND. VCC senzora je na 5V. U Arduinu, crtkano, ugrađeni pull-up otpornik od 5V do D9, uključen naredbom INPUT_PULLUP. OUT senzora spojen je na D9
U senzoru su tri dijela: Hallov element, koji daje vrlo mali napon razmjeran polju, pojačalo koje taj napon uspoređuje s granicom i tranzistor na izlazu. Kad je polje dovoljno jako, tranzistor se uključi i spoji OUT s GND. Kad nije, tranzistor je isključen i OUT nije spojen ni s čim.

Izlaz zato treba pull-up otpornik, kao tipkalo. Uključimo ugrađeni s pinMode(hallSenzor, INPUT_PULLUP), pa senzor čitamo kao tipkalo: LOW znači magnet ili kuglica, HIGH znači ništa. Ako su žice do senzora duge, dodaj i vanjski pull-up otpornik od 10 kΩ između OUT i 5V.

  • A3144 treba barem 4,5 V, pa ga napajamo s 5V Arduina. Na 3,3 V micro:bita ne radi.
  • Hallov senzor nema kontakata, pa ne poskakuje. Program ga čita bez smirivanja.
  • Izlaz se može spojiti samo s GND, a senzor treba napajanje, pa Hallov senzor ne može u matricu prekidača kao tipkalo. U fliperu Hallove senzore zato čita čip 74HC165.

Dvije granice

Senzor se uključi pri jačem polju nego što se isključi. Graf pokazuje primjer: izlaz padne na 0 V kad polje naraste do 25 mT, a vrati se na 5 V tek kad padne ispod 22 mT.

Napon na izlazu u ovisnosti o polju od 0 do 40 mT. Dok polje raste, izlaz je 5 V do 25 mT, a onda padne na 0 V. Dok polje pada, izlaz ostaje 0 V do 22 mT, a onda se vrati na 5 V. Strelice pokazuju smjer
Polje se mjeri u militeslama (mT). Zemljino polje je oko 0,05 mT, a mali neodimijski magnet na svojoj površini ima nekoliko stotina mT. Dvije granice sprječavaju treperenje: kad je polje baš oko granice, izlaz se ne pali i gasi stalno, nego ostaje kakav je bio. Isto smo napravili u programu za fotootpornik.

Granice se razlikuju od senzora do senzora. Proizvođač za A3144 jamči samo da se uključi najkasnije kad polje naraste do 35 mT, a isključi najkasnije kad padne do 5 mT. Zato svaki modul za fliper namještamo posebno.

Čelična kuglica iznad magneta

Čelična kuglica nije magnet, pa je Hallov senzor sam ne bi primijetio. Zato je ispod senzora magnet, čije je polje za senzor malo preslabo. Kad kuglica dođe iznad senzora, čelik privuče silnice polja prema sebi i polje kroz senzor postane jače:

Lijevo: magnet ispod senzora, a silnice polja šire se prema gore. Stupac pokazuje da je polje kroz senzor slabije od crtkane granice, pa je lampica ugašena. Desno: kuglica iznad senzora skupi silnice prema sebi, polje kroz senzor jače je od granice i lampica svijetli
U modulu iz lekcije magnet daje 20 mT, a kuglica od 15 mm, kad je točno iznad senzora, to podigne na 32,5 mT. Graf pokazuje izračun kad se kuglica kotrlja iznad senzora brzinom od 0,5 m/s, s granicama od 25 i 22 mT:
Gore: polje kroz senzor kroz 80 ms. Dok je kuglica daleko, polje je 20 mT, a kad prolazi iznad senzora, naraste do 32,5 mT i opet padne. Crtkane crte su granice od 25 i 22 mT. Dolje: izlaz OUT je 5 V, a od 30. do 56,5. milisekunde je 0 V
Izlaz je na 0 V 26,5 ms: od trenutka kad je kuglica 5 mm prije senzora do trenutka kad je 8 mm iza njega. Isključi se kasnije nego što se uključio, jer donja granica čeka da polje padne niže. To je dovoljno dugo da Arduino prolaz sigurno vidi. Program broji samo trenutak kad izlaz postane LOW, pa jedan prolaz broji jednom:

// C++
int hall = digitalRead(hallSenzor);
if (hall == LOW && zadnjiHall == HIGH) {   // kuglica je upravo stigla iznad senzora
  prolazi = prolazi + 1;
}
zadnjiHall = hall;                         // zapamti za sljedeći prolaz kroz loop()

Ploča između kuglice i senzora mora biti tanka. U fliperu smije biti debela najviše 2 mm, pa je ondje odozdo istanjimo.

Linearni senzor: koliko je polje jako?

Linearni senzor 49E ima iste tri nožice, ali na izlazu daje napon. Bez magneta to je oko 2,5 V, pola napajanja, pa analogRead() daje broj oko 512. Program zato najprije izmjeri koliko senzor daje bez magneta, a zatim ispisuje razliku:

// C++
const int senzor = A0;                 // izlaz linearnog Hallova senzora (49E)
const int PRAG = 30;                   // koliko se broj mora promijeniti da upalimo LED-icu

int mirovanje = 0;                     // što senzor daje bez magneta

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
  long zbroj = 0;
  for (int i = 0; i < 16; i++) {       // prosjek 16 mjerenja, dok magnet nije blizu
    zbroj = zbroj + analogRead(senzor);
    delay(10);
  }
  mirovanje = zbroj / 16;
}

void loop() {
  int polje = analogRead(senzor) - mirovanje;   // jedan pol daje pozitivne brojeve, drugi negativne
  Serial.println(polje);

  if (abs(polje) > PRAG) {
    digitalWrite(LED_BUILTIN, HIGH);   // magnet je blizu, bez obzira na pol
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }
  delay(50);
}

Spoji VCC na 5V, GND na GND, a izlaz na A0. Učitaj program i otvori Serial Plotter, kako piše na stranici Arduino IDE. Približi magnet jednim polom, pa drugim: krivulja ide gore ili dolje, a što je magnet bliže, to dalje. Funkcija abs() uzima broj bez predznaka, pa LED-ica svijetli za oba pola. Prosjek u setup() računamo dok magnet nije blizu, zato magnet približi tek kad se program pokrene.

Što smo naučili?

  • Hallov senzor osjeća magnetsko polje bez dodira. Nema kontakata, pa se ne troši i ne poskakuje.
  • A3144 ima nožice VCC, GND i OUT. Uključi ga južni pol magneta okrenut prema strani s natpisom.
  • Izlaz se spaja s GND kad je polje dovoljno jako, pa ga čitamo s INPUT_PULLUP, kao tipkalo: LOW znači magnet.
  • Senzor se uključi pri jačem polju nego što se isključi, pa ne treperi.
  • Čelična kuglica iznad magneta pojača polje kroz senzor. Linearni senzor javlja i koliko je polje jako.

Mali kviz

1. Po čemu je Hallov senzor bolji od reed sklopke, a po čemu nije?
Nema pokretnih dijelova ni stakla, pa se ne troši, ne poskakuje i ne razbije se. Zauzvrat treba napajanje i ima tri nožice umjesto dvije.
2. Približio si magnet senzoru A3144, a ništa se ne događa. Što prvo pokušaš?
Okreni magnet. A3144 uključi samo južni pol okrenut prema strani s natpisom.
3. Zašto pin s Hallovim senzorom spajamo s INPUT_PULLUP?
Senzor svoj izlaz može samo spojiti s GND. Kad magneta nema, izlaz nije spojen ni s čim, pa ga pull-up otpornik drži na HIGH.
4. Zašto Hallov senzor ne smirujemo kao tipkalo?
Nema metalnih kontakata koji bi poskakivali. Uz to se uključi pri jačem polju nego što se isključi, pa ni na rubu ne treperi.
5. Čelična kuglica nije magnet. Kako je onda Hallov senzor primijeti?
Ispod senzora je magnet, čije je polje za senzor malo preslabo. Kuglica iznad senzora skupi silnice prema sebi, pa polje kroz senzor postane dovoljno jako.
6. Linearni senzor bez magneta daje oko 512. Što znači 600, a što 420?
Polje jednog pola (600) i polje drugog pola (420), otprilike jednako jaka. Što je broj dalje od 512, to je polje jače.