Читання і запис даних на SD-карту

Короткі приклади використання модулів для роботиз Ардуіно
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Читання і запис даних на SD-карту

Повідомлення Arduino » 10 червня 2017 14:30

Щоб вивчити як використовувати читання та запис на SD або micro-SD карту нам знадобиться:
(вигадати процес, дані якого будуть зберігатися в память карти, хай це буде температура навколо)
• контролер Arduino UNO R3;
• модуль SD-card;
• плата для прототипування;
• датчик температури LM335 або аналогічний;
• модуль годинемка реального часу DS1307 з батарейкою;
• резистор 2,2 кОм;
• дроти, або перемички "тато-тато"

Підключення SD або micro-SD карти до Ардуіно
Оскільки обсяг енергонезалежної пам'яті EEPROM в платах Arduino зовсім невеликий, а нам не вистачає пам'яті, аможна використовувати зовнішні носії, наприклад, SD-карти. Можна під'єднатися до SD-карті безпосередньо, а можна використовувати готові модулі. Шоб підєднати модуль SD-card до плати Arduino напишемо приклад збереження на SD-карті даних аналогового датчика температури LM335. Для аналізу даних температури потрібно знати не тільки температуру , але й час вимірювання даних, тому будемо використовувати і модуль годинника реального часу RTC. Зберемо схему, показану на малюнку нижче.
vikorystannja-sd-cards.jpg
В тексті скетчу використано бібліотеку SD для роботи з SD-картою, а також бібліотеки Time і DS1307 для роботи з модулем RTC. Вміст скетчу взято з ресурсу Ардуіно-Кіт.
За задумом Кожні 5 хвилин ми зчитуємо дані з датчика LM335, підключеного до аналогового входу A0, і заносимо час вимірювання і дані температури в файл, ща має назву шаблону виду d-m-Y. На початку доби створюємо новий файл на запис даних нового дня.

Код: Виділити все

// підключення бібліотек для RTC
#include 
#include 
#include 
// підключення бібліотек для SD
#include 
File myFile;
String sfilename;
char filename[20];
const int LM335=A0; // для підключення LM335
tmElements_t tm;
unsigned long millis1=0;
void setup()
{;}
void loop()
{
// перевірка чи прйошло 5 хвилин?
if(millis()-millis1>5*60*000)
{
millis1=millis();
// отримати имя файлу для поточного дня
sfilename=get_file_name();
sfilename.toCharArray(filename,20);
// відкрити файл чи створити
myFile = SD.open(filename, FILE_WRITE);
// отримати температуру
double val = analogRead(lm335); // читання
double voltage = val*5.0/1024; // перевід у вольти
double temp = voltage*100 - 273.15; // в градуси Цельсія
// отримати час H:m
// створити запис для файлу
record=get_time();
record+=" ";
record+=String(temp);
myFile.println(record);
myFile.close();
}
// отримання часу доби
String get_time()
{
String time1;
RTC.read(tm);
if(tm.Hour()<10)
time1="0"+String(tm.Hour(),DEC);
else
time1=String(tm.Hour(),DEC);
if(tm.Minute()<10)
time1+=":0"+String(tm.Minute(),DEC);
else
time1+=":"+String(tm.Minute(),DEC);
return time1;
}
Порядок викоритсання:

1. Підключаємо модулі SD card, DS1307 і датчик температури LM335 до плати Arduino за схемою вище.
2. Завантажуємо в плату Arduino скетч з лістингу . Чекаємо тривалий час, потім виймаємо карту, вставляємо в комп'ютер, відкриваємо файл, що відповідає поточному дню, і дивимося його вміст - по рядках часу виміру і показники температури.

Відповісти

Повернутись до “Практичні завдання з Arduino”