Arduino Nano ESP32 - Sensor de Agua

Este tutorial proporciona instrucciones sobre cómo usar Arduino Nano ESP32 y un sensor de agua para detectar lluvia, fugas de agua, desbordamiento de un tanque y medir el nivel de agua.

Hardware Requerido

1×Arduino Nano ESP32
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 Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

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

Diagrama de pines del sensor de nivel de agua

El sensor de nivel de agua incluye tres pines:

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

Cómo funciona el sensor de nivel de agua

Simplemente, cuanto más agua esté sumergido el sensor, mayor es la tensión de salida en el pin S. Al medir la tensión, podemos conocer el nivel de agua.

Diagrama de Cableado

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

Sin embargo, ese enfoque no se recomienda en la práctica. Si suministramos energía al sensor de agua de forma constante, el sensor de agua se corroe electroquímicamente más rápido debido al entorno húmedo. Por lo tanto, es mejor proporcionar energía al sensor de agua solo y únicamente cuando se lea el valor del sensor. Para ello, podemos conectar el pin VCC del sensor al pin digital de un ESP32 y programar el pin del ESP32 para que esté en HIGH antes de leer y en LOW después de leer.

Diagrama de cableado del sensor de agua para Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

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

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-water-sensor */ #define POWER_PIN D4 // Arduino Nano ESP32 pin D4 connected to sensor's VCC pin #define SIGNAL_PIN A0 // Arduino Nano ESP32 pin A0 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 usas Arduino Nano ESP32, consulta cómo configurar el entorno para Arduino Nano ESP32 en Arduino IDE.
  • Copia el código anterior y pégalo en Arduino IDE.
  • Compila y carga el código en la placa Arduino Nano ESP32 haciendo clic en el botón Upload en Arduino IDE
  • Introduce lentamente el sensor en el agua (un vaso de agua).
  • Mira el resultado en el Monitor de serie. Se ve 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 estar completamente sumergido; solo las trazas expuestas en la PCB pueden estar en contacto con 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 Arduino Nano ESP32 encienda un LED si se detecta una fuga de agua.

Diagrama de cableado

Diagrama de cableado LED para sensor de agua con Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

Código de Arduino Nano ESP32 - Detección de fuga de agua

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-water-sensor */ #define LED_PIN D9 // Arduino Nano ESP32 pin D9 connected to LED pin #define POWER_PIN D4 // Arduino Nano ESP32 pin D4 connected to sensor's VCC pin #define SIGNAL_PIN A0 // Arduino Nano ESP32 pin A0 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 de abajo divide el nivel de agua en cuatro niveles.

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-water-sensor */ #define LED_PIN D9 // Arduino Nano ESP32 pin D9 connected to LED pin #define POWER_PIN D4 // Arduino Nano ESP32 pin D4 connected to sensor's VCC pin #define SIGNAL_PIN A0 // Arduino Nano ESP32 pin A0 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 } }

※ Nota:

  • SENSOR_MIN y SENSOR_MAX son determinados 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

Vea 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 a Digital) conectado a un sensor o componente. El ADC del Arduino Nano ESP32 es adecuado para proyectos que no requieren alta precisión. Sin embargo, para proyectos que necesiten mediciones precisas, tenga en cuenta lo siguiente:

  • El ADC del Arduino Nano ESP32 no es perfectamente preciso y podría requerir calibración para obtener resultados correctos. Cada placa Arduino Nano ESP32 puede variar ligeramente, por lo que la calibración es necesaria para cada placa individual.
  • La calibración puede ser desafiante, especialmente para principiantes, y puede que no siempre produzca los resultados exactos que deseas.

Para proyectos que requieren alta precisión, considera usar un ADC externo (p. ej. ADS1115) con el Arduino Nano ESP32 o usar otro Arduino, como el Arduino Uno R4 WiFi, que tiene un ADC más confiable. Si aún deseas calibrar el ADC del Arduino Nano ESP32, consulta el 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!