En este ejercicio construiremos un data logger ambiental completo capaz de medir diferentes variables del entorno y almacenar las mediciones en una tarjeta de memoria para su posterior análisis. El sistema está basado en un Arduino UNO R4 WiFi y utiliza múltiples sensores para monitorear condiciones ambientales, además de un reloj en tiempo real para registrar cuándo ocurre cada medición.
El objetivo de este ejercicio es introducir uno de los conceptos más importantes en sistemas embebidos aplicados a monitoreo ambiental e IoT: el registro persistente de datos.
Sensores utilizados
El sistema integra varios sensores analógicos y digitales que permiten observar diferentes condiciones del entorno:
- Sensor MQ135 para medir calidad del aire
- Sensor MQ9 para detectar gases combustibles como CO o GLP
- Sensor de humedad del suelo
- Sensor digital SI7021 para temperatura y humedad ambiental
- Sensor de iluminación BH1750 para medir nivel de luz en lux
Además, el sistema utiliza un módulo de reloj en tiempo real DS3231 RTC Module para obtener la fecha y hora exacta de cada medición.
¿Qué hace este ejercicio?
El programa realiza las siguientes tareas:
- Inicializa todos los sensores conectados al sistema.
- Inicializa el reloj en tiempo real (RTC).
- Inicializa una tarjeta microSD para almacenamiento de datos.
- Verifica si el archivo datos.csv ya existe en la tarjeta.
- Si el archivo no existe, crea el archivo y escribe una cabecera CSV.
- Cada 2 segundos:
- Lee todos los sensores.
- Obtiene la fecha y hora del RTC.
- Muestra la información en el monitor serial.
- Guarda la medición en el archivo CSV.
De esta manera el sistema genera un historial completo de mediciones ambientales.
Estructura del ejercicio
El código está organizado en varias secciones para facilitar su comprensión.
1. Inclusión de librerías
Primero se incluyen las librerías necesarias para comunicación con sensores, almacenamiento y RTC.
Wire→ comunicación I2CSPIySD→ comunicación con tarjeta microSDRTClib→ control del RTC- Librerías específicas de sensores
2. Definición de pines
Se definen los pines analógicos utilizados para los sensores:
- A0 → MQ135
- A1 → MQ9
- A2 → Sensor de humedad del suelo
También se define el pin Chip Select de la tarjeta SD.
3. Inicialización del sistema
En la función setup() el programa realiza varias tareas críticas:
- Inicializa el bus I2C
- Verifica que los sensores digitales estén conectados
- Inicializa el RTC
- Ajusta la hora si el módulo perdió energía
- Inicializa la tarjeta microSD
Además, el programa verifica si el archivo datos.csv ya existe.
Si no existe, crea el archivo y escribe la cabecera:
Fecha,Hora,Aire,Gas,HumedadSuelo,Temperatura,Humedad,Luz
Esto permite que el archivo sea compatible con Excel, Python o MATLAB.
4. Lectura de sensores
En el bucle principal loop() el sistema realiza la adquisición de datos:
- Lectura analógica de sensores MQ135, MQ9 y humedad del suelo.
- Lectura digital de temperatura, humedad y luz.
- Obtención de fecha y hora actual desde el RTC.
5. Visualización de datos
Cada medición se muestra en el monitor serial para que el usuario pueda observar el funcionamiento del sistema en tiempo real.
Esto facilita:
- Depuración
- Validación de sensores
- Verificación del sistema completo
6. Registro de datos en CSV
Finalmente el sistema abre el archivo datos.csv en la tarjeta microSD y agrega una nueva línea con el formato:
Fecha,Hora,Aire,Gas,HumedadSuelo,Temperatura,Humedad,Luz
Ejemplo de registro generado:
2026-03-05,12:30:10,410,220,650,24.5,58.2,350
Cada línea representa una medición completa del sistema.
Aplicaciones de este ejercicio
Este tipo de arquitectura es la base de muchos sistemas reales, por ejemplo:
- Monitoreo de cultivos
- Estaciones meteorológicas
- Control ambiental en invernaderos
- Redes de sensores IoT
- Adquisición de datos para investigación
Repositorio del ejercicio
Puedes descargar el código completo del ejercicio en el siguiente repositorio:
Dentro del repositorio encontrarás:
- Código completo del ejercicio
- Ejemplos adicionales
- Otros proyectos con Arduino, Raspberry Pi y FPGA.
Prompt recomendado para generar este código
Si quieres generar un programa similar utilizando inteligencia artificial, puedes utilizar un prompt como el siguiente:
Actúa como un ingeniero experto en sistemas embebidos y Arduino.
Genera un programa para Arduino UNO R4 WiFi que implemente
una estación ambiental con los siguientes sensores:
- MQ135 (calidad del aire)
- MQ9 (gas)
- Sensor de humedad del suelo
- SI7021 (temperatura y humedad por I2C)
- BH1750 (sensor de luz por I2C)
- RTC DS3231 para obtener fecha y hora
El sistema debe:
1. Leer todos los sensores
2. Obtener fecha y hora del RTC
3. Mostrar los datos en el monitor serial
4. Guardar cada medición en una tarjeta microSD
5. Crear un archivo CSV llamado datos.csv
6. Escribir la cabecera si el archivo no existe
7. Registrar una nueva medición cada 2 segundos
Utiliza variables en español y comentarios detallados.
Qué aprenderás en este ejercicio
Este ejercicio introduce varios conceptos fundamentales en sistemas embebidos y adquisición de datos:
- Integración de múltiples sensores
- Comunicación I2C
- Uso de RTC para timestamp
- Manejo de sistemas de archivos en microSD
- Generación de archivos CSV
- Construcción de data loggers ambientales
Este tipo de arquitectura es la base de muchos sistemas IoT y de monitoreo industrial.
Si estás construyendo una red de sensores para monitoreo ambiental, este ejercicio es el punto de partida ideal para comenzar a registrar datos reales del entorno.
