🛠 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

Objectifs

Archiver des mesures sur carte SD en utilisant le bus SPI matériel de la Mega 2560 : MISO sur la broche 50, MOSI sur 51, SCK sur 52, SS sur 53 (repiquées aussi sur le connecteur ICSP). Vous écrirez un enregistreur qui ouvre un fichier, y consigne les entrées analogiques avec horodatage, et gère proprement les erreurs d'ouverture.

Matériel

Point d'attention électrique : une carte SD est un composant 3,3 V ; les broches de la Mega sont en 5 V. Un adaptateur économiseur avec régulateur intégré accepte souvent le 5 V en alimentation, mais ses lignes logiques doivent rester à 3,3 V. N'alimentez pas la carte via la broche 3V3 de la Mega : elle est limitée à 50 mA et une carte SD en lecture peut approcher ou dépasser cette valeur.

Code complet

// 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"));
    }
  }
}

Vérification attendue

Après « SD initialisée » dans le moniteur série, une ligne « ligne écrite » défile chaque seconde. En retirant la carte et en lisant LOG.CSV sur un PC, on retrouve l'en-tête « ms;A0 » suivi des mesures à cadence régulière.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels