Интерфейс модуля SD-карты для регистрации данных

Попробуйте наш инструмент устранения неполадок





В этом посте мы собираемся связать модуль SD-карты с Arduino для регистрации данных. Мы увидим обзор модуля SD-карты и разберемся с конфигурацией его контактов и встроенными компонентами. Наконец, мы создадим схему для записи данных о температуре и влажности на SD-карту.



Безопасная цифровая карта

SD-карта или карта Secure Digital - благо для современной электроники, поскольку она обеспечивает большую емкость при минимальном размере. Мы использовали SD-карту для хранения мультимедиа в одном из предыдущих проектов (Mp3-плеер). Здесь мы собираемся использовать его для регистрации данных.

Регистрация данных - это основополагающий шаг для регистрации происшествий в прошлом. Например: ученые и исследователи могут интерпретировать повышение глобальной температуры.



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

Поскольку arduino является отличным микроконтроллером для считывания данных с датчиков и поддерживает различные протоколы связи для считывания данных с датчиков и периферийных устройств ввода-вывода, соединение между модулем SD-карты Arduino оказалось несложным.

Поскольку у Arduino нет другого хранилища, кроме собственного пространства для хранения программ, мы можем добавить внешнее хранилище, используя модуль, описанный в этой статье.

Теперь давайте посмотрим на модуль SD-карты.

Изображение модуля SD-карты:

Изображение модуля SD-карты:

Обратная сторона модуля и конфигурация контактов:

Обратная сторона модуля и конфигурация контактов:

Имеется шесть контактов, и он поддерживает протокол связи SPI (последовательный периферийный интерфейс). Для Arduino UNO контакты SPI - это 13, 12, 11 и 10. Для Arduino Mega контакты SPI - 50, 51, 52 и 53.

Предлагаемый проект проиллюстрирован с помощью Arduino UNO, если у вас есть другая модель Arduino, пожалуйста, обратитесь в Интернет за контактами SPI.

Модуль состоит из держателя карты, который удерживает SD-карту на месте. Регулятор 3,3 В предназначен для ограничения напряжения на SD-картах, поскольку он предназначен для работы при 3,3 В, а не 5 В.

Он имеет на борту интегральную схему LVC125A, которая является переключателем логического уровня. Функция переключателя логического уровня заключается в уменьшении сигналов 5 В от Arduino до логических сигналов 3,3 В.

На этом мы завершаем модуль SD-карты.

Используя модуль SD-карты, мы можем хранить любые данные, здесь мы будем хранить текстовые данные. Мы будем хранить данные о температуре и влажности на SD-карте. Мы также используем модуль часов реального времени для регистрации времени вместе с данными датчиков. Он записывает данные каждые 30 секунд.

Принципиальная схема:

Интерфейс модуля SD-карты для регистрации данных

Модуль RTC будет отслеживать время и записывать дату и время на SD-карту.

Светодиод ошибки быстро мигает, если SD-карта не удается инициализировать или если SD-карта отсутствует. В остальное время светодиод не горит.

КАК УСТАНОВИТЬ ВРЕМЯ RTC:

• Загрузите библиотеку ниже.
• После завершения настройки оборудования подключите Arduino к ПК.
• Откройте Arduino IDE.
• Перейдите в Файл> Примеры> DS1307RTC> SetTime.
• Загрузите код, и часы реального времени будут синхронизированы со временем компьютера.
• Теперь загрузите приведенный ниже код.

Пожалуйста, загрузите следующую библиотеку Arduino перед загрузкой кода.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

Температура и влажность DHT11: arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Программа:

