🛠 Enregistrer des données sur carte SD via le bus SPI
Objetivos
Archivar mediciones en una tarjeta SD utilizando el bus SPI por hardware de la Mega 2560: MISO en el pin 50, MOSI en el 51, SCK en el 52, SS en el 53 (también conectados al conector ICSP). Escribirás un registrador que abre un archivo, registra las entradas analógicas con marca de tiempo y gestiona correctamente los errores de apertura.
Material
- 1 × Arduino Mega 2560 + cable USB
- 1 × módulo adaptador de micro SD tolerante a 5 V o adaptador de 3,3 V + convertidor de niveles
- 1 × tarjeta micro SD formateada en FAT16/FAT32
- 1 × potenciómetro en A0 (fuente de datos de prueba)
Punto de atención eléctrica: una tarjeta SD es un componente de 3,3 V; los pines de la Mega son de 5 V. Un adaptador con regulador integrado a menudo acepta 5 V en la alimentación, pero sus líneas lógicas deben permanecer a 3,3 V. No alimentes la tarjeta a través del pin 3V3 de la Mega: está limitado a 50 mA y una tarjeta SD en lectura puede acercarse o superar este valor.
Código completo
// Enregistreur SD sur SPI matériel — Mega 2560
#include <SPI.h>
#include <SD.h>
const uint8_t SS_SD = 53; // SS dédié (SPI : 50/51/52/53)
File journal;
uint32_t t0 = 0;
void setup {
Serial.begin(115200);
pinMode(SS_SD, OUTPUT); // SS en sortie même inutilisé
if (!SD.begin(SS_SD)) {
Serial.println(F("SD indisponible : bloqué"));
while (true) { delay(500); } // LED 13 clignote via loop ci-dessous
}
journal = SD.open("LOG.CSV", FILE_WRITE);
if (journal) { journal.println("ms;A0"); journal.close; }
Serial.println(F("SD initialisée"));
}
void loop {
if (millis - t0 >= 1000) {
t0 = millis;
journal = SD.open("LOG.CSV", FILE_WRITE);
if (journal) {
journal.print(millis); journal.print(';');
journal.println(analogRead(A0));
journal.close; // close = flush obligatoire
Serial.println(F("ligne écrite"));
} else {
Serial.println(F("échec ouverture LOG.CSV"));
}
}
}
Verificación esperada
Tras « SD inicializada » en el monitor serie, una línea « línea escrita » se desplaza cada segundo. Al retirar la tarjeta y leer LOG.CSV en un PC, se encuentra la cabecera « ms;A0 » seguida de las mediciones a una frecuencia regular.
Errores frecuentes
- Olvidar
pinMode(SS, OUTPUT): sin esto, si el pin 53 queda flotante como entrada, la Mega pasa a modo esclavo SPI y el bus deja de funcionar. - Tarjeta formateada en exFAT o NTFS: la biblioteca SD solo acepta FAT16/FAT32 (las tarjetas de 32 GB o más salen de fábrica en FAT32).
- Olvidar
closedespués de escribir: los datos permanecen en el búfer y el archivo parece vacío. - Niveles de 5 V en las líneas MOSI/SCK/CS de una tarjeta de 3,3 V sin adaptación: a la larga, esto destruye el módulo.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinodouble-servo.inoArduinopont-uart.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduino