ESP32 - Wassersensor

Diese Anleitung zeigt Ihnen, wie Sie einen Wassersensor mit ESP32 und MicroPython verwenden, um Wasserlecks zu erkennen, Niederschlag zu messen, zu prüfen, ob ein Tank überläuft, oder den Wasserstand zu überwachen. Im Einzelnen lernen wir:

ESP32 MicroPython und Wassersensormodul

Erforderliche Hardware

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow
1×(Alternativ) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide
1×(Alternativ) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide
1×(Alternativ) ESP32 Uno-form board
1×(Alternativ) ESP32 S3 Uno-form board
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Water level sensor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Überblick über Water Level Sensor

Pinbelegung des Wasserstandssensors

Der Wasserstandssensor hat drei Pins:

  • S-Pin (Signal): Analogausgang. Mit einem Analogeingang des ESP32 verbinden.
  • +-Pin (VCC): Versorgt den Sensor mit Strom. Verwenden Sie zwischen 3,3V und 5V.
  • --Pin (GND): Masseanschluss.
Wassersensor Pinbelegung

※ Notiz:

Das Signal des Sensors ändert sich, wenn die Spannung an seinem VCC-Pin verändert wird.

Wie der Wasserstandssensor funktioniert

Der Sensor besteht aus zehn sichtbaren Kupferleiterbahnen. Fünf dieser Leiterbahnen dienen der Stromversorgung, die anderen fünf der Messung. Sie sind in einem Muster angeordnet, wobei sich jeweils eine Messleiterbahn zwischen zwei Versorgungsleiterbahnen befindet. Normalerweise berühren sich diese Leiterbahnen nicht, aber wenn sich der Sensor im Wasser befindet, bildet das Wasser eine Brücke zwischen ihnen.

Stellen Sie sich die Leiterbahnen wie eine besondere Art von Drehregler vor, dessen Widerstand sich je nach umgebender Wassermenge ändert.

  • Je höher der Wasserstand, desto geringer der Widerstand.
  • Mehr Wasser bedeutet bessere Leitfähigkeit und damit geringeren Widerstand.
  • Weniger Wasser bedeutet schlechtere Leitfähigkeit und damit höheren Widerstand.

Der Sensor nutzt diesen Widerstand, um eine Ausgangsspannung zu erzeugen. Durch Messen dieser Spannung können wir ermitteln, wie hoch der Wasserstand ist.

Verdrahtungsdiagramm

Verbinden Sie den VCC-Pin des Sensors mit dem 5V-Pin des ESP32 und den GND-Pin mit dem GND-Pin des ESP32, um ihn mit Strom zu versorgen. Es ist keine gute Idee, den Sensor in einer feuchten Umgebung dauerhaft mit Strom zu versorgen, da er dadurch schnell beschädigt werden kann und seine Lebensdauer sinkt. Um dies zu vermeiden, versorgen Sie den Sensor nur dann mit Strom, wenn Sie seine Daten abfragen müssen. Verbinden Sie den VCC-Pin des Sensors mit einem digitalen Pin des ESP32. Um den Sensor auszulesen, setzen Sie den ESP32-Pin auf HIGH und nach dem Auslesen auf LOW.

  • So verbinden Sie ESP32 und Wassersensor mit einem Breadboard
ESP32 MicroPython Wassersensor Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

So verbinden Sie ESP32 und Wassersensor

ESP32 MicroPython-Code - Wert vom Wassersensor lesen

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-micropython/esp32-micropython-water-sensor */ from machine import Pin, ADC import time POWER_PIN = 17 # The ESP32 pin GPIO17 connected to the VCC pin of water sensor SIGNAL_PIN = 36 # The ESP32 pin GPIO36 (ADC0) connected to the S pin of water sensor # Setup power pin power = Pin(POWER_PIN, Pin.OUT) power.value(0) # Initially turn off the sensor # Setup ADC for reading the water sensor signal = ADC(Pin(SIGNAL_PIN)) # Set the ADC width (resolution) to 12 bits signal.width(ADC.WIDTH_12BIT) # Set the attenuation to 11 dB, allowing input range up to ~3.3V signal.atten(ADC.ATTN_11DB) while True: power.value(1) # Power on the sensor time.sleep(0.01) # Wait 10ms for sensor to stabilize value = signal.read() # Read the analog value (0-4095 range on ESP32) power.value(0) # Power off the sensor print("Sensor value:", value) # Print the value time.sleep(1) # Wait for a second before next read

Schnelle Schritte

Hier finden Sie eine Anleitung, wie Sie Ihren MicroPython-Code mit der Thonny IDE auf dem ESP32 einrichten und ausführen:

  • Stellen Sie sicher, dass die Thonny IDE auf Ihrem Computer installiert ist.
  • Vergewissern Sie sich, dass die MicroPython-Firmware auf Ihrem ESP32-Board installiert ist.
  • Wenn Sie zum ersten Mal einen ESP32 mit MicroPython verwenden, lesen Sie die Anleitung ESP32 MicroPython Getting Started mit Schritt-für-Schritt-Anweisungen.
  • Verbinden Sie das ESP32-Board gemäß dem Schaltplan mit dem Wassersensor.
  • Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
  • Öffnen Sie die Thonny IDE auf Ihrem Computer.
  • Gehen Sie in der Thonny IDE zu Tools Options.
  • Wählen Sie im Reiter Interpreter im Dropdown-Menü MicroPython (ESP32) aus.
  • Stellen Sie sicher, dass der richtige Port ausgewählt ist. Die Thonny IDE erkennt ihn normalerweise automatisch, eventuell müssen Sie ihn aber manuell auswählen (z. B. COM12 unter Windows oder /dev/ttyACM0 unter Linux).
  • Kopieren Sie den bereitgestellten MicroPython-Code und fügen Sie ihn in den Editor von Thonny ein.
  • Speichern Sie den Code auf Ihrem ESP32:
    • Klicken Sie auf die Schaltfläche Save oder drücken Sie Ctrl+S.
    • Wählen Sie im Speicherdialog MicroPython device.
    • Nennen Sie die Datei main.py.
  • Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript auszuführen.
  • Tauchen Sie den Sensor langsam in ein Glas Wasser.
  • Sehen Sie sich die Meldung in der Shell unten in Thonny an.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot Sensor value: 0 Sensor value: 0 Sensor value: 99 Sensor value: 387 Sensor value: 1135 Sensor value: 1711 Sensor value: 1737 Sensor value: 1763 Sensor value: 1819 Sensor value: 1865 Sensor value: 2082 Sensor value: 2111 Sensor value: 2210
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

※ Notiz:

Tauchen Sie den Sensor nicht vollständig ein; lassen Sie nur die sichtbaren Teile der Platine das Wasser berühren. Seien Sie bei der Installation vorsichtig.

※ Notiz:

Dieses Tutorial zeigt, wie Sie mit der Funktion adc.read() Werte von einem ADC (Analog-Digital-Wandler) lesen, der an einen Wassersensor angeschlossen ist. Der ADC des ESP32 eignet sich für Projekte, die keine hohe Genauigkeit erfordern. Wenn Ihr Projekt jedoch genaue Messungen benötigt, beachten Sie Folgendes:

  • Der ESP32-ADC ist nicht perfekt genau und kann für präzise Ergebnisse eine Kalibrierung erfordern. Jedes ESP32-Board kann leicht abweichen, daher ist eine Kalibrierung für jedes einzelne Board notwendig.
  • Die Kalibrierung kann besonders für Anfänger schwierig sein und liefert möglicherweise nicht immer genau die gewünschten Ergebnisse.

Für Projekte, die hohe Genauigkeit erfordern, sollten Sie einen externen ADC (z. B. ADS1115) mit dem ESP32 verwenden oder einen Arduino wählen, der einen zuverlässigeren ADC hat. Wenn Sie den ESP32-ADC dennoch kalibrieren möchten, lesen Sie den ESP32 ADC Calibration Driver.

So erkennen Sie ein Wasserleck

Um Wasserlecks, Regen oder überlaufende Tanks zu erkennen, vergleichen wir den Messwert mit einem voreingestellten Grenzwert. Dieser Grenzwert wird im Kalibrierungsteil dieses Tutorials festgelegt. Der folgende ESP32 MicroPython-Code zeigt, wie Wasserlecks erkannt werden.

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-micropython/esp32-micropython-water-sensor */ from machine import Pin, ADC import time POWER_PIN = 17 # The ESP32 pin GPIO17 connected to the VCC pin of water sensor SIGNAL_PIN = 26 # The ESP32 pin GPIO36 (ADC0) connected to the S pin of water sensor THRESHOLD = 1000 # Setup the power pin power = Pin(POWER_PIN, Pin.OUT) power.value(0) # Initially turn off the sensor # Setup ADC for reading the water sensor signal = ADC(Pin(SIGNAL_PIN)) # Set the ADC width (resolution) to 12 bits signal.width(ADC.WIDTH_12BIT) # Set the attenuation to 11 dB, allowing input range up to ~3.3V signal.atten(ADC.ATTN_11DB) # Initialize the power pin to off power.value(0) while True: power.value(1) # Turn on power to the sensor time.sleep_ms(10) # Short delay to allow sensor to stabilize value = signal.read() # Read the analog value from sensor power.value(0) # Turn off power to the sensor if value > THRESHOLD: # Check if the water level exceeds the threshold print("Water detected") time.sleep(1) # Delay for a second before the next reading

