ESP32 - Sensor de agua

Este tutorial explica cómo utilizar ESP32 y un sensor de agua para detectar lluvia, fugas de agua, desbordamiento del tanque y medir el nivel de agua.

Hardware Requerido

1×Módulo de Desarrollo ESP32 ESP-WROOM-32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Water level sensor
1×Protoboard
1×Cables Puente
1×(Opcional) Conector de Alimentación DC
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del sensor de nivel de agua

Esquema de pines del sensor de nivel de agua

El sensor de nivel de agua incluye 3 pines:

  • Pin S (Señal): Este pin genera una tensión analógica que es proporcional al nivel de agua. Este pin debe conectarse a un pin de entrada analógica del ESP32.
  • Pin + (VCC): conecta este pin a 3.3V o 5V.
  • Pin - (GND): conecta este pin a GND.
Esquema de pines del sensor de agua

Cómo funciona el sensor de nivel de agua

Simplemente, cuanto más agua esté sumergido el sensor, mayor será el voltaje de salida en el pin S. Al medir ese voltaje, podemos conocer el nivel de agua.

Diagrama de Cableado

En teoría, podemos alimentar al sensor de agua conectando los pines VCC y GND del sensor a los pines de 3,3 V y GND del ESP32, respectivamente.

Sin embargo, esa forma no se recomienda en la práctica. Si suministramos energía al sensor de agua de forma constante, el sensor se corroerá electroquimicamente más rápido debido al ambiente húmedo. Es mejor suministrar energía al sensor de agua solo cuando se vaya a leer su valor. Para ello, podemos conectar el pin VCC del sensor al pin digital de un ESP32 y programar ese pin del ESP32 para que esté en HIGH antes de leer y en LOW después de leer.

Esquema de cableado del sensor de agua ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Cómo conectar el ESP32 y un sensor de agua

Código para ESP32 - Lectura del valor de un sensor de agua

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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); }

Pasos R\u00e1pidos

  • Si es la primera vez que usa ESP32, consulte cómo configurar el entorno para ESP32 en Arduino IDE.
  • Copie el código anterior y péguelo en el IDE de Arduino.
  • Compilar y subir el código a la placa ESP32 haciendo clic en el botón Subir en el IDE de Arduino.
  • Sumerja lentamente el sensor en el agua (un vaso de agua).
  • Vea el resultado en el Monitor serie. Parece lo siguiente: El valor es 0 cuando el sensor no está tocando nada.
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  

※ Nota:

El sensor de agua no está diseñado para quedar completamente sumergido; solo las trazas expuestas en la placa de circuito impreso pueden quedar sumergidas en el agua. Por favor, tenga cuidado al instalarlo.

Cómo detectar fugas de agua

Para detectar la fuga de agua, la lluvia y el desbordamiento del tanque, solo necesitamos comparar el valor del sensor con un umbral. El umbral se determina en la parte de calibración de este tutorial.

Hagamos que el ESP32 encienda un LED si se detecta una fuga de agua.

Diagrama de cableado

Diagrama de cableado LED para sensor de agua ESP32

This image is created using Fritzing. Click to enlarge image

Código ESP32 - Detección de Fugas de Agua

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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 } }

Cómo Medir el Nivel de Agua

El código siguiente divide el nivel de agua en 4 niveles.

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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); }

※ Nota:

  • SENSOR_MIN y SENSOR_MAX se determinan por el proceso de calibración.
  • El método de mapeo anterior no es preciso. Sin embargo, es aceptable en muchas aplicaciones.

Calibración del sensor de nivel de agua

Ver cómo calibrar el sensor de nivel de agua

※ Nota:

Este tutorial utiliza la función analogRead() para leer valores de un ADC (convertidor analógico-digital) conectado a un sensor de agua. El ADC del ESP32 es adecuado para proyectos que NO requieren alta precisión. Sin embargo, para proyectos que necesitan mediciones precisas, tenga en cuenta:

  • El ADC del ESP32 no es perfectamente preciso y podría necesitar calibración para obtener resultados correctos. Cada placa ESP32 puede variar un poco, por lo que es necesario calibrar el ADC para cada placa individual.
  • La calibración puede ser difícil, especialmente para principiantes, y puede que no siempre dé los resultados exactos que deseas.

Para proyectos que requieren alta precisión, considera usar un ADC externo (por ejemplo ADS1115) con el ESP32 o usar un Arduino, que tiene un ADC más fiable. Si aún quieres calibrar el ADC del ESP32, consulta ESP32 ADC Calibration Driver

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!