ESP8266 - Sensor de agua

Este tutorial te enseña cómo usar el sensor de agua con ESP8266. Aprenderemos:

Hardware Requerido

1×ESP8266 NodeMCU
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×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

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

Pinout del sensor de nivel de agua

El sensor de nivel de agua tiene tres pines:

  • El pin S (Señal) es una salida analógica que debe conectarse a una de las entradas analógicas de tu ESP8266.
  • El pin + (VCC) suministra energía para el sensor y se recomienda usar un voltaje entre 3.3 V – 5 V.
  • El pin - (GND) es una conexión a tierra.
diagrama de pines del sensor de agua

Cómo funciona un sensor de nivel de agua

En resumen, el voltaje de salida en el pin de señal aumenta a medida que el sensor se expone a más agua.

Echemos un vistazo más de cerca.

Esta sección se dedica al conocimiento profundo. NO se preocupe si no lo entiende. Omita esta sección si lo abruma y vuelva otro día. Continúe leyendo con las siguientes secciones.

El sensor tiene un conjunto de diez pistas de cobre expuestas, de las cuales cinco son pistas de alimentación y las otras cinco son pistas de detección. Las pistas están dispuestas en paralelo, con una pista de detección entre cada dos pistas de alimentación. A menos que estén sumergidas en agua, estas pistas no están conectadas.

Las trazas actúan como una resistencia variable (al igual que un potenciómetro) cuya resistencia varía según el nivel de agua:

  • La resistencia de las pistas es inversamente proporcional al nivel del agua.
  • Cuanto mayor sea la cantidad de agua en la que esté sumergido el sensor, mayor será la conductividad, lo que resulta en una menor resistencia.
  • Cuanto menor sea la cantidad de agua en la que esté sumergido el sensor, peor será la conductividad, lo que resulta en una mayor resistencia.
  • El voltaje de salida del sensor está determinado por la resistencia.

La medición del voltaje puede usarse para determinar el nivel de agua.

Diagrama de Cableado

En teoría, los pines VCC y GND del sensor pueden conectarse a los pines 5V y GND del ESP8266, respectivamente, para proporcionar energía al sensor.

Sin embargo, no se recomienda utilizar este método en la práctica. Si el entorno es húmedo, suministrar energía al sensor de forma constante hará que se corroe electroquímicamente a un ritmo más rápido, reduciendo así su vida útil. Para evitarlo, sugerimos alimentar al sensor solo cuando necesites leer su valor. Esto se puede hacer conectando el pin VCC del sensor a un pin digital de un ESP8266 y configurando el pin del Arduino en HIGH antes de leer y en LOW después.

Diagrama de cableado del sensor de agua ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

Código ESP8266 - Lectura del valor del sensor de agua

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-water-sensor */ #define POWER_PIN D7 #define SIGNAL_PIN A0 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); 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 Serial.print("Sensor value: "); Serial.println(value); delay(1000); }

Pasos R\u00e1pidos

Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulte el tutorial cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usa ESP8266.
  • Conecte los componentes tal como se muestran en el diagrama.
  • Conecte la placa ESP8266 a su computadora usando un cable USB.
  • Abra el Arduino IDE en su computadora.
  • Elija la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM respectivo.
  • Copie el código y ábralo con el Arduino IDE.
  • Haga clic en el botón Upload en el Arduino IDE para compilar y subir el código al ESP8266.
  • Deslice suavemente el sensor dentro de un vaso de agua.
  • Vea el resultado en el Monitor Serial; el valor debería ser 0 cuando el sensor no esté en contacto con nada.
COM6
Send
Sensor value: 0 Sensor value: 0 Sensor value: 0 Sensor value: 25 Sensor value: 97 Sensor value: 284 Sensor value: 428 Sensor value: 435 Sensor value: 441 Sensor value: 455 Sensor value: 467 Sensor value: 521 Sensor value: 528 Sensor value: 553
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Nota:

El sensor no debe estar completamente sumergido; solo las pistas expuestas en la PCB deben entrar en contacto con el agua. Por favor, tenga cuidado al instalarlo.

Cómo detectar fugas de agua

Para identificar fugas de agua, lluvia y el desbordamiento del tanque, solo necesitamos comparar el valor de lectura con un valor umbral que se determina durante la sección de calibración de este tutorial.

Consideremos un caso particular. Si se detecta agua, el ESP8266 activará un LED.

Diagrama de cableado

Esquema de cableado del LED para el sensor de agua ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Código ESP8266 - Detección de fugas de agua

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-water-sensor */ #define LED_PIN D2 #define POWER_PIN D7 #define SIGNAL_PIN A0 #define THRESHOLD 300 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // Configure D2 pin as an OUTPUT pinMode(POWER_PIN, OUTPUT); // Configure D7 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 del agua

Si desea medir el nivel actual de agua dividiendo la altura máxima en varios niveles, se puede usar el siguiente código. Tenga en cuenta que la altura máxima del agua equivale a la altura del sensor. Este código divide la altura máxima en cuatro niveles.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-water-sensor */ #define POWER_PIN 7 #define SIGNAL_PIN A5 #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); 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 mediante el proceso de calibración.
  • El método de mapeo mencionado anteriormente no es preciso. Sin embargo, es adecuado para muchas aplicaciones. Si desea hacer los resultados más precisos, puede medir los valores umbral para cada nivel. Para obtener más información, consulte la sección de calibración al final de este tutorial.

Calibración del sensor de nivel de agua

El valor de salida del sensor está determinado por dos factores: el nivel de agua y la conductividad del agua. El agua pura no es conductora; sin embargo, cuando hay minerales e impurezas presentes, el agua se vuelve conductora. Cuanto más conductiva sea el agua, mayor será la sensibilidad del sensor. Además, el valor de salida también se ve afectado por el voltaje suministrado al pin VCC del sensor.

Para obtener lecturas precisas del sensor de agua, le sugerimos calibrarlo para el tipo específico de agua que planea monitorear.

Antes de establecer el umbral para iniciar una acción, es necesario medir el valor real obtenido del sensor mediante una prueba.

Instrucciones para la prueba:

  • Utilice el sketch proporcionado anteriormente para leer el valor del sensor.
  • Sumerja el sensor en el agua, asegurándose de que esté en el nivel de umbral deseado.
  • Registre el valor que emite el sensor en el Monitor Serial.
  • Utilice este valor como umbral para activar una acción específica.

Puede que se necesite algo de experimentación para completar esta prueba.

La prueba también puede usarse para descubrir:

  • Valor de SENSOR_MIN, cuando el sensor no está sumergido en el líquido
  • Valor de SENSOR_MAX, cuando el sensor está totalmente sumergido en el líquido
  • Un valor límite para detectar fugas de agua
  • Los valores límite para cada etapa de tu escala de grados

※ Nota:

Este tutorial usa la función analogRead() para obtener datos de un ADC (Convertidor Analógico-Digital) que está conectado a un sensor u otra parte. El ADC del ESP8266 funciona bien para proyectos en los que no necesitas lecturas muy precisas. Pero recuerda, el ADC del ESP8266 no es muy preciso para mediciones detalladas. Si tu proyecto necesita ser muy preciso, quizá quieras usar un ADC separado como el ADS1115 con el ESP8266, o usar Arduino como el Arduino Uno R4 WiFi, que tiene un ADC más confiable.

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.

Desafíate a ti mismo

  • Al detectar una fuga de agua,
  • Enviar un correo electrónico,
  • Enviar un mensaje SMS,
  • Y activar una alarma sonora.

※ 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!