ESP32 - Watersensor

Deze tutorial legt uit hoe u een ESP32 en een watersensor gebruikt om regenval, waterlekken, tankoverloop te detecteren en het waterniveau te meten.

Hardware Benodigd

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB Kabel Type-C
1×Watersensor (waterniveau sensor)
1×Breadboard (experimenteerprint)
1×Jumper Draden (verbindingsdraden)
1×(Optioneel) DC Power Jack
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de Watersensor (Water Level Sensor)

Watersensor Pinout

De watersensor heeft 3 pinnen:

  • S (Signaal) pin: Deze pin geeft een analoge spanning uit die evenredig is met het waterniveau. Deze pin moet worden aangesloten op een analoge input pin van de ESP32.
  • + (VCC) pin: sluit deze pin aan op 3,3V of 5V.
  • - (GND) pin: sluit deze pin aan op GND.
water sensor pinout

Hoe de Watersensor Werkt

Eenvoudig gezegd: hoe dieper de sensor in het water wordt ondergedompeld, hoe hoger de uitgangsspanning op de S-pin is. Door de spanning te meten, kunnen we het waterniveau bepalen.

Aansluitschema

In theorie kunnen we de watersensor van stroom voorzien door de VCC- en GND-pinnen van de sensor te verbinden met de 3,3V en GND pinnen van de ESP32.

Echter, deze manier wordt in de praktijk niet aanbevolen. Als we de watersensor continu van stroom voorzien, zal de sensor door het vochtige milieu sneller elektrochemisch corroderen. Daarom is het beter om de voedingsspanning alleen aan te zetten wanneer we een meting verrichten.

Om dit te realiseren, kunnen we de VCC pin van de sensor verbinden met een digitale pin van de ESP32, en deze pin vóór het lezen op HIGH zetten en erna weer op LOW.

  • Hoe ESP32 en watersensor aan te sluiten met behulp van een breadboard
ESP32 Water Sensor wiring diagram

This image is created using Fritzing. Click to enlarge image

Hoe ESP32 en watersensor aan te sluiten

ESP32 Code - Waarde Lezen van Watersensor

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-water-sensor */ #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF Serial.print("The water sensor value: "); Serial.println(value); delay(1000); }

Snelle Stappen

  • Als u ESP32 voor het eerst gebruikt, bekijk dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Kopieer de bovenstaande code en plak deze in de Arduino IDE.
  • Compileer en upload de code naar het ESP32-board door op de Upload-knop in Arduino IDE te klikken.
  • Dompel de sensor langzaam in het water (bijvoorbeeld een glas water).
  • Bekijk het resultaat op de Seriële Monitor. Het ziet er als volgt uit: de waarde is 0 wanneer de sensor niets raakt.
COM6
Send
The water sensor value: 0 The water sensor value: 0 The water sensor value: 0 The water sensor value: 25 The water sensor value: 196 The water sensor value: 587 The water sensor value: 625 The water sensor value: 1434 The water sensor value: 1449 The water sensor value: 1454 The water sensor value: 1469 The water sensor value: 2525 The water sensor value: 2526 The water sensor value: 2558
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

De watersensor is niet ontworpen om volledig ondergedompeld te worden; alleen de blootgestelde banen op de PCB mogen in het water zijn. Wees daarom voorzichtig tijdens de installatie.

Hoe Waterlek te Detecteren

Om waterlekken, regenval en tankoverloop te detecteren, hoeven we alleen de waarde van de sensor te vergelijken met een drempelwaarde. De drempelwaarde wordt bepaald in het kalibratiegedeelte van deze tutorial.

Laten we ervoor zorgen dat de ESP32 een LED aanzet als er waterlek wordt gedetecteerd.

Aansluitschema

ESP32 Water Sensor LED wiring diagram

This image is created using Fritzing. Click to enlarge image

ESP32 Code - Waterlek Detectie

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-water-sensor */ #define LED_PIN 21 // ESP32 pin GPIO21 connected to LED pin #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin #define THRESHOLD 1000 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(LED_PIN, OUTPUT); // configure pin as an OUTPUT pinMode(POWER_PIN, OUTPUT); // configure pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF digitalWrite(LED_PIN, LOW); // turn LED OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF if (value > THRESHOLD) { Serial.print("The water is detected"); digitalWrite(LED_PIN, HIGH); // turn LED ON } else { digitalWrite(LED_PIN, LOW); // turn LED OFF } }

Hoe Het Waterniveau Te Meten

De onderstaande code verdeelt het waterniveau in 4 niveaus.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-water-sensor */ #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin #define SENSOR_MIN 0 #define SENSOR_MAX 521 int value = 0; // variable to store the sensor value int level = 0; // variable to store the water level void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure D7 pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF level = map(value, SENSOR_MIN, SENSOR_MAX, 0, 4); // 4 levels Serial.print("Water level: "); Serial.println(level); delay(1000); }

※ Notiz:

  • SENSOR_MIN en SENSOR_MAX worden bepaald door het kalibratieproces.
  • De bovenstaande methode voor mapping is niet exact, maar wel acceptabel voor veel toepassingen.

Kalibratie Watersensor

Bekijk hoe u de watersensor kalibreert

※ Notiz:

Deze tutorial gebruikt de functie analogRead() om waarden te lezen van een ADC (Analog-to-Digital Converter) die verbonden is met de watersensor. De ADC van de ESP32 is geschikt voor projecten die geen hoge precisie vereisen. Voor projecten die nauwkeurige metingen nodig hebben, is het belangrijk om te weten:

  • De ESP32 ADC is niet perfect nauwkeurig en kan kalibratie vereisen voor correcte resultaten. Elk ESP32-board kan iets anders zijn, dus u moet de ADC per board kalibreren.
  • Kalibratie kan lastig zijn, vooral voor beginners, en het geeft mogelijk niet altijd de gewenste exacte resultaten.

Voor projecten die hoge precisie vereisen, overweeg het gebruik van een externe ADC (bijvoorbeeld ADS1115) in combinatie met de ESP32, of gebruik een Arduino die een betrouwbaardere ADC heeft.

Als u toch de ESP32 ADC wilt kalibreren, raadpleeg dan ESP32 ADC Kalibratie Driver.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u dit project stap voor stap te begrijpen.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!