1 Einfacher Reed Kontakt:
Das Modul besteht aus einem Reed-Schalter und einem Pullup Widerstand. Der Reed Schalter ist einGlasröhrchen mit magnetischen Kontaktzungen im Inneren. Bringt man das Glasröhrchen in ein äußeres Magnetfeld bewegen sich die Kontaktzungen aufeinander zu und schließen den Kontakt. Dieser Sensor ist sehr gut dazu geeignet das Vorhandensein eines Objekts in dessen innerem sich ein Magnet befindet zu erkennen oder zur Messung der Drehzahl wenn sich der Magnet bei einer Umdrehung einmal am Reed Schalter vorbeibewegt.
2 Reed Kontakt mit Komparator:
Hier wird der selbe Reedkontakt verwendet. Im Unterschied zum einfachen Modul kommt hier ein Komparator LM393 zum Einsatz. Vorteil exaktes Schalten und grüne Statusled, die leuchtet wenn der Kontakt geschlossen wurde.
Anwendungsbereich der selbe wie beim einfachen Reed Modul. Der Analog Ausgang ist im Prinzip nutzlos. Der Digital Ausgang ist auf 0V wenn der Schalter geschlossen wurde.
3 Einfacher linearer Hall Sensor:
Dieser Sensor nutzt den sogenannten Hall-Effekt. Wird ein einfacher stromdurchflossener Hall-Sensor in ein senkrecht dazu verlaufendes Magnetfeld gebracht, ist die Ausgangsspannung proportional dem Produkt aus magnetischer Flußdichte und Strom.
Beim verwendeten Sensor vom Typ 48E fließt der Strom parallel zur Leiterplatte, das bedeutet der Magnet muss von oben oder unten angenähert werden.
Die Ausgangsspannung des Sensors liegt bei ca. 2.5 V. Nähert man einen Magneten in der im Bild gezeigten Richtung sinkt oder steigt die Ausgangsspannung je nachdem ob der Nord oder Südpol des Magneten in Richtung zum Hallsensor zeigt. Je näher sich der Magnet am Hallsensor befindet desto stärker wird die Änderung der Ausgangsspannung.Neben dem Vorhandensein eines Magnetfeldes kann der lineare Hallsensor auch die Richtung und die Stärke des Magnetfeldes erfassen. Bewegt sich ein Magnet parallel zum Hallsensor kann man zum Beispiel durch Auffinden des Maximum den Magneten exakt gegenüber dem Hallsensor positionieren.
4 Linearer Hallsensor mit Komparator:
Dieses Modul benutzt ebenfalls einen Sensor vom Typ 48E und am Analogausgang A0 steht weitgehend das selbe Signal wie beim einfachen Modul zur Verfügung. Zusätzlich hat dieses Modul aber einen Komparator LM393 der den digitalen Ausgang ab einem bestimmten Schwellwert auf LOW schaltet. Es ist auch eine grüne LED vorhanden die immer dann leuchtet wenn der Schwellwert überschritten wurde. Mit dem Potentiometer kann man die Empfindlichkeit einstellen. Allerdings funktioniert der Komparator nur mit einer Richtung des Magnetfeldes. Dreht man den Magente um, schaltet der Komparator nicht und der Digital Ausgang bleibt auf HIGH.
5 Digitaler Hall Sensor:
Dieses Modul benutzt einen Hallsensor mit eingebautem Schwellwertschalter vom Typ 3141. Auf dem Modul ist eine rote LED angebracht, die immer dann leuchtet, wenn der Ausgang S auf LOW geht. Auch dieser Sensor funktioniert nur in einer Richtung des Magnetfeldes. Die Empfindlichkeit ist deutlich geringer als beim linearen Hallsensor 48E.
Schaltet der lineare Hallsensor mit einem bestimmten Magneten bereits in einer Entfernung von 50 mm schaltet der Sensor 3141 mit dem selben Magnet erst bei einer Entfernung von ca. 10 mm.
Testschaltung und Programm:
Das erste Testprogramm ist für Sensoren mit Digital Ausgang. Bei den Sensoren 1, und 5 verbinden wir den mittleren Pin mit +5V, den – Pin mit GND und den S Pin mit D2 am Arduino. Bei den Modulen mit Komparator (2 und 4) wird der + Pin mit +5V, der GND Pin mit GND und der D0 Pin mit D2 am Arduino verbunden.
Zur Anzeige verwenden wir die interne LED.
const byte led = 13;
void setup() {
// pins aktivieren
pinMode(sensor,INPUT_PULLUP);
pinMode(led,OUTPUT);
}
void loop() {
//wir lesen den sensor zustand und
//schalten die led ein wenn der sensor auf LOW ist
digitalWrite(led,! digitalRead(sensor));
}
Für die Module mit Analog Ausgang (3 und 4) verwenden wir folgende Schaltung:
Das Bild zeigt die Verdrahrung für das Modul 4 mit Komparator. Für den einfachen linearen Hallsensor Modul 3 verbinden wir den mittleren Pin mit dem roten Draht, den – Pin mit dem schwarzen Draht und den S Pin mit dem gelben Draht. Das Programm liest den Wert vom Sensor ein und vergleicht ihn mit zwei Schwellwerten für Nordpol und Südpol. Wird einer der beiden Schwellwerte über bzw. unterschritten leuchtet die zwei Farben LED rot oder grün auf. Der analge Wert vom Sensor wird außerdem auf die serielle Schnittstelle ausgegeben und kann mit dem Serial Plotter der Arduino IDE visualisiert werden.
const byte nord = 8; //Anzeige Nordpol
const byte sued = 9; //Anzeige Südpol
const int sw = 50; //relativer Schwellwert
void setup() {
Serial.begin(115200); //Start serielle Schnittstelle
pinMode(nord, OUTPUT);
pinMode(sued, OUTPUT);
}
void loop() {
int val = analogRead(eingang); //wert des Sensors ohne Magnetfeld ca 512
digitalWrite(nord, (val > (512+sw))); // > 562 wir zeigen Nord an
digitalWrite(sued, (val < (512-sw))); // < 462 wir zeigen Süd an
Serial.print(val); //Ausgabe der Werte über serielle Schnittstelle für den Plotter
Serial.print(" ");
Serial.print(512-sw);
Serial.print(" ");
Serial.println(512+sw);
delay(100);
}
Anzeige des seriellen Plotters. Man sieht das Absinken bzw. Ansteigen der Ausgangsspannung beim Annähern des Magneten abhängig von der Richtung des Magnetfeldes. Die rote und grüne Linie zeigt die eingestellten Schwellwerte.
2 comments
Gerald Lechner
@Tom: Am einfachsten geht das, durch Nutzung eines Interrupts. Fast jeder der Eingänge des ESP32 ist interruptfähig. Der Interrupt kann beim Übergang von 0 nach 1 oder von 1 nach 0 ausgelöst werden. Dem Interrupt wird eine Funktion zugeordnet, die immer dann aufgerufen wird, wenn das Ereignis eintritt. In dieser Funktion kann dann z.B. ein globales Flag gesetzt werden, das im Hauptprogramm ausgelesen werden kann. Wie man einen Interrupt mit dem ESP32 einrichtet und verwendet wird in zahlreichen Beiträgen im Internet beschrieben.
Tom
Ich habe eine Frage zur Nutzung des einfachen Reed-Kontaktes mit einem ESP32. Der Kontakt soll die Magnet-Wippe eines Regenmengen-Sensors auslesen. Beim Umschalten der Wippe liegt das Signal also nur sehr kurzzeitig an. Wenn der ESP gerade andere Werte wie den Luftfeuchtigkeitsmesser oder Drucksensor ausliest oder in einem Delay hängt wird das Signal nicht ausgewertet. Wie kann ich das zuverlässig auslesen? Schöne Grüße Tom