Ejercicio No. 6 – Sistema de Monitoreo Ambiental IoT con Arduino, WiFi y Raspberry Pi

En este ejercicio se desarrolla un sistema completo de monitoreo ambiental IoT, capaz de medir variables ambientales, visualizarlas localmente, almacenarlas en memoria y enviarlas a un servidor remoto para su procesamiento.

El sistema utiliza un Arduino UNO R4 WiFi como unidad central para adquirir datos de múltiples sensores ambientales:

  • Sensor MQ135 para calidad del aire
  • Sensor MQ9 para gases combustibles
  • Sensor de humedad del suelo
  • Sensor digital SI7021 para temperatura y humedad relativa
  • Sensor de iluminación BH1750

Adicionalmente se integran varios módulos de soporte:

  • Módulo de reloj en tiempo real DS3231 RTC Module
  • Pantalla OLED basada en SSD1306 OLED Display
  • Tarjeta microSD para almacenamiento local de datos
  • Comunicación WiFi para envío de datos a una Raspberry Pi

Este ejercicio introduce una arquitectura típica de sistemas IoT distribuidos, donde un nodo de adquisición transmite datos a un servidor para su registro o procesamiento.


2. Arquitectura del sistema

El sistema implementa una arquitectura de adquisición y transmisión de datos estructurada en varios niveles.

Sensores
   ↓
Arduino UNO R4 WiFi
   ↓
├ Visualización local (OLED)
├ Registro local (microSD)
└ Comunicación WiFi
        ↓
   Raspberry Pi
        ↓
   Registro en CSV

Flujo de datos

  1. Los sensores miden variables ambientales.
  2. El Arduino procesa las lecturas.
  3. Los datos se muestran en la pantalla OLED.
  4. Se registran en un archivo CSV en la microSD.
  5. Se construye un mensaje JSON.
  6. Los datos se envían por HTTP a una Raspberry Pi.

Esta arquitectura permite redundancia de almacenamiento, ya que los datos se guardan tanto localmente como en el servidor.


3. Sensores utilizados

MQ135 – Calidad del aire

Este sensor permite detectar contaminantes presentes en el aire como:

  • CO₂
  • NH₃
  • Alcohol
  • Humo

Se conecta a una entrada analógica del Arduino.


MQ9 – Detección de gases

El sensor MQ9 se utiliza para detectar gases combustibles como:

  • Monóxido de carbono
  • Gas licuado
  • Metano

También se conecta a una entrada analógica.


Sensor de humedad del suelo

Este sensor mide la conductividad del suelo para estimar su nivel de humedad.

Aplicaciones típicas:

  • Sistemas de riego automático
  • Agricultura inteligente
  • Monitoreo de plantas

SI7021 – Temperatura y humedad

El sensor SI7021 mide:

  • Temperatura
  • Humedad relativa

Se comunica mediante I2C, lo que permite compartir el bus con otros sensores.


BH1750 – Sensor de luz

El sensor BH1750 mide niveles de iluminación en lux.

Se utiliza en aplicaciones como:

  • Automatización de iluminación
  • Agricultura de precisión
  • Control de invernaderos

4. Módulos adicionales

RTC DS3231

El módulo DS3231 RTC Module permite obtener:

  • Fecha
  • Hora

Incluso cuando el sistema está apagado gracias a su batería interna.

Cada medición queda registrada con timestamp, lo que permite analizar series temporales.


Pantalla OLED

La pantalla SSD1306 OLED Display permite visualizar en tiempo real:

  • Temperatura
  • Humedad
  • Luz
  • Calidad del aire
  • Humedad del suelo

Esto convierte el sistema en un monitor ambiental autónomo.


Tarjeta microSD

La microSD permite guardar los datos en un archivo CSV con la siguiente estructura:

Fecha,Hora,Aire,Gas,Suelo,Temperatura,Humedad,Luz

Ejemplo:

2026-03-05,14:30:01,315,201,640,25.3,58.1,420

Esto facilita el análisis posterior en:

  • Excel
  • Python
  • MATLAB
  • R

5. Comunicación IoT con Raspberry Pi

Una de las características más importantes del ejercicio es el envío de datos mediante WiFi.

El Arduino UNO R4 WiFi se conecta a una red inalámbrica y envía datos a un servidor HTTP ejecutándose en una Raspberry Pi.

Flujo de comunicación

  1. Arduino construye un objeto JSON.
  2. Se realiza una petición HTTP POST.
  3. La Raspberry Pi recibe los datos.
  4. Los almacena en un archivo CSV.

Ejemplo del JSON enviado:

{
 "aire":315,
 "gas":201,
 "suelo":640,
 "temperatura":25.3,
 "humedad":58.1,
 "luz":420
}

Este modelo de comunicación es típico en sistemas IoT basados en REST APIs.


6. Estructura del programa

El programa se organiza en varias secciones bien definidas.

1. Librerías

Se cargan las librerías necesarias para:

  • sensores
  • pantalla OLED
  • RTC
  • microSD
  • comunicación WiFi

2. Inicialización de dispositivos

En la función setup() se inicializan:

  • Bus I2C
  • Sensores
  • Pantalla OLED
  • RTC
  • Tarjeta SD
  • Conexión WiFi

Esto asegura que todos los módulos estén funcionando antes de iniciar el sistema.


3. Adquisición de sensores

En cada ciclo del loop() se leen los sensores:

  • Entradas analógicas
  • Sensores I2C
  • Hora del RTC

4. Visualización de datos

Los valores se muestran en:

  • Monitor serial
  • Pantalla OLED

5. Registro de datos

Cada medición se guarda en un archivo datos.csv en la tarjeta microSD.


6. Envío IoT

El sistema:

  1. Construye un mensaje JSON
  2. Realiza un HTTP POST
  3. Recibe la respuesta del servidor

Esto permite integrar el sistema con:

  • dashboards
  • bases de datos
  • sistemas de monitoreo remoto

7. Prompt recomendado para generar este código

Si deseas generar un programa similar utilizando herramientas de inteligencia artificial, puedes utilizar un prompt como el siguiente:

Escribe un programa completo para Arduino UNO R4 WiFi que implemente
un sistema de monitoreo ambiental IoT.

El sistema debe incluir:

Sensores:
- MQ135 (calidad del aire)
- MQ9 (gas)
- Sensor de humedad del suelo
- SI7021 (temperatura y humedad)
- BH1750 (sensor de luz)

Módulos adicionales:
- RTC DS3231
- Pantalla OLED SSD1306
- Tarjeta microSD para registro CSV
- Comunicación WiFi para enviar datos a un servidor HTTP

El programa debe:

1. Leer todos los sensores
2. Mostrar los datos en el monitor serial
3. Mostrar los datos en la pantalla OLED
4. Guardar los datos en un archivo CSV en microSD
5. Crear un JSON con los datos
6. Enviar los datos por HTTP POST a un servidor

Usar variables en español y comentar el código paso a paso.

8. Repositorio del ejercicio

Puedes encontrar el código completo de este ejercicio en el repositorio oficial de SysOnChip:

Repositorio GitHub del ejercicio:

En el repositorio se incluyen:

  • Código completo del Arduino
  • Código del servidor en Raspberry Pi

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio