Fyzikální kabinet FyzKAB

Senzor Hallova jevu v modulu ESP32

UPOZORNĚNÍ
Čtení Hallova senzoru již není u jádra Arduino ESP32 verze 3.x nadále podporováno!
Funkce hallRead() byla od verze 3.x bez náhrady ukončena.
Pokud chcete tuto funkci stále používat, musíte downgradovat doplněk desky ESP32 zpět na verzi 2.x.
ESP-IDF

Na samém začátku si trochu vzpomeneme, že je tento článek napsán pro web Fyzikální kabinet FyzKAB, tak dle hesla: „Trocha fyziky nikoho nezabije…“ si nejdříve vysvětlíme, co to ten Hallův jev vlastně je.

Hallův jev

Hallův jev se projeví ve vodivé destičce (zpravidla tvořená z polovodivého materiálu), kterou protéká elektrický proud. Na obrázku (viz níže) tento proud teče směrem zepředu dozadu a jeho zdrojem je znázorněná baterie. Jestliže na destičku působí magnetické pole, jehož směr je kolmý na směr protékajícího elektrického proudu, působí v destičce na proudové nosiče náboje magnetická síla. V obrázku působí magnetické pole ve svislém směru shora dolů. Směr výsledné působící magnetické síly určíme pomocí tzv. Flemingova pravidla levé ruky:

„Vložíme-li do magnetického pole dlaň levé ruky tak, aby prsty ukazovaly směr pohybu kladných částic a magnetické indukční čáry vstupovaly do dlaně, odtažený palec ukazuje směr síly, kterou působí magnetické pole na pohybující se kladné částice.“

Takto vzniklá magnetická síla, která má zde směr vlevo, posouvá kladné nosiče náboje (díry) na levou stranu destičky. Naopak záporné nosiče náboje (elektrony – na obrázku nejsou vyznačeny) se posouvají směrem vpravo na druhou stranu destičky. Tím na destičce vzniká nerovnoměrné rozložení náboje, což má za následek vznik rozdílu elektrických potenciálů = elektrické napětí. Toto napětí vytvořené Hallovým jevem můžeme měřit připojeným voltmetrem na bočních stranách destičky, nazývá se tzv. Hallovo napětí. Hallovo napětí je úměrné vektorovému součinu proudu a magnetického indukce. Známe-li velikost řídicího proudu, můžeme z velikosti Hallova napětí určit velikost působícího magnetického pole.

Halluv jev
zdroj obrázku: https://www.azosensors.com/article.aspx?ArticleID=16
(kvůli fyzikální chybě původní obrázek upravil FyzKAB)

Hallovo napětí je pojmenováno na počest amerického fyzika E. H. Halla (1855–1938), který tento jev v roce 1879 objevil. Hallův jev se však dočkal své první smysluplné aplikace až s příchodem polovodičových materiálů v 50. letech minulého století.

Modul ESP32 jako čidlo magnetického pole

Nyní se už konečně přesuneme k hlavnímu tématu tohoto článku. Všechny čipy ESP32 mají vestavěnou tzv. Hallovu sondu (snímač Hallova jevu). Hallovy sondy se používají nejen k měření magnetického pole, ale také se třeba používají pro bezdotykové měření elektrického proudu nebo k měření velkých elektrických proudů pomocí jejich magnetického projevu. To už je docela inspirativní pro nějaký zajímavý projekt, ne? Ať už používáme jakýkoliv vývojový kit s ESP32, máme rázem k dispozici uvnitř čipu vestavěný Hallův senzor, který by měl jít použít k měření magnetického pole. Chceme-li tedy měřit magnetické pole, mohli bychom třeba načítat výstup z Hallovy sondy jedním z ADC pinů vývojové desky ESP32.

První otázkou je, kde je Hallova sonda v čipu ESP32 umístěna. U všech čipů ESP32 je umístěna pod kovovým krytem modulu ESP32. Když přiblížíte magnet k tomuto kovovému krytu, sonda detekuje kolísání magnetického pole a produkuje výstupní napětí podle síly magnetického pole.

umisteni Hallovy sondy

Bohužel vývojová deska ESP32 neposkytuje žádný výstupní pin pro přímé měření Hallova napětí. Na štěstí se výstup vestavěné Hallovy sondy ukládá do registru desky ESP32 a ten můžeme snadno přečíst pomocí funkce prostředí Arduino IDE.

Načítání vestavěné Hallovy sondy modulu ESP32

Pomocí následujícího jednoduchého kódu můžeme měřit výstup z Hallovy sondy. Základem tohoto programu je funkce HallRead(), která čte z registru ESP32 hodnotu výstupu Hallovy sondy a vrací tento výsledek do deklarované proměnné.

Kód: (Načítání vestavěné Hallovy sondy modulu ESP32 )

/* Nacitani vestavene Hallovy sondy modulu ESP32 */

int hall_sensor_value = 0;    // promenna pro ulozeni nactene hodnoty

// funkce SETUP se spusti jednou pri stisknuti tlacitka reset nebo pri zapnuti desky.
void setup() {
   Serial.begin(115200);    // prenosova rychlost serioveho vystupu
}

// funkce LOOP bezi stale dokola.
void loop() {
  hall_sensor_value = hallRead();    // nacteni hodnoty z Hallovy sondy
  Serial.print("Hall sensor value = ");
  Serial.println(hall_sensor_value);    // vypsani nactene hodnoty na seriovy vystup
  delay(500);    // cekani 0.5s
}

Je třeba ještě zmínit, že výstup funkce HallRead() může být kladný nebo záporný v závislosti na směru magnetického pole!

Nyní již stačí jen jediné. Zkopírujte výše uvedený kód do prostředí Arduino IDE, zkompilujte kód a po kompilaci kódu nahrajte kód do desky ESP32. Po nahrání kódu otevřete Serial Monitor (sériový monitor), který je součástí prostředí Arduino IDE (nabídka Nástroje) a sledujte výstup v okně sériového monitoru.

Halluv jev - vysledky
zdroj obrázku: https://microcontrollerslab.com/esp32-built-in-hall-effect-sensor-with-arduino-ide/

Jak vidíte na obrázku, získané hodnoty jsou opravdu podle směru magnetického pole buď kladné, nebo záporné. Můžeme tedy tak určit nejen velikost magnetického pole (v relativních jednotkách), ale i směr působícího magnetického pole.

Závěr

Opět jsme si představili další ze zajímavých vlastností modulu ESP32. Nyní je opět jen na samotném vývojáři, jak tyto informace zúročí a využije ve svém vlastním projektu. V tomto směru se opravdu fantazii a tvůrčí invenci meze nekladou! Byli bychom velice rádi, kdybychom viděli, že „bastlířské“ zrnko u Vás padlo na úrodnou půdu a nespokojili jste se jen s pročítáním teorie. Zkuste vymyslet nějaké využití Hallovy sondy zabudované v modulu ESP32 a pochlubte se svým výrobkem! Vždyť právě při samostatné práci na svém konkrétním projektu se člověk nejvíce naučí.

UPOZORNĚNÍ:
Nesouhlasíme s vyřazením Newtonových zákonů, Ohmova zákona a zákona zachování energie z učiva fyziky základních škol v České republice!