Содержание
Обзор модулей SD и micro-SD карт к Arduino
Большинство микроконтроллеров обладает очень небольшой внутренней памятью для хранения данных. Arduino – не исключение. Например, Mega имеет всего 4 Кб памяти EEPROM, а Uno и того меньше – всего 1 Кб. А есть проекты на Arduino, которым необходимо работать с большими объемами данных, или хранить в памяти картинки или музыку. Конечно памяти Arduino для этого не хватит. Самый доступный и эффективный вариант увеличения памяти данных для проектов Arduino – использование SD-карты..
Существует множество плат для удобного подключения SD и micro-SD карт к Arduino (рис. 1).
Рисунок 1.
SD-карту необходимо отформатировать в формате FAT16 или FAT32. Можно использовать средства операционной системы или программу SDCardFormatter.
Рисунок 2.
Подключение к плате Arduino
SD-карта взаимодействует с платой Arduino gпо протоколу SPI. Используются 4 контакта,, для Uno это 13-SCK, 12-MISO, 11-MOSI, для пина выбора CS обычно используют 10, 4 но можно любой.
Рис. 3.
В Arduino IDE есть встроенная библиотека для работы с SD-картами, которая так и называется – SD. Загрузим на плату Arduino пример CardInfo (Файл → Примеры → SD → CardInfo). В последовательный порт выводится информация о файловой системе, емкости SD-карты и список файлов на SD-карте (рис. 4).
Рис. 4.
Arduino-библиотека SD содержит различные функции, с помощью которыми можно управлять данными.
Пример использования модуля Micro SD Card Reader
Создадим проект сохранения на SD-карте показаний, которые мы будем получать с датчика BME280. Данные должны быть привязаны к времени, для этого будем использовать RTC DS3231.
Для проекта нам понадобятся:
- Плата Arduino Nano – 1 шт;
- Макетная плата – 1 шт;
- Датчик BME280 – 1 шт;
- RTC DS3231 – 1 шт;
- Модуль SD-карты – 1 шт;
- SD-карта или microSD-карта;
- Провода.
Схема соединений нашего проекта на рис. 5.
Рис. 5.
Каждые 60 секунд получаем данные влажности, температуры и атмосферного давления с датчика BME280 и . Данные собираем в строку и записываем в файл.Для отладки строку выводим последовательный порт.
Загружаем на плату Arduino скетч из листинга 1.
Листинг 1.
// #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <DS1307RTC.h> #include <Time.h> #include <TimeLib.h> #include <SPI.h> #include <SD.h> // создание экземпляров Adafruit_BME280 bmp; // для опроса unsigned long timet=0; // экземпляр объекта File f1; // пин выбора CS int pinCS = 10; // tmElements_t datetime; // переменные для имени файла String strname; char nameoffile[20]; String strdata=""; void setup() { Serial.begin(9600); pinMode(10, OUTPUT); if (!SD.begin(pinCS)) { Serial.println(" error ini card!"); return; } Serial.println("ini card ok"); // запуск датчика BME280 bmp.begin(); } void loop() { if(millis()-timet>=60000) { // получение данных int h = bmp.readHumidity(); int t = bmp.readTemperature(); int p = bmp.readPressure(); // имя файла nameoffile =get_file_name(); nameoffile.toCharArray(strname,20); // f1 = SD.open(strname, FILE_WRITE); // записать в файл strdata =get_time(); strdata +=" "; strdata +=String(h); strdata +=" "; strdata +=String(t); strdata +=" "; strdata +=String(p); Serial.println(strdata); f1.println(strdata); f1.close(); // timet =millis(); } } // текущее время H:s String get_time() { String tt1; RTC.read(datetime); if(datetime.Hour<10) tt1="0"+datetime.Hour; else tt1=""+datetime.Hour; if(datetime.Minute<10) tt1+=":0"+ datetime.Minute; else tt1+=":"+datetime.Minute; return tt1; } // получение имени файла String get_file_name() { String strname ="f"; RTC.read(datetime); strname +=tmYearToCalendar(datetime.Year)-2000; if(datetime.Month<10) strname +="0"+datetime.Month; else strname +=""+datetime.Month; if(datetime.Day<10) strname +="0"+datetime.Day; else strname +=""+datetime.Day; strname +=".txt"; return strname; }
Загружаем скетч на плату Arduino и открываем монитор последовательного порта (рис. 6).
Рис. 6.
Файлы текущего дня можно просмотреть на компьютере (рис. 7).
Рис. 7.
Рис. 8.
Где можно приобрести комплектующие для ардуино?Купить arduino запчасти с доставкой по всей России можно в нашем магазине 3DIY
Часто задаваемые вопросы FAQ
- Проверьте правильность подключения модуля SD-карты к плате Arduino.
- Проверьте работоспособность SD-карты на компьютере.
- Отформатируйте SD-карту в формате FAT16 или FAT32.
- Проверьте имя создаваемого файла (формат 8.3).