Privacidad-Domótica + Cierre automático

Pérdida de privacidad al instalar dispositivos conectados a Internet (Domótica). Construcción de un temporizador programable, para el cierre automático de una puerta de garaje. Este temporizador está construido con el micro controlador ATTiny, y puede acoplarse con cualquier sistema de control de acceso que disponga de un pulsador de apertura/cierre manual.

Contralador del cierre temporizado para la puerta del garaje

Control remoto

El control remoto de los dispositivos electrónicos facilita enormemente su uso. A nadie se le ocurriría ahora comprar un televisor sin su mando a distancia. Es muy cómodo acceder a una vivienda desde su garaje, abriendo la puerta con un mando a distancia y sin tener que bajar del coche.

Control remoto, para los dispositivos electrónicos

Pero esa comodidad no debería poner en riesgo la seguridad, porque si la puerta del garaje se quedase abierta, de nada serviría la puerta blindada de acceso a la vivienda. En la mayoría de los sistemas de apertura y cierre de puertas se incluye un cierre automático temporizado. Con esto se evita que la puerta se quedase abierta por olvido, o por haber pulsado su mando a distancia de forma accidental.

Domótica en la vivienda

Internet ha revolucionado la fabricación de dispositivos inteligentes, empezando por las cámaras de seguridad y llegando hasta las bombillas de iluminación. La tecnología actual permite la instalación de multitud de dispositivos inteligentes a un precio muy bajo, pudiendo convertir cualquier vivienda convencional en una casa domótica.

Domótica en la vivienda

El problema es que muchos fabricantes obligan a que su control remoto funcione a través de Internet, y la mayoría de ellos lo hacen a través de un servidor externo a la vivienda, normalmente ubicado en China.

Privacidad con la domótica

Sería conveniente que la legislación actual obligara a informar a los clientes de la pérdida de privacidad de cualquier dispositivo inteligente que esté comercializado, igual que lo hacen los fabricantes de tabaco en sus cajetillas.

La seguridad y privacidad de una vivienda, es inversamente proporcional al número de dispositivos inteligentes que contiene

Esquema

Del control de este circuito se encarga el micro controlador ATTiny85, funcionando con su oscilador interno de 16 MHz. El ATTiny monitoriza el estado alto/bajo del pin 3 (PB4) para detectar si la puerta está abierta o cerrada, por lo que será necesario montar un interruptor fin de carrera, que cierre su contacto cuando la puerta esté totalmente abierta. El interruptor que he pintado en el esquema es mecánico, pero podría utilizarse otro de tipo magnético.

Esquema del cierre temporizado para la puerta del garaje

Cada segundo se detecta el estado del pin 3 (PB4) del ATTiny. Cuando pasa de estado alto a bajo se inicia el descuento del temporizador, y el LED lo indica parpadeando muy rápido (5 destellos por segundo). En condiciones de reposo, cuando el circuito está conectado y el pin 3 (PB4) está a nivel alto, el LED hace un parpadeo cada segundo.

El tiempo de retardo se puede configurar entre 1 y 2,5 minutos, mediante la posición de los puentes J1 y J2. El valor del tiempo de retardo se actualiza y configura al alimentar el circuito, y se muestra su estado contando el número de destellos del LED = con 1 destello si el retardo es de  60 segundos, y 4 destellos para 150 segundos.

Cuando la puerta del garaje permanece abierta más tiempo del configurado en el temporizador, el pin 5 (PB0) del ATTiny envía un impulso alto de 1 segundo al transistor y se cierra el contacto del relé. Como los contactos del relé están libres de tensión, se pueden conectar con los 2 hilos del pulsador manual de apertura/cierre de la puerta, sin interferir al circuito controlador del motor.

Aunque la puerta en la que se monte este circuito ya disponga de un interruptor fin de carrera, no podría utilizarse y habría que montar un segundo interruptor, porque este circuito inyecta una tensión de 5V para detectar la posición del pulsador.

