Sistema de Monitoreo de Mascotas con IoT: Siempre Cerca de tu Compañero Peludo con ESP32
Descubre cómo construir un sistema de monitoreo inteligente para tu mascota utilizando una placa ESP32, diversos sensores y la plataforma de IoT. Aprenderás a rastrear su ubicación, actividad física, temperatura corporal y recibir alertas en tu teléfono, asegurando el bienestar de tu compañero peludo. ¡Mantente conectado con tu mascota como nunca antes!
¡Hola, amante de los animales y entusiasta de la tecnología! 🐾 ¿Alguna vez te has preguntado qué hace tu mascota cuando no estás en casa? ¿O te preocupa su bienestar y seguridad cuando sale a explorar? En este tutorial, te guiaré paso a paso para construir un sistema de monitoreo de mascotas inteligente utilizando la versátil placa ESP32 y una serie de sensores IoT. Prepárate para darle a tu compañero peludo una vida más segura y a ti una mayor tranquilidad.
📖 ¿Por qué un Sistema de Monitoreo IoT para Mascotas?
La tecnología IoT (Internet de las Cosas) nos permite conectar objetos cotidianos a internet, abriendo un mundo de posibilidades. Para nuestras mascotas, esto significa poder monitorear su estado de salud, su ubicación y su nivel de actividad en tiempo real. Imagina recibir una notificación si tu perro se aventura demasiado lejos, o si su temperatura corporal es inusualmente alta. Con este proyecto, eso es exactamente lo que lograremos.
Este sistema no solo te brindará paz mental, sino que también te ayudará a entender mejor los patrones de comportamiento de tu mascota, permitiéndote tomar decisiones informadas sobre su cuidado y entrenamiento.
🎯 Objetivos del Proyecto
Al finalizar este tutorial, serás capaz de:
- Configurar un ESP32 para proyectos IoT.
- Interconectar varios sensores (GPS, temperatura, acelerómetro) con el ESP32.
- Enviar datos en tiempo real a una plataforma en la nube (ej. ThingSpeak, Blynk).
- Visualizar los datos y configurar alertas basadas en umbrales.
- Construir un dispositivo compacto que tu mascota pueda llevar cómodamente.
🛠️ Materiales Necesarios
Aquí tienes una lista de los componentes que necesitarás. La mayoría son económicos y fáciles de conseguir:
| Componente | Descripción | Cantidad | Enlace de Compra (Ejemplo) |
|---|---|---|---|
| ESP32 DevKitC | Microcontrolador Wi-Fi y Bluetooth | 1 | Amazon / AliExpress |
| Módulo GPS (ej. NEO-6M) | Para rastreo de ubicación | 1 | Amazon / AliExpress |
| Sensor de Temperatura (ej. DHT11/DHT22 o DS18B20) | Monitoreo de temperatura ambiente/corporal | 1 | Amazon / AliExpress |
| Acelerómetro (ej. MPU6050) | Detección de movimiento y actividad | 1 | Amazon / AliExpress |
| Batería LiPo (3.7V, 1000-2000mAh) | Fuente de alimentación portátil | 1 | Amazon / AliExpress |
| Módulo Cargador LiPo (ej. TP4056) | Para recargar la batería | 1 | Amazon / AliExpress |
| Placa Protoboard | Para montaje temporal | 1 | Tienda de electrónica |
| Cables Jumper | Conexiones entre componentes | Varios | Tienda de electrónica |
| Resistencias (varias) | Según los sensores, ej. para DS18B20 | Algunas | Tienda de electrónica |
| Carcasa Pequeña | Para proteger los componentes | 1 | Impresión 3D / Tienda |
| Collar de Mascota | Para sujetar el dispositivo | 1 | Tienda de mascotas |
⚙️ Esquema del Sistema y Diagrama de Flujo
Antes de sumergirnos en la conexión, veamos cómo fluirán los datos en nuestro sistema.
Diagrama de Flujo de Datos
El ESP32 leerá los datos de los sensores, los procesará y los enviará vía Wi-Fi a una plataforma IoT en la nube. Desde esta plataforma, podrás visualizar los datos en un panel de control y recibir notificaciones en tu smartphone si se detecta alguna anomalía.
🔌 Conexión de los Componentes (Esquemático)
Ahora, vamos a conectar físicamente los sensores al ESP32. Asegúrate de que el ESP32 no esté conectado a ninguna fuente de alimentación durante este proceso.
Pines del ESP32 a Usar (Ejemplo):
| Sensor | ESP32 Pin(es) | Función |
|---|---|---|
| GPS (TX) | GPIO16 (RX2) | Recibe datos del GPS |
| GPS (RX) | GPIO17 (TX2) | Envía comandos al GPS |
| DHT11/DHT22 (Data) | GPIO4 | Lectura de temperatura/humedad |
| DS18B20 (Data) | GPIO2 | Lectura de temperatura (One-Wire) |
| MPU6050 (SDA) | GPIO21 | Datos I2C (Bus SDA) |
| MPU6050 (SCL) | GPIO22 | Clock I2C (Bus SCL) |
| Batería | 3V3 o 5V (vía regulador) | Alimentación del sistema |
Para el módulo GPS NEO-6M, conéctalo de la siguiente manera:
- GPS VCC a ESP32 3V3
- GPS GND a ESP32 GND
- GPS TX a ESP32 RX2 (GPIO16)
- GPS RX a ESP32 TX2 (GPIO17)
Para el sensor de temperatura DHT11/DHT22:
- DHT VCC a ESP32 3V3
- DHT GND a ESP32 GND
- DHT Data a ESP32 GPIO4 (asegúrate de usar una resistencia pull-up de 10k entre Data y VCC si no está integrada en el módulo).
Para el acelerómetro MPU6050 (I2C):
- MPU VCC a ESP32 3V3
- MPU GND a ESP32 GND
- MPU SDA a ESP32 GPIO21
- MPU SCL a ESP32 GPIO22
Alimentación del Sistema
El ESP32 y los sensores pueden ser alimentados por la batería LiPo a través del módulo TP4056. El TP4056 cargará la batería y proporcionará una salida de 3.7V nominales. Es recomendable usar un módulo regulador de voltaje buck/boost si necesitas una salida de 3.3V estable para el ESP32, aunque muchas placas ESP32 DevKitC ya tienen un regulador de 3.3V integrado que puede ser alimentado con 5V (desde el TP4056 después de regular la batería). Verifica la documentación de tu placa ESP32.
💻 Configuración del Entorno de Desarrollo (IDE de Arduino)
Si aún no lo has hecho, instala el IDE de Arduino y configura el soporte para ESP32:
- Descarga e instala el IDE de Arduino desde su sitio web oficial.
- En el IDE, ve a
Archivo > Preferencias. - En
URLs Adicionales de Gestores de Tarjetas, añade:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Ve a
Herramientas > Placa > Gestor de Tarjetas.... - Busca y instala
esp32. - Selecciona tu placa ESP32 en
Herramientas > Placa(ej.ESP32 Dev Module).
Instalación de Librerías Necesarias
Necesitarás varias librerías para interactuar con los sensores y la plataforma IoT. Ve a Programa > Incluir Librería > Gestionar Librerías... y busca e instala las siguientes:
- TinyGPSPlus (para el módulo GPS)
- DHT sensor library de Adafruit (para DHT11/DHT22)
- Adafruit Unified Sensor (dependencia de la librería DHT)
- Adafruit MPU6050 o Wire (para MPU6050 y comunicación I2C)
- ThingSpeak o Blynk (dependiendo de la plataforma IoT que elijas)
📝 Programación del ESP32
Ahora viene la parte de la programación. Usaremos C++ con el entorno de Arduino. Este código leerá los datos de los sensores, se conectará a Wi-Fi y enviará la información a la nube.
Ejemplo de Código (Fragmentos Clave)
#include <WiFi.h>
#include <ThingSpeak.h> // O la librería de tu plataforma IoT elegida
#include <TinyGPSPlus.h>
#include <HardwareSerial.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// --- Configuración WiFi ---
const char* ssid = "Tu_SSID_WiFi";
const char* password = "Tu_Contraseña_WiFi";
// --- Configuración ThingSpeak ---
unsigned long myChannelNumber = TU_CHANNEL_ID_THINGSPEAK;
const char* myWriteAPIKey = "TU_WRITE_API_KEY_THINGSPEAK";
WiFiClient client;
// --- Configuración GPS ---
HardwareSerial SerialGPS(2); // Usa UART2 del ESP32 (GPIO16/17)
TinyGPSPlus gps;
// --- Configuración DHT11/DHT22 ---
#define DHTPIN 4 // Pin GPIO donde está conectado el sensor DHT
#define DHTTYPE DHT11 // O DHT22
DHT dht(DHTPIN, DHTTYPE);
// --- Configuración MPU6050 ---
Adafruit_MPU6050 mpu; // Crea un objeto MPU6050
void setup() {
Serial.begin(115200);
SerialGPS.begin(9600, SERIAL_8N1, 16, 17); // Baudios, formato, RX, TX
dht.begin();
Wire.begin(21, 22); // Inicializa I2C en GPIO21 (SDA), GPIO22 (SCL)
if (!mpu.begin()) {
Serial.println("Fallo al encontrar MPU6050, revisa las conexiones!");
while (1) delay(10);
}
Serial.println("MPU6050 encontrado!");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G); // Rango del acelerómetro
mpu.setGyroRange(MPU6050_RANGE_500_DEG); // Rango del giroscopio
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); // Ancho de banda del filtro
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("
Conectado a WiFi");
ThingSpeak.begin(client);
}
void loop() {
// --- Leer GPS ---
while (SerialGPS.available()) {
gps.encode(SerialGPS.read());
}
if (gps.location.isUpdated()) {
Serial.print("Latitud: ");
Serial.println(gps.location.lat(), 6);
Serial.print("Longitud: ");
Serial.println(gps.location.lng(), 6);
ThingSpeak.setField(1, gps.location.lat());
ThingSpeak.setField(2, gps.location.lng());
}
// --- Leer DHT ---
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Fallo al leer del sensor DHT!");
} else {
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C");
Serial.print(" Humedad: ");
Serial.print(h);
Serial.println(" %");
ThingSpeak.setField(3, t);
}
// --- Leer MPU6050 ---
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
Serial.print("Aceleración X: "); Serial.print(a.acceleration.x);
Serial.print(", Y: "); Serial.print(a.acceleration.y);
Serial.print(", Z: "); Serial.println(a.acceleration.z);
// Calcular magnitud de aceleración para detectar actividad
float accelerationMagnitude = sqrt(pow(a.acceleration.x, 2) + pow(a.acceleration.y, 2) + pow(a.acceleration.z, 2));
Serial.print("Magnitud de Aceleración: "); Serial.println(accelerationMagnitude);
ThingSpeak.setField(4, accelerationMagnitude);
// --- Enviar datos a ThingSpeak ---
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Datos enviados a ThingSpeak con éxito.");
} else {
Serial.println("Problema al enviar a ThingSpeak. HTTP error code " + String(x));
}
delay(60000); // Envía datos cada 60 segundos (ajustar según necesidad y límites de la plataforma)
}
Explicación del Código:
- Inclusión de Librerías: Cargamos las librerías necesarias para WiFi, ThingSpeak, GPS, DHT y MPU6050.
- Configuración de Credenciales: Define tu SSID y contraseña de WiFi, así como el Channel ID y la API Key de ThingSpeak.
- Inicialización: En
setup(), inicializamos la comunicación serial (para depuración y GPS), el sensor DHT, el bus I2C para el MPU6050, y la conexión WiFi. - Lectura de Sensores: En
loop(), leemos datos del GPS, DHT y MPU6050.- GPS: La función
gps.encode()procesa los datos NMEA recibidos por el módulo GPS.gps.location.isUpdated()verifica si hay nuevos datos de ubicación. - DHT:
dht.readTemperature()ydht.readHumidity()obtienen los valores. Se incluye una comprobaciónisnanpara errores de lectura. - MPU6050:
mpu.getEvent()obtiene los datos del acelerómetro, giroscopio y temperatura. La magnitud de la aceleración se calcula para estimar la actividad.
- GPS: La función
- Envío a ThingSpeak:
ThingSpeak.setField()asigna cada lectura a un campo específico en tu canal de ThingSpeak.ThingSpeak.writeFields()envía todos los datos de una vez. - Retraso: Un
delay()al final delloop()controla la frecuencia de envío de datos. Esto es importante para el consumo de batería y para no exceder los límites de la API de ThingSpeak (que suele ser de una actualización cada 15-20 segundos en su versión gratuita).
☁️ Configuración de la Plataforma IoT (ThingSpeak)
ThingSpeak es una plataforma IoT gratuita que nos permite recopilar, visualizar y analizar datos de sensores en la nube. Sigue estos pasos:
- Crear una Cuenta: Ve a ThingSpeak.com y crea una cuenta.
- Crear un Nuevo Canal: Haz clic en
Channels > My Channels > New Channel.- Dale un nombre (ej. "Monitor de Mascota") y una descripción.
- Define los
Fields(campos) que usarás para cada dato:- Field 1: Latitud
- Field 2: Longitud
- Field 3: Temperatura (°C)
- Field 4: Magnitud de Aceleración
- Guarda el canal.
- Obtener Credenciales: Ve a la pestaña
API Keysde tu canal. Copia elChannel IDy elWrite API Key. Pégalos en tu código ESP32. - Visualización: Una vez que el ESP32 esté funcionando y enviando datos, podrás ver gráficos en tiempo real en la pestaña
Private Viewde tu canal. Para la ubicación, ThingSpeak puede integrar mapas (Map Widget).
Configuración de Alertas (ThingSpeak React)
ThingSpeak te permite configurar "Reacts" para enviar notificaciones cuando una condición se cumple:
- Ve a
Apps > Reacty haz clic enNew React. - Condition: Define una condición, por ejemplo,
Field 3 (Temperatura)is >39(para una temperatura alta en °C). - Action: Configura un
ThingTweetpara enviar un tweet, oThingHTTPpara enviar una solicitud HTTP a un servicio de notificación (como IFTTT o pushover) que luego te enviará un SMS o una notificación push a tu teléfono.
🔋 Optimización de la Batería y Carcasa
El consumo de energía es crucial para un dispositivo portátil. Aquí hay algunas estrategias:
- Modo Deep Sleep del ESP32: El ESP32 puede entrar en un modo de muy bajo consumo (
WiFi.mode(WIFI_OFF); btStop(); esp_deep_sleep_start();). Despiértalo periódicamente (ej. cada 5 minutos) con un temporizador para tomar lecturas y enviar datos. Esto aumentará significativamente la duración de la batería. - Desactivar Periféricos: Apaga el GPS y el MPU6050 cuando no los uses (si es posible con tus módulos específicos).
- Intervalos de Envío: Aumenta el
delay()en elloop()para reducir la frecuencia de envío de datos. - Tipo de Batería: Las baterías LiPo son ligeras y tienen buena densidad de energía. Elige una capacidad adecuada (mAh).
Diseño de la Carcasa
Una carcasa adecuada es esencial para proteger los componentes de los elementos y los juegos bruscos de tu mascota. Puedes:
- Imprimir en 3D: Diseña una carcasa personalizada y cómoda para tu mascota. Asegúrate de que sea lo suficientemente robusta y que permita la salida de la antena GPS para una mejor señal.
- Cajas genéricas: Adapta una pequeña caja de proyecto de plástico.
✅ Pruebas y Depuración
Una vez que hayas montado y programado tu dispositivo, es hora de probarlo:
- Monitoreo Serial: Abre el
Monitor Serialen el IDE de Arduino para ver los mensajes de depuración, conexión Wi-Fi, lecturas de sensores y estado de envío a ThingSpeak. - Verificación de Datos: Comprueba en la página de tu canal de ThingSpeak que los datos están llegando y se están graficando correctamente.
- Pruebas de Campo (GPS): Lleva a tu mascota (con el dispositivo) a un lugar abierto para que el GPS pueda obtener una señal. Verifica que la latitud y longitud se actualicen en ThingSpeak.
- Alertas: Simula una condición de alerta (ej. sube manualmente la temperatura si es posible o ajusta el umbral) para verificar que las notificaciones funcionen.
✨ Mejoras y Posibles Extensiones
Este proyecto es una base sólida, pero puedes expandirlo de muchas maneras:
- Detección de Caídas/Accidentes: Utilizar el acelerómetro y el giroscopio del MPU6050 para detectar patrones de movimiento inusuales que podrían indicar una caída o un problema.
- Geocercas (Geofencing): Implementar la capacidad de definir una zona segura y recibir alertas si la mascota sale o entra en esa área.
- Monitoreo de Alimentación: Añadir un sensor de peso o de nivel en el comedero para saber cuándo necesita ser rellenado.
- Comunicación Bidireccional: Integrar un pequeño altavoz o un módulo GSM para enviar comandos a la mascota o escuchar sonidos.
- Cámara Remota: Si el consumo de energía no es una preocupación, integrar una cámara pequeña para ver el entorno de la mascota.
- Pantalla OLED: Añadir una pequeña pantalla OLED al dispositivo para mostrar el estado de la batería, la señal GPS, o la temperatura local.
- Paneles Solares: Para una autonomía aún mayor, pequeños paneles solares pueden cargar la batería durante el día.
📝 Conclusión
¡Felicidades! 🎉 Has construido un sistema de monitoreo de mascotas con IoT que te permite mantener un ojo en tu querido compañero peludo desde cualquier lugar. Este proyecto no solo es funcional sino también una excelente manera de profundizar tus conocimientos en electrónica, programación y el emocionante mundo del Internet de las Cosas.
La tranquilidad de saber dónde está tu mascota y cómo se encuentra es invaluable. ¡Ahora puedes disfrutar de esa paz mental y una conexión más profunda con tu amigo de cuatro patas! Experimenta con las mejoras sugeridas y adapta el proyecto a las necesidades específicas de tu mascota.
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!