🛠 Enregistrer des données sur carte SD via le bus SPI
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
- 1 × Arduino Mega 2560 + câble USB
- 1 × module adaptateur micro SD 5 V tolérant ou adaptateur 3,3 V + convertisseur de niveaux
- 1 × carte micro SD formatée en FAT16/FAT32
- 1 × potentiomètre sur A0 (source de données de test)
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
- Oublier
pinMode(SS, OUTPUT): sans cela, si la broche 53 flotte en entrée, le Mega passe esclave SPI et le bus ne fonctionne plus. - Carte formatée en exFAT ou NTFS : la bibliothèque SD n'accepte que FAT16/FAT32 (les cartes égales à 32 Go sortent d'usine en FAT32).
- Oublier
closeaprès écriture : les données restent dans le tampon et le fichier semble vide. - Niveaux 5 V sur les lignes MOSI/SCK/CS d'une carte 3,3 V sans adaptation : à terme, ça détruit le module.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinodouble-servo.inoArduinopont-uart.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduino