2 formas de controlar el nivel del agua con Arduino, casero y ultrasonidos

En muchos de los proyectos arduino necesitamos controlar el nivel del agua con arduino, para ello lo existen varias posibilidades yo te voy a contar 2 pero habría bastantes más. Estos 2 métodos nos valdrían para controlar el nivel de muchos líquido (no tiene porque ser agua)

Índice

Controlar el nivel del agua con arduino y dos cables, es gratis

Esta formar de controlar el nivel del agua tiene la ventaja principal es que nos sale gratis, o prácticamente gratis ya que sólo necesitamos un par de cables y una resistencia.

Materiales necesarios

Esquema de conexiones

El esquema de conexiones es muy sencillo, sólo hay que conectar los tres cables de la siguiente forma:
Cable Rojo: De una salida de 5V (puede ser la del arduino) al fondo del deposito
Cable Negro: De tierra (GND del arduino) a la resistencia y de esta a el deposito situado a la altura a la que queremos detectar el nivel
Cable Verde: De una entrada digital arduino (D4 en este caso) a la resistencia.

Controlar el nivel del agua con arduino y dos cables, método gratis

Funcionamiento

El funcionamiento es de los más sencillo como puedes ver en el esquema, tenemos dos cambles en el dentro del deposito (uno en el fondo y otro a la altura que queramos el nivel) y otro cable que conecta con la entrada digital del arduino (en este ejemplo D4 pero nos valdría cualquier otra).
Arduino estará leyendo esta entrada cada cierto intervalo de tiempo (en este caso un segundo).
Esta lectura podrá tener dos valores dependiendo de los cables del deposito:
HIGH (1) – Sí ambos cables están en contacto con el agua
LOW (0) – Si Uno de los dos o los dos cables no están en contacto con el agua.

Código

El código también es muy sencillo iniciamos el pin digital, lo leemos y en funcion de si es LOW (0) o HIGH (1) definimos una acción, en este ejemplo mostrar un mensaje por consola
LOW: Debes llenar el deposito.
HIGH: El deposito tiene agua

//Pin que nos da el nivel
int pinNivel = 4;
//Variable para almacenar el estado de nivel
int estadoNivelAgua = 0;
//Tiempo que debe esperar para la siguiente iteración del bucle
int tiempoEspera = 1000;//1 segundo

void setup()
{
//Iniciamos el pin el pin que nos da el nivel
pinMode(pinNivel, INPUT);
//Nicializa el serial
Serial.begin(9600);
}

void loop()
{
// Leermos el pin que nos da el nivel
estadoNivelAgua = digitalRead(pinNivel);
//Dependiendo del estado muestra un mensaje u otro.
if (estadoNivelAgua == HIGH) {
Serial.println(“El deposito tiene agua”);
} else {
Serial.println(“Debes llenar el deposito.”);
}
delay(tiempoEspera); //Espera el tiempo indicado
}

Conclusiones

Esta es una forma de controlar el nivel del agua con arduino sencilla y económica, si lo necesitamos podemos, añadir múltiples niveles y activar funciones entre los distintos, si quieres que ponga como hacerlo, pídelo en un comentario y lo añadiré.

Sensor ultrasonidos HC-SR04 para controlar el nivel del agua con arduino

El sensor de ultrasonidos hc-sr04 nos permite calcular la distancia entre el sensor y el líquido, su precio es bastante económico

Materiales necesarios

  • Arduino
  • Podemos usar el que nos apetezca, arduino uno, arduino nano, adruino mega….

  • Sensor de ultrasonidos hc-sr04
  • Cables para conexiones

Equema de conexiónes

Las conexiones son bastante sencillas, básicamente tienes que conectar las 3 patas del sensor a nuestro arduino.
Cable Rojo: De una salida de 5V (puede ser la del arduino) a la patilla de 5V del sensor
Cable Negro: De tierra (GND del arduino) a la patilla de 5V del sensor
Cable Verde: De una entrada digital arduino (D7 en este caso) a la patilla ECHO del sensor
Cable Amarillo: De una entrada digital arduino (D8 en este caso) a la patilla TRIG del sensor
En la imagen falta el cable Amarillo
Controlar nivel agua con 
ultrasonidos HC-SR04 y arduino

Funcionamiento

Hay que poner sensor hc-sr04 emitiendo ultrasonidos hacia el interior del depósito y este nos indicará la distancia a la que se encuentra el nivel del agua, con esta información calibraremos dos distancias, una para deposito lleno y otra para deposito vacío.
Si la distancia es menor a la deposito vacío mostraremos un mensaje por consola “Deposito vacío”
Si la distancia es mayor a la deposito lleno mostraremos un mensaje por consola “Deposito lleno”

Código

El código tambien es muy sencillo iniciamos el pin digital, y usamos la función pulsoCalcularDistanciaEnCm para calcular la distancia al agua dependiendo de en que humbral se encuentre esta definimos una acción, en este ejemplo mostrar un mensaje por consola
Si menor DEPOSITO_LLENO: El deposito esta lleno.
Si mayor DEPOSITO_VACIO: Debes llenar el deposito.
La función pulsoCalcularDistanciaEnCm lo que hace es enviar un pulso y esp

const int pinEcho = 7;
const int pinTrigger = 8;
//Umbral al que indicamos que esta lleno el deposito
const int DEPOSITO_LLENO = 40;
//Umbral al que indicamos que esta vacío el deposito
const int DEPOSITO_VACIO = 75;

/*
*Funcion que nos indica la distancia a la que se encuentra el agua.
*/
long pulsoCalcularDistanciaEnCm()
{
long durationPulso, distanciaCm;
//Generarmos un pulso limpio poniendo a LOW
digitalWrite(pinTrigger, LOW);
delayMicroseconds(4);
//generamos un pulso (Trigger)
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
//medimos el tiempo entre pulsos, en microsegundos
duration = pulseIn(pinEcho, HIGH);
//convertimos a distancia a cm
distanceCm = duration * 10 / 292/ 2;
return distanceCm;
}

void setup()
{
Serial.begin(9600);
pinMode(pinTrigger, OUTPUT);
pinMode(pinEcho, INPUT);

}

void loop()
{
//recupera la distancia en Centimetros
int cm = pulsoCalcularDistanciaEnCm();
if (cmDEPOSITO_VACIO){
Serial.print(“Deposito vacío “);
//Pinta al distancia
Serial.print(cm);
Serial.println(“cm”);
}
delay(100); // Espera 100 milisegundos
}

Conclusiones

Controlar el nivel del agua con arduino y el sensor de ultrasonidos HC-SR04 nos permite un control preciso de en que estado se encuentra el deposito en cada instante.
Si quieres más información tecnica sobre el sensor HC-SR04 Luis Llamas tiene un artículo muy interesante con la explicación teorica.

Sugerencias y consultas

Me encantará contar con tu ayuda, al igual que puedes contar con la mia.
Cualquier sugerencia o consulta será bien recibida, puedes hacerla a través de los comentarios, más abajo.

9 opiniones en “2 formas de controlar el nivel del agua con Arduino, casero y ultrasonidos”

  1. Hola buenas. Me gustaría completar el sensor con una bomba de agua ( la que tengo es de 220v) y así accionarla para rellenar un acuario y a su vez establecer un mínimo en el deposifo donde la ubique de para que la bomba no actúe en vacío. Digamos el nivel del acuario acciona la bomba para rellenarlo y en el depósito pondría otro cable sensor para cortar la bomba y que no funcione en vacío. Sé que puede hacer pero necesitaría ayuda. Muchas gracias

    1. Buenas Aitor, lo primero siento la tardanza en contestar, pero el día a a día no me ha dejado mucho tiempo libre.
      Sería bastante sencillo.
      Sería conectar tu bomba a un relé y activar y desactivar este en los niveles. Te pongo un ejemplo modificando el código del artículo.
      He conectado el relé, en el pin 9, puedes usar un relé como [link_afiliados producto='rele-arduino']este[/link_afiliados] Si quieres informacíon sobre como manejar el relé en esta página esta muy bine

      //Pin que nos da el nivel
      const int pinNivel = 4;
      //Variable para almacenar el estado de nivel
      const int estadoNivelAgua = 0;
      //Tiempo que debe esperar para la siguiente iteración del bucle
      const int tiempoEspera = 1000;//1 segundo
      const int pinRele = 9; //Pin al que se conecta el Rele

      void setup()
      {
      //Iniciamos el pin el pin que nos da el nivel
      pinMode(pinNivel, INPUT);
      //Iniciamos el pin del Rele como salida
      pinMode(pinRele, OUTPUT);
      //Incializa el serial
      Serial.begin(9600);
      }

      void loop()
      {
      // Leermos el pin que nos da el nivel
      estadoNivelAgua = digitalRead(pinNivel);
      //Dependiendo del estado muestra un mensaje u otro.
      if (estadoNivelAgua == HIGH) {
      Serial.println(“El deposito tiene agua, apagamos el rele (bomba)”);
      digitalWrite(pinRele, LOW);
      } else {
      Serial.println(“Debes llenar el deposito, enciendo el rele (bomba)”);
      digitalWrite(pinRele, HIGH);
      }
      delay(tiempoEspera); //Espera el tiempo indicado
      }

  2. Oye una pregunta, si quisiera hacer la primera parte de usar el cable como una señal de entrada para la medición eso junto a una LCD para indicar que cumple digamos con tres estados bajo, medio, alto, para medir un tanque pequeño, de paso como se haría para que que cuando digamos este una señal en alto a través de un mensaje de texto o algo por el estilo con un módulo WIFI o no se, que me indique que esta en ese estado? Muchas gracias por si me puedes ayudar con eso.

    1. Buenas tocayo, no se si te he entendido bien, ¿lo que quieres es que te llegue una notificación al movil cuando el deposito este lleno?
      Tendría que mirarlo, en su día lo estuve investigando y lo que si se que se puede es actualizar una web con esos datos y que los puedas consultar desde el movil, si te gusta esa opción la podemos mirar.

  3. Como seria el cambio del sensor ultrasonico por una boya, ya que el ultrasonico es muy propenso a oxidarse debido a la sal (quiero usarlo en un autorrellenador de acuario marino)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.