Návod na použití modulu SD karty

Návod na použití modulu SD karty

Občas si říkáte, že by se hodilo ukládat nějaké informace z Arduina (např. údaje ze senzorů a čidel) a následně je zpracovávat. Ale jak to udělat?

Nebo chcete vytvořit meteostatnici a využít v ní funkci Datalogger? Já vám nyní ukáži, jak si tu hlavní část Dataloggeru zbastlit pomocí modulu čtečky SD karet pro ukládání dat. Celý dnešní projekt se dá také jednoduše použít v ostatních Arduino projektech pro ukládání dat. Čtečku pro SD karty Najdeme často také na různých shieldech nebo displejích.

Zapojení modulu SD karty

Na začátek si osvěžíme trochu teorii. K celkové funkčnosti není třeba ji dokonale ovládat, ale je dobré rozumět tomu, na čem je to postavené a jak to funguje.

Modul čtečky SD karet je k řídící desce Arduino připojen pomocí sběrnice SPI. Ta vyžaduje celkem 4 signálové vodiče a napájení. Zapojíme tedy modul SD karty. Piny MISO, MOSI, SCK představují komunikační rozhraní SPI mezi Arduinem a modulem čtečky, CS je signál pro výběr obvodu. Napájení +5 V využijeme přímo z Arduino desky. Pokud použijete například jiné Arduino a nevíte, kde se na desce nachází SPI piny, podívejte se do dokumentace (datasheetu) Arduino desky.

Pro vlastní Datalogger potřebujeme tyto Arduino věcičky

Schéma zapojení modulu SD čtečky karet 

Poznámka: Schéma zapojení pro modul čtečky SD karet vychází ze stejného zapojení. Pozor, pro komunikaci v 5V logice musíte zajistit vhodnou konverzi napěťových úrovní na 3,3 V.

Příprava SD karty

Než se pustíme do psaní programu, musíme si SD kartu připravit. V našem případě to zahrnuje formátování. Vložte SD kartu do čtečky počítače a pot zobrazí, klikněte na ni pravým tlačítkem myši a pak dejte "Formátovat“. Klíčové při formátování je nastavit kolonku "Systém souborů“, kde musí být nastavené FAT nebo FAT32. Díky tomuto nastavení budeme moci použít knihovnu z Arduina IDE. Zaškrtněte položku rychlé formátování a do prázdné kolonky, která je na obrázku pojmenovaná jako "Jmenovka svazku“ si můžete nastavit název vaší karty.

Pozor! Formátováním zmizí všechny soubory a data, která na kartě byla uložena předtím.

Nastavení (formátování) SD karty k jejímu využití s Arduinem

Program pro SD kartu

Karta je nyní připravená, ale ještě jsou tu další věci, které musíme projít nebo brát v potaz.

1) V programu najdeme 2 knihovny ale obě jsou defaultně v Arduino IDE, tudíž je nemusíme hledat a stahovat.
2) Pin SS (Slave Select) musí být nastavený jako OUTPUT i když se nepoužívá.
3) Název souboru na SD kartě (v našem případě test.txt) nesmí obsahovat speciální znaky (vyvarujte se české diakritice a mezerám (použijte podtržítko)).

A když jsme u pojmenovávání souboru, je dobré vědět, že Arduino IDE knihovna používá 8.3 formát. To znamená, že název souboru může mít maximálně 8 znaků a přípona souboru maximálně 3 znaky.

Před samotným psaním programu si stanovíme, co bude program dělat.
Následující Arduino program má za úkol:

      1. Otestovat, zda je SD karta správně připojena a výsledek poslat po sériové lince do serial monitoru.
      2. Otevřít nebo případně vytvořit soubor „test.txt“.
      3. Pokud se soubor otevře, zapíše se do něj „dneska sviti slunce“ a soubor se zavře. Pokud se soubor neotevře, nebo zápis selže, dozvíme se to v serial monitoru.
      4. Poté se celý proces opakuje bez bodu 1 s tím, že se do souboru nic nezapisuje, ale ze souboru se čte.

Proč se soubor musí zavřít, když z něj chci hned znova číst? Není to zbytečné zdržování? Není. Je to z důvodu, že při každém zavření, se soubor také uloží.

Arduino program pak vypadá takto:

#include <SPI.h>
#include <SD.h>

File myFile;
int const pinSS = 10;
int const pinCS = 4;

void setup()
{
  // i když se pin nepoužívá, musí být definován jako výstup!
  pinMode(pinSS, OUTPUT);
  // začátek sériové komunikace
  Serial.begin(9600);

  Serial.print("inicializace SD karty...");

  // pokud není karta dostupná, tak:
  if (!SD.begin(pinCS))
  {
    Serial.println(" inicializace selhala!");
    while (1);
  }
  Serial.println(" inicializace uspesna!");

  // soubor, který chceme otevřít a psát do něj (FILE_WRITE)
  // se jmenuje test.txt (popřípadě vložte celou cestu k souboru)
  myFile = SD.open("test.txt", FILE_WRITE);

  // pokud se soubor načte a otevře, tak:
  if (myFile)
  {
    Serial.println("Zapisuji do test.txt");
    // zapiš do souboru
    myFile.println("dneska sviti slunce");
    // zavři soubor
    myFile.close();
    Serial.println("uspesne zapsano");
  } 
  // pokud se nepodaří soubor načíst a otevřít, tak:
  else
  {
    Serial.println("soubor se nepodarilo otevrit");
  }

  // přečtění souboru:
  Serial.println("\ncteni ze souboru\n");
  // otevři soubor test.txt pro čtení, mód je defaultně nastavený na FILE_READ
  myFile = SD.open("test.txt");
  // pokud se soubor načte a otevře, tak:
  if (myFile)
  {
    Serial.println("soubor obsahuje: ");

    // čti ze souboru, dokud je co
    while (myFile.available())
    {
      Serial.write(myFile.read());
    }
    // zavři soubor
    myFile.close();
  }
  // pokud se nepodaří soubor načíst a otevřít, tak:
  else
  {
    Serial.println("soubor se nepodarilo otevrit");
  }
}

void loop()
{
  // jelikož chceme, aby kód proběhl jenom jednou, tak zde nic nebude
}

 

Po spuštění Arduino programu se nám dostane na serial monitoru následující výpis. Teď už stačí jen místo věty "dneska sviti slunce" použít data z analogových nebo digitálních vstupů. Princip zápisu bude stejný. V Dataloggeru se také často používá modul reálného času pro vytvoření časových značek.

Modul čtečky SD karet - výpis programu na serial monitor

Další možnosti programování

Tento program vám ukázal naprosté základy práce s SD kartou. Možná je také práce s adresáři, nebo mazání souborů. Pokud by vás zajímalo více, podívejte se do dokumentace knihovny k SD kartě. Nebo si rovnou zdarma stáhněte Arduino e-book na stránce www.arduino.cz, kde najdete o SD kartě samostatnou kapitolu.

Pokud narazíte na něco, co vám není v návodu jasné, zeptejte v sekci komentářů nebo se podívejte na další Arduino návody na stránce www.hwkitchen.cz/arduino-navody/.

Bastlení ZDAR!

odkazy pro práci s modulem SD karty