Für einige physikalische Versuche mit dem Arduino ist es notwendig, die z.B. mit Sensoren erfassten Daten auf einer Speicherkarte zu speichern und diese dann später auszulesen und zu analysieren.
Zum Glück gibt es ein solches SD-card-Modul um 2-3 Euro auf ebay zu kaufen.
Mein Modul besitzt folgende 6 Anschlüsse:
- GND: Verbunden mit GND des Arduino
- Vcc: Verbunden mit +5V des Arduino
- MISO: Verbunden mit D12
- MOSI: Verbunden mit D11
- SCK: Verbunden mit D13
- CS: Verbunden mit D10
Der Programm-Code ist auch sehr einfach: Man speichert zunächst pro loop-Durchlauf seine erfassten Werte (Integer-, float-Zahlen) und Text in einem String und schreibt diesen dann auf die Speicherkarte in eine neue Zeile.
Zum Testen habe ich Text (z.B. Doppelpunkt, Komma usw.), zwei Integerzahlen und eine Kommazahl abspeichern lassen. Funktioniert soweit bestens…
Die Software erstellt auch die Datei (konkret Datalog.txt oder ein anderer beliebiger Name) für die zu speichernden Werte.
Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#include <SPI.h> #include <Wire.h> #include <SD.h> const int chipSelect = 10; // used for Arduino //const int chipSelect = D8; // used for ESP8266 int i; float Dezimalzahl; void setup() { Serial.begin(9600); while (!Serial) { } Serial.print("Initializing SD card..."); // make sure that the default chip select pin is set to // output, even if you don't use it: pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { Serial.println("Initialization failed!"); while (1); } Serial.println("card initialized."); i = 1; } void loop() { String dataString = ""; dataString += String(i); dataString += ": "; dataString += String(random(100)); dataString += " , "; Dezimalzahl = random(1600)/100.0; dataString += String(Dezimalzahl); File dataFile = SD.open("datalog.txt", FILE_WRITE); if (dataFile) { dataFile.println(dataString); dataFile.close(); Serial.println(dataString); } else { Serial.println("error opening datalog.txt"); } i++; delay(2000); } |