Запись/чтение на sd-карту с arduino
Arduino: чтение и запись файлов на SD карту

Вы можете использовать SD карту в ваших устройствах на Arduino, чтобы сохранять и извлекать информацию.
В некоторых приложениях на Arduino полезно иметь возможность локально сохранять и извлекать информацию. Вы можете сделать это с помощью Secure Digital, или SD, карты.
SD карта – это энергонезависимая карта памяти, широко используемая в портативных устройствах, таких как мобильные телефоны, цифровые фотоаппараты, навигационные устройства GPS, карманные консоли и планшетные компьютеры. Другой тип SD карт – это карта microSD.
Это самая маленькая карта памяти, ее размеры составляют 15 мм x 11 мм x 1 мм. Это примерно четверть размера SD карты обычного размера.
Карта памяти microSD
Для подключения карты памяти microSD к нашей плате Arduino Mega мы будем использовать плату расширения Ethernet shield со встроенным слотом microSD. Однако, есть множество других плат расширения, доступных для других типов SD карт.
Распиновка карты памяти microSD
Как показано на рисунке выше, карта памяти microSD имеет 8 выводов. Описание каждого вывода приведено в таблице ниже.
Описание выводов карты памяти microSD Номер выводаНазваниеОписание 1 NC не подключен 2 CS выбор чипа / выбор ведомого (SS) 3 DI выход мастера / вход ведомого (MOSI) 4 VDD напряжение питания 5 CLK тактовый сигнал (SCK) 6 VSS земля 7 DO вход мастера / выход ведомого (MISO) 8 RSV зарезервированоЕсли вы решили попробовать подключить SD карту самостоятельно, то убедитесь, что подключили выводы SD карты к соответствующим выводам платы Arduino. Так как мы используем имеющуюся в продаже плату расширения, то у нас с этим проблем нет.
Всё, что нам нужно сделать, это сконфигурировать вывод Arduino, использующийся по умолчанию, как CS (выбор чипа), для работы в качестве выхода. В нашей Arduino Mega это вывод 53. На плате расширение Ethernet shield выводом CS является вывод 4.
Вы должны правильно указать это в коде для SD карты.
Эксперимент 1
В этом эксперименте мы рассмотрим, как прочитать файл с SD карты.
Комплектующие
Arduino Mega с установленной платой расширения Ethernet shield
Код
Для чтения с SD карты мы будем использовать библиотеку SD.h. Данный код предполагает, что файл “” уже записан на SD карту.
#include const int cs = 4; void setup() { Serial.begin(9600); Serial.print(“Initializing card…”); // убедитесь, что стандартный вывод выбора чипа работает как выход pinMode(53, OUTPUT); // посмотреть, есть ли карта if (!SD.begin(cs)) { Serial.println(“Card failed to initialize, or not present”); return; } Serial.println(“card initialized.”); // открыть файл с именем ourfile.txt File myfile = SD.open(“ourfile.txt”); // если файл доступен, прочитать его if (myfile) { while (myfile.available()) { Serial.write(myfile.read()); } myfile.close(); } else // если файл не может быть открыт, то выдать сообщение об ошибке { Serial.println(“error opening the text file”); } } void loop() { }
Эксперимент 2
В этом эксперименте мы рассмотрим, как создать файл, записать его, а затем прочитать его с SD карты.
Комплектующие
Мы будем использовать то же самое аппаратное обеспечение, что и в предыдущем эксперименте.
Код
Чтобы записать файл на SD карту и прочитать его же, мы снова будем использовать библиотеку SD.h.
#include File myfile; void setup() { Serial.begin(9600); Serial.print(“Initializing card…”); // объявить стандартный CS вывод как выход pinMode(53, OUTPUT); if (!SD.begin(4)) { Serial.println(“initialization of the SD card failed!”); return; } Serial.println(“initialization of the SDcard is done.”); myfile = SD.open(“textFile.txt”, FILE_WRITE); if (myfile) { Serial.print(“Writing to the text file…”); myfile.println(“Congratulations! You have successfully wrote on the text file.”); myfile.close(); // закрыть файл Serial.println(“done closing.”); } else // если файл не может быть открыт, то выдать сообщение об ошибке { Serial.println(“error opening the text file!”); } // снова открыть текстовый файл для чтения myfile = SD.open(“textFile.txt”); if (myfile) { Serial.println(“textFile.txt:”); // прочитать весь текст, записанный в файле while (myfile.available()) { Serial.write(myfile.read()); } // закрыть файл myfile.close(); } else // если файл не может быть открыт, то выдать сообщение об ошибке { Serial.println(“error opening the text file!”); } } void loop() { }
Надеюсь, статья оказалась полезной. Оставляйте комментарии!
Оригинал статьи:
- Editorial Team. Reading and Writing Files from an SD Card with an Arduino
Arduino Mega 2560
Отладочная плата Arduino Mega 2560 построена на микроконтроллере ATmega2560.
Она имеет 54 цифровых входных/выходных выводов (15 из которых могут использоваться в качестве ШИМ выходов), 16 аналоговых входов, 4 порта UART (аппаратных последовательных порта), кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером;…
Плата расширения Ethernet Shield W5100 R3 (для Arduino)
Макетная плата Arduino Ethernet Shield подключит вашу плату Arduino к интернету всего за несколько минут.
Просто установите данный модуль на вашу плату Arduino, подключите его к вашей сети с помощью кабеля RJ45 и следуйте нескольким простым инструкциям, чтобы начать управлять вашим проектом через интернет.
Как всегда с Arduino, каждый элемент платформы – оборудование, программное обеспечение…
Подключение sd карты к ардуино

SD и microSD карты могут существенно расширить возможности проектов ардуино, работающих с большими объемами данных: регистраторов данных, метеостанций, систем умного дома. Платы arduino оснащены сравнительно небольшой внутренней памятью, всего до 4 килобайт, включая и флэш-память, и EEPROM.
Этой памяти не хватит для записи больших объемов данных, тем более, если плата будет постоянно выключаться или выключаться. Подключение SD карты ардуино в качестве внешнего накопителя позволяет многократно увеличить место для хранения любой информации. Съемные накопители SD стоят дешево, легко подключаются и удобны в использовании.
О правильном подключении SD карты к Arduino и пойдет речь в статье.
Описание модуля для SD карты памяти
Работа с памятью SD в ардуино не представляет особых трудностей. Самым простым способом является подключение готового модуля и использование стандартной библиотеки. С этого варианта мы и начнем.
Использование готового модуля обладает различными преимуществами. Это довольно простое и удобное средство для работы с большим объемом данных. Он не требует особых навыков в подключении, все разъемы подписаны прямо на плате. За удобство приходится платить, но стоимость модуля относительно не велика, его легко можно найти по доступным ценам в российских и зарубежных интернет-магазинах.
Универсальный модуль представляет собой обыкновенную плату, на которой помещены слот для карты, резисторы и регулятор напряжений. Он обладает следующими техническими характеристиками:
- Диапазон рабочих напряжений 4,5-5 В;
- Поддержка SD карты до 2 Гб;
- Ток 80 мА;
- Файловая система FAT 16.
Модуль SD-карты реализует такие функции как хранение, чтение и запись информации на карту, которая требуется для нормального функционирования прибора на базе микроконтроллера.
Естественно, у недорогих модулей карт памяти есть и недостатки. Например, самые дешевые и распространенные модели поддерживают только карты до 4Гб и почти все модули позволяют хранить на SD карте файлы объемом до двух гигабайт – это ограничение используемой в большинстве моделей файловой системы FAT.
Еще одним недостатком карт памяти является относительно долгое время записи, однако существуют пути работы с ней, позволяющие увеличить ее скорость работы. Для этого используется механизм кэширования, когда данные сначала копятся в оперативной памяти, а потом сбрасываются за раз на карту памяти.
Платы Arduino для работы с SD
Для работы с SD card существует несколько различных плат:
- Arduino Ethernet – эта плата оснащена специальным модулем для вывода данных. Для выхода CS используется контакт 4. Для правильной работы нужно применять команду SD.begin(4).
- Adafruit Micro-SD – это отладочная плата, которая используется при работе с Micro-SD картами.
- Sparkfun SD – закрепляется сверху Ардуино, для выхода CS использует 8 контакт. В новой версии платы есть соединение с 3.3 В и встроен шестиразрядный инвертор.
Подключение SD и microSD к ардуино
Существует два вида карт — microSD и SD. Они одинаковы по подключению, структуре и программе, различаются же только размером. Перед работой советуется отформатировать карту SD.
Обычно новые карты уже отформатированы и готовы к работе, но если используется старая карта, то лучше провести форматирование в файловой системе Arduino. Для проведения процедуры на компьютере должна быть установлена библиотека SD, желательно FAT16.
Для форматирования на Windows нужно щелкнуть на иконке карты и нажать «Format».
Для подключения карты используется 6 контактов, взаимодействие производится по интерфейсу SPI. Она выглядит на плате как разъем на лицевой поверхности с шестью штырями.
Чтобы подключить карту, нужны сам контроллер, модуль карты и 6 проводов. Помимо SPI существует режим SDIO, но он сложен в реализации и слабо совместим с Ардуино.
SPI легко налаживается для работы со всеми микроконтроллерами, поэтому советуется использовать именно его.
Подключение цифровых выводов производится так: для платы Arduino Nano или Uno контакт MOSI подключается к D11, MISO к D12,SCK к D13, CS к 4, VCC на +5 В,.GND к GND.
На плате имеются разъемы для подключения к 3,3 и 5 вольтам. Питание самой карты составляет 3,3 вольт, поэтому проще применять микроконтроллер с таким же питанием, в ином случае нужен преобразователей уровней напряжения.
На самых распространенных платах ардуино такой выход есть.
Плата Пин MOSI Пин MISO Пин SCK Arduino Nano, Uno 11 12 13 Arduino Mega2560 51 50 52При подключении SD карты нужно учитывать соответствие SPI контактов для разных тип плат Arduino:
Библиотека ардуино для работы с SD и microSD
Для удобства работы с внешними накопителями данных в среде Arduino IDE доступны уже готовые библиотеки. Ничего дополнительно скачивать или устанавливать в большинстве случаев не понадобится.
Для подключения библиотеки в скетче нужно использовать инструкцию include:
#include
#include
Библиотека SPI нужна для правильной работы устройств, подключаемых по SPI.
Библиотечные функции нужно для считывания и записи данных на карту. Библиотека может поддерживать SD и SDHC карты.
Имена записываются в формате 8.3, то есть 8 знаков для названия, 3 для расширения. Путь к файлу записывается с помощью слэшей «/».
Встроенные примеры библиотеки SD
В Arduino IDE встроены готовые примеры для быстрого изучение функций бибилотеки:
- Card Info – это извлечение информации, хранящейся в SD карте. С ее помощью можно узнать, в какую файловую систему отформатирована карта, наличие свободного места, какие данные записаны.
- Yun Datalogger – позволяет записывать лог-данные с трех сенсоров на карту.
- Datalogger – регистрирует и созраняет данные, полученные с датчика на карту.
- Dump File – считывание данные с карты, передает их в серийный порт.
- Files – создает и удаляет данные. Существует функция file.write(), которая помещает записанные данные в буфер. Перемещение информации на карту происходит при вызове функций flush() или close(), поэтому важно закрывать его после каждого открытия файла, иначе данные будут потеряны.
- Read Write – записывает и считывает файлы с карты.
Функции библиотеки SD
Ардуино-библиотека SD содержит различные функции, с помощью которыми можно управлять данными. Функции класса SD:
- begin() – функция инициализирует библиотеку, присваивает контакт для сигнала.
- exists() – призвана проверить, имеется ли на карте необходимая информация.
- mkdir() – позволяет создать нужную папку на карте памяти.
- rmdir() – с помощью этой функции можно удалить папку. Важно, чтобы удаляемая папка была пустой.
- open() – позволяет открыть файл, который нужен для записи или чтения. Если нужный файл отсутствует на карте, то он будет создан.
- remove() – удаляет любой файл.
В ответ на все эти функции должно прийти одно из значений – true, в случае удачного завершения операции и false при неудаче.
Создание, редактирование и удаление файлов
Для работы с файлами в ардуино существует класс File. В него входят функции, которые предназначены для записи и чтения информации с карты:
- available() – проверяет наличие в файле байт, которые доступны для чтения. В ответ приходит количество места, которое доступно для чтения.
- close() – закрывает файл, перед эти проверяет, сохранены ли данные на карту.
- flush() – функция позволяет убедиться, что данные записаны на карту.
- name() – возвращает указатель на имя.
- peek() – считывает байты данных, при этом не перемещает указатель на следующий символ.
- position() – находит текущее положение указателя в файле.
- print() – выводит данные в отдельный файл.
- println() – печатает данные в файл до места, где появляется символ перевода каретки и пустая строка.
- seek() – меняет положение текущей позиции в файле.
- size() – выводит информацию о размере данных.
- read() – считывает информацию.
- write() – производит запись в файл.
- isDirectory() – с помощью этого метода происходит проверка, является ли файл директорией, то есть каталогом или папкой.
- openNextFile() – выводит имя последующего файла.
- rewindDirectory() – возвращает к первому файлу в директории.
Для корректной работы платы нужно проследить, чтобы был сконфигурирован SS выход.
Скетч примера работы с SD библиотекой ардуино
Ниже приведен скетч, демонстрирующий пример работы с модулем карты памяти.
/* Регистратор данных с использованием SD карт Пример сохранения данных с аналоговых портов на SD карте. Данные будут сохраняться в файле в виде набора строк с разделителем полей в виде символа “,” Схема подключения: * Аналоговые сенсоры подключаются к аналоговым пинам * Модуль SD карты подключен в SPI по стандартной схеме: ** MOSI – пин 11 ** MISO – пин12 ** CLK – пин 13 ** CS – pin 4 */ #include
#include const int PIN_CHIP_SELECT = 4; void setup() { Serial.begin(9600); Serial.print(“Initializing SD card…”); // Этот пин обязательно должен быть определен как OUTPUT pinMode(10, OUTPUT); // Пытаемся проинициализировать модуль if (!SD.begin(PIN_CHIP_SELECT)) { Serial.println(“Card failed, or not present”); // Если что-то пошло не так, завершаем работу: return; } Serial.println(“card initialized.”);
} void loop() { // Строка с данными, которые мы поместим в файл: String logStringData = “”; // Считываем данные с портов и записываем в строку for (int i = 0; i < 5; i++) { int sensor = analogRead(i); logStringData += String(sensor); if (i < 4) { logStringData += ","; } } // Открываем файл, но помним, что одновременно можно работать только с одним файлом. // Если файла с таким именем не будет, ардуино создаст его. File dataFile = SD.open("datalog.csv", FILE_WRITE); // Если все хорошо, то записываем строку: if (dataFile) { dataFile.println(logStringData); dataFile.close(); // Публикуем в мониторе порта для отладки Serial.println(logStringData); } else { // Сообщаем об ошибке, если все плохо Serial.println("error opening datalog.csv"); }
}
Создание файла и выбор названия для arduino SD card
Создание файла — одна из самых распространенных задач, возникающих при работе с SD картами в ардуино. Как мы убедились в предыдущем скетче, для создания файла достаточно просто открыт его. Если мы захотим проверить, есть ли такой файл, можно использовать функцию exists():
- SD.exists(«datalog.csv»);
Функция возвращает TRUE, если файл существует.
Популярной практикой при создании проектов — регистраторов данных является разбивка больших файлов на более мелкие, которые удобнее обновлять и открывать на компьютере.
Например, вместо одного очень большого файла datalog.csv на SD карте можно иметь несколько маленьких, добавляя к концу номер по порядку: datalog01.csv, datalog02.csv и т.д.
Вот пример скетча, который поможет вам выполнить эту работу:
char filename[] = “datalog00.CSV”; // Первоначальное название for (uint8_t i = 0; i < 100; i++) { filename[6] = i / 10 + '0'; filename[7] = i % 10 + '0'; if (! SD.exists(filename)) { // Проверяем наличие logfile = SD.open(filename, FILE_WRITE); break; // Дальше продолжать смысла нет } }
Заключение
Урок 20. Подключение и работа с флеш картой на Arduino

В этом уроке мы научимся создавать, редактировать и удалять файлы на MicroSD карте.
Нам понадобится:
Для реализации проекта не требуется установка дополнительных библиотек. Библиотека для работы с адаптером карт MicroSD v1.0 входит в стандартный набор Arduino IDE > Эскиз > Include Library > SD.
Схема подключения:
Подключение адаптера карт MicroSD v1.0 к Arduino Uno осуществляется к аппаратным выводам SPI (4 вывода: CS, SCK, MOSI, MISO).
Адаптер карт MicroSDArduino Uno CS (Chip Select) 10 SCK (Serial ClocK) 13 MOSI (Master Out Slave In) 11 MISO (Master In Slave Out) 12 Vcc 5V GND GNDПитание:
Питание адаптера подаётся на выводы Vcc и GND, напряжением 5В постоянного тока.
Базовые функции, для работы с файлами SD-карты:
// создание переменной myFile класса File библиотеки SD, которая будет служить “указателем” на файл File myFile; // переменная потребуется для открытия и закрытия файла, а так же для работы с открытым файлом
// открытие файла “iarduino.txt” для чтения и записи, начиная с конца файла: myFile = SD.open(“iarduino.txt”, FILE_WRITE); // если файла с именем “iarduino.
txt” – нет, то он будет создан.
// запись строки в файл >”iarduino.txt”: myFile.print(“начало строки, “); // запись строки в открытый файл “iarduino.txt”, без добавления символов перехода на новую строку. myFile.println(“продолжение строки.”); // запись строки в открытый файл “iarduino.txt”, с добавлением символов перехода на новую строку.
// закрытие файла “iarduino.
txt”: myFile.close();
// открытие файла “iarduino.txt” для чтения, начиная с начала файла: myFile = SD.open(“iarduino.txt”); // если файла с именем “iarduino.txt” – нет, то он не будет открыт.
// чтение строк из файла “iarduino.txt”: while(myFile.available()){ // если есть данные для чтения из открытого файла “iarduino.txt” Serial.write(myFile.
read()); // читаем очередной байт из файла и выводим его в последовательный порт. }
// удаление файла “iarduino.txt”: SD.remove(“iarduino.txt”); // функция возвращает результат удаления true/false
// создание файла “iarduino.txt”: myFile = SD.open(“iarduino.txt”, FILE_WRITE); // если файла с именем “iarduino.txt” – нет, то он будет создан. myFile.
close(); // закрываем файл “iarduino.txt” без записи данных.
// проверка существования файла “iarduino.txt”: if(SD.exists(“example.txt”)){…;} // условие будет выполнено, если файл “iarduino.txt” существует на SD-карте
// проверка открытия файла “iarduino.txt”: if(myFile){…;} // условие будет выполнено, если файл был успешно открыт: myFile = SD.open(…
)
// создание каталога “my_Dir” SD.mkdir(“my_Dir”); // функция возвращает результат создания true/false. Если указать “first_Dir/my_Dir”, то будет создано два каталога (каталог my_Dir в каталоге first_Dir)
// удаление каталога “my_Dir” SD.rmdir(“my_Dir”); // функция возвращает результат удаления true/false. Удаляемый каталог должен быть пустым
Создадим два скетча.
В первом будим создавать файл и записывать в него информацию, а во втором, удалим созданный файл.
Создание файла:
// подключение библиотек SPI и SD:
#include
#include
const uint8_t PIN_CS = 10; // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile; // создаём переменную myFile класса File, которая будет служить “указателем” на открытый файл
void setup(){ Serial.
begin(9600); // открываем последовательный порт на скорости 9600 бод while(!Serial){;} // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера if(!SD.begin(PIN_CS)){ // инициализация SD карты с указанием номера вывода CS Serial.
println(“SD-card not found”); return; // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD }
//проверяем наличие файла “iarduino.txt” на SD-карте if(SD.exists(“iarduino.txt”)){ // если файл с именем “iarduino.txt” существует, то … Serial.println(“file exists”); }else{ // иначе … Serial.
println(“file doesn't exist”); }
//открываем файл “iarduino.txt” для чтения и записи, начиная с конца файла, и записываем в него строку myFile = SD.open(“iarduino.txt”, FILE_WRITE); // если файла с именем “iarduino.txt” – нет, то он будет создан. if(myFile){ // если файл доступен (открыт для записи), то … Serial.
println(“file is opened”); myFile.print(“The beginning of a line, “); // записываем первую часть строки в файл myFile.println(“The end of the line”); // записываем вторую часть строки в файл Serial.println(“data written to the file”); myFile.close(); // закрываем файл Serial.println(“file is closed”); }else{ // иначе … Serial.
println(“file is not opened”); }
//проверяем наличие файла “iarduino.txt” на SD-карте if(SD.exists(“iarduino.txt”)){ // если файл с именем “iarduino.txt” существует, то … Serial.println(“file exists”); }else{ // иначе … Serial.println(“file doesn't exist”); }
}
void loop(){
}
если подключить адаптер карт MicroSD v1.
0 к Arduino Uno, подключить Arduino Uno к ПК, загрузить скетч, вставить SD-карту и запустить Монитор последовательного порта, то в мониторе будут выведены следующие строки:
file doesn't exist (файл не обнаружен)file is opened (файл открыт) data written to the file (данные записаны в файл)file is closed (файл закрыт) file exists (файл обнаружен)
а на SD-карте появится файл “iarduino.txt” с одной строкой “The beginning of a line, The end of the line”.
Если загрузить скетч при вставленной в адаптер карт MicroSD v1.0 SD-картой, то на SD-карте появится файл “iarduino.txt” с двумя строками “The beginning of a line, The end of the line”, а первой строкой в мониторе последовательного порта будет “file exists” (файл обнаружен).
Дело в том, что функция setup() в обоих случаях выполняется дважды (сразу после загрузки скетча и после запуска монитора последовательного порта). Но в первом случае, после загрузки скетча, SD-карты не было в адаптере, следовательно, файл “iarduino.txt” был создан только после запуска монитора последовательного порта.
Удаление файла:
// подключение библиотек SPI и SD:
#include
#include
const uint8_t PIN_CS = 10; // указываем номер вывода arduino подключенного к выводу CS адаптера
void setup(){ Serial.
begin(9600); // открываем последовательный порт на скорости 9600 бод while(!Serial){;} // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера if(!SD.begin(PIN_CS)){ // инициализация SD карты с указанием номера вывода CS Serial.
println(“SD-card not found”); return; // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD }
//проверяем наличие файла “iarduino.txt” на SD-карте if(SD.exists(“iarduino.txt”)){ // если файл с именем “iarduino.txt” существует, то … Serial.println(“file exists”);
// удаляем файл “iarduino.txt”: if(SD.remove(“iarduino.txt”)){ // функция возвращает результат удаления true/false Serial.
println(“file deleted”); }else{ Serial.println(“file is not deleted”); } }else{ // иначе … Serial.println(“file doesn't exist”); }
//проверяем наличие файла “iarduino.txt” на SD-карте if(SD.exists(“iarduino.txt”)){ // если файл с именем “iarduino.txt” существует, то … Serial.println(“file exists”); }else{ // иначе … Serial.
println(“file doesn't exist”); }
}
void loop(){
}
если подключить адаптер карт MicroSD v1.0 к Arduino Uno, подключить Arduino Uno к ПК, загрузить скетч, вставить SD-карту и запустить Монитор последовательного порта, то в мониторе будут выведены следующие строки:
file exists (файл обнаружен) file deleted (файл удалён) file doesn't exist (файл не обнаружен)
а файл “iarduino.txt” будет удалён с SD-карты.
Если загрузить скетч при вставленной в адаптер карт MicroSD v1.0 SD-картой, то файл “iarduino.txt” будет удалён с SD-карты, но в мониторе последовательного порта будут две строки “file doesn't exist” (файл не обнаружен).
Дело в том, что функция setup() в обоих случаях выполняется дважды (сразу после загрузки скетча и после запуска монитора последовательного порта). Но в первом случае, после загрузки скетча, SD-карты не было в адаптере, следовательно, файл “iarduino.txt” был удалён только после запуска монитора последовательного порта.
Arduino: работаем с SD картами – Блог Ильи Житенёва (БЖ)

На днях мне пришёл заказанный модуль для работы с SD-картами.
В этом посте я расскажу, как усовершенствовать, сделанный нами в прошлом, датчик для измерения температуры, а именно – мы избавим себя от надобности копирования данных из консоли вывода в Excel для дальнейшего анализа, заставив Arduino сохранять данные на SD-карту в виде csv-файла.
Данные будут записываться в файл в два столбца – в первом будут единицы времени (или просто номер строки), а во втором значение напряжения на термисторе или ином датчике, которое, как Вы помните, пропорционально температуре.
Необходимые компоненты
Собираем схему
Описывать схему сборки измерителя температуры я не буду, если Вы забыли или не знаете как его собирать – обратитесь к посту, ссылка на который указана выше.
Схема подключения модуля SD-карт к Arduino
Рассмотрим схему подключения SD модуля. Каждый модуль имеет следующие контакты: GND, 5V, 3V (3.3V), CS, MOSI, SCLK (SCK), MISO, GND. Подключим некоторые из этих контактов к следующим контактам Arduino:
- GND – к земле с Arduino;
- 5V разъём к 5 вольтовому разъёму Arduino. (Аналогично 3.3V) Подключать оба разъёма одновременно – бессмысленно, я подключаю только 5V;
- CS – к 4 разъёму;
- MOSI – к 11 разъёму;
- SCLK (SCK) – к 13 разъёму;
- MISO – к 12 разъёму.
На этом наше подключение окончено. Для подключения можете использовать макетную плату – просто втыкаете туда SD модуль и в правильном порядке протягиваете провода от соответствующих дорожек к нужным разъёмам.
Подготавливаем SD-карту
SD модуль работает только с SD картами, отформатированными под файловую систему FAT16 или FAT32. Карту необходимо заранее отформатировать на компьютере. БУДЬТЕ ВНИМАТЕЛЬНЫ! При форматировании все данные, находящиеся на носителе, будут уничтожены! Не забудьте переписать их в другое место перед форматированием!
Программируем Arduino
// Подключаем библиотеку для работы с шиной SPI (необходима для работы библиотеки SD) #include // Подключаем библиотеку для работы с SD-картами #include File myFile; // Задаём начальное время (точку отсчёта) int time = 0; // Указываем номер аналогового разъёма для считывания данны int tempPin = 0; void setup() { // Открываем serial порт Serial.begin(9600); // Выдаём сообщение о том, что начинается инициализация SD-карты Serial.print(“Initializing SD card…”); pinMode(10, OUTPUT); // Проверяем готовность SD модуля. Если модуль не готов – выдаём сообщение if (!SD.begin(4)) { Serial.println(“initialization failed!”); return; } // Проверяем, существует ли на карте файл data.csv, если существует, то удаляем его. if(SD.exists(“data.csv”)) { SD.remove(“data.csv”); } // Выводим сообщение о том, что инициализация прошла успешно Serial.println(“initialization done.”); } void loop() { // Считываем данные (напряжение) с нулевого аналогового разъёма. int temp = analogRead(tempPin); // Увеличиваем значение времени (номер строки) на единицу. Если вы будете записывать данные раз в минуту, но хотите чтобы время записывалось в секундах – прибавляйте не единицу, а 60. time = time + 1; // Открываем файл data.csv для записи myFile = SD.open(“data.csv”, FILE_WRITE); // Если удалось открыть файл для записи, то записываем данные if (myFile) { // Выводим данные на экран Serial.print(time); Ser

