← Alle Bauteile

Hall-Sensor (Analog)

Sensor

Ein Hall-Sensor misst Magnetfelder. Er nutzt den Hall-Effekt: Wenn ein Magnetfeld senkrecht durch den Sensor geht, entsteht eine messbare Spannung. Je staerker das Magnetfeld, desto groesser die Spannung. Man kann damit auch die Polrichtung (Nord/Sued) erkennen!

Tipps: Ohne Magnetfeld liegt der Messwert in der Mitte (ca. 512 bei 5V). Nordpol ergibt Werte UEBER der Mitte, Suedpol Werte DARUNTER. Vor der Messung den Ruhewert (Offset) bestimmen — dafuer den Sensor von allen Magneten fernhalten!
Frag den Lernhelfer

Technische Daten

KategorieMagnetfeld
SchnittstelleAnalog
PinbelegungVCC, GND, Analog OUT
Anzahl Pins3
MessgroesseMagnetische Flussdichte
MessbereichAbhaengig vom Modell, typisch: -100 bis +100 mT
GenauigkeitRelativ (analog, kalibrierbar)
Betriebsspannung3.3V – 5.0V
Stromverbrauch5.0 mA
DatenblattPDF oeffnen

Anschluss

Arduino Uno R3

Pins: 5V=VCC, GND=GND, A0=Analog OUT

Hinweise: Analoger Ausgang: Ruhewert ca. 2.5V (Mitte). Erhoehung bei einem Pol, Verringerung beim anderen.

Codebeispiele

Hall-Sensor: Magnetfeld messen und auf OLED anzeigen Mittel

Der Hall-Sensor liefert einen analogen Wert. Ohne Magnetfeld liegt er in der Mitte (ca. 512). Wir bestimmen zuerst diesen Ruhewert (Offset) und zeigen dann die Abweichung als Balken auf dem OLED an. Nordpol und Suedpol ergeben unterschiedliche Richtungen.

Benoetigte Bibliotheken: Adafruit_SSD1306.h, Adafruit_GFX.h, Wire.h (optional: nur fuer OLED-Anzeige)

// ============================================
// Hall-Sensor: Magnetfeld messen + OLED-Anzeige
// ============================================
// Anschluss Hall-Sensor: VCC=5V, GND=GND, OUT=A0
// Anschluss OLED (I2C):  VCC=5V, GND=GND, SCL=A5, SDA=A4

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define HALL_PIN A0            // Analoger Eingang fuer Hall-Sensor
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Ruhewert (ohne Magnetfeld) — wird beim Start gemessen
int hallOffset = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  // OLED initialisieren
  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("OLED nicht gefunden!");
    while (true);
  }

  // === Ruhewert bestimmen ===
  // WICHTIG: Keinen Magneten in der Naehe haben!
  Serial.println("Kalibriere Hall-Sensor...");
  Serial.println("Bitte keinen Magneten in die Naehe halten!");
  delay(1000);
  hallOffset = analogRead(HALL_PIN);
  Serial.print("Ruhewert (Offset): ");
  Serial.println(hallOffset);
}

void loop() {
  // === Messwert lesen ===
  int hallRaw = analogRead(HALL_PIN);

  // Abweichung vom Ruhewert berechnen
  // Positiv = eine Polrichtung, Negativ = andere Polrichtung
  int delta = hallRaw - hallOffset;

  // Auf sinnvollen Bereich begrenzen
  delta = constrain(delta, -512, 512);

  // === Serielle Ausgabe ===
  Serial.print("ADC: ");
  Serial.print(hallRaw);
  Serial.print("  Delta: ");
  Serial.println(delta);

  // === OLED-Anzeige ===
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  // Messwerte als Text
  display.setCursor(0, 0);
  display.print("Hall-Sensor ADC: ");
  display.print(hallRaw);

  display.setCursor(0, 12);
  display.print("Abweichung: ");
  display.print(delta);

  // Pol-Beschriftung
  display.setCursor(0, 50);
  display.print("S");             // Suedpol = links
  display.setCursor(122, 50);
  display.print("N");             // Nordpol = rechts

  // Mittelmarkierung
  int mitte = 64;
  display.drawLine(mitte, 30, mitte, 46, SSD1306_WHITE);

  // Balkenanzeige — zeigt Richtung und Staerke
  int balkenLaenge = map(abs(delta), 0, 512, 0, 60);

  if (delta > 0) {
    // Balken nach rechts (Nordpol)
    display.fillRect(mitte, 36, balkenLaenge, 6, SSD1306_WHITE);
  } else if (delta < 0) {
    // Balken nach links (Suedpol)
    display.fillRect(mitte - balkenLaenge, 36, balkenLaenge, 6, SSD1306_WHITE);
  }
  // delta == 0: kein Balken (kein Magnetfeld)

  display.display();
  delay(200);
}

Haeufige Probleme

Hall-Sensor zeigt immer den gleichen Wert

Symptom: Messwert aendert sich nicht, auch wenn ein Magnet nah dran ist

Ursache: Falscher Pin, Sensor kaputt, oder Magnet zu schwach

Loesung:

1. Stimmt der analoge Pin im Code mit der Verkabelung ueberein? 2. VCC und GND richtig angeschlossen? 3. Einen starken Magneten (Neodym) verwenden, nicht einen schwachen Kuehlschrankmagneten 4. Magneten SEHR nah an den Sensor halten (wenige mm) 5. Seriellen Monitor oeffnen und Rohwert beobachten

Vermeidung: Starke Magneten verwenden. Sensor flach auflegen und Magneten von oben naehern.

Probleme mit Hall-Sensor (Analog)?

KI-Lernhelfer fragen