ESP32 - Capteur d'eau

Ce guide vous montrera comment utiliser un capteur d’eau avec l’ESP32 et MicroPython pour détecter les fuites d’eau, mesurer les précipitations, vérifier si un réservoir déborde ou surveiller les niveaux d’eau. En détail, nous apprendrons.

ESP32 MicroPython et module capteur d'eau

Préparation du matériel

1×Module de développement ESP32 ESP-WROOM-32
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×Water level sensor
1×Fils de connexion
1×Recommandé: Carte d'extension à bornier à vis pour ESP32
1×Recommandé: Breakout Expansion Board for ESP32
1×Recommandé: Répartiteur d'alimentation pour ESP32

Ou vous pouvez acheter les kits suivants:

1×Kit de Démarrage DIYables ESP32 (ESP32 inclus)
1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du capteur de niveau d'eau

Schéma de brochage du capteur de niveau d'eau

Le capteur de niveau d'eau a trois broches :

  • Broche S (Signal) : Sortie analogique. Connectez-la à l’entrée analogique de l’ESP32.
  • Broche + (VCC) : Fournit de l’alimentation au capteur. Utilisez entre 3,3 V et 5 V.
  • Broche - (GND) : Connexion à la masse.
Schéma des broches du capteur d'eau

※ Note:

Le signal du capteur change lorsque la tension sur sa broche VCC est ajustée.

Comment fonctionne le capteur de niveau d'eau

Le capteur est composé de dix fils de cuivre que vous pouvez voir. Cinq de ces fils servent à l'alimentation, et les cinq autres servent à la détection. Ils sont disposés selon un motif, avec un fil de capteur entre chaque paire de fils d'alimentation. Normalement, ces fils ne se touchent pas, mais lorsque le capteur est dans l'eau, l'eau agit comme un pont entre eux.

Considérez les fils comme une sorte de bouton spécial qui change sa résistance en fonction de la quantité d'eau qui l'entoure.

  • Plus le niveau d'eau est élevé, plus la résistance est faible.
  • Plus d'eau signifie une meilleure conductivité, ce qui signifie une résistance plus faible.
  • Moins d'eau signifie une conductivité moindre, ce qui entraîne une résistance plus élevée.

Le capteur utilise cette résistance pour produire une tension de sortie. En mesurant cette tension, nous pouvons déterminer à quelle hauteur se situe le niveau d'eau.

Diagramme de câblage

Connectez la broche VCC du capteur à la broche 5V de l'ESP32 et la broche GND à la broche GND de l'ESP32 pour l'alimenter. Il n’est pas conseillé de laisser le capteur sous tension dans un environnement humide, car cela peut rapidement l’endommager et réduire sa durée de vie. Pour éviter cela, n’alimentez le capteur que lorsque vous avez besoin de lire ses données. Connectez la broche VCC du capteur à une broche numérique de l'ESP32. Pour lire le capteur, définissez la broche de l'ESP32 sur un niveau logique élevé, puis après la lecture, sur un niveau logique bas.

Schéma de câblage du capteur d'eau ESP32 MicroPython

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Comment connecter l'ESP32 et le capteur d'eau

Code MicroPython ESP32 - Lecture de la valeur d'un capteur d'eau

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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

Étapes rapides

Voici des instructions sur la manière de configurer et d’exécuter votre code MicroPython sur l’ESP32 en utilisant l’IDE Thonny :

  • Assurez-vous que Thonny IDE est installé sur votre ordinateur.
  • Confirmez que le firmware MicroPython est chargé sur votre carte ESP32.
  • Si c'est la première fois que vous utilisez un ESP32 avec MicroPython, consultez le guide ESP32 - Premiers pas. pour des instructions étape par étape.
  • Connectez la carte ESP32 au capteur d'eau selon le schéma fourni.
  • Connectez la carte ESP32 à votre ordinateur avec un câble USB.
  • Ouvrez Thonny IDE sur votre ordinateur.
  • Dans Thonny IDE, allez dans Outils Options.
  • Sous l'onglet Interpréteur, choisissez MicroPython (ESP32) dans le menu déroulant.
  • Assurez-vous que le bon port est sélectionné. Thonny IDE le détecte généralement automatiquement, mais vous pourriez avoir besoin de le sélectionner manuellement (comme COM12 sous Windows ou /dev/ttyACM0 sous Linux).
  • Copiez le code MicroPython fourni et collez-le dans l'éditeur de Thonny.
  • Enregistrez le code sur votre ESP32 en:
    • En cliquant sur le bouton Enregistrer ou en appuyant sur Ctrl+S.
    • Dans la boîte de dialogue d'enregistrement, choisissez périphérique MicroPython.
    • Nommez le fichier main.py.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
  • Placez lentement le capteur dans un verre d'eau.
  • Consultez le message dans le Shell en bas de Thonny.
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 ≡

