Het Hall-effect

Elektrische stroom wordt door een magneetveld beïnvloed. Dat is ook zo als die stroom door een geleider gaat. Als het magneetveld loodrecht op de stroom staat dan ontstaat hierdoor een spanningverschil, dwars op de stroomrichting. De spanning hangt onder andere af van de sterkte van het magneetveld en de richting daarvan.
In principe kun je dus met een Hall-sensor het magneetveld meten. Maar pas op: zelfs als in de beschrijving van een Hall-sensor staat dat je het magneetveld kunt meten is dat meestal niet zo. Het zijn in werkelijkheid bijna altijd schakelaars, die bij een bepaalde magnetische veldsterkte inschakelen en bij een iets lagere magnetische veldsterkte uitschakelen. Inschakelen wil zeggen dat het signaal van hoog naar laag gaat.
Als je wel de sterkte van een magneetveld wilt kunnen meten, overweeg dan een module met een ESP32 processor the kopen. Deze geeft een getal voor de magneetsterkte (negatief of positief afhankelijk van de richting). De ESP32 heeft nog veel meer voordelen zoals 16 MB flash geheugen en de mogelijkheid to communiceren via WiFi of Bluetooth.

Hall-schakelaars

Hall-schakelaars zijn spotgoedkoop. Ze kunnen erg gemakkelijk op een Arduino worden aangesloten. Zorg dat je een sterke magneet hebt om ze te testen. Een normale Hall-sensor heeft drie pootjes; als je van de kant kijkt waar het type op is afgedrukt dan is de volgorde VCC, GND, signaal. De signaaldraad moet met een zogenaamde pull-up weerstand aan VCC gelegd worden. Zo voorkom je dat hij gaat "zweven" waardoor de werking onbetrouwbaar wordt. Je kunt zelf een weerstand van ca. 10 kΩ aansluiten als pull-up weerstand of je kunt dat via je sketch doen. De Arduino heeft namelijk ingebouwde pull-up weerstanden. Hieronder staat een testprogramma voor beide gevallen. Als je een magneet vlak bij de schakelaar houdt dan moet de led op poort 13 branden. Als je Arduino geen duidelijk ledje heeft dan kun je een eigen led tussen pin 12 en 13 aansluiten.
met pull-up
zonder pull-up

Sketch voor Hall-schakelaar met Pull-up weerstand;
void setup() {
  pinMode(13, OUTPUT);
  pinMode(10, INPUT);
}

void loop() {
  if ( digitalRead(10) == HIGH ) digitalWrite(13, LOW);
  else digitalWrite(13, HIGH);
}
Sketch voor Hall-schakelaar zonder externe pull-up weerstand:
void setup() {
  pinMode(13, OUTPUT);
  pinMode(10, INPUT_PULLUP);
}

void loop() {
  if ( digitalRead(10) == HIGH ) digitalWrite(13, LOW);
  else digitalWrite(13, HIGH);
}
Ik testte enkele Hall-schakelaars. Met een sterke magneet kon ik op 1 cm afstand schakelen. Het meten van snelheden is trouwens een veel gebruikte toepassing van Hall-sensors: elke keer als het magneetje langs de sensor beweegt komt er een signaal. Je krijgt zo dus een perfecte toerenteller, waaruit vervolgens de snelheid kan worden berekend. Een ander toepassing is draadloos schakelen bij deuren en ramen.
Succesvol getest met de Arduino Uno en de Arduino Pro Mini