1 contatto reed semplice:
Il modulo è costituito da un interruttore reed e una resistenza di pullup. L'interruttore reed è un tubo di vetro con alette interne magnetiche. Se il tubo di vetro viene portato in un campo magnetico esterno, le lingue di contatto si spostano l'una verso l'altra e chiudono il contatto. Questo sensore è molto adatto per rilevare la presenza di un oggetto all'interno del quale è presente un magnete o per misurare la velocità quando il magnete si sposta oltre l'interruttore reed durante un giro.
2 contatto Reed con comparatore:
Lo stesso contatto reed viene utilizzato qui. Contrariamente al semplice modulo, qui viene utilizzato un comparatore LM393. Vantaggio di commutazione precisa e LED di stato verde che si illumina quando il contatto è stato chiuso.
L'area di applicazione è la stessa del modulo reed semplice. L'uscita analogica è sostanzialmente inutile. L'uscita digitale è a 0 V quando l'interruttore è chiuso.
3 Sensore Hall lineare semplice:
Questo sensore utilizza il cosiddetto effetto Hall. Se un semplice sensore Hall che trasporta corrente viene posizionato in un campo magnetico che scorre perpendicolare ad esso, la tensione di uscita è proporzionale al prodotto della densità e della corrente del flusso magnetico.
Con il sensore di tipo 48E utilizzato, la corrente scorre parallela al circuito, il che significa che il magnete deve essere approssimato dall'alto o dal basso.
La tensione di uscita del sensore è di circa 2,5 V. Se ci si avvicina a un magnete nella direzione mostrata in figura, la tensione di uscita aumenta o diminuisce a seconda che il polo nord o sud del magnete punti verso il sensore Hall. Più il magnete si avvicina al sensore Hall, maggiore è la variazione della tensione di uscita.Oltre alla presenza di un campo magnetico, il sensore Hall lineare può anche rilevare la direzione e l'intensità del campo magnetico. Se un magnete si sposta parallelamente al sensore Hall, ad esempio, trovando il massimo, il magnete può essere posizionato esattamente di fronte al sensore Hall.
4 Sensore Hall lineare con comparatore:
Questo modulo utilizza anche un sensore di tipo 48E e in gran parte lo stesso segnale del modulo semplice è disponibile sull'uscita analogica A0. Inoltre, questo modulo ha un comparatore LM393 che commuta l'uscita digitale su BASSO da una certa soglia. C'è anche un LED verde che si illumina ogni volta che viene superata la soglia. La sensibilità può essere regolata con il potenziometro. Tuttavia, il comparatore funziona solo con una direzione del campo magnetico. Se si gira il magnete, il comparatore non cambia e l'uscita digitale rimane ALTA.
5 sensore Hall digitale:
Questo modulo utilizza un sensore Hall con interruttore di soglia incorporato di tipo 3141. Un modulo rosso è collegato al modulo, che si illumina ogni volta che l'uscita S diventa BASSA. Questo sensore funziona anche solo in una direzione del campo magnetico. La sensibilità è significativamente inferiore rispetto al sensore Hall 48E lineare.
Se il sensore Hall lineare commuta con un certo magnete a una distanza di 50 mm, il sensore 3141 commuta solo con lo stesso magnete a una distanza di circa 10 mm.
Circuito di prova e programma:
Il primo programma di test è per sensori con uscita digitale. Per i sensori 1 e 5, colleghiamo il pin centrale a + 5 V, il pin - a GND e il pin S a D2 su Arduino. Per i moduli con comparatore (2 e 4) il pin + è collegato a + 5V, il pin GND su GND e il pin D0 su D2 su Arduino.
Usiamo il LED interno per il display.
const byte led = 13;
void setup () {
// attiva i pin
pinMode (sensore, INPUT_PULLUP);
pinMode (led, OUTPUT);
}
void loop () {
// leggiamo lo stato del sensore e
accendere il led quando il sensore è su LOW
digitalWrite(led,! digitalRead(sensor));
}
Per i moduli con uscita analogica (3 e 4) usiamo il seguente circuito:
L'immagine mostra lo spostamento per il modulo 4 con il comparatore. Per il semplice modulo sensore sala lineare 3, colleghiamo il perno centrale con il filo rosso, il perno con il filo nero e il perno S con il filo giallo. Il programma legge il valore dal sensore e lo confronta con due valori soglia per il Polo Nord e il Polo Sud. Se uno dei due valori di soglia viene superato o superato, il LED dei due colori diventa rosso o verde. Il valore del sensore viene emesso anche sulla porta seriale e può essere visualizzato con il plotter seriale dell'IDE di Arduino.
const byte nord - 8; Pubblicità Polo Nord
byte const citato in giudizio - 9; Mostra Polo Sud
const int sw - 50; valore soglia relativo
void setup()
Serial.begin(115200); Avviare l'interfaccia seriale
pinMode (nord, OUTPUT);
pinMode (sued, OUTPUT);
}
void loop()
int val - analogRead (ingresso); valore del sensore senza campo magnetico circa 512
digitalWrite(nord, (val > (512 sw)) > 562 mostriamo Nord
digitalWrite(sued, (val < (512-sw))); < 462 mostriamo Sud
Serial.print(val); Uscita dei valori tramite interfaccia seriale per il plotter
Serial.print(" ");
Serial.print(512-sw);
Serial.print(" ");
Serial.println(512 sw);
ritardo(100);
}
Visualizzazione del plotter seriale. Si può vedere la diminuzione o l'aumento della tensione di uscita quando ci si avvicina al magnete a seconda della direzione del campo magnetico. Le linee rosse e verdi mostrano i valori di soglia impostati.
2 commenti
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