Para alimentar este temporizador he utilizado una pequeña fuente conmutada de 230VAC/5VDC. En la caja incorporé un interruptor que corte en la alimentación de entrada,  con el fin de poder anular fácilmente este automatismo de cierre.

Firmware

El firmware que necesitas para programar el ATTiny85, lo puedes descargar de forma gratuita desde el siguiente enlace:

https://github.com/J-RPM/ATTiny-Timer_Garage

Circuito impreso

Para hacer este montaje utilicé el mismo PCB que había encargado a PCBWay para montar el interruptor inteligente. En este circuito impreso están todos los componentes de este circuito, y sólo se tienen que adaptar las conexiones de entrada y salida para convertirlo en un temporizador.

Adaptar el PCB para el temporizador de cierre automático

Revisando las pistas de conexión por delante y por detrás, observamos que en los terminales del filtro de red están los hilos de alimentación, y estos llegan desde la conexión de salida máster del PCB. Para utilizar este PCB, es necesario cortar una pista del circuito impreso y realizar un puente por la cara superior.

¿Dónde fabricar el PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://pcbway.com/g/r7N1ct

PCB: Interruptor inteligente

Acceso a los GERBER de este PCB

PCB from PCBWay

Link of my shared project

Caja 3D:

Caja 3D, para el temporizador de la puerta del garaje

 

Supervisor solar Fronius

Desde hace unos meses tengo funcionando una instalación solar destinada al autoconsumo de la vivienda.  Como el proceso de instalación fue bastante largo debido a la falta de material, junto con algunos problemas con la empresa instaladora, me dio tiempo a modificar los cableados a mi gusto, y añadir algunos medidores de control en el nuevo cuadro eléctrico antes de que la empresa instaladora diera de alta la instalación.

Instalación del inversor y cuadros eléctricos

Detalles de la instalación solar

La instalación solar es trifásica, compuesta por un inversor Fronius Symo de 7KW  y 20 paneles solares de 380 W. Los paneles están repartidos en las dos caras del tejado, un string con 12 paneles conectados en serie y el otro con 8 paneles.

Distribución de los paneles solares

Conexión con Internet

En una instalación solar es muy importante que el inversor disponga de una conexión estable con Internet, con el fin de controlar su correcto funcionamiento y poder controlar su rendimiento. La mejor solución sería conectar el inversor con un cable Ethernet al router de la vivienda, a no ser que el nivel de la señal WiFi que le llegase al inversor fuera muy bueno.  En mi caso, como la distancia entre el inversor y el router es muy larga, junto con la tirada de los cables de continua  que conectan los paneles con el inversor, añadí un cable RG174 de bajas pérdidas, y conecté una antena doble BIQUAD en el tejado, muy cerca y orientada hacia el router WiFi.

Antena Biquad WiFi

Cuadro eléctrico DC

En el cuadro de continua de la instalación solar, he montado 2 voltímetros para medir la tensión que genera cada string de los paneles solares. Como los medidores de tensión son digitales, es necesario alimentarlos para que funcionen. He utilizado una pequeña fuente de alimentación conmutada de 230 VAC a 5 VDC. La entrada de la fuente de alimentación está conectada a la tensión continua que genera el string de 8 paneles, los cuales producen una tensión continua máxima de 320V, tensión inferior a la máxima permitida por la fuente conmutada. Ambos medidores están conectados directamente con los cables de bajada de los paneles, antes de los fusibles de protección de 15A, pero la fuente y los dos medidores están protegidos con dos fusibles de 100 mA.

Medidores DC

Cuadro eléctrico AC

En el cuadro de alterna he intercalado un relé trifásico de protección, el cual incluye un medidor de corriente y tensión por fase. Este relé contiene un pequeño microprocesador, pudiendo programar los umbrales de tensión y corriente máxima y mínima. Los medidores muestran la tensión y corriente que está generando el inversor en cada fase. Al ser un inversor trifásico, la potencia total generada se reparte de forma proporcional entre las 3 fases. Un inversor solar conectado a la red,  aumenta ligeramente la tensión de salida a medida que aumenta su producción solar. De esta forma no está de más disponer de un voltímetro que muestre en tiempo real  la tensión que hay en cada una de las fases.

Relé de protección trifásico

Smart Meter de Fronius

La conexión entre el inversor Fronius y su medidor Smart Meter utiliza 3 hilos, los dos hilos de datos y el hilo de masa. He utilizado los 5 hilos sobrantes de la manguera para conectar las 4 salidas GPIO del inversor y un hilo con la salida +12V. Así puedo controlar el encendido de los 4 indicadores LED que he montado junto al medidor.

Configuración GPIO Fronius

Las 4 salidas GPIO del inversor son Open-Collector  y las he configurado para que se cierren cuando se superen 4 umbrales de potencia. Los 3 primeros indicadores LED los he asociado a la producción solar: 1, 2 y 3 kW y el tercer indicador, el LED rojo, se enciende cuando exista un excedente superior a 1 kW. Es decir, cuando se esté vertiendo a la red una potencia superior a 1KW.

Smart Meter de Fronius

Reloj & Inverter

Para mostrar los datos de potencia del inversor he utilizado el reloj de precisión que hice con el módulo ESP32, el cual mostraba la fecha y hora en un display de 7 segmentos. Al diseño original le incorporé los avisos por voz, quedando la versión 1.46. A partir de ahí he ido depurando el código hasta optimizar al máximo las funcionalidades del nuevo display, llegando así a la versión que ahora publico, v1.51.

Esquema: Reloj-Inverter

Con la primera versión del reloj, sólo se necesitaba una conexión a Internet al conectar la alimentación, para que pudiera conectarse con el servidor NTP de Internet y sincronizara la fecha y hora local del ESP32. Después el display podía funcionar de forma indefinida mostrando la hora del módulo ESP32, y ya no importaba si se perdía la conexión WiFi.

Reloj de precisión, 8 x 7 segmentos LED

Ahora sí  es imprescindible mantener la conexión WiFi en todo momento,  para permitir la conexión con el inversor Fronius y poder mostrar los datos en el display. Por ese motivo ahora se chequea cada 30 segundos la conexión WiFi, y si el módulo perdiera en algún momento la conexión, automáticamente se reiniciaría y no volvería a funcionar hasta que se conectase de nuevo con el servidor NTP de Internet, y sincronizara de nuevo el reloj del ESP32.

Al igual que en la versión original, con este código también se puede mostrar la información en un display de 7 segmentos y otro OLED de forma simultánea. Así es posible hacer diferentes versiones utilizando el mismo firmware. Actualmente utilizo esta versión de 3 formas diferentes:

  1. Con un display de 7 segmentos y el módulo de voz.
  2. Con un display de 7 segmentos,  sin el módulo de voz y acoplando todo al reloj de pared de esfera rotante. En este caso el reloj del ESP32 también resincroniza la fecha y hora del reloj de esfera rotante. Lo hace a través del puerto serie y sincronizando la fecha y hora de forma alterna, entre los segundos 20 y 50 de cada minuto.
  3. Versión reducida, utilizando sólo un display OLED para mostrar los datos.

Medidas de potencia en el display

El módulo ESP32 interroga al inversor cada 3 segundos, así las medidas de potencia que muestra el display se actualizarán cada 3 segundos. El módulo ESP32 se puede configurar mediante su servidor Web desde cualquier dispositivo móvil, permitiendo así que muestre en su display  la información que más nos interese. Por defecto, entre los segundos 58 y 2 de cada minuto, el display de 7 segmentos siempre mostrará la hora, y cada 30 segundos comprobará la conexión WiFi. Aprovechando esta ventana de tiempo,  el display podría  mostrar la información de la fecha en caso de que estuviese habilitada su presentación. Si el módulo ESP32 está configurado para mostrar alguno de los valores de potencia del inversor, cada 30 segundos chequeará si el inversor presenta algún error o no ha respondido a la última consulta, para mostrar ese error si existe.

En condiciones normales durante el día, el display no debería mostrar ningún error, sólo de forma ocasional podría mostrar algún error de conexión, debido a la colisión en el tiempo de varios dispositivos que consultan al mismo tiempo.  En mi caso, estoy consultando los datos del inversor Fronius de forma local desde 4 equipos diferentes: la Raspberry y desde los 3 displays que tengo funcionando.

Cuando el display muestra alguno de los valores de potencia del inversor, la letra que indica el valor de potencia puede aparecer fija, o parpadeando si existe un excedente de potencia superior a 1kW.

Leer los datos del inversor Fronius

Los datos del inversor Fronius se pueden obtener de dos formas diferentes, mediante una conexión TCP utilizando el protocolo ModBus,  o realizando las consultas definidas en  la API de Fronius.  Yo he utilizado ambos métodos para obtener los datos más relevantes del inversor,  y luego almacenarlos  en una Raspberry PI que tengo conectada directamente en el router. Así dispongo de un archivo histórico muy completo, pudiendo generar gráficas y comprobar el rendimiento de la instalación en cualquier momento.

Para la consulta de los valores de potencia a través del módulo ESP32, he utilizado dos consultas de la API de Fronius. El inversor responderá a las consultas de la API enviando los datos formateados en un archivo JSON. Para facilitar la lectura de las respuestas que envía el inversor,  he utilizado la librería: ArduinoJson.h

Potencias del inversor

Esta es la consulta que realiza el módulo ESP32, para obtener los datos de potencia (la IP es la del inversor Fronius):

http://192.168.1.112/solar_api/v1/GetPowerFlowRealtimeData.fcgi

Potencias Fronius

Alarmas del Inversor

Esta es la consulta que realiza el módulo ESP32, cuando el inversor no genera potencia solar o su «StatusCode»  es diferente a 7 (la IP es la del inversor Fronius):

http://192.168.1.112/solar_api/v1/GetInverterInfo.cgi

Alarmas Fronius

A través de esta consulta se obtiene el estado de alarma del inversor. Durante la noche, podrían a parecer los códigos de error 306 o 307

  • 307: El valor de tensión DC que generan los paneles es demasiado bajo para arrancar el inversor.
  • 306: La tensión DC de los paneles solares es suficiente, pero falta potencia para poder arrancar el inversor.
  • Status:2 Error:0  >>> Cuando la consulta coincide en el momento que el inversor está chequeando los valores de tensión/potencia de los paneles solares.

Descargas del firmware

ESP32_Clock-Fronius

Reloj LED de pared

Reloj LED de pared, compatible con ESP32 (Reloj & Inverter):

Reloj_V6.1_(22MHz_15x15).HEX

¿Necesitas fabricar un circuito impreso?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://www.pcbway.es/

 

 

 

 

Capacímetro & ESR con Arduino (v2)

Hace unos meses monté un capacímetro con el fin de comprobar el funcionamiento de las librerías de Arduino: Capacitor.h y CapacitorLite.h. El resultado final no fue todo lo bueno que esperaba, porque el rango de medidas quedó bastante limitado, y no conseguí medir capacidades superiores a 100μF con precisión.

Capacímetro con Arduino

Ahora tengo un capacímetro que apenas utilizo, porque la mayoría de las veces lo necesito para comprobar el estado de condensadores electrolíticos en fuentes conmutadas. En estos casos, los condensadores superan el rango de medidas del capacímetro, y además necesitaría también comprobar su valor ESR para determinar si el condensador sospechoso está en buen estado o no.

Por todo esto, he decidido ampliar las prestaciones de este capacímetro de acuerdo a las necesidades de uso más habituales:

  • Medir capacidades entre 1pF y 10.000μF con precisión
  • Medir los valores ESR de los condensadores a partir de 10μF

Medida de un condensador variable

Detalles de funcionamiento del capacímetro

Después de analizar todas las posibles opciones de medida del capacímetro que monté, limitada por los 1024 umbrales del conversor ADC de Arduino, he decidido añadir una segunda toma de medida. Una entrada será para medir las capacidades entre 1pF y 1μF, y la otra será para medir valores entre 50nF y 10.000μF, incorporando la medida ESR a partir de 10μF.

Esquema: Capacímetro & ESR

Así con la primera entrada utilizaré la librería Capacitor.h para medir capacidades por debajo de 1uF, y la segunda entrada la utilizaré para medir las capacidades más altas, midiendo el tiempo que tarda el condensador bajo prueba en alcanzar el 63% de la tensión máxima del conversor ADC. Con esta segunda entrada del capacímetro, se podrán medir capacidades entre 50nF y 10.000μF.

Entrada 1: 1pF … 1μF (Capacitor.h)

La librería Capacitor.h toma como referencia la capacidad interna de un pin analógico de Arduino, y mide su voltaje después de 30nS. Luego toma como referencia el 1% de la tensión aplicada junto con la capacidad del pin de Arduino, para calcular la capacidad del condensador que se ha conectado.

Capacitor.h con capacidades

Partiendo de los 5 voltios máximos del ADC de Arduino y sus 1024 posibles valores, las lecturas del ADC que podemos esperar oscilarán aproximadamente entre un valor 33 para 1pF y 993 para 1nF (1000pF).

Si la capacidad medida es superior a 1nF, la librería Capacitor.h toma como referencia la resistencia interna PullUp del pin de Arduino, de aproximadamente 30KΩ, y mide el tiempo que tarda el condensador bajo prueba en alcanzar el 63% de la tensión aplicada. A partir de ese tiempo medido se calcula la capacidad aplicando la constante de tiempo RC, tomando como referencia el valor de la resistencia PullUp.

Medida de capacidades altas

Entrada 2: 50nF … 10.000μF (bornas)

Al conectar un condensador en la segunda entrada, el programa realizará un test de estado del condensador y luego realizará una medida rápida, conectando en serie una resistencia de bajo valor (240Ω), para medir el tiempo que tarda en alcanzar el 63% de la tensión máxima del ADC.

Test de los condensadores

  • Si la medida obtenida es superior a 80μF, medirá el valor ESR mostrando ambas medidas en el display. Haciendo la medida RC con una resistencia de bajo valor, se acelera el tiempo de medida de los condensadores de alta capacidad sin perder precisión.

Medida 1000uF

  • En caso de que la medida obtenida fuera inferior a 80μF, no se muestra el valor y se realiza una segunda medida conectando una resistencia 40 veces más alta (10KΩ), con el fin de obtener mayor precisión en la medida de condensadores más bajos. En este caso también se mide el valor ESR si la capacidad es >80μF, y se muestran los resultados en el display.

Calibración del capacímetro

El proceso de calibración de este capacímetro hay que hacerlo en 4 pasos. Dos de ellos son para calibrar los dos sistemas de medida de la librería Capacitor.h, y los otras dos para calibrar los dos rangos de medida de la segunda entrada del capacímetro.

Entrada 1: medidas entre 1pF y 1nF

Es imprescindible conocer el valor exacto de la capacidad interna del pin analógico de Arduino, junto con las capacidades parásitas externas del montaje. Por esto siempre es necesario realizar una calibración final, conectando un condensador de valor conocido y menor de 1000pF como referencia, para medir su valor con el capacímetro una vez montado y cerrado.  Si la medida que muestra el capacímetro fuera inferior a la capacidad real del condensador, subiremos ligeramente el valor de la capacidad interna en el programa, y volveremos a programar el microcontrolador con la nueva referencia. Y si midiera una capacidad superior a la real, bajaremos el valor de la capacidad de referencia. Este proceso habrá que hacerlo varias veces, hasta que consigamos que el capacímetro muestre el valor real del condensador que hemos elegido como referencia.

Entrada 1:  medidas entre 1nF y 1μF

Seguiremos el mismo proceso de antes, pero en este caso es mucho más sencillo porque podremos hacerlo sin cerrar la caja del capacímetro. Conectaremos un condensador algo inferior a 1μF de valor conocido, y retocaremos el valor de la resistencia PullUp que hemos puesto en el programa. Teniendo en cuenta que si aumentamos el valor de la resistencia PullUp, se reducirá el valor de la capacidad que muestre el capacímetro, y si reducimos el valor de la resistencia aumentará la capacidad medida.

Entrada 2:  medidas entre 50nF y 10.000μF

En la segunda entrada del capacímetro, los condensadores de capacidad más baja (<80μF) se miden conectando una resistencia en serie de 10KΩ, y se mide el tiempo que tarda el condensador en alcanzar el 63% de la tensión máxima del conversor ADC. Aunque pongamos una resistencia de precisión, como la tensión de 5V se conecta a través de un pin digital de Arduino, tendremos que sumar el valor de su resistencia interna para que la medida sea precisa.

Pin de medida del Capacímetro

Por otra parte, la conexión común de ambas entradas del capacímetro no es GND, es otro pin analógico de Arduino, y aunque lo configuremos como salida con valor bajo, se sumará una resistencia extra a la constante RC. El valor de esta resistencia extra se compensa de forma automática en el código del programa.

Pin de referencia del capacímetro

Cuando se miden condensadores >80μF, el capacímetro le conecta una resistencia en serie de 240Ω, con el fin de reducir el tiempo de la medida. En este caso sucede lo mismo que antes, y por eso también tendremos que compensar el valor de la resistencia interna del pin digital que conecta la tensión al circuito RC.

Ajuste automático de referencia

El capacímetro realiza un ajuste a cero de las dos entradas cada vez que se conecta la alimentación, compensando así las capacidades parásitas de las puntas de medida que hayamos conectado. Es importante conectar el capacímetro con las puntas libres, sin ningún condensador conectado entre ellas.

Auto ajuste inicial del capacímetro

Firmware

El código que necesitas para programar el ATMEGA-328P de Arduino, lo puedes descargar del repositorio GitHub:

https://github.com/J-RPM/Capacimeter/

Caja 3D del Capacímetro

La caja del Capacímetro la hice con 3 piezas, impresas en 3D con PLA de color negro. Para que destaque la serigrafía, se puede pintar con un pincel fino y pintura sintética, utilizando cualquier color que sea claro.

Caja 3D para el Capacímetro.

Caja del Capacímetro – Thingiverse: Capacimeter with Arduino

¿Necesitas fabricar un circuito impreso?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://www.pcbway.es/

Litros de un depósito en el móvil

Construcción de un medidor de nivel de líquidos por ultrasonidos con Arduino. Los litros que contiene un depósito se calculan en función de la ditancia libre del depósito, medida por ultrasonidos, y se muestran en un display OLED con una resolución de 1 litro. Las medidas del depósito se deben configurar en el firmware, antes de programar el ATMega328P. Todos los ajustes y medidas pueden comprobarse a distancia en un teléfono móvil, mediante una conexión Bluetooth.

Interior del medidor de litros

Nivel de un depósito con ultrasonidos

Mejoras con respecto al montaje anterior

  • Montar un módulo Bluetooth para ver en el teléfono todos los datos de cada medida, además de los litros, que es lo único que muestra el display.
  • Bajar la resolución de la medida a milímetros, para coseguir que los litros que muestra el display cambien de uno en uno, y no cada 7,4 litros.

Resolución de la medida

Precisión de la medida

Los litros que muestra este medidor sólo sirven como referencia orientativa. Aunque la precisión de la medida de distancia por ultrasonidos sea bastante buena, hay que tener en cuenta otros factores:

  • Lo normal es que un depósito no sea totalmente simétrico, debido a los flejes de refuerzo y sus ondaluciones.  Si además es un depósito de plástico,  su capacidad varía en función del volumen de líquido que contiene y su temperatura.
  • Teniendo en cuenta que en el depósito que lo instalé, cada milímetro de combustible se corresponden a 0,74 litros, en el mejor de los casos la precisión de la medida sería de +/-1 litro.

Esquema

A continuación se muestra el nuevo esquema del medidor de litros por ultrasonidos. Lo único que cambia con respecto al esquema anterior, es el pulsador del Reset y el módulo Bluetooth HC-05.

Esquema del medidor de litros

Bluetooth HC-05

Es necesario configurar el módulo Bluetooth HC-05 antes de montarlo en el circuito. Aparte de su nombre y password, se debe configurar en modo esclavo a 38.400bps. Luego sólo habría que hacer 3 conexiones con este medidor: los dos hilos de alimentación (5VCC), y la conexión entre el terminal RXD del módulo HC-05 y el terminal TX del microcontrolador ATmega328P.

La conexión TX del módulo ARDUINO UNO está rotulada como D1, y se corresponde con el pin número 3 del microcontrolador ATmega328P.

Configuración del módulo Bluetooth HC-05

El pulsador Reset lo monté para poder reiniciar el microcontrolador en cualquier momento, y permitir que el módulo Bluetooth envíe los datos de configuración del depósito al teléfono móvil.

Configuración del depósito en el móvil

Configurar el tamaño del depósito

Las medidas y capacidad del depósito forman parte de los parámetros de ajuste del código del programa, pudiendo así adaptar con facilidad el firmware a las dimensiones y volumen de cualquier depósito.

Configuración del tamaño del depósito

En esta versión hay que poner todas las medidas en milímetros. Las valores de las tres últimas variables se dejan sin valor, el programa se encargará de calcular estos valores en función de las medidas del depósito.

Al aumentar la resolución de la medida de distancia hasta un milímetro, es muy fácil que cualquier movimiento del líquido en la superficie del depósito haga fluctuar la medida. Para minimizar este efecto, el programa realizará una serie de medidas consecutivas y mostrará el promedio de todas ellas. Cada vez que toma una muestra, introducirá un pequeño retardo antes de realizar la medida siguiente. Este retardo lo calcula el programa, y varía en función de la altura del depósito. Con este retardo se minimiza el efecto eco de una medida anterior en la siguiente, lo cuál introduciría un error al calcular el promedio.

APP para el móvil

Para mostrar los datos que envía el medidor en un teléfono móvil, se puede instalar cualquier aplicación de tipo ‘Terminal‘, yo utilizo una APP gratuita:

Serial Bluetooth Terminal 

APP: Serial Bluetooth Terminal

Firmware

El código que necesitas para programar el ATMEGA-328P de Arduino, lo puedes descargar del repositorio GitHub:

https://github.com/J-RPM/Level-of-a-tank-with-ultrasound

¿Necesitas fabricar un circuito impreso?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://www.pcbway.es/

 

Nivel de un depósito con ultrasonidos

Construcción de un medidor de nivel de líquidos para un depósito con ultrasonidos. En un depósito simétrico, dividiendo su capacidad máxima en litros entre la altura en centímetros, obtendremos el número de litros que contiene cada centímetro del líquido dentro del depósito. Conociendo la capacidad máxima del depósito, es posible medir la distancia libre de la parte superior del depósito por reflexión de los ultrasonidos en la superficie del líquido. Luego restamos esa distancia con la altura total del depósito, y así podremos calcular los litros que almacena en su interior.

Medidor de nivel por ultrasonidos, instalado en el depósito

Aprovechando el medidor de distancias ultrasónico que hice el año 2018, sólo he tenido que adaptar su código para convertir el medidor de distancia en un medidor de litros, y mostrarlos en el display.

OLED: SSD1306 ‘Fake in China’ & Sensor de proximidad para invidentes

Litros de un depósito

Para calcular el número de litros que hay dentro de un depósito simétrico, podemos medir la distancia libre de líquido, desde su nivel máximo de llenado hasta la superficie del líquido. Luego restamos esa distancia de la altura total del depósito, y la multiplicamos por el número de litros por centímetro que previamente hemos calculado en función de la altura del depósito y su capacidad máxima.

Litros en el depósito

De esta forma podemos realizar la medida desde arriba, colocando un medidor de distancia ultrasónico en alguna de las bocas de respiración del depósito. Apuntando el haz ultrasónico del medidor hacia el fondo, el sensor recibirá el eco que se refleje en la superficie del líquido. A partir de esa medida ya podemos calcular el número de litros que contiene el depósito, evitamos que el sensor entre en contacto con el líquido, y podríamos medir cualquier producto químico o corrosivo.

Funcionamiento del sensor HC-SR04

El sensor de ultrasonidos HC-SR04 tiene dos cápsulas piezoeléctrias, por una de ellas transmite un tren de impulsos inaudible (40 KHz), y por la otra recibe el eco de la señal reflejada. Dependiendo de la distancia del punto de reflexión, el eco recibido llegará con mayor o menor retardo. Tomando como referencia la velocidad de propagación del sonido en el espacio libre, con tan sólo medir el tiempo de retardo del eco recibido con respecto al origen, podremos calcular con precisión a qué distancia del sensor se encuentra el obstáculo.

Sensor HC-SR04

El sensor HC-SR04 dispone de 4 pines de conexión, 2 de ellos son para alimentar su circuito con 5VDC (Vcc/GND), y los otros dos son para realizar las medidas:

      • Trig: Un microprocesador externo envía un impulso de corta duración cada vez que necesita obtener una medida.
      • Echo: El sensor entrega un impulso de ancho variable, y midiendo su duración obtenemos la distancia a la que se encuentra el obstáculo.


    Sensor HC-SR04

Esquema

Este circuito incluye un zumbador piezoeléctrico, el cual he aprovechado en este montaje para utilizarlo como alarma acústica, y avisar cuando el nivel del líquido está por debajo del nivel mínimo que hayamos prefijado (reserva).

Esquema: Detector de proximidad

Características del depósito

Las medidas y capacidad del depósito forman parte de los parámetros de ajuste del código del programa, pudiendo así adaptar con facilidad el firmware a las dimensiones y volumen de cualquier depósito.

Ajustes del tamaño del depósito

El nivel de la reserva también se configura en el código del programa, y son los centímetros desde el fondo del depósito hasta el nivel mínimo prefijado. En función del número de litros por centímetro del depósito, podemos calcular el número de litros de la reserva. En este caso, el nivel de reserva sería: 7,41 L/cm. X 40 cms. = 296,4 litros.

Montaje en el depósito

Como este medidor es muy pequeño, lo monté en una de las bocas de respiración para el llenado del depósito, sustituyendo su tapón por un soporte que hice a medida con la impresora 3D.

Soportes 3D, para el interruptor y el sensor de medida por ultrasonidos

Para conectar el medidor ultrasónico sólo cuando lo necesite, cambié  su interruptor de encendido por un conector de alimentación. Desde el conector hice una prolongación con cable paralelo, hasta llegar al interruptor de encendido/apagado. El interruptor lo puse en la puerta de acceso al hueco donde tengo el depósito, con el fin de no tener que acercarme hasta el depósito para ver su contenido.

Test de funcionamiento

Antes de montar el sensor en el depósito, es conveniente comprobar que no hemos cometido algún error al introducir los parámetros de ajuste en el código del programa, y de paso comprobar que funciona correctamente en todo el rango de medidas.

Test del calibrado

En la imagen anterior, comprobé que el display mostraba 1000 litros a una distancia de 5 cms. La capacidad máxima de mi depósito es de 1000 litros, y la distancia entre el sensor y el nivel máximo del depósito (offset) es de 5 cms.

Firmware

El código que necesitas para programar el ATMEGA-328P de Arduino, lo puedes descargar del repositorio GitHub:

https://github.com/J-RPM/Level-of-a-tank-with-ultrasound

Soportes 3D

El soporte del medidor y su interruptor remoto los hice on PLA de color negro. Los ficheros los puedes descargar desde el siguiente link:

https://www.thingiverse.com/thing:5633438

¿Necesitas fabricar un circuito impreso?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://www.pcbway.es/