Hoy vamos a mostrar un proyecto IoT realmente sencillo y útil. Se trata de un dispositivo capaz de detectar fugas de agua y avisarnos al móvil en caso de que exista una. Si por ejemplo se te rompe una tubería en casa, desearás tener instalado uno de estos para que te avise por si no estás presente en el momento del desastre.
Posibles aplicaciones
- Prevenir inundaciones y daños en la vivienda
- Cerrar automáticamente la llave de paso
- Detectar fugas en lavadoras o refrigeradores
- Detectar lluvia
- Detectar la ausencia de agua para saber cuando regar las plantas
- Disponer de varios sensores para saber a que zona de la casa afecta la fuga de agua
- Saber cuando se ha llenado la piscina
- Saber cuando se ha llenado el tanque del deshumidificador o la garrafa del aire acondicionado
- Viviendas inteligentes. Smart home.
- Domótica
Material necesario:
- Placa Wifi LoRa-32
- Water sensor
- Batería (opcional)
La placa Wifi LoRa-32
Como introducción vamos a hablar por encima de la placa. Se trata de una PCB compatible con el ecosistema de Arduino, pero no es uno como tal. Lleva incorporado:
- Microcontrolador ESP32
- Módulo wifi
- Módulo bluetooth
- Modulo de radio frecuencia
- Pantalla OLED - SSD1306
- Gestión de carga de baterías
Podríamos haber empleado por ejemplo un simple arduino con un módulo wifi. Sin embargo, como ya sabemos Arduino es una plataforma que engloba muchos fabricantes y posee muchos tipos de placas compatibles entre si. En este proyecto no vamos a aprovechar todas las virtudes de la placa como por ejemplo el bluettoth, sin embargo nunca viene de más tener disponibles estas opciones para mejorar el proyecto en un futuro, o para hacer otros proyectos.
La propia placa tiene muchas variantes, incluso tienes variantes chinas que son compatibles y que incorporan otros tipos de funcionalidades. Se pueden encontrar variantes chinas a muy bajo coste en Internet.
Conectando el sensor:
Debemos conectar cada pin del sensor al pin correspondiente de la placa.
Requisitos de software:
- IDE de Arduino
- PCB Wifi LoRa-32
- Librería SSD1306.h
- Librería UniversalTelegramBot.h
- Firmware del proyecto: https://gist.github.com/iberotecno/237f49285efcf86bf6a73144b332d710
Instalando el IDE de Arduino
El IDE de Arduino lo descargamos desde aquí: https://www.arduino.cc/en/Main/Software
Una vez descargado e instalado, lo abrimos.
Instalando la PCB basada en ESP32
Dentro del programa vamos al menú archivo > preferencias
Añadimos esta URL y presionamos OK: https://dl.espressif.com/dl/package_esp32_index.json
Vamos al menú herramientas > placa > gestor de tarjetas, buscamos esp32 y presionamos instalar
Instalando las librerías necesarias
Estas librerías están disponibles desde el entorno del propio programa y podemos descargarlas con facilidad. Para ello vamos al menú programa > incluir librerías > gestionar librerías.
Buscamos "Adafruit SSD1306" y la instalamos.
Buscamos "UniversalTelegramBot" y la instalamos.
Preparando nuestro telegram
- Para poder recibir las alertas en nuestro teléfono móvil, va a ser necesario que instalemos la APP Telegram.
- Una vez instalada la APP la abrimos. Presionamos en la lupa y escribimos "BotFather" y entramos.
- Escribir /newbot
- Escribir un nombre para el bot por ejemplo "guardian"
- Escribir lo mismo pero terminado en "bot" por ejemplo "guardianbot"
- Se nos proporcionará una clave o token para acceder a la HTTP API, copiar dicha clave que será nuestro BOT token
- También veremos un enlace que empieza por "t.me/nombre_del_bot" presionamos para entrar.
- Escribimos /start en la ventana de nuestro bot
- Volvemos atrás y de nuevo en la lupa escribimos "IDBot". Entramos.
- Escribimos /start
- Escribimos /getid y apuntamos el número que aparezca que será nuestro CHAT_ID
Modificando el programa
1. Vamos copiar y pegar el código fuente del programa dentro del IDE de Arduino: https://gist.github.com/iberotecno/237f49285efcf86bf6a73144b332d710
2. Debemos modificar estas líneas con los datos anteriormente obtenidos:
#define CHAT_ID "782888438"
#define BOTtoken "640232033:AAEqe4BlVkjMivcuxJ16rfef6g8EMujJiLc"
3. Debemos modificar estas líneas con los datos de nuestra red Wifi
char ssid[] = "MiRed"; // your network SSID (name)
char password[] = "Mi_clave_wifi."; // your network key
Flasheando el firmware
1. Vamos al menú herramientas > placa > ESP8266
2. Conectamos la placa con un cable micro USB al PC y esperamos a que nos reconozca el dispositivo.
3. Presionamos el botón "subir"
Si hubiera problemas con el proceso, presionar el botón PRG de nuestra placa y manteniendolo pulsado presionamos el botón RST, para después soltar ambos botones.
Ya lo tenemos todo listo. Si lo deseamos, podemos conectar una batería a nuestra placa o un transformador con cable micro USB para poder utilizarla sin nececsidad de un PC.
Si ponemos el sensor en contacto con el agua, recibiremos una alerta en nuestro Telegram.
Ahorro de energía
Hemos diseñado el código fuente con la idea de ahorrar la máxima cantidad de energía posible. Si deseas alimentar el dispositivo con una batería, tendrás una duración muy larga de la misma. Para ello hemos implementado el modo "Deep Sleep".
Con esto hacemos que la placa "se duerma" cuando no existe actividad, consumiendo una mínima cantidad de energía.
Cuando el sensor detecta agua, se dispara una interrupción por hardware, lo que despierta al dispositivo y provoca su conexión a la red wifi y el envío del mensaje. Si se desea un ahorro todavía más estricto, se puede desoldar el LED que lleva el sensor de agua.