Nr. 28 – Das SD-Karten Modul

Inhaltsverzeichnis

Das SPI SD-Karten Modul am Arduino Mikrocontroller verwenden

Mithilfe eines Arduino Mikrocontrollers und einem SD-Karten Modul können Daten auf einer SD-Karte abgespeichert und ausgelesen werden. Auch die Weiterverarbeitung von Daten, insbesondere von Messwerten, ist damit möglich. 

Das Ziel dieser Anleitung besteht darin, eine Textdatei zu erstellen, mit Beispieltext zu füllen und anschließend wieder auszulesen.

Pinbelegung

Das SD-Karten Modul verfügt über sechs Pins: 

  • CS = Pin für die Erfassung der SD-Karte, anzuschließen an Pin D5 des Arduinos
  • SCK = Pin für die Synchronisierung des Datentransfers durch die Master Pins, anzuschließen an Pin D13 des Arduinos
  • MOSI = Pin für den Datentransfer (Master Out Slave In) , anzuschließen an Pin D11 des Arduinos
  • MISO = Pin für den Datentransfer (Master In Slave Out) , anzuschließen an Pin D12 des Arduinos
  • VCC = Pin für die Stromversorgung, anzuschließen an den 5V Pin des Arduinos
  • GND = Pin für den Ground-Pin, anzuschließen an den GND Pin des Arduinos

Schaltplan

Schaltplan für den Anschluss eines SD-Karten Moduls an einem Arduino Mikrocontroller

Sobald die Verkabelung erfolgt ist, können wir mit dem Erstellen des Sketches beginnen.

In der Arduinosoftware ist bereits die Bibliothek enthalten, die zur Verwendung des SD-Karten-Shields benötigt wird. Es ist daher keine weitere Vorbereitung notwendig. 

Zudem können wir für den Datentransfer auf einen Beispielsketch (ReadWrite) zugreifen.

Bildschirmaufnahme (Screenshot) der Arduino IDE, wo der Beispielsketch für das SD-Karten Modul zu finden ist.

Zum besseren Verständnis haben wir den Sketch ins Deutsche übersetzt, geringfügig modifiziert und kommentiert.

Da die Pins für den Datentransfer durch das Öffnen und Schließen der Textdatei bereits belegt (reserviert) sind, kann immer nur eine Datei der SD-Karte gleichzeitig bearbeitet werden. Dies betrifft sowohl das Auslesen als auch das Schreiben einer Datei. 

Möchte man Werte in verschiedenen Dateien abspeichern, ist es notwendig, die Dateien nach dem Schreibvorgang wieder zu schließen. Zudem kann das Modul nur auf die vorhandene SD-Karte zugreifen, wenn diese im Format „FAT32“ vorliegt.

Beispielsketch

#include <SPI.h>
#include <SD.h>  // In diesem Sketch verwenden wir die  library

File Textdatei;          // An dieser Stelle wird die Variable "Textdatei" als File (dts. Datei) deklariert.

void setup() {
  
  Serial.begin(9600);

  Serial.println("Initialisiere SD-Karte");   

  if (!SD.begin(5)) {                                     // Wenn die SD-Karte nicht (!SD.begin) gefunden werden kann, ...
    Serial.println("Initialisierung fehlgeschlagen!");    // ... soll eine Fehlermeldung ausgegeben werden. ....
    return;
  }
  
  Serial.println("Initialisierung abgeschlossen");        // ... Ansonsten soll die Meldung "Initialisierung abgeschlossen." ausgegeben werden.


  Textdatei = SD.open("test.txt", FILE_WRITE);            // An dieser Stelle wird die Textdatei erstellt. Unsere Textdatei soll "test" heißen und im Format ".txt" (Text) erstellt werden.

  
  if (Textdatei) 
{                                        // Wenn die Textdatei ("test.txt") gefunden wurde....
    
    Serial.println("Schreibe in Textdatei...");           // ... soll eine Meldung im seriellen Monitor erscheinen...
    Textdatei.println("Funduino GmbH");                   // ... und die Textdatei anschließend befüllt werden. 
    Textdatei.println("1, 2, 3, 4, 5");
    Textdatei.println("a, b, c, d, e");
    Textdatei.println();
   
                                
    Textdatei.close();                                    // Anschließend wird die Textdatei wieder geschlossen...
    Serial.println("Abgeschlossen.");                     // ... und eine erneute Meldung im seriellen Monitor ausgegeben.
    Serial.println();
    
} 
  else 
{                                                        // Wenn !keine! Textdatei gefunden werden kann ...
    
    Serial.println("Textdatei konnte nicht ausgelesen werden");   // ... erscheint eine Fehlermeldung im seriellen Monitor.
}
  
                                                         // NUN WIRD DIE TEXTDATEI AUSGELESEN 

    
  Textdatei = SD.open("test.txt");                            // Die Textdatei auf der SD-Karte wird wieder geoeffnet...
  
  if (Textdatei) 
  
{                                            
  Serial.println("test.txt:");                              // ... und der Name der Datei wird ausgegeben. 
 
    while (Textdatei.available())                             // Anschließend wird die Datei so lange ausgelesen (while)...
    {                          
      Serial.write(Textdatei.read());                         // ... bis keine Daten mehr gefunden werden können.
    }
   
  Textdatei.close();                                        // Im Anschluss wird die Textdatei wieder geschlossen.
} 

   else                                                             // Sollte keine Textdatei (also test.txt) gefunden werden können...
   
    {
    Serial.println("Textdatei konnte nicht geoeffnet werden");      // ... erscheint eine Fehlermeldung im seriellen Monitor.
    }
    
}

void loop()    // Der Loop bleibt leer.
{ 
}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE