Bauteile · 10 Min. Lesezeit

Hall-Sensor am Arduino: A3144 und 49E für Magnete und Drehzahl

Hall-Sensor am Arduino: digitaler A3144 und analoger KY-024 / 49E, Pull-up, Pol und Feldstärke, Drehzahl messen, Türsensor, ESP32-Hall-Sensor und Reedkontakt.

Ein Hall-Sensor ist ein kleiner Halbleiterchip, der Vorhandensein, Polarität und Stärke eines Magneten ganz ohne bewegliche Teile erkennt. In Arduino-Projekten zählt er die Drehzahl eines Motors, misst die Fahrradgeschwindigkeit, erkennt, ob eine Tür offen oder zu ist, oder liest die Stellung eines Joysticks. Die Klapphülle, die das Handydisplay abschaltet, das Drehzahlsignal eines PC-Lüfters und die Raddrehzahlsensoren im Auto arbeiten alle mit dem Hall-Effekt. In Bastelsets begegnen dir meist zwei Typen: der digitale A3144, der ein Ein/Aus-Signal liefert, und der analoge 49E (Modul KY-024), der die Feldstärke als Spannung ausgibt.

In dieser Anleitung erklären wir die Physik des Hall-Effekts in einfachen Worten, zeigen den Unterschied zwischen digitalen und analogen Sensoren, ihre Verdrahtung und warum sie einen Pull-up-Widerstand brauchen. Danach erkennen wir mit dem A3144 einen Magneten, messen mit dem 49E, welcher Pol sich nähert und wie viel Gauß das Feld hat, und zählen per Interrupt die Drehzahl eines Motors. Außerdem erfährst du, wozu der eingebaute Hall-Sensor des ESP32 taugt und warum neuere Versionen ihn gestrichen haben, findest MicroPython-Code für den Raspberry Pi Pico und einen Vergleich mit dem Reedkontakt.

Kleiner Magnet zum Auslösen eines Hall-Sensors
Ein kleiner Neodym-Magnet löst einen Hall-Sensor aus wenigen Zentimetern aus. Die flache Seite des Magneten sollte zur beschrifteten Seite des Sensors zeigen.

Was ist der Hall-Effekt und wie funktioniert ein Hall-Sensor?

1879 entdeckte Edwin Hall, dass an den Rändern eines dünnen, stromdurchflossenen Leiters eine kleine Spannung entsteht, wenn ein Magnetfeld senkrecht zu ihm wirkt. Der Grund: Bewegte Ladungen werden im Magnetfeld seitlich abgelenkt (Lorentzkraft). Elektronen sammeln sich an einer Kante des Plättchens, an der anderen fehlen sie, und der Unterschied ist als Hall-Spannung messbar. Sie ist proportional zur Feldstärke und wechselt das Vorzeichen, wenn sich die Feldrichtung umkehrt. In Halbleitern ist der Effekt viel stärker als in Metallen, aber immer noch nur im Mikro- bis Millivoltbereich. Deshalb stecken in Hall-Sensor-Chips neben dem Hall-Plättchen ein Spannungsregler, ein Verstärker und bei digitalen Typen ein Schmitt-Trigger mit Ausgangstransistor.

Die magnetische Flussdichte wird in Gauß (G) oder Millitesla (mT) angegeben; 1 mT = 10 G. Das Erdmagnetfeld hat nur etwa 0,25–0,65 G und stört Hall-Sensoren deshalb nicht. An der Oberfläche eines kleinen Neodym-Magneten herrschen einige tausend Gauß, aber das fällt mit dem Abstand sehr schnell ab: Bei doppeltem Abstand bleibt grob ein Achtel. Deshalb liegt der Erfassungsabstand je nach Schaltschwelle und Magnetgröße meist zwischen einigen Millimetern und wenigen Zentimetern.

Hall-Sensor-Typen: A3144, KY-024 / 49E und weitere

Nach ihrem Ausgang teilt man Hall-Sensoren in drei Gruppen. Bei unipolaren Schaltern wie dem A3144 geht der Ausgang nur auf LOW, wenn ein Pol (beim A3144 der Südpol) nah genug kommt, und kehrt auf HIGH zurück, wenn sich der Magnet entfernt. Bei Latch-Typen wie dem US1881 schaltet der Südpol den Ausgang in einen Zustand, der Nordpol in den anderen, und der letzte Zustand bleibt erhalten, auch wenn der Magnet weg ist; ideal für Motoren mit abwechselnd angeordneten N- und S-Magneten. Bei linearen Typen wie dem 49E ist der Ausgang kein Schalter, sondern eine zur Feldstärke proportionale Analogspannung: Ohne Magnet liegt sie bei halber Versorgungsspannung, bei einem Pol steigt sie, beim anderen fällt sie.

EigenschaftA3144 (digital)49E / SS49E (analog)US1881 (Latch)
Versorgung4,5–24 V2,7–6,5 V3,5–24 V
AusgangOpen Collector, LOW am MagnetenAnalog, VCC/2 ohne FeldOpen Drain, LOW bei S, HIGH bei N
Reagiert aufNur Südpol (S)Beide, mit VorzeichenS schaltet ein, N aus
Schwelle / EmpfindlichkeitSchaltpunkt etwa 70–350 GTypisch 1,4 mV/G bei 5 VTypisch ±95 G
Pull-up nötig?Ja (10 kΩ oder INPUT_PULLUP)NeinJa
ModulnameKY-003KY-024 (mit DO über LM393), KY-035Als Modul selten
Pins (Beschriftung zu dir)VCC, GND, OUTVCC, GND, OUTVDD, GND, OUT

Hall-Sensor am Arduino anschließen: der Pull-up-Widerstand

Der Ausgang des A3144 ist ein Open-Collector-Transistor: Mit Magnet verbindet er den Ausgang mit GND, ohne Magnet verbindet er ihn mit gar nichts und lässt ihn offen. Ein offener Pin liest durch Störungen zufällig HIGH und LOW. Deshalb muss der Ausgang über einen Widerstand zur Versorgung gezogen werden; das nennt man Pull-up. Am Arduino schaltest du dafür am einfachsten mit pinMode(pin, INPUT_PULLUP) den internen 20–50-kΩ-Widerstand ein. Bei langen Kabeln, störender Umgebung oder schnell drehenden Wellen liefert ein externer 10-kΩ-Widerstand zwischen Ausgang und Versorgung sauberere Flanken. Der Open Collector hat einen praktischen Nebeneffekt: Versorgst du den Sensor mit 5 V und ziehst den Ausgang auf 3,3 V, können auch 3,3-V-Boards wie ESP32 und Pico ihn gefahrlos nutzen.

VerbindungArduino UnoESP32Raspberry Pi Pico
A3144 VCC5VVIN (5 V)VBUS (5 V)
A3144 OUTD2 + INPUT_PULLUP (oder 10 kΩ → 5V)GPIO 27 + INPUT_PULLUP (oder 10 kΩ → 3V3)GP15 + PULL_UP (oder 10 kΩ → 3V3)
49E VCC5V3V33V3
49E OUTA0GPIO 34GP26 (ADC0)
GND (beide)GNDGNDGND
Der offizielle Versorgungsbereich des A3144 ist 4,5–24 V; mit 3,3 V scheint er oft zu funktionieren, zuverlässig ist das aber nicht. Am ESP32 und Pico versorgst du den Sensor mit 5 V und legst den Pull-up des Ausgangs an 3,3 V. Vorsicht bei fertigen Modulen wie dem KY-003: Darauf sitzen ein Widerstand und eine LED, die den Ausgang nach VCC ziehen. Versorgst du das Modul mit 5 V, steigt auch der Ausgang Richtung 5 V und kann den Pin eines 3,3-V-Boards beschädigen; setze dann einen Spannungsteiler an den Ausgang oder nimm den nackten Sensor.

Magnet erkennen mit dem A3144

  1. Mit der beschrifteten Seite des A3144 zu dir sind die Pins von links nach rechts VCC, GND und OUT. Verbinde VCC mit 5V, GND mit GND und OUT mit D2.
  2. Lade den Code unten hoch und öffne den seriellen Monitor mit 9600 Baud.
  3. Nähere eine Seite des Magneten der beschrifteten Seite des Sensors. Leuchtet die Board-LED nicht, dreh den Magneten um; der A3144 reagiert nur auf den Südpol.
  4. Notiere die Abstände, bei denen die LED an- und ausgeht; der Unterschied ist die eingebaute Hysterese des Sensors.
C++ (Arduino IDE)
1const byte HALL_PIN = 2;              // A3144 OUT
2const byte LED_PIN = 13;              // dahili LED / onboard LED
3
4bool lastMagnet = false;
5
6void setup() {
7  pinMode(HALL_PIN, INPUT_PULLUP);    // açık kolektör çıkış için pull-up / pull-up for the open-collector output
8  pinMode(LED_PIN, OUTPUT);
9  Serial.begin(9600);
10}
11
12void loop() {
13  bool magnet = digitalRead(HALL_PIN) == LOW;   // mıknatıs varken LOW / LOW when a magnet is present
14  digitalWrite(LED_PIN, magnet ? HIGH : LOW);
15
16  if (magnet != lastMagnet) {                   // yalnız durum değişince yaz / print only on change
17    Serial.println(magnet ? F("Miknatis var / magnet detected") : F("Miknatis yok / no magnet"));
18    lastMagnet = magnet;
19  }
20}

Anders als Reedkontakt oder Taster braucht der A3144 kein Entprellen. Der Schmitt-Trigger im Sensor sorgt dafür, dass der Einschaltpunkt (BOP) mindestens 20 G über dem Ausschaltpunkt (BRP) liegt; selbst wenn der Magnet an der Grenze wackelt, springt der Ausgang nicht hin und her. Ohne beweglichen Kontakt sind die Flanken sauber, und er kann tausende Male pro Sekunde schalten. Denk an die umgekehrte Logik: Mit INPUT_PULLUP liest du LOW, wenn der Magnet da ist, und HIGH, wenn nicht; es ist dieselbe Pull-up-Logik wie beim Taster-Anschluss.

Pol und Feldstärke messen mit KY-024 / 49E

Der 49E ist ein linearer Sensor: Mit 5 V versorgt liegt sein Ausgang ohne Magnet bei etwa 2,5 V und ändert sich typisch um 1,4 mV pro Gauß. Nähert sich der Südpol der beschrifteten Seite, steigt die Spannung, beim Nordpol fällt sie. So misst du nicht nur, ob ein Magnet da ist, sondern auch welcher Pol sich nähert und wie stark das Feld ist: B (G) = (Vaus − Vnull) / 0,0014. Beim KY-024 ist AO direkt der Ausgang des 49E, DO der digitale Ausgang des Komparators LM393, der umschaltet, wenn das Feld die mit dem Poti eingestellte Schwelle überschreitet. Der Code misst beim Start den Nullpunkt und gibt dann das Feld in Gauß und Millitesla sowie den Pol aus.

C++ (Arduino IDE)
1const byte HALL_PIN = A0;               // 49E OUT ya da KY-024 AO / 49E OUT or KY-024 AO
2const float VCC = 5.0;
3const float SENSITIVITY = 0.0014;       // 1,4 mV/G (5 V'ta tipik) / 1.4 mV/G (typical at 5 V)
4const float DEAD_BAND = 20.0;           // bu değerin altını yok say (G) / ignore below this (G)
5
6float zeroVolt = 2.5;
7
8float readVolt() {
9  long sum = 0;
10  for (byte i = 0; i < 32; i++) sum += analogRead(HALL_PIN);   // 32 ölçüm ortalaması / average of 32 readings
11  return sum / 32.0 * VCC / 1023.0;
12}
13
14void setup() {
15  Serial.begin(9600);
16  delay(200);
17  zeroVolt = readVolt();                // mıknatıs yokken sıfır noktası / zero point with no magnet nearby
18  Serial.print(F("Sifir / zero: "));
19  Serial.print(zeroVolt, 3);
20  Serial.println(F(" V"));
21}
22
23void loop() {
24  float gauss = (readVolt() - zeroVolt) / SENSITIVITY;
25  Serial.print(gauss, 0);
26  Serial.print(F(" G  ("));
27  Serial.print(gauss / 10.0, 1);        // 10 G = 1 mT
28  Serial.print(F(" mT)  "));
29  if (gauss > DEAD_BAND)       Serial.println(F("Guney kutbu / south pole"));
30  else if (gauss < -DEAD_BAND) Serial.println(F("Kuzey kutbu / north pole"));
31  else                         Serial.println(F("Alan yok / no field"));
32  delay(250);
33}

Der 10-Bit-ADC des Uno teilt 5 V in 1024 Schritte, ein Schritt sind also etwa 4,9 mV; mit dem 49E entspricht das rund 3,5 G Auflösung. Da die Polbezeichnung je nach Hersteller abweichen kann, prüfe sie beim ersten Versuch mit einem Kompass: Die Nadelspitze, die nach Norden zeigt, dreht sich zum Südpol des Magneten. Der Sensor geht bei etwa ±1000 G in die Sättigung; hältst du einen sehr starken Magneten fast daran, steigt der Wert nicht weiter. Der Nullpunkt kann mit der Temperatur um einige Millivolt wandern, wiederhole die Nullung bei genauen Messungen also kurz vorher.

Drehzahl und Geschwindigkeit mit einem Hall-Sensor messen

Für die Drehzahl eines Motors, Lüfters oder Rads klebst du einen kleinen Magneten auf Welle oder Felge und befestigst den A3144 so, dass der Magnet einmal pro Umdrehung vorbeikommt. Bei jedem Vorbeilauf geht der Ausgang einmal auf LOW. Wer die Impulse mit digitalRead() in loop() fangen will, verpasst bei hoher Drehzahl welche; richtig ist ein Interrupt. Der Code unten misst die Zeit zwischen zwei Impulsen auf die Mikrosekunde genau und berechnet die Drehzahl mit U/min = 60.000.000 / (Periode_µs × Anzahl_Magnete). Kommt 2 Sekunden lang kein Impuls, gilt die Welle als stehend. Wie Interrupts funktionieren, erklärt der Beitrag Arduino-Interrupts.

C++ (Arduino IDE)
1const byte HALL_PIN = 2;                  // A3144 OUT, Uno'da kesme pini (INT0) / interrupt pin on the Uno (INT0)
2const byte MAGNETS = 1;                   // mildeki mıknatıs sayısı / magnets on the shaft
3const unsigned long MIN_GAP_US = 2000;    // 2 ms'den sık darbeler gürültüdür / pulses closer than 2 ms are noise
4const unsigned long STOP_US = 2000000;    // 2 sn darbe yoksa durdu / no pulse for 2 s means stopped
5
6volatile unsigned long lastPulse = 0;
7volatile unsigned long period = 0;        // iki darbe arası süre (µs) / time between pulses (µs)
8
9void onPulse() {
10  unsigned long now = micros();
11  unsigned long gap = now - lastPulse;
12  if (gap > MIN_GAP_US) {
13    period = gap;
14    lastPulse = now;
15  }
16}
17
18void setup() {
19  pinMode(HALL_PIN, INPUT_PULLUP);
20  attachInterrupt(digitalPinToInterrupt(HALL_PIN), onPulse, FALLING);   // mıknatıs gelince LOW'a iner / falls LOW when the magnet arrives
21  Serial.begin(9600);
22}
23
24void loop() {
25  noInterrupts();                         // iki değişkeni birlikte oku / read both variables together
26  unsigned long p = period;
27  unsigned long last = lastPulse;
28  interrupts();
29
30  float rpm = 0;
31  if (p > 0 && micros() - last < STOP_US) {
32    rpm = 60000000.0 / ((float)p * MAGNETS);
33  }
34  Serial.print(F("RPM: "));
35  Serial.println(rpm, 0);
36  delay(500);
37}

Der Code nutzt eine Sperrzeit von 2 ms; mit einem Magneten misst du damit bis 30.000 U/min, mehr als genug für die meisten Bastelmotoren. Mit zwei oder vier Magneten auf der Welle wird die Messung bei niedriger Drehzahl häufiger aktualisiert; du änderst nur MAGNETS. Verteile die Magnete gleichmäßig, denn einseitiges Gewicht bringt eine schnelle Welle zum Vibrieren. Das gelbe Kabel eines PC-Lüfters ist übrigens ein Open-Collector-Ausgang eines eingebauten Hall-Sensors und liefert zwei Impulse pro Umdrehung; mit MAGNETS = 2 liest derselbe Code die Lüfterdrehzahl. Umfang und km/h-Rechnung für einen Fahrradtacho findest du im Beitrag zum Reedkontakt; die Formel gilt genauso für den Hall-Sensor.

Tür- und Deckelsensor mit Hall-Sensor

Für einen Türsensor kommt der Magnet an den beweglichen Türflügel und der A3144 an den Rahmen, sodass bei geschlossener Tür der Südpol des Magneten zur beschrifteten Seite zeigt. Bei geschlossener Tür ist der Ausgang LOW, beim Öffnen HIGH. Reißt das Kabel, zieht der Pull-up den Pin auf HIGH und das System meldet „Tür offen“; ein Fehler bleibt also auf der sicheren Seite. Zwei Vorteile hat der Hall-Sensor hier: Ohne beweglichen Kontakt verschleißt er weder an vibrierenden Türen noch an Deckeln, die oft pro Sekunde auf- und zugehen, und er erkennt den Magneten sogar durch die Wand eines dichten Gehäuses. Der Nachteil: Er braucht ständig Strom. Der A3144 zieht etwa 4–5 mA und würde einen 2000-mAh-Akku allein in rund 18 Tagen leeren. Für einen Türsensor, der monatelang mit Batterie laufen soll, passt deshalb ein stromloser Reedkontakt besser.

Der eingebaute Hall-Sensor des ESP32

Der ursprüngliche ESP32-Chip enthält einen kleinen Hall-Sensor, den du in den 2.x-Versionen des Arduino-ESP32-Cores mit hallRead() auslesen kannst. Er rauscht aber stark und zeigt nur dann eine deutliche Änderung, wenn ein starker Magnet die Metallabschirmung des Moduls fast berührt; außerdem belegt er beim Messen GPIO 36 und GPIO 39, sodass andere Bauteile an diesen Pins die Ergebnisse verfälschen. Neuere Chips wie ESP32-S2, S3 und C3 haben ihn gar nicht, und weil Espressif die Unterstützung mit ESP-IDF 5 gestrichen hat, gibt es hallRead() im Arduino-ESP32-Core 3.x nicht mehr. Der Code unten lässt sich mit beiden Versionen kompilieren: Unter 2.x gibt er den Mittelwert aus, unter 3.x stattdessen einen Hinweis. Für ernsthafte Projekte ist ein externer A3144 oder 49E am ESP32 immer besser; allgemeine Infos zum Board findest du unter Was ist ein ESP32?.

C++ (Arduino IDE)
1// ESP32 dahili Hall sensörü (yalnız orijinal ESP32) / built-in Hall sensor (original ESP32 only)
2void setup() {
3  Serial.begin(115200);
4}
5
6void loop() {
7#if ESP_ARDUINO_VERSION_MAJOR < 3
8  long sum = 0;
9  for (int i = 0; i < 100; i++) {
10    sum += hallRead();              // GPIO 36 ve 39'u kullanır / uses GPIO 36 and 39
11  }
12  Serial.println(sum / 100);        // gürültülü, ortalama al / noisy, so average it
13#else
14  Serial.println("hallRead() 3.x cekirdekte yok / not available in core 3.x");
15#endif
16  delay(200);
17}

Drehzahl messen mit dem Raspberry Pi Pico (MicroPython)

Am Pico versorgst du den A3144 mit 5 V von VBUS, verbindest den Ausgang mit GP15 und schaltest den internen Pull-up ein; da dieser an 3,3 V liegt, sieht der Pin nie 5 V. Der Code zählt die Impulse per Interrupt und liest den Zähler jede Sekunde aus und setzt ihn zurück. Interrupts beim Auslesen kurz zu sperren verhindert, dass zwischen Lesen und Zurücksetzen ein Impuls hineinrutscht und verloren geht. Mit einem Magneten beträgt die Auflösung dieser Methode 60 U/min; genauer wird es, wenn du wie im Arduino-Beispiel die Zeit zwischen zwei Impulsen mit time.ticks_us() misst.

MicroPython
1from machine import Pin, disable_irq, enable_irq
2import time
3
4hall = Pin(15, Pin.IN, Pin.PULL_UP)    # A3144 OUT (sensör VBUS'tan 5 V ile) / A3144 OUT (sensor on 5 V from VBUS)
5MAGNETS = 1                            # mildeki mıknatıs sayısı / magnets on the shaft
6count = 0
7last_us = 0
8
9def on_pulse(pin):
10    global count, last_us
11    now = time.ticks_us()
12    if time.ticks_diff(now, last_us) > 2000:    # 2 ms gürültü filtresi / 2 ms noise filter
13        count += 1
14        last_us = now
15
16hall.irq(trigger=Pin.IRQ_FALLING, handler=on_pulse)
17
18while True:
19    time.sleep(1)
20    state = disable_irq()              # sayacı güvenle oku / read the counter safely
21    pulses = count
22    count = 0
23    enable_irq(state)
24    print("RPM:", pulses * 60 // MAGNETS)

Hall-Sensor oder Reedkontakt?

Beide erkennen Magnete, aber auf völlig verschiedene Weise. Ein Reedkontakt ist ein mechanischer Schalter, bei dem sich zwei Metallzungen in einem Glasröhrchen durch den Magneten berühren; er braucht keinerlei Strom. Ein Hall-Sensor ist ein elektronischer Chip ohne bewegliche Teile, der eine Versorgung braucht. Die Faustregel: Reedkontakt für einen selten auslösenden Sensor, der monatelang mit Batterie läuft; Hall-Sensor für schnell drehende Wellen, vibrierende Umgebungen und alles, wo Pol oder Feldstärke gefragt ist.

Reedkontakt im Glasröhrchen
Reedkontakt: zwei Metallzungen in einem Glasröhrchen. Er braucht keinen Strom, ist als mechanisches Bauteil aber in Tempo und Lebensdauer begrenzt.
EigenschaftHall-Sensor (A3144 / 49E)Reedkontakt
FunktionsweiseHalbleiter, keine beweglichen TeileMechanischer Kontakt
VersorgungNötig (etwa 4–6 mA)Nicht nötig
Pol und StärkeA3144 nur Süd; 49E liefert Pol und StärkePol egal, nur da / nicht da
TempoBis zu einigen zehn kHz, saubere FlankenHunderte Hz, Kontaktprellen
Lebensdauer und RobustheitVerschleißfrei, vibrationsfestMillionen Schaltspiele, Glas kann brechen
Bester EinsatzDrehzahl, Geschwindigkeit, Position, PolerkennungBatteriebetriebene Tür- und Fenstersensoren

Projektideen mit einem Hall-Sensor

  • Fahrradtacho: Ein Magnet an die Speiche, ein A3144 an die Gabel; Geschwindigkeit, Strecke und Durchschnitt auf einem OLED-Display anzeigen.
  • Drehzahlmesser für Motor und Lüfter: Miss die Drehzahl eines Gleichstrommotors oder PC-Lüfters und beobachte die echte Drehzahl beim Regeln per PWM.
  • Windmesser (Anemometer): Magnet an die Welle eines Schalenkreuzes, aus der Drehzahl die Windgeschwindigkeit berechnen und mit dem ESP32 aufzeichnen.
  • Wasserdurchflusszähler: Auch in Durchflusssensoren wie dem YF-S201 steckt ein Hall-Sensor; durch Zählen der Impulse misst du Liter, mehr dazu unter Durchflusssensor.
  • Geheimkiste oder Schubladenschloss: Ein im Deckel versteckter 49E öffnet das Schloss nur, wenn ein Magnet genau an die richtige Stelle gehalten wird.
  • Tür- und Deckelalarm: Ein Alarm mit A3144, der beim Öffnen einen Buzzer auslöst oder per ESP32 eine Nachricht ans Handy schickt.

Häufige Fehler und ihre Lösungen

SymptomMögliche UrsacheLösung
Pin liest zufällig HIGH und LOWKein Pull-up am Ausgang des A3144INPUT_PULLUP nutzen oder 10 kΩ zwischen Ausgang und VCC
Beim Annähern des Magneten passiert nichtsFalscher Pol: Der A3144 reagiert nur auf den SüdpolMagnet umdrehen und senkrecht zur beschrifteten Seite halten
Sensor am ESP32 oder Pico instabilA3144 läuft mit 3,3 VSensor mit 5 V versorgen, Pull-up an 3,3 V legen
Bei hoher Drehzahl zu niedrige oder springende WerteImpulse werden in loop() gelesen und verpasstInterrupt mit attachInterrupt() verwenden
49E zeigt ohne Magnet einen WertNullpunkt liegt nicht bei 2,5 V oder ist gewandertNullpunkt beim Start messen und abziehen
hallRead() lässt sich am ESP32 nicht kompilierenArduino-ESP32-Core 3.x im EinsatzExternen Hall-Sensor nutzen oder auf Core 2.x wechseln
Weißt du bei einem Magneten nicht, welche Seite der Südpol ist, starte zuerst den 49E-Code und halte beide Seiten nacheinander an den Sensor: Die Seite mit positivem Gauß-Wert ist der Südpol. Markiere sie mit einem Stift; bei jedem A3144-Projekt sparst du damit Zeit. Beim Einkleben richtest du nicht nur den Pol, sondern auch die Mitte des Magneten auf die Mitte der beschrifteten Sensorseite aus; schon wenige Millimeter Versatz können den Schaltabstand halbieren.

Ein Hall-Sensor ist die vielseitigste Art, Magnete berührungslos, geräuschlos und verschleißfrei zu erkennen: Der A3144 liefert ein schnelles, sauberes Ein/Aus-Signal, der 49E Pol und Feldstärke, und mit Interrupts misst du zuverlässig die Drehzahl. Denkst du an den Pull-up, den richtigen Pol und die Versorgung bei 3,3-V-Boards, klappt es beim ersten Versuch. In der BlueGrays-App findest du die Projekte Reedkontakt auslesen und Reedkontakt-Türsensor sowie Taster- und Interrupt-Beispiele, den ESP32-Bewegungsalarm und Pico-Entprellprojekte mit Schritt-für-Schritt-Schaltplänen und Code.

Häufige Fragen

Wie funktioniert ein Hall-Sensor?

Im Hall-Sensor steckt ein dünnes, stromdurchflossenes Halbleiterplättchen. Trifft ein Magnetfeld senkrecht darauf, werden die Ladungen zu einer Kante gedrängt, und zwischen den Kanten entsteht eine kleine, zur Feldstärke proportionale Spannung. Ein Verstärker im Sensor hebt sie an; bei digitalen Typen macht eine Schwellenschaltung daraus ein Ein/Aus-Signal.

Warum braucht der A3144 einen Pull-up-Widerstand?

Der Ausgang des A3144 ist ein Open Collector: Mit Magnet verbindet er den Ausgang mit GND, ohne Magnet mit nichts. Ein offener Pin liest durch Störungen zufällige Werte, deshalb muss der Ausgang über einen Widerstand zur Versorgung gezogen werden. Am Arduino reicht INPUT_PULLUP; bei langen Kabeln und hoher Drehzahl sind externe 10 kΩ besser.

Auf welchen Pol reagiert der A3144?

Der A3144 ist ein unipolarer Schalter und zieht seinen Ausgang nur auf LOW, wenn der Südpol nah genug an die beschriftete Seite kommt. Beim Nordpol passiert nichts. Kennst du den Pol deines Magneten nicht, probiere beide Seiten oder prüfe ihn mit einem linearen Sensor wie dem 49E.

Was ist der Unterschied zwischen KY-024 und KY-003?

Das KY-003 ist ein Modul mit dem digitalen A3144 und meldet nur, ob ein Magnet da ist oder nicht. Das KY-024 trägt einen linearen 49E und einen Komparator LM393; AO liefert die Feldstärke als Analogwert, DO ein digitales Signal nach einer mit dem Poti eingestellten Schwelle.

Aus welcher Entfernung erkennt ein Hall-Sensor einen Magneten?

Das hängt von der Magnetstärke und der Schaltschwelle ab. Ein kleiner Neodym-Magnet löst einen A3144 meist aus 1–3 cm aus; mit einem schwachen Ferritmagneten sind es nur wenige Millimeter. Da das Magnetfeld mit dem Abstand sehr schnell abnimmt, vergrößerst du die Reichweite am wirksamsten mit einem größeren oder stärkeren Magneten.

Kann man den eingebauten Hall-Sensor des ESP32 nutzen?

Der ursprüngliche ESP32 hat einen eingebauten Hall-Sensor, den du im Arduino-ESP32-Core 2.x mit hallRead() liest. Er rauscht aber stark, bemerkt nur sehr nahe, starke Magnete und belegt GPIO 36 und 39. ESP32-S2, S3 und C3 haben ihn nicht, und im Arduino-ESP32-Core 3.x wurde hallRead() entfernt; für ernsthafte Projekte nimm einen externen Sensor.

Alle Projekte ansehen
LED mit Taster schalten (Push)
#9Anfänger

LED mit Taster schalten (Push)

Wie bei einer Türklingel: Das Licht leuchtet, solange du drückst, und geht aus, wenn du loslässt. Der Arduino horcht ständig auf den Taster; solange er gedrückt ist, leuchtet die LED, und sobald du de

4.8(113)
229
ESP32 LED-Steuerung mit Drucktaste (Push)
#104Anfänger

ESP32 LED-Steuerung mit Drucktaste (Push)

Die LED leuchtet auf, wenn die Taste gedrückt wird und geht aus, wenn sie losgelassen wird. Zeigt, wie der digitale Eingangspin des ESP32 und der interne Pull-up-Widerstand verwendet werden. Dank des INPUT_PULLUP-Modus ist kein externer Widerstand erforderlich.

4.6(36)
55
Reedschalter auslesen
#37Anfänger

Reedschalter auslesen

Hast du dich schon mal gefragt, wie der Magnetschalter in Tür- und Fensteralarmen funktioniert? Kommt ein Magnet in die Nähe des Reed-Relais-Moduls, schließt sich der winzige Schalter darin; der Ardui

4.4(21)
27
Türsensor mit Reedschalter
#38Anfänger
Premium

Türsensor mit Reedschalter

Erkenne an einem Licht, ob deine Tür offen oder zu ist. An der Tür befestigst du einen kleinen Magneten, am Rahmen einen Schalter, der Magnete spürt; ist die Tür zu, liegen beide nebeneinander und die

4.7(34)
44
ESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)
#145Fortgeschritten
Premium

ESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)

Ein intelligentes Sicherheitsalarmsystem, das Buzzer und LED aktiviert, sobald der PIR-Sensor Bewegung erkennt, und gleichzeitig eine sofortige Benachrichtigung per Telegram an den Besitzer sendet. Ein 30-sekündiger Cooldown begrenzt die Häufigkeit wiederholter Alarme; dieser Mechanismus überprüft weder die Gültigkeit der PIR-Erkennungen noch verhindert er Fehlauslösungen. Geeignet für Heimsicherheit, Garagenüberwachung, Lagerräume oder Arbeitszimmer. Mit ESP32-CAM sind Foto-Benachrichtigungen m

0.0(0)
9
Raspberry Pi Pico Taster Debounce: IRQ vs Software Polling
#159Mittel
Premium

Raspberry Pi Pico Taster Debounce: IRQ vs Software Polling

Einmal Taster gedrückt, Code zählt 3-4? Das ist Contact Bounce! Vergleiche 2 Zählmethoden in Serial: RAW Polling (fängt Bounce, zählt falsch) vs IRQ + Software Debounce (genau). Lerne Contact Bounce Physik, Software Debounce, Pin.irq() Interrupt, IRQ_FALLING Trigger, ISR Handler, global Variablen ISR-Sicherheit.

0.0(0)
12
Bewegungsmelder mit Bewegungssensor
#24Anfänger
Premium

Bewegungsmelder mit Bewegungssensor

Ein einfacher Wächter, der Bescheid gibt, wenn jemand den Raum betritt. Der Bewegungsmelder spürt die Wärme, die der menschliche Körper abgibt; der Arduino lässt die LED leuchten, solange sich etwas b

4.6(47)
67