Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

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

Как это работает

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

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

Модуль SD-карты имеет шесть выводов: два для питания модуля — VCC и GND, и еще четыре для SPI-коммуникации. Вот как его нужно подключить к плате Arduino.

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

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

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

Компоненты, необходимые для этого урока Arduino, можно найти по ссылкам ниже:

  • Модуль Micro SD-карты………………..
  • Плата Arduino ……………………………
  • Безпаечная макетная плата и перемычки ………

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

Теперь запрограммируем Arduino. Вот простой код:

/*
 * 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)

Описание кода: Сначала подключаем стандартные библиотеки 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, если все в порядке, в мониторе последовательного порта появится следующее:

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

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

Логирование данных Arduino на SD-карте

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

После подключения двух модулей к Arduino давайте посмотрим на код для этого примера.

/*
 * 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)

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

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

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

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

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

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

В меню «Данные» нажимаем кнопку «Получить данные из текста» и выбираем текстовый файл. Выбираем «С разделителями» и нажимаем «Далее», на втором шаге выбираем запятую как разделитель и завершаем мастер.

Этот процесс вставит время и значения температуры в отдельные столбцы. Теперь нужно просто выбрать оба столбца и в меню «Вставка» выбрать «Вставить линейчатую диаграмму». Это создаст график, где мы увидим значения температуры каждые 3 секунды.

Логирование данных Arduino на SD-карте с RTC DS3231 — пошаговое руководство

Это всё для этого урока. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже.


Производственный процесс

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