Tabla de contenido:

Sensor de nivel del colector de agua a batería: 7 pasos (con imágenes)
Sensor de nivel del colector de agua a batería: 7 pasos (con imágenes)

Video: Sensor de nivel del colector de agua a batería: 7 pasos (con imágenes)

Video: Sensor de nivel del colector de agua a batería: 7 pasos (con imágenes)
Video: Arduino desde cero en Español - Capítulo 53 - Sensor de agua 💧 (water sensor) con esquemático 2024, Noviembre
Anonim
Sensor de nivel del colector de agua a batería
Sensor de nivel del colector de agua a batería
Sensor de nivel de colector de agua a batería
Sensor de nivel de colector de agua a batería

Nuestra casa tiene un tanque de agua que se alimenta de la lluvia que cae sobre el techo y se usa para el baño, la lavadora y el riego de las plantas del jardín. Durante los últimos tres años, los veranos fueron muy secos, por lo que vigilamos el nivel del agua en el tanque. Hasta ahora usamos un palo de madera, que colocamos en el tanque y marcamos el nivel. ¡Pero seguramente debe ser posible mejorar esto!

Aquí es donde entra en juego este proyecto. La idea es colocar un sensor de distancia ultrasónico en la parte superior del tanque. Este sensor funciona como un sonar que emite ondas sonoras, que luego se reflejan en la superficie del agua. A partir del tiempo que tardan las olas en regresar y la velocidad del sonido, puede calcular la distancia a la superficie del agua y determinar qué tan lleno está el tanque.

Dado que no tengo una conexión a la red cerca del tanque, es esencial que todo el dispositivo funcione con baterías. Esto significa que tenía que ser consciente del consumo de energía de todas las piezas. Para devolver los datos, decidí usar el Wifi integrado de un microchip ESP8266. Si bien el Wifi consume bastante energía, tiene una ventaja sobre otro tipo de conexión de radio: puede conectarse directamente al enrutador inalámbrico de su hogar sin tener que construir otro dispositivo que actúe como relé.

Para ahorrar energía, pondré el ESP8266 en sueño profundo la mayor parte del tiempo y tomaré una medición cada hora. Para mi propósito de hacer un seguimiento del nivel del agua, esto es más que suficiente. Los datos se enviarán a ThingSpeak y luego se pueden leer en un teléfono inteligente a través de una aplicación.

¡Un detalle más! La velocidad del sonido, fundamental para la medición de distancias, depende de la temperatura y en menor medida de la humedad. Para una medición exterior precisa a lo largo de las estaciones, incluiremos un sensor BME280, que mide la temperatura, la humedad y la presión. Como beneficio adicional, esto hace que nuestro sensor de nivel de agua también sea una mini estación meteorológica.

Partes:

  • 1x ESP8266 ESP-12F.
  • 1x placa adaptadora ESP-12F.
  • 1x FT232RL FTDI: Adaptador USB a Serie.
  • 1x HC-SR04-P: módulo de medición de distancia por ultrasonidos. Tenga en cuenta que la P es importante, ya que esta es la versión que tiene un voltaje de operación mínimo bajo de 3V.
  • 1x versión BME280 3.3V: sensor de temperatura, presión y humedad.
  • 1x IRL2203N: transistor MOSFET de canal n.
  • 1x MCP1700-3302E Versión 3.3V: regulador de voltaje.
  • 3 pilas AA recargables, p. Ej. 2600 mAh.
  • 1x portapilas para 3 pilas.
  • 1x tablero.
  • Resistencias: 1x 470K, 1x 100K, 4x 10K.
  • Condensadores: 2x cerámicos 1uF.
  • Interruptor de palanca 3x.
  • Alambres de tablero en forma de U.
  • Cables de puente.
  • Envase sopa de plástico 1l.
  • Anillo de fijación para el contenedor.

Hice el código disponible en GitHub.

Paso 1: Familiarización con el sensor de distancia ultrasónico

Familiarización con el sensor de distancia ultrasónico
Familiarización con el sensor de distancia ultrasónico
Familiarización con el sensor de distancia ultrasónico
Familiarización con el sensor de distancia ultrasónico

Mediremos la distancia a la superficie del agua con un sensor ultrasónico, el HC-SR04-P. Al igual que un murciélago, este sensor utiliza un sonar: envía un pulso de sonido con una frecuencia demasiado alta para el oído humano, por lo tanto ultrasónico, y espera a que golpee un objeto, refleje y regrese. La distancia se puede calcular a partir del tiempo que se tarda en recibir el eco y la velocidad del sonido.

Concretamente, si el pin Trig se tira hacia arriba durante al menos 10 μs, el sensor envía una ráfaga de 8 pulsos con una frecuencia de 40 Hz. Luego, la respuesta se obtiene en el pin Echo en forma de pulso con una duración igual al tiempo entre el envío y la recepción del pulso ultrasónico. Luego tenemos que dividir por 2, ya que el pulso ultrasónico va de un lado a otro y necesitamos el tiempo de viaje en un sentido y multiplicarlo por la velocidad del sonido, que es de unos 340 m / s.

¡Pero espere un minuto! De hecho, la velocidad del sonido depende de la temperatura y en menor medida de la humedad. ¿Soy quisquilloso o esto es relevante? Usando una herramienta de cálculo encontramos que en invierno (tomando -5 ° C) podríamos tener 328.5 m / s, y en verano (tomando 25 ° C) 347.1 m / s. Así que supongamos que encontramos un tiempo de viaje de ida de 3 ms. En invierno, esto significaría 98,55 cm y en verano 104,13 cm. ¡Esa es una gran diferencia! Entonces, para obtener la suficiente precisión a lo largo de las estaciones e incluso de día y de noche, tenemos que agregar un termómetro a nuestra configuración. Decidí incluir el BME280, que mide temperatura, humedad y presión. En el código utilicé en la función speedOfSound una fórmula que calcula la velocidad del sonido en términos de los tres parámetros, aunque la temperatura es realmente el factor más importante. La humedad todavía tiene un efecto menor, pero el impacto de la presión es insignificante. Podríamos usar una fórmula más simple teniendo en cuenta solo la temperatura que implementé en speedOfSoundSimple.

Hay otro punto importante en el HC-SR04. Hay dos versiones disponibles: la versión estándar opera a 5V, mientras que el HC-SR04-P puede operar en un rango de voltajes de 3V a 5V. Dado que las 3 baterías AA recargables proporcionan alrededor de 3x1.25V = 3.75V, es importante obtener la versión P. Algunos vendedores pueden enviar el incorrecto. Así que echa un vistazo a las fotos si compras una. Las dos versiones se ven diferentes tanto en la parte posterior como en la parte delantera, como se explica en esta página. En la parte posterior de la versión P, los tres chips son horizontales, mientras que en la versión estándar uno es vertical. En la parte delantera, la versión estándar tiene un componente plateado adicional.

En el circuito electrónico usaremos un transistor como interruptor para apagar la energía del sensor ultrasónico cuando nuestra configuración entre en suspensión profunda para ahorrar batería. De lo contrario, consumiría aproximadamente 2 mA. El BME280 en cambio solo consume unos 5 μ cuando está inactivo, por lo que no es necesario apagarlo con el transistor.

Paso 2: elección de la placa ESP8266

Elección de la placa ESP8266
Elección de la placa ESP8266

Para operar el sensor el mayor tiempo posible con una batería, tenemos que economizar el consumo de energía. Si bien el Wifi del ESP8266 proporciona una forma muy conveniente de conectar nuestro sensor a la nube, también consume bastante energía. En funcionamiento, el ESP8266 consume aproximadamente 80 mA. Entonces, con baterías de 2600 mAh, solo podríamos hacer funcionar nuestro dispositivo durante un máximo de 32 horas antes de que se agoten. En la práctica, será menos, ya que no podremos usar la capacidad completa de 2600 mAh antes de que el voltaje caiga a un nivel demasiado bajo.

Afortunadamente, el ESP8266 también tiene un modo de sueño profundo, en el que casi todo está apagado. Entonces, el plan es poner el ESP8266 en sueño profundo la mayor parte del tiempo y despertarlo con mucha frecuencia para realizar una medición y enviar los datos a través de Wifi a ThingSpeak. Según esta página, el tiempo máximo de sueño profundo solía ser de unos 71 minutos, pero desde el núcleo Arduino 2.4.1 de ESP8266 ha aumentado a unas 3,5 horas. En mi código me conformé durante una hora.

Primero probé la conveniente placa de desarrollo NodeMCU, pero qué lástima, en el sueño profundo todavía consumía alrededor de 9 mA, lo que nos brinda como máximo 12 días de sueño profundo puro sin siquiera considerar los intervalos de activación. Un culpable importante es el regulador de voltaje AMS1117, que usa energía incluso si intenta evitarlo conectando la batería directamente al pin de 3.3V. Esta página explica cómo quitar el regulador de voltaje y el UART USB. Sin embargo, nunca logré hacer eso sin destruir mi tablero. Además, después de quitar el USB UART, ya no puede conectarse al ESP8266 para averiguar qué salió mal.

La mayoría de las placas de desarrollo ESP8266 parecen utilizar el derrochador regulador de voltaje AMS1117. Una excepción es el WEMOS D1 mini (imagen de la izquierda) que viene con el ME6211 más económico. De hecho, descubrí que el WEMOS D1 mini usa alrededor de 150 μA en el sueño profundo, que es más parecido. La mayor parte se debe probablemente al USB UART. Sin embargo, con esta placa tienes que soldar los encabezados de los pines tú mismo.

Sin embargo, podemos hacerlo mucho mejor usando una placa básica como la ESP-12F (imagen de la derecha), que no tiene un UART USB o un regulador de voltaje. Al alimentar el pin de 3.3V, encontré un consumo de sueño profundo de solo 22 μA.

¡Pero para que el ESP-12F funcione, prepárese para soldar y programar un poco más de trabajo! Además, a menos que las baterías entreguen directamente el voltaje correcto, que está entre 3 V y 3,6 V, debemos proporcionar nuestro propio regulador de voltaje. En la práctica, resulta difícil encontrar un sistema de batería que proporcione un voltaje en este rango durante todo su ciclo de descarga. Recuerde que también necesitamos alimentar el sensor HC-SR04-P, que teóricamente puede funcionar con un voltaje tan bajo como 3V, pero funciona con mayor precisión si el voltaje es más alto. Además, en mi diagrama, el HC-SR04-P se enciende mediante un transistor, que induce una pequeña caída de voltaje adicional. Usaremos el regulador de voltaje MCP1700-3302E. El voltaje máximo de entrada es de 6V por lo que lo alimentamos con hasta 4 pilas AA. Decidí usar 3 pilas AA.

Paso 3: Crea un canal ThingSpeak

Usaremos ThingSpeak, un servicio en la nube de IoT, para almacenar nuestros datos. Vaya a https://thingspeak.com/ y cree una cuenta. Una vez que haya iniciado sesión, haga clic en el botón Nuevo canal para crear un canal. En la configuración del canal, complete el nombre y la descripción como desee. A continuación, nombramos los campos del canal y los activamos haciendo clic en las casillas de verificación a la derecha. Si usa mi código sin cambios, los campos son los siguientes:

  • Campo 1: nivel del agua (cm)
  • Campo 2: nivel de batería (V)
  • Campo 3: temperatura (° C)
  • Campo 4: humedad (%)
  • Campo 5: presión (Pa)

Para referencia futura, escriba el ID del canal, la clave de API de lectura y la clave de API de escritura, que se pueden encontrar en el menú de claves de API.

Puede leer los datos de ThingSpeak en su teléfono inteligente usando una aplicación. En mi teléfono Android utilizo el widget IoT ThingSpeak Monitor. Tienes que configurarlo con el ID de canal y la clave de API de lectura.

Paso 4: Cómo programar el ESP-12F

Cómo programar el ESP-12F
Cómo programar el ESP-12F
Cómo programar el ESP-12F
Cómo programar el ESP-12F

Necesitamos una placa básica para ahorrar batería, pero la desventaja es que es un poco más difícil de programar que una placa de desarrollo con USB UART incorporado.

