
Proyecto Datalogger: Midiendo la Atmósfera con BMP280 y Tarjeta MicroSD en Arduino Mega
¡Hola, equipo de MonteSteam! 🚀
En esta guía paso a paso vamos a construir un Datalogger autónomo (una estación meteorológica portátil). Aprenderemos a conectar un sensor de precisión para medir temperatura y presión atmosférica, y a guardar todas las lecturas automáticamente en una tarjeta MicroSD organizada como una hoja de cálculo (formato .CSV).
🛠️ Material Necesario
- Placa Arduino Mega 2560
- Sensor BMP280 (Temperatura y Presión)
- Módulo Lector de tarjetas MicroSD + tarjeta formateada en FAT32
- Protoboard y cables Dupont
- Cable USB para programar el Arduino
🔌 1. Esquema de Conexiones
El Arduino Mega se comunicará con el sensor usando el bus I2C y con la tarjeta SD usando el bus SPI.
🌡️ Sensor BMP280 (I2C)
| Pin del BMP280 | Pin en Arduino Mega | Función |
| VCC | 3.3V | ⚠️ ¡Atención! Conectar siempre a 3.3V. |
| GND | GND | Tierra / Masa |
| SCL | Pin 21 (SCL) | Reloj I2C |
| SDA | Pin 20 (SDA) | Datos I2C |
Nota: Los pines
CSBySDOdel BMP280 se dejan libres.
💾 Módulo Lector MicroSD (SPI)
| Pin del Lector SD | Pin en Arduino Mega | Función |
| VCC | 5V (o 3.3V según tu módulo) | Alimentación del módulo |
| GND | GND | Tierra / Masa |
| MISO | Pin 50 | Entrada de datos SPI |
| MOSI | Pin 51 | Salida de datos SPI |
| SCK | Pin 52 | Reloj del bus SPI |
| CS | Pin 53 | Selección de chip (Chip Select) |
📚 2. Librerías Necesarias en Arduino IDE
Antes de subir el código, asegúrate de instalar las librerías necesarias:
- Ve a Herramientas $\rightarrow$ Administrar bibliotecas… (o pulsa
Ctrl + Shift + I). - Busca “Adafruit BMP280” e instálala (acepta instalar Adafruit Unified Sensor si lo solicita).
- Las librerías para la tarjeta SD (
SD.hySPI.h) vienen ya integradas de serie en Arduino IDE.
💻 3. Código Completo del Datalogger
Copia y sube el siguiente programa a tu Arduino Mega:
C++
/*
=============================================================
Datalogger con BMP280 y Lector MicroSD
Proyecto MonteSteam - IES Monterroso / AIDARAC
=============================================================
*/
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
// Pin CS (Chip Select) del bus SPI en Arduino Mega
const int chipSelect = 53;
// Contador para identificar cada medición
unsigned long numeroMuestra = 1;
// Objeto para controlar el sensor BMP280
Adafruit_BMP280 bmp;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("=========================================");
Serial.println(" DATALOGGER MONTESTEAM: BMP280 + SD");
Serial.println("=========================================");
// 1. Inicializar el sensor BMP280 en bus I2C
if (!bmp.begin(0x76)) {
Serial.println("⚠️ No se encuentra el BMP280 en 0x76. Intentando en 0x77...");
if (!bmp.begin(0x77)) {
Serial.println("❌ ERROR CRÍTICO: Sensor BMP280 no detectado.");
while (1); // Detiene el programa si no hay sensor
}
}
Serial.println("✅ Sensor BMP280 detectado e iniciado.");
// 2. Inicializar el lector de tarjetas MicroSD
Serial.print("Inicializando tarjeta SD... ");
if (!SD.begin(chipSelect)) {
Serial.println("❌ Fallo en la tarjeta SD o no está insertada.");
Serial.println(" - Comprueba el formato FAT32 y los 6 cables SPI.");
while (1); // Detiene el programa si falla la SD
}
Serial.println("✅ Tarjeta SD lista para grabar.");
// 3. Crear la cabecera en el archivo DATOS.CSV
File dataFile = SD.open("DATOS.CSV", FILE_WRITE);
if (dataFile) {
dataFile.println("Muestra,Temperatura_C,Presion_hPa");
dataFile.close();
Serial.println("✅ Archivo DATOS.CSV preparado.");
} else {
Serial.println("❌ Error al abrir o crear DATOS.CSV");
}
Serial.println("\n--- INICIANDO GRABACIÓN DE DATOS (Cada 2 segundos) ---");
Serial.println("Muestra | Temp (°C) | Presión (hPa)");
Serial.println("------------------------------------");
}
void loop() {
// Lectura de valores del sensor
float temp = bmp.readTemperature();
float presion = bmp.readPressure() / 100.0F; // Convertir Pa a hPa (mbar)
// 1. Mostrar mediciones en el Monitor Serie
Serial.print("#");
Serial.print(numeroMuestra);
Serial.print(" | ");
Serial.print(temp);
Serial.print(" °C | ");
Serial.print(presion);
Serial.println(" hPa");
// 2. Escribir y guardar en la tarjeta MicroSD
File dataFile = SD.open("DATOS.CSV", FILE_WRITE);
if (dataFile) {
// Formato CSV estándar separado por comas
dataFile.print(numeroMuestra);
dataFile.print(",");
dataFile.print(temp);
dataFile.print(",");
dataFile.println(presion);
// Guardar cambios y cerrar el archivo
dataFile.close();
} else {
Serial.println("❌ Error de escritura en la tarjeta SD");
}
// Incrementar el número de medición
numeroMuestra++;
// Pausa de 2 segundos entre lecturas
delay(2000);
}
📈 4. Análisis de Datos en Excel o Google Sheets
- Deja funcionando el circuito durante el experimento anotando la hora de inicio.
- Desconecta la alimentación del Arduino y retira la tarjeta MicroSD.
- Inserta la MicroSD en un ordenador y abre el archivo
DATOS.CSV. - ¡Verás todos tus datos ordenados en filas y columnas listos para generar gráficas de evolución de temperatura y presión!
Plaintext
Muestra,Temperatura_C,Presion_hPa
1,23.45,1013.25
2,23.48,1013.22
3,23.50,1013.20