//-----Program developed by R.Girish-----//
#include
#include
#include
#include
#include
#include
#define DHTxxPIN A0
const int cs = 10
const int LED = 7
dht DHT
int ack
int f
File myFile
void setup()
{
Serial.begin(9600)
pinMode(LED,OUTPUT)
if (!SD.begin(cs))
{
Serial.println('Card failed, or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
Serial.println('Initialization done')
}
void loop()
{
myFile = SD.open('TEST.txt', FILE_WRITE)
if(myFile)
{
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
tmElements_t tm
if(!RTC.read(tm))
{
goto A
}
if (RTC.read(tm))
{
Serial.print('TIME:')
if(tm.Hour>12) //24Hrs to 12 Hrs conversion//
{
if(tm.Hour==13)
{
Serial.print('01')
myFile.print('01')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==14)
{
Serial.print('02')
myFile.print('02')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==15)
{
Serial.print('03')
myFile.print('03')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==16)
{
Serial.print('04')
myFile.print('04')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==17)
{
Serial.print('05')
myFile.print('05')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==18)
{
Serial.print('06')
myFile.print('06')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==19)
{
Serial.print('07')
myFile.print('07')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==20)
{
Serial.print('08')
myFile.print('08')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==21)
{
Serial.print('09')
myFile.print('09')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==22)
{
Serial.print('10')
myFile.print('10')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==23)
{
Serial.print('11')
myFile.print('11')
Serial.print(':')
myFile.print(':')
}
else
{
Serial.print(tm.Hour)
myFile.print(tm.Hour)
Serial.print(':')
myFile.print(':')
}
Serial.print(tm.Minute)
myFile.print(tm.Minute)
Serial.print(':')
myFile.print(':')
Serial.print(tm.Second)
myFile.print(tm.Second)
if(tm.Hour>=12)
{
Serial.print(' PM')
myFile.print( ' PM')
}
if(tm.Hour<12)
{
Serial.print('AM')
myFile.print( ' AM')
}
Serial.print(' DATE:')
myFile.print(' DATE:')
Serial.print(tm.Day)
myFile.print(tm.Day)
Serial.print('/')
myFile.print('/')
Serial.print(tm.Month)
myFile.print(tm.Month)
Serial.print('/')
myFile.print('/')
Serial.println(tmYearToCalendar(tm.Year))
myFile.println(tmYearToCalendar(tm.Year))
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
} else {
A:
if (RTC.chipPresent())
{
Serial.print('RTC stopped!!!')
myFile.print('RTC stopped!!!')
Serial.println(' Run SetTime code')
myFile.println(' Run SetTime code')
} else {
Serial.print('RTC Read error!')
myFile.print('RTC Read error!')
Serial.println(' Check circuitry!')
myFile.println(' Check circuitry!')
}
}
ack=0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack=1
break
}
if(ack==0)
{
f=DHT.temperature*1.8+32
Serial.print('Temperature(C) = ')
myFile.print('Temperature(°C) = ')
Serial.println(DHT.temperature)
myFile.println(DHT.temperature)
Serial.print('Temperature(F) = ')
myFile.print('Temperature(°F) = ')
Serial.print(f)
myFile.print(f)
Serial.print('n')
myFile.println(' ')
Serial.print('Humidity(%) = ')
myFile.print('Humidity(%) = ')
Serial.println(DHT.humidity)
myFile.println(DHT.humidity)
Serial.print('n')
myFile.println(' ')
}
if(ack==1)
{
Serial.println('NO DATA')
myFile.println('NO DATA')
}
for(int i=0 i<30 i++)
{
delay(1000)
}
}
myFile.close()
}
}

// ----- Программа разработана Р.Гиришем ----- //

После того, как схеме будет разрешено регистрировать данные в течение некоторого времени, вы можете удалить SD-карту, подключенную к вашему компьютеру, там будет файл TEXT.txt, в котором записываются все данные о температуре и влажности, а также время и дата, как показано ниже.

ПРИМЕЧАНИЕ. Приведенная выше идея является примером того, как взаимодействовать и записывать данные. Использование этого проекта зависит от вашего воображения, вы можете записывать данные датчиков любого типа.

Авторский прототип:

Прототип интерфейсного модуля SD-карты с Arduino




Предыдущая: Бесконтактные датчики - инфракрасные, температуры / влажности, емкостные, световые Далее: Как подключить инфракрасный фотодиодный датчик в цепь