Запись данных на SD карту с помощью Arduino


В этом уроке мы узнаем, как подключить к плате Arduino модуль SD-карты и записывать на него информацию. Также в сочетании с модулем часов реального времени DS3231 мы создадим пример регистрации данных, в котором мы будем хранить данные датчика температуры на SD-карте и импортировать их в Excel, чтобы затем построить на их основе диаграмму.

Запись данных на SD карту с помощью Arduino

Также на нашем сайте вы можете посмотреть другие проекты, в которых мы использовали модуль SD-карты:

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress) или Arduino Mega 2560 (купить на AliExpress).
  2. Модуль чтения SD карт (купить на AliExpress).
  3. Модуль часов реального времени DS3231 RTC (купить на AliExpress).

Как работает модуль SD-карты

Сначала давайте взглянем на модуль SD-карты. Он работает со стандартными картами MicroSD, рабочее напряжение которых составляет 3,3 В. Поэтому модуль имеет регулятор напряжения и переключатель уровня, поэтому мы можем использовать его с контактами 5 В на плате Arduino.

Внешний вид модуля SD-карты

Модуль SD-карты имеет шесть контактов: два для питания модуля, контакты VCC и GND, и еще четыре контакта для связи по интерфейсу SPI. Более подробно про устройство и принцип работы модуля SD-карты вы можете прочитать в этой статье.

Схема проекта

Схема подключения модуля SD-карты к плате Arduino представлена на следующем рисунке.

Схема подключения модуля SD-карты к плате Arduino

Обратите внимание, что каждая плата Arduino имеет разные контакты SPI, которые следует подключать соответствующим образом.

Контакты SPI для плат Arduino Uno и Arduino Mega

Более подробно про работу с интерфейсом SPI в плате Arduino вы можете прочитать в этой статье.

Код модуля SD-карты Arduino

Далее нам нужно запрограммировать плату Arduino. Вот простой код для этого:

Описание кода:  Итак, сначала нам нужно подключить стандартные библиотеки SD и SPI, создать объект «Файл» и определить вывод ChipSelect шины SPI, в моем случае это вывод 53 для Arduino Mega Board. В этом примере мы хотим, чтобы наш код выполнялся только один раз, поэтому весь код будет помещен в функцию Setup, а функция loop останется пустой.

Итак, сначала нам нужно запустить последовательную связь и задать режим работы контакта ChipSelect на вывод данных. Мы должны это сделать, потому что на контакте ChipSelect должен быть «Низкий» уровень, чтобы работала связь SPI между модулем и Arduino.

Затем, используя функцию SD.begin(), мы инициализируем SD-карту, и если инициализация прошла успешно, оператор «if» станет истинным и в мониторе последовательной связи появится строка «SD-карта готова к использованию». В противном случае будет напечатана строка «Инициализация SD-карты не удалась», а программа будет завершена.

Затем, используя функцию SD.open(), мы создадим новый файл с именем «test.txt», включая аргумент FILE_WRITE, означающий, что мы можем как читать, так и записывать в файл. Если файл уже существует, функция SD.open() просто откроет его.

Поэтому, если файл был успешно создан, сначала мы напечатаем строку «Запись в файл» в последовательном мониторе, а затем с помощью функции myFile.println() напечатаем текст «Тестовый текст 1, 2, 3…» в файл. После этого нам нужно использовать функцию close(), чтобы гарантировать, что предыдущие данные, записанные в файл, физически сохраняются на SD-карте.

Далее мы увидим, как можно читать из файла. Итак, мы снова воспользуемся той же функцией SD.open(), но на этот раз, поскольку файл «test.txt» уже создан, функция просто откроет файл. Затем, используя функцию myFile.read(), мы прочитаем файл и распечатаем его на последовательном мониторе. Функция read() на самом деле считывает только один символ за раз, поэтому нам нужно использовать цикл while и функцию myFile.available() для чтения всех символов или всех ранее записанных данных. В конце нам нужно закрыть файл.

Теперь после загрузки кода в Arduino, если все в порядке, на последовательном мониторе появится следующее.

Результат работы нашей программы в мониторе последовательной связи

Как мы видим, SD-карта успешно инициализирована, запись на нее также прошла успешно, а также успешно прочитано чтение записанных данных, то есть строка «Тестовый текст 1, 2, 3…». Если мы откроем SD-карту на нашем компьютере, мы увидим созданный файл «test.txt» и написанный в нем текст.

Регистрация данных на SD-карте с помощью Arduino

Теперь давайте приведем еще один, более интересный пример регистрации данных на SD карту с датчика температуры. Для этой цели мы будем использовать модуль часов реального времени DS3231, который также имеет встроенный датчик температуры. Более подробную информацию о том, как подключить и использовать этот модуль, вы можете найти в статье про подключение модуля DS3231 к плате Arduino.

Итак, после подключения модуля SD карты и модуля DS3231 к плате Arduino, давайте посмотрим на код этого примера.

Описание кода:  сначала нам нужно подключить библиотеки, необходимые для обоих модулей, затем создать два объекта и в разделе настройки инициализировать их.

В разделе цикла с использованием функции Serial.print() мы будем печатать значения времени и температуры в окне монитора последовательной связи с символом «запятая» между ними и новой строкой после значения температуры. Такая форма сообщений нам нужна, чтобы мы могли легко их импортировать и построить диаграмму в Excel. Также обратите внимание, что значения температуры преобразуются в целые числа.

Таким образом, эти же значения также будут записаны во вновь созданный файл «test.txt», и в конце нам просто нужно добавить задержку, которая будет представлять собой интервал записи данных о температуре.

После загрузки кода плата Arduino начнет сохранять значения температуры каждые 3 секунды. Через некоторое время мы можем открыть SD-карту на нашем компьютере, чтобы увидеть результаты.

Записанный лог данных температуры на SD-карте

Для создания диаграммы в Excel нам нужно импортировать этот файл, и вот как мы это сделаем.

В меню данных в Excel нам нужно нажать кнопку “Get Data From Text” («Получить данные из текста») и выбрать текстовый файл. Здесь мы выберем “Delimited” («С разделителями») и нажмем «Далее», а на втором этапе выберем запятую в качестве разделителя и завершим работу мастера.

Таким образом, этот процесс будет вставлять значения времени и температуры в отдельные столбцы. Теперь нам просто нужно выбрать оба столбца и в меню вставки выбрать “Insert line chart” («Вставить линейную диаграмму»). Это создаст диаграмму, на которой мы сможем видеть значения температуры каждые 3 секунды.

Лог данных температуры, открытый в Excel

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
23 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *