Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство
В этом уроке Arduino мы научимся использовать модуль SD-карты с платой Arduino. Также в комбинации с модулем реального времени DS3231 мы сделаем пример логирования данных, где сохраним показания датчика температуры на SD-карту и импортируем их в Excel для построения графика. Вы можете посмотреть следующее видео или прочитать письменное руководство ниже. Сначала посмотрим на модуль SD-карты. Он работает со стандартными картами MicroSD, напряжение питания которых составляет 3,3 В. Поэтому модуль имеет стабилизатор напряжения и преобразователь уровней, чтобы мы могли использовать его с 5-вольтовыми выводами Arduino. Модуль SD-карты имеет шесть выводов: два для питания модуля — VCC и GND, и еще четыре для SPI-коммуникации. Вот как его нужно подключить к плате Arduino. Обратите внимание, что у каждой платы Arduino разные SPI-выводы, которые должны быть подключены соответствующим образом. Компоненты, необходимые для этого урока Arduino, можно найти по ссылкам ниже: Теперь запрограммируем Arduino. Вот простой код: Описание кода: Сначала подключаем стандартные библиотеки SD и SPI, создаем объект «File» и определяем вывод ChipSelect шины SPI — в моем случае вывод 53 для Arduino Mega. Для этого примера мы хотим, чтобы код выполнялся только один раз, поэтому весь код будет в разделе «setup», а раздел «loop» останется пустым. Сначала запускаем последовательную связь и определяем вывод ChipSelect как выход. Это нужно сделать, потому что вывод ChipSelect должен быть «Low» для работы SPI-коммуникации между модулем и Arduino. Затем, с помощью функции SD.begin(), инициализируем SD-карту. Если инициализация прошла успешно, оператор «if» станет истинным, и строка «SD card is ready to use.» будет напечатана в мониторе последовательного порта, иначе — строка «SD card initialization failed», и программа завершится. Далее, с помощью функции SD.open(), создадим новый файл с именем «test.txt», включая аргумент FILE_WRITE, что означает, что мы можем и читать, и писать в файл. Если файл уже существует, функция SD.open() просто откроет его. Если файл успешно создан, сначала напечатаем строку «Writing to file» в мониторе последовательного порта, а затем с помощью функции myFile.println() запишем текст «Testing text 1, 2 ,3…» в файл. После этого нужно использовать функцию close(), чтобы гарантировать, что предыдущие данные, записанные в файл, физически сохранены на SD-карте. Теперь посмотрим, как читать из файла. Снова используем ту же функцию SD.open(), но на этот раз, так как файл «test.txt» уже создан, функция просто откроет его. Затем, с помощью функции myFile.read(), прочитаем из файла и выведем на монитор последовательного порта. Функция read() считывает только один символ за раз, поэтому нужно использовать цикл «while» и функцию myFile.available() для чтения всех символов или всех ранее записанных данных. В конце нужно закрыть файл. После загрузки кода в Arduino, если все в порядке, в мониторе последовательного порта появится следующее: Как видите, SD-карта успешно инициализирована, запись в неё прошла успешно, а чтение записанных данных или строки «Testing text 1, 2 ,3…» тоже прошло успешно. Если открыть SD-карту на компьютере, можно увидеть созданный файл «test.txt» и записанный в нём текст. Теперь сделаем более интересный пример логирования датчика температуры. Для этого используем модуль реального времени DS3231, у которого также есть встроенный датчик температуры. Больше деталей о подключении и использовании этого модуля можно найти в моем предыдущем уроке. После подключения двух модулей к Arduino давайте посмотрим на код для этого примера. Описание кода: Сначала подключаем библиотеки, необходимые для обоих модулей, создаем два объекта и в разделе setup инициализируем их. В разделе loop, с помощью функции Serial.print(), выводим время и значения температуры в монитор последовательного порта, с символом «запятая» между ними и новой строкой после значения температуры. Нам нужна такая форма строк, чтобы легко импортировать их и построить график в Excel. Обратите внимание, что значения температуры преобразуются в целые числа. Эти же значения также запишутся в вновь созданный файл «test.txt», и в конце просто добавляем задержку, которая будет представлять интервал записи данных температуры. После загрузки кода Arduino начнет сохранять значения температуры каждые 3 секунды. Через некоторое время можно открыть SD-карту на компьютере, чтобы увидеть результаты. Для создания графика в Excel нужно импортировать этот файл, вот как это сделать: В меню «Данные» нажимаем кнопку «Получить данные из текста» и выбираем текстовый файл. Выбираем «С разделителями» и нажимаем «Далее», на втором шаге выбираем запятую как разделитель и завершаем мастер. Этот процесс вставит время и значения температуры в отдельные столбцы. Теперь нужно просто выбрать оба столбца и в меню «Вставка» выбрать «Вставить линейчатую диаграмму». Это создаст график, где мы увидим значения температуры каждые 3 секунды. Это всё для этого урока. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже.Как это работает



Код Arduino для модуля SD-карты
/*
* Arduino SD Card Tutorial Example
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
if (SD.begin()) {
Serial.println("SD card is ready to use.");
} else {
Serial.println("SD card initialization failed");
return;
}
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.println("Writing to file...");
myFile.println("Testing text 1, 2 ,3...");
myFile.close();
Serial.println("Done.");
} else {
Serial.println("error opening test.txt");
}
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("Read:");
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
} else {
Serial.println("error opening test.txt");
}
}
void loop() {
// empty
}Язык кода: Arduino (arduino)
Логирование данных Arduino на SD-карте
/*
* Arduino Temperature Data Logging
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
#include <DS3231.h>
File myFile;
DS3231 rtc(SDA, SCL);
int pinCS = 53;
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
if (SD.begin()) {
Serial.println("SD card is ready to use.");
} else {
Serial.println("SD card initialization failed");
return;
}
rtc.begin();
}
void loop() {
Serial.print(rtc.getTimeStr());
Serial.print(",");
Serial.println(int(rtc.getTemp()));
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
myFile.print(rtc.getTimeStr());
myFile.print(",");
myFile.println(int(rtc.getTemp()));
myFile.close();
} else {
Serial.println("error opening test.txt");
}
delay(3000);
}Язык кода: Arduino (arduino)

Производственный процесс
- IXON Cloud: Освойте логирование машинных данных и дашборды за минуты
- Создание надежного RFID-замка на Arduino — пошаговое руководство
- Создание надежного монитора энергии и логгера данных на Arduino — пошаговое руководство
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
- Управление Arduino Uno из Python 3: команды через последовательный порт и демонстрация с LED
- Сборка компактного FM-радио на Arduino Nano и RDA5807M
- Проект датчика отпечатков пальцев на Arduino Nano – Пошаговое руководство
- Создание мини-пианино на Arduino UNO — пошаговое руководство
- Урок Arduino для начинающих 01: Начало работы с первым проектом