DataLogger: использование библиотеки SD для Arduino для сохранения лога показаний датчиков на SD карте

Добавлено 7 апреля 2018 в 12:22

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

Необходимые комплектующие

Схема

Макет тестового устройства
Макет тестового устройства

Плата Arduino или Genuino должна быть подключена к плате расширения Ethernet Shield. Три потенциометра могут быть заменены другими аналоговыми датчиками, согласно их способам подключения.

Схема тестового устройства
Схема тестового устройства

Код

Код, приведенный ниже, настроен для использования совместно с платой Ethernet Shield, которая имеет слот для SD карты. В функции setup() вызываем SD.begin(), назначая вывод 4 выводом CS. Этот вывод меняется в зависимости от исполнения платы расширения.

В loop() создается String для хранения информации с трех аналоговых датчиков. Код перебирает датчики, добавляя данные с них в строку.

Затем на SD карте открывается файл с помощью SD.open(). После этого данные записываются на SD карту с помощью вызова dataFile.println(). Для сохранения информации файл должен быть закрыт с помощью dataFile.close().

/*
  SD card datalogger

 Схема:
 * аналоговые датчики на аналоговых выводах 0, 1 и 2
 * SD подключена к шине SPI следующим образом:
 ** MOSI - вывод 11
 ** MISO - вывод 12
 ** CLK - вывод 13
 ** CS - вывод 4 (для MKRZero SD: SDCARD_SS_PIN)

 */

#include <SPI.h>
#include <SD.h>

const int chipSelect = 4;

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


  Serial.print("Initializing SD card...");

  // посмотреть, доступна ли SD карта, и может ли она быть инициализирована:
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("Card failed, or not present");
    // больше ничего не делать:
    while (1);
  }
  Serial.println("card initialized.");
}

void loop() {
  // создать строку для сборки данных в лог:
  String dataString = "";

  // прочитать три датчика и добавить данные к строке:
  for (int analogPin = 0; analogPin < 3; analogPin++) 
  {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) 
    {
      dataString += ",";
    }
  }

  // открыть файл. обратите внимание, что за раз может быть открыт только один файл,
  // поэтому вы должны закрыть его перед открытием другого.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // если файл доступен, то записать в него:
  if (dataFile) 
  {
    dataFile.println(dataString);
    dataFile.close();
    // вывести строку и в последовательный порт:
    Serial.println(dataString);
  }
  // если файл не открыт, вывести сообщение об ошибке:
  else 
  {
    Serial.println("error opening datalog.txt");
  }
}

Теги

ArduinoSD картаПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.