🛠 Enregistrer des données sur carte SD via le bus SPI

Arduino Mega 2560 (Rev3) · avance · Schéma : IMG-mega-2560-avance-2-spi-sd-card.svg — module carte SD 3,3 V connecté au bus SPI de l’Arduino Mega 2560 (MISO 50, MOSI 51, SCK 52, SS 53) avec adaptation de niveaux 5 V vers 3,3 V

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales