Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Datalogger

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Регистрация данных от датчиков при помощи SD-карты[1]

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

Необходимое оборудование

  • Плата Arduino или Genuino
  • Модуль Arduino Ethernet Shield (или другая плата с SD-слотом)
  • 3 потенциометра на 10кОм
  • Провода-перемычки
  • Макетная плата
  • Отформатированная SD-карта

Цепь

Ethernet Shield 3Pots bb.png

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

Схема

Ethernet Shield 3Pots schem.png

Код

Скетч ниже настроен для использования с Ethernet-модулем, который имеет встроенный SD-слот. В блоке setup() вызываем функцию SD.begin(), а затем в качестве CS-контакта делаем 4-ый контакт. Однако если вместо модуля Arduino Ethernet Shield будет использоваться другой модуль, вам нужно будет задействовать другой контакт.

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

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

  1. /*
  2.   Регистрация данных посредством SD-карты
  3.  
  4.  Этот пример показывает, как регистрировать данные от трех аналоговых
  5.  датчиков путем их записи на SD карту при помощи библиотеки SD.
  6.  
  7.  Цепь:
  8.  * аналоговые датчики – к аналоговым контактам 0, 1 и 2 на Arduino
  9.  * SD-карта, подключенная к шине SPI следующим образом:
  10.  ** MOSI – к 11-ому контакту на Arduino
  11.  ** MISO - к 12-ому контакту на Arduino
  12.  ** CLK – к 13-ому контакту на Arduino
  13.  ** CS – к 4-ому контакту
  14.  
  15.  Создан 24 ноября 2010 года,
  16.  модифицирован 9 апреля 2012 года Томом Иго (Tom Igoe).
  17.  
  18.  Этот код не защищен авторским правом.
  19.  
  20.  */
  21.  
  22. #include <SPI.h>
  23. #include <SD.h>
  24.  
  25. const int chipSelect = 4;
  26.  
  27. void setup() {
  28.   // запускаем последовательную коммуникацию и ждем открытия порта:
  29.   Serial.begin(9600);
  30.   while (!Serial) {
  31.     ; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
  32.   }
  33.  
  34.  
  35.   Serial.print("Initializing SD card...");  //  "Инициализация SD-карты..."
  36.  
  37.   // смотрим, присутствует ли карта и может ли она быть инициализирована:
  38.   if (!SD.begin(chipSelect)) {
  39.     Serial.println("Card failed, or not present");  //  "Карта повреждена или отсутствует"
  40.     // ничего не делаем:
  41.     return;
  42.   }
  43.   Serial.println("card initialized.");  //  "карта инициализирована."
  44. }
  45.  
  46. void loop() {
  47.   // создаем строку для сбора данных:
  48.   String dataString = "";
  49.  
  50.   // считываем данные от датчиков и добавляем их в строку:
  51.   for (int analogPin = 0; analogPin < 3; analogPin++) {
  52.     int sensor = analogRead(analogPin);
  53.     dataString += String(sensor);
  54.     if (analogPin < 2) {
  55.       dataString += ",";
  56.     }
  57.   }
  58.  
  59.   // открываем файл (обратите внимание, что одновременно может быть
  60.   // открыт только один файл; то есть перед тем, как открывать
  61.   // следующий файл, закройте этот):
  62.   File dataFile = SD.open("datalog.txt", FILE_WRITE);
  63.  
  64.   // если файл доступен, записываем в него данные:
  65.   if (dataFile) {
  66.     dataFile.println(dataString);
  67.     dataFile.close();
  68.     // также выводим эти данные на монитор порта:
  69.     Serial.println(dataString);
  70.   }
  71.   // если файл не открылся, сообщаем об ошибке:
  72.   else {
  73.     Serial.println("error opening datalog.txt");  //  "ошибка при открытии datalog.txt"
  74.   }
  75. }

См.также

  1. SD library - Your reference for the SD Card library.
  2. Notes on using SD cards – What you need to know when you use SD cards
  3. CardInfo - Get info about your SD card.
  4. DumpFile - How to read a file from the SD card.
  5. Files - How to create and destroy an SD card file.
  6. Listfiles - How print out the files in a directory on a SD card.
  7. ReadWrite - How to read and write data to and from an SD card.

Внешние ссылки

  1. Datalogger