Usaremos el IDE de Arduino. Hay otros Instructables que explican cómo usarlo, así que seré breve aquí. Los pasos para prepararlo para el ESP8266 son:

  • Descarga el IDE de Arduino.
  • Instale soporte para la placa ESP8266. En el menú Archivo - Preferencias - Configuración agregue la URL https://arduino.esp8266.com/stable/package_esp8266com_index.json a las URL adicionales de Board Manager. A continuación, en el menú Herramientas - Tablero - Administrador de tableros instale esp8266 por la comunidad esp8266.
  • Seleccione como placa: Módulo ESP8266 genérico.

Para manejar el ESP-12F utilicé una placa adaptadora, comúnmente disponible en tiendas en línea. Soldé el chip a la placa y luego soldé los cabezales a la placa. ¡Solo entonces descubrí que la placa adaptadora es demasiado ancha para una placa de pruebas estándar! No deja pines libres en el lateral para realizar sus conexiones.

La solución que elegí es usar cables en forma de U y conectarlos como se muestra en la imagen de la derecha antes de colocar el ESP8266 con la placa adaptadora en la placa de pruebas. Entonces GND y VCC están conectados a los rieles de la placa de pruebas y los pines restantes están disponibles más abajo en la placa de pruebas. La desventaja es que su tablero estará bastante lleno de cables una vez que termine el circuito completo. Otra solución es colocar dos placas de prueba juntas como se muestra en este video.

A continuación, para programar el ESP-12F a través del puerto USB de su computadora, necesitamos un adaptador USB a serie. Usé el programador FT232RL FTDI. El programador tiene un jumper para seleccionar entre 3.3V o 5V. Debe ponerse a 3,3 V para el ESP8266. ¡No lo olvides ya que 5V pueden freír tu chip! La instalación de los controladores debería ser automática, pero si la programación no funciona, puede intentar instalarlos manualmente desde esta página.

El ESP8266 tiene un modo de programación para cargar nuevo firmware en la memoria flash y un modo flash para ejecutar el firmware actual desde la memoria flash. Para elegir entre estos modos, algunos pines deben tomar un cierto valor en el momento del arranque:

  • Programación: GPIO0: bajo, CH-PD: alto, GPIO2: alto, GPIO15: bajo
  • Flash: GPIO0: alto, CH-PD: alto, GPIO2: alto, GPIO15: bajo

La placa adaptadora ya se encarga de levantar CH-PD y bajar GPIO15 con resistencias de 10K.

Entonces, en nuestro circuito electrónico todavía necesitamos activar GPIO2. También proporcionamos un interruptor para poner el ESP8266 en programación o en modo flash y un interruptor para restablecerlo, que se realiza conectando el RST a tierra. Además, asegúrese de conectar el pin TX del FT232RL al pin RXD del ESP8266 y viceversa.

La secuencia de programación es la siguiente:

  • Ponga GPIO2 en bajo cerrando el interruptor de programación.
  • Reinicie el ESP8266 cerrando y luego volviendo a abrir el interruptor de reinicio. El ESP8266 ahora arranca en modo de programación.
  • Vuelva a poner GPIO2 en alto abriendo el interruptor de programación.
  • Sube el nuevo firmware desde Arduino IDE.
  • Reinicie el ESP8266 nuevamente cerrando y volviendo a abrir el interruptor de reinicio. El ESP8266 ahora arranca en modo flash y ejecuta el nuevo firmware.

Ahora puedes probar si la programación funciona cargando el famoso boceto de Blink.

Si todo esto funciona al menos los pines GND, VCC, GPIO2, RST, TXD y RXD están correctamente soldados y conectados. ¡Qué alivio! Pero antes de continuar, recomendaría probar también los otros pines con su multímetro. Yo mismo tuve un problema con uno de los pines. Puede usar este boceto, que establece todos los pines en alto uno por uno durante 5 segundos, y luego pone el ESP8266 en sueño profundo durante 20 segundos. Para permitir que el ESP8266 se despierte después de un sueño profundo, debe conectar RST a GPIO16, que emite la señal de activación.

Paso 5: carga del boceto

He hecho que el código esté disponible en GitHub, es solo un archivo: Level-Sensor-Deepsleep.ino. Simplemente descárguelo y ábralo en el IDE de Arduino. O puede seleccionar Archivo - Nuevo y simplemente copiar / pegar el código.

Hay cierta información que debe completar al principio del archivo: el nombre y la contraseña de la WLAN que se usará, los detalles de la IP estática y el ID del canal y la clave API de escritura del canal ThingSpeak.

Siguiendo el consejo de este blog, en lugar de DHCP donde el enrutador asigna dinámicamente una IP, usamos IP estática, donde configuramos la dirección IP del ESP8266 nosotros mismos. Esto resulta ser mucho más rápido, por lo que ahorramos tiempo activo y, por tanto, energía de la batería. Por lo tanto, debemos proporcionar una dirección IP estática disponible, así como la IP del enrutador (puerta de enlace), la máscara de subred y un servidor DNS. Si no está seguro de qué completar, lea acerca de cómo configurar una IP estática en el manual de su enrutador. En una computadora con Windows conectada a través de Wifi a su enrutador, inicie un shell (botón de Windows-r, cmd) e ingrese ipconfig / all. Encontrarás la mayor parte de la información que necesitas en la sección Wi-Fi.

Al examinar el código, verá que, a diferencia de otros códigos de Arduino, la mayor parte de la acción ocurre en la función de configuración en lugar de en la función de bucle. Esto se debe a que el ESP8266 entra en suspensión profunda después de que finaliza la función de configuración (a menos que iniciemos en modo OTA). Después de que se despierta, es como un nuevo reinicio y vuelve a ejecutar la configuración.

Estas son las características más destacadas del código:

  • Después de despertar, el código establece switchPin (GPIO15 predeterminado) en alto. Esto enciende el transistor, que a su vez enciende el sensor HC-SR04-P. Antes de dormir profundamente, vuelve a poner el pin en bajo, apagando el transistor y el HC-SR04-P, asegurándose de que no consuma más energía de la batería.
  • Si el modePIN (GPIO14 predeterminado) es bajo, el código pasa al modo OTA en lugar del modo de medición. Con OTA (actualización inalámbrica) podemos actualizar el firmware a través de Wifi en lugar del puerto serie. En nuestro caso, esto es bastante conveniente, ya que ya no tenemos que conectar el adaptador de serie a USB para obtener más actualizaciones. Simplemente configure GPIO14 en bajo (con el interruptor OTA en el circuito electrónico), reinicie el ESP8266 (con el interruptor de reinicio) y debería estar disponible en el IDE de Arduino para su carga.
  • En el PIN analógico (A0), medimos el voltaje de la batería. Esto nos permite apagar nuestro dispositivo, también conocido como sueño profundo permanente, si el voltaje es demasiado bajo, por debajo del voltaje mínimo, para proteger las baterías de una descarga excesiva. La medición analógica no es muy precisa, hacemos numMeasuresBattery (predeterminado 10) medidas y tomamos el promedio para mejorar la precisión.
  • La medición de distancia del sensor HC-SR04-P se realiza en la función DistanceMeasurement. Para mejorar la precisión, la medición se repite numMeasuresDistance (predeterminado 3) veces.
  • Existe una función para calcular la velocidad del sonido a partir de la temperatura, humedad y presión medida por el sensor BME280. La dirección I2C predeterminada del BME280 es 0x76, pero si no funciona, es posible que deba cambiarla a 0x77: bool bme280Started = bme280.begin (0x77);
  • Usaremos el BME280 en modo forzado, lo que significa que toma una medida y vuelve a dormir para ahorrar energía.
  • Si establece la capacidad (l), fullDistance (cm) y área (m2), el código calcula el volumen restante del tanque de agua a partir de la medición de distancia: volumen restante doble = capacidad + 10.0 * (fullDistance-distancia) * área; y cárguelo en ThingSpeak. Si mantiene los valores predeterminados, carga la distancia a la superficie del agua en cm.

Paso 6: construcción del circuito electrónico

Construyendo el circuito electrónico
Construyendo el circuito electrónico

Arriba está el diagrama del circuito electrónico. Es bastante grande para una placa de pruebas, especialmente con la placa adaptadora de gran tamaño y el truco con los cables en forma de U. En algún momento, ciertamente deseé haber usado la alternativa de conectar dos placas de prueba, pero al final lo logré.

Estas son las características importantes del circuito:

  • Hay dos voltajes que juegan un papel: el voltaje de entrada de la batería (alrededor de 3.75V) y el 3.3V que alimenta al ESP8266 y al BME280. Puse el 3.3V en el riel izquierdo de la placa de corte y el 3.75V en el riel derecho. El regulador de voltaje convierte 3.75V a 3.3V. Siguiendo las instrucciones de la hoja de datos, agregué condensadores de 1 μF a la entrada y salida del regulador de voltaje para aumentar la estabilidad.
  • GPIO15 del ESP8266 está conectado a la puerta del transistor. Esto permite que el ESP8266 encienda el transistor y, por lo tanto, el sensor ultrasónico cuando esté activo y lo apague cuando esté en sueño profundo.
  • GPIO14 está conectado a un conmutador, el conmutador OTA. Cerrar el interruptor le da la señal al ESP8266 que queremos comenzar en modo OTA a continuación, es decir, después de presionar (cerrar y abrir) el interruptor RESET y cargar un nuevo boceto por aire.
  • Los pines RST y GPIO2 están conectados como en el diagrama de programación. El pin RST ahora también está conectado a GPIO16 para permitir que el ESP8266 se despierte del sueño profundo.
  • Los pines TRIG y ECHO del sensor ultrasónico están conectados a GPIO12 y GPIO13, mientras que los pines SCL y SDA del BME280 están conectados a GPIO5 y GPIO4.
  • Finalmente, el pin analógico ADC es a través de un divisor de voltaje conectado al voltaje de entrada. Esto permite medir la tensión de entrada para comprobar la carga de las baterías. El pin ADC puede medir voltajes entre 0V y 1V. Para el divisor de voltaje elegimos resistencias de 100K y 470K. Esto significa que el voltaje en el pin ADC viene dado por: V_ADC = 100K / (100K + 470K) V_in. Tomando V_ADC = 1V, esto significa que podemos medir voltajes de entrada hasta V_in = 570/100 V_ADC = 5.7V. En cuanto al consumo de energía, también hay una fuga de corriente a través del divisor de voltaje. Con V_in = 3.75V de las baterías encontramos I_leak = 3.75V / 570K = 6.6 μA.

Incluso cuando el circuito funciona con baterías, es posible conectar el USB al adaptador en serie. Solo asegúrese de desconectar VCC del adaptador y conectar GND, RX y TX como en el diagrama de programación. Esto hace posible abrir el Serial Monitor en el IDE de Arduino para leer los mensajes de depuración y asegurarse de que todo funcione como se esperaba.

Para el circuito completo, medí un consumo de corriente de 50 μA en sueño profundo cuando funcionaba con baterías. Esto incluye el ESP8266, el BME280, el sensor ultrasónico (apagado por el transistor) y las fugas a través del divisor de voltaje y quizás otras fugas. ¡Así que eso no es tan malo!

Descubrí que el tiempo activo total es de aproximadamente 7 segundos, de los cuales 4,25 segundos para conectarse al Wifi y 1,25 segundos para enviar los datos a ThingSpeak. Entonces, con una corriente activa de 80 mA, encontré 160 μAh por hora para el tiempo activo. Añadiendo 50 μAh por hora para el estado de sueño profundo, tenemos un total de 210 μAh por hora. Esto significa que las baterías de 2600 mAh teóricamente duran 12400 horas = 515 días. Este es el máximo absoluto si pudiéramos usar la capacidad total de las baterías (que no es el caso) y no hay fugas que no encontré con mis mediciones actuales. Así que todavía tengo que ver si esto realmente funciona.

Paso 7: finalización del sensor

Terminando el Sensor
Terminando el Sensor
Terminando el Sensor
Terminando el Sensor
Terminando el Sensor
Terminando el Sensor

Puse el sensor en un recipiente de plástico de 1 litro, que solía contener sopa. En la parte inferior hice dos agujeros para encajar los "ojos" del sensor HC-SR04-P. Aparte de los agujeros, el recipiente debe ser impermeable. Luego se fija a la pared del tanque de agua con un anillo circular que normalmente se usa para una tubería de drenaje de agua de lluvia.

¡Diviértete con el proyecto!

Recomendado: