====== Модуль SD карты ======
===== Описание =====
Универсальный модуль со слотом под SD карту. Дешевый и простой в эксплуатации модуль будет полезен в тех случаях, когда требуется дополнительная память для хранения данных. Идеально подходит для хранения картинок, музыки, видео и т.д.

==== Технические характеристики ====
  * рабочее напряжение: 4,5-5,5В
  * потребляемый ток 80 мА
  * поддержка карт: SD
  * файловая система: FAT 16
  * поддержка карт памяти SD: до 2Гб

==== Физические размеры ====
  * Модуль (Д х Ш х В): 51 х 31 х 11 мм

==== Плюсы использования ====
  * Простое и недорогое решение для работы с данными
  * Прост в подключении

==== Минусы использования ====
  * Не поддерживает карты выше 2 Гб

===== Примеры подключения и использования =====
**Пример 1:** В примере иллюстрируется подключение модуля к контроллеру и тестирование работы карты (Пример взят из среды разработки для Ардуино). (Примеры тестировались на контроллере Smart UNO)

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/modul-sd-karty|Модуль SD карты]]                      |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |  6           |


**Схема подключения:**
{{ :главная:модули:sd.jpg |}}

**Скетч для загрузки:**
<file Arduino>
// Подключение библиотек SPI и SD:
#include <SPI.h>
#include <SD.h>

// установка переменных, используемых функциями библиотеки SD:
Sd2Card card;
SdVolume volume;
SdFile root;

// измените эту переменную  в зависимости от подключения модуля и использования шилдов;
// Ethernet shield: пин 4
const int chipSelect = 4;

void setup() {
  // Инициализация сериал порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ожидание подключения к Serial порту. Только для собственных USB портов
  }


  Serial.print("\nInitializing SD card...");

  
  // инициализация карты, и проверка работает ли модуль с данной картой
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // Вывод типа карты
  Serial.print("\nCard type: ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Теперь мы попробуем открыть  'volume'/'partition' (том/раздел) - файловая система должна быть FAT16 или FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }


  // вывод типа и размера первого FAT-тома
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();

  volumesize = volume.blocksPerCluster();    // кластеры и коллекции блоков
  volumesize *= volume.clusterCount();       // получим много кластеров
  volumesize *= 512;                            // на SD карте блоки всегда по 512 байт
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);


  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // Вывод всех файлов с карты с датой и размером
  root.ls(LS_R | LS_DATE | LS_SIZE);
}


void loop(void) {

}
</file>

**Пример 2:** В примере иллюстрируется подключение модуля к контроллеру и запись данных в файл, который создается на карте памяти. (Примеры тестировались на контроллере Smart UNO)

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/modul-sd-karty|Модуль SD карты]]                       |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |  6           |


**Схема подключения:**
{{ :главная:модули:sd.jpg |}}


**Скетч для загрузки:**
<file Arduino>
#include <SD.h>
File dataFile;  // файл для записи данных
char* DATA_FILE_NAME = "data.txt";  // имя файла

void setup()
{
  Serial.begin(9600);
  
  // инициализация карты
  Serial.print("Card-initializing begins...");
  if (!SD.begin(4)) {
    Serial.println("Card-initializing failed");
    return;
  }
  Serial.println("Card-initializing done");
}

void loop()
{

  //получение количества секунд со старта ардуино
  int seconds = millis() / 1000;
  
  //Открытие файла (если его нет, то он создастся)
  dataFile = SD.open(DATA_FILE_NAME, FILE_WRITE);

  //запись данных в файл
  dataFile.print(seconds);
  dataFile.println(" seconds left from the start");

  //закрытие файла     
  dataFile.close();

  //контрольный вывод в монитор порта
  Serial.print(seconds);
  Serial.println(" seconds left from the start");

  //задержка 3 секунды
  delay(3000);
  
}
</file>