Hall-Sensor (Analog)
SensorEin 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!
Technische Daten
| Kategorie | Magnetfeld |
|---|---|
| Schnittstelle | Analog |
| Pinbelegung | VCC, GND, Analog OUT |
| Anzahl Pins | 3 |
| Messgroesse | Magnetische Flussdichte |
| Messbereich | Abhaengig vom Modell, typisch: -100 bis +100 mT |
| Genauigkeit | Relativ (analog, kalibrierbar) |
| Betriebsspannung | 3.3V – 5.0V |
| Stromverbrauch | 5.0 mA |
| Datenblatt | PDF oeffnen |
Anschluss
Arduino Uno R3
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:
Vermeidung: Starke Magneten verwenden. Sensor flach auflegen und Magneten von oben naehern.
Probleme mit Hall-Sensor (Analog)?
KI-Lernhelfer fragen