● Проект 27: SD-карта. Чтение и запись данных

Опубликовано: 23.04.2018
В этом эксперименте мы покажем, как к плате Arduino подключить SD-карту.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
модуль SD-card;
модуль часов реального времени DS1307 с батарейкой;
• датчик температуры LM335;
резистор 2,2 кОм;
провода папа-папа.

Если вашим Аrduino-проектам не хватает памяти, а объем энергонезависимой памяти EEPROM в платах Arduino совсем небольшой, можно использовать внешние носители. Один из самых простых по подключению к платам Arduino – это SD-карта. Можно подсоединиться к SD-карте напрямую, а можно использовать модули.
Подсоединим модуль SD-card к плате Arduino и напишем пример сохранения на SD-карте данных аналогового датчика температуры LM335. Для анализа данных температуры потребуется знать и время измерения данных, поэтому будем использовать и модуль часов реального времени RTC. Соберем схему, показанную на рис. 27.1.

Рис. 27.1. Схема подключения модулей SD-card и DS1307 к Arduino

При написании скетча используем библиотеку SD для работы с SD-картой, а также библиотеки Time и DS1307 для работы с модулем RTC. Содержимое скетча показано в листинге 27.1. Каждые 5 минут мы считываем данные с датчика LM335, подключенного к аналоговому входу A0, и заносим время измерения и данные температуры в файл вида d-m-Y. В начале суток создаем новый файл на новый день.

Листинг 27.1

// подключение библиотек для RTC
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
// подключение библиотеки для SD
#include <SD.h>
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 по схеме на рис. 27.1.
2. Загружаем в плату Arduino скетч из листинга 27.1. Ждем продолжительное время, затем вынимаем карту, вставляем в компьютер, открываем файл, соответствующий текущему дню, и смотрим его содержимое – по строкам времени замера и показания температуры.

Листинги программ скачать




 

Главное меню

Каталог

Полезные ссылки

Цена
от
до