So messen Sie den Wasserstand

Um den höchsten Wasserstand in verschiedene Stufen zu unterteilen und die aktuelle Stufe zu ermitteln, folgen Sie der Methode im folgenden Code. Beachten Sie, dass der höchste Wasserstand dem vollständig eingetauchten Sensor entspricht. Dieser Code unterteilt die gesamte Höhe in 4 Stufen.

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-micropython/esp32-micropython-water-sensor */ from machine import Pin, ADC import time POWER_PIN = 17 # The ESP32 pin GPIO17 connected to the VCC pin of water sensor SIGNAL_PIN = 26 # The ESP32 pin GPIO36 (ADC0) connected to the S pin of water sensor SENSOR_MIN = 0 SENSOR_MAX = 2088 # Setup the power pin power = Pin(POWER_PIN, Pin.OUT) # Setup ADC for reading the water sensor signal = ADC(Pin(SIGNAL_PIN)) # Set the ADC width (resolution) to 12 bits signal.width(ADC.WIDTH_12BIT) # Set the attenuation to 11 dB, allowing input range up to ~3.3V signal.atten(ADC.ATTN_11DB) # Function to map the sensor value from one range to another def map_value(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min power.value(0) # Initially turn off the sensor while True: power.value(1) # Activate the sensor time.sleep_ms(10) # Wait for the sensor to stabilize value = signal.read() # Read the sensor output power.value(0) # Deactivate the sensor # Map the value to a 0-4 scale, adjusting for 16-bit ADC value level = map_value(value, SENSOR_MIN, SENSOR_MAX * 4095, 0, 4) # Print the water level print("Water level:", level) time.sleep(1) # Delay for one second before repeating

※ Notiz:

  • SENSOR_MIN und SENSOR_MAX werden bei der Kalibrierung festgelegt.
  • Die beschriebene Zuordnungsmethode ist möglicherweise nicht sehr präzise, reicht aber für die meisten Anwendungen aus. Für eine bessere Genauigkeit messen Sie die Schwellenwerte für jede Stufe, wie im Kalibrierungsabschnitt erläutert.

Kalibrierung des Wasserstandssensors

Die Ausgabe des Sensors hängt sowohl vom Wasserstand als auch von der Leitfähigkeit des Wassers ab. Reines Wasser leitet keinen Strom, Wasser mit Mineralien und Verunreinigungen hingegen schon. Je leitfähiger das Wasser, desto empfindlicher wird der Sensor. Außerdem kann sich die Ausgabe je nach der am VCC-Pin des Sensors anliegenden Spannung ändern.

Für genaue Messwerte des Wassersensors ist es am besten, ihn für die spezifische Wasserart zu kalibrieren, die Sie überwachen möchten. Bevor Sie einen Schwellenwert zum Auslösen einer Aktion festlegen, sollten Sie den tatsächlichen Wert testen, den der Sensor liest.

So führen Sie den Test durch:

  • Verwenden Sie den obigen Sketch, um den Wert des Sensors auszulesen.
  • Tauchen Sie den Sensor bis zu dem Pegel ins Wasser, bei dem Sie den Schwellenwert festlegen möchten.
  • Notieren Sie den Wert, der in der Shell unten in Thonny angezeigt wird.
  • Verwenden Sie diesen Wert als Schwellenwert zum Auslösen einer Aktion.
  • Möglicherweise müssen Sie diesen Test einige Male wiederholen, bis es passt.

Der Test kann Ihnen außerdem helfen, Folgendes zu ermitteln:

  • Den Wert SENSOR_MIN, wenn sich der Sensor nicht im Wasser befindet.
  • Den Wert SENSOR_MAX, wenn der Sensor vollständig eingetaucht ist.
  • Einen Schwellenwert zur Erkennung von Wasserlecks.
  • Schwellenwerte für die verschiedenen Stufen Ihrer Skala.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!