tutoriales.com

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!

Intermedio18 min de lectura10 views9 de marzo de 2026Reportar error

¡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.
🔥 Importante: Este tutorial asume conocimientos básicos de electrónica y programación en C++ con el IDE de Arduino. Si eres principiante, te recomendamos revisar conceptos básicos de ESP32 antes de comenzar.

🛠️ Materiales Necesarios

Aquí tienes una lista de los componentes que necesitarás. La mayoría son económicos y fáciles de conseguir:

ComponenteDescripciónCantidadEnlace de Compra (Ejemplo)
ESP32 DevKitCMicrocontrolador Wi-Fi y Bluetooth1Amazon / AliExpress
Módulo GPS (ej. NEO-6M)Para rastreo de ubicación1Amazon / AliExpress
Sensor de Temperatura (ej. DHT11/DHT22 o DS18B20)Monitoreo de temperatura ambiente/corporal1Amazon / AliExpress
Acelerómetro (ej. MPU6050)Detección de movimiento y actividad1Amazon / AliExpress
Batería LiPo (3.7V, 1000-2000mAh)Fuente de alimentación portátil1Amazon / AliExpress
Módulo Cargador LiPo (ej. TP4056)Para recargar la batería1Amazon / AliExpress
Placa ProtoboardPara montaje temporal1Tienda de electrónica
Cables JumperConexiones entre componentesVariosTienda de electrónica
Resistencias (varias)Según los sensores, ej. para DS18B20AlgunasTienda de electrónica
Carcasa PequeñaPara proteger los componentes1Impresión 3D / Tienda
Collar de MascotaPara sujetar el dispositivo1Tienda de mascotas
💡 Consejo: Considera el tamaño y peso de tu mascota al elegir los componentes. Busca versiones mini o SMD si necesitas un dispositivo más ligero y compacto.

⚙️ 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

Sensores ESP32 Plataforma IoT App Móvil / Web Batería + Cargador Lectura de datos Envío Wi-Fi Visualización / Alertas Alimentación

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):

SensorESP32 Pin(es)Función
GPS (TX)GPIO16 (RX2)Recibe datos del GPS
GPS (RX)GPIO17 (TX2)Envía comandos al GPS
DHT11/DHT22 (Data)GPIO4Lectura de temperatura/humedad
DS18B20 (Data)GPIO2Lectura de temperatura (One-Wire)
MPU6050 (SDA)GPIO21Datos I2C (Bus SDA)
MPU6050 (SCL)GPIO22Clock I2C (Bus SCL)
Batería3V3 o 5V (vía regulador)Alimentación del sistema
⚠️ Advertencia: Verifica siempre los voltajes de operación de tus sensores. La mayoría funcionan a 3.3V o 5V. El ESP32 opera a 3.3V, así que si un sensor requiere 5V, necesitarás un convertidor de nivel lógico o una alimentación separada.

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
💡 Consejo: Usa una protoboard para hacer las conexiones inicialmente. Una vez que todo funcione, puedes soldar los componentes para una solución más robusta y duradera.

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:

  1. Descarga e instala el IDE de Arduino desde su sitio web oficial.
  2. En el IDE, ve a Archivo > Preferencias.
  3. En URLs Adicionales de Gestores de Tarjetas, añade: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. Ve a Herramientas > Placa > Gestor de Tarjetas....
  5. Busca y instala esp32.
  6. 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)
}
📌 Nota: Reemplaza `"Tu_SSID_WiFi"`, `"Tu_Contraseña_WiFi"`, `TU_CHANNEL_ID_THINGSPEAK` y `"TU_WRITE_API_KEY_THINGSPEAK"` con tus credenciales reales.

Explicación del Código:

  1. Inclusión de Librerías: Cargamos las librerías necesarias para WiFi, ThingSpeak, GPS, DHT y MPU6050.
  2. Configuración de Credenciales: Define tu SSID y contraseña de WiFi, así como el Channel ID y la API Key de ThingSpeak.
  3. 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.
  4. 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() y dht.readHumidity() obtienen los valores. Se incluye una comprobación isnan para 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.
  5. 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.
  6. Retraso: Un delay() al final del loop() 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:

  1. Crear una Cuenta: Ve a ThingSpeak.com y crea una cuenta.
  2. 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.
  3. Obtener Credenciales: Ve a la pestaña API Keys de tu canal. Copia el Channel ID y el Write API Key. Pégalos en tu código ESP32.
  4. 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 View de 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:

  1. Ve a Apps > React y haz clic en New React.
  2. Condition: Define una condición, por ejemplo, Field 3 (Temperatura) is > 39 (para una temperatura alta en °C).
  3. Action: Configura un ThingTweet para enviar un tweet, o ThingHTTP para 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.
💡 Consejo: Para una monitorización de ubicación más visual, puedes usar el widget de mapa de ThingSpeak o integrar con servicios como Google Maps si tienes conocimientos de desarrollo web.

🔋 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 el loop() 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.
📌 Nota: Asegúrate de que la carcasa sea **impermeable** o al menos resistente a salpicaduras, ¡especialmente si tu mascota es aventurera!

✅ Pruebas y Depuración

Una vez que hayas montado y programado tu dispositivo, es hora de probarlo:

  1. Monitoreo Serial: Abre el Monitor Serial en 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.
  2. 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.
  3. 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.
  4. 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.
Progreso del Proyecto: 85% Completo

✨ 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.
Paso 1: Integrar modo Deep Sleep del ESP32 para ahorro de energía.
Paso 2: Implementar geocercas con el módulo GPS y lógica en la nube.
Paso 3: Añadir notificaciones push más avanzadas con IFTTT o Telegram.
Paso 4: Refinar la carcasa para máxima resistencia y comodidad.

📝 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.

💡 Consejo: Comparte tu proyecto en comunidades de IoT o foros de mascotas. ¡Podrías inspirar a otros y recibir valiosos comentarios!

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!