※ Note:

N'immergez pas complètement le capteur; laissez uniquement les parties visibles de la carte électronique toucher l'eau. Faites attention lors de l'installation.

※ Note:

Ce tutoriel démontre comment utiliser la fonction adc.read() pour lire des valeurs d'un ADC (convertisseur analogique-numérique) connecté à un capteur d'eau. L'ADC de l'ESP32 est adapté pour des projets qui ne nécessitent pas une grande précision. Cependant, si votre projet nécessite des mesures précises, gardez ceci à l'esprit :

  • L'ADC de l'ESP32 n'est pas parfaitement précis et peut nécessiter une calibration pour des résultats précis. Chaque carte ESP32 peut varier légèrement, il est donc nécessaire de calibrer chaque carte individuellement.
  • La calibration peut être difficile, surtout pour les débutants, et pourrait ne pas toujours donner les résultats exacts que vous souhaitez.

Pour les projets nécessitant une grande précision, envisagez d'utiliser un ADC externe (par exemple ADS1115) avec l'ESP32 ou optez pour un Arduino, qui possède un ADC plus fiable. Si vous souhaitez tout de même calibrer l'ADC de l'ESP32, reportez-vous au pilote de calibration ADC ESP32.

Comment détecter une fuite d'eau

Pour détecter les fuites d'eau, la pluie ou des cuves qui débordent, nous comparons la valeur mesurée à une limite prédéfinie. Cette limite est définie au cours de la phase de calibration de ce tutoriel. Le code MicroPython pour ESP32 ci-dessous montre comment détecter les fuites d'eau.

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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

Comment mesurer le niveau d'eau

Pour décomposer le niveau d'eau le plus élevé en différentes étapes et identifier l'étape actuelle, suivez la méthode décrite dans le code ci-dessous. Gardez à l'esprit que le niveau d'eau le plus élevé correspond au capteur entièrement immergé dans l'eau. Ce code divise la hauteur totale en 4 étapes.

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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

※ Note:

  • SENSOR_MIN et SENSOR_MAX sont définis pendant l'étalonnage.
  • La méthode de cartographie expliquée peut ne pas être très précise, mais elle est suffisante pour la plupart des utilisations. Pour une meilleure précision, mesurez les valeurs de seuil pour chaque niveau comme expliqué dans la section d'étalonnage.

Calibration du capteur de niveau d'eau

La sortie du capteur dépend à la fois du niveau d'eau et de sa conductivité. L'eau pure ne conduit pas l'électricité, mais l'eau contenant des minéraux et des impuretés conduit l'électricité. Plus l'eau est conductrice, plus le capteur devient sensible. De plus, la sortie peut changer en fonction de la tension fournie à la broche VCC du capteur.

Pour obtenir des lectures précises du capteur d'eau, il vaut mieux le calibrer pour le type d'eau spécifique que vous prévoyez de surveiller. Avant de définir un seuil pour déclencher une action, vous devriez tester la valeur réelle que lit le capteur.

Comment effectuer le test :

  • Utilisez le croquis ci-dessus pour lire la valeur du capteur.
  • Plongez le capteur dans l'eau au niveau où vous souhaitez définir le seuil.
  • Notez la valeur affichée dans le Shell en bas de Thonny.
  • Utilisez cette valeur comme seuil pour déclencher une action.
  • Il se peut que vous ayez besoin d'essayer ce test plusieurs fois pour que cela fonctionne.

Le test peut aussi vous aider à trouver :

  • La valeur SENSOR_MIN, lorsque le capteur n'est pas dans l'eau.
  • La valeur SENSOR_MAX, lorsque le capteur est complètement immergé.
  • Une valeur seuil pour détecter les fuites d'eau.
  • Des valeurs seuil pour différents niveaux sur votre échelle.

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !