在这篇文章中,我们将SD卡模块与arduino接口用于数据日志。我们将看到SD卡模块的概述,并了解其引脚配置和板上组件。最后我们将构建一个电路来记录温度和湿度数据到SD卡。
安全数码卡
SD卡或安全数字卡是现代电子产品的福利,因为它以最小的尺寸提供了高容量存储。我们在之前的一个项目(Mp3播放器)中使用了SD卡作为媒体存储。这里我们将使用它进行数据日志记录。
数据日志是记录事件过去发生情况的基本步骤。例如:科学家和研究人员能够解释全球气温上升。
他们通过观察过去几十年的数据,了解了气温上升的模式,得出了这一结论。记录当前事件的数据也可能揭示未来的事件。
由于arduino是一个很好的读取传感器数据的微控制器,并且支持各种通信协议来读取传感器和输入输出外设,SD卡模块arduino之间的连接非常简单。
由于arduino除了自己的程序存储空间外没有其他存储,所以我们可以使用本文中描述的模块添加外部存储。
现在让我们来看看SD卡模块。
SD卡模块图片:
模块和引脚配置的反面:
有6个引脚,支持SPI(串行外设接口)通信协议。Arduino UNO的SPI通信引脚是13、12、11和10。对于Arduino mega, SPI引脚是50,51,52和53。
建议的项目说明Arduino UNO,如果你有任何其他模型的Arduino,请参考互联网的SPI引脚。
本模块由卡座组成,卡座用于固定SD卡。3.3V稳压器提供限制电压到SD卡,因为它的设计功能在3.3V,而不是5V。
采用LVC125A集成电路,逻辑电平移频器。逻辑电平移器的功能是将arduino上的5V信号减少到3.3V的逻辑信号。
现在就结束了SD卡模块。
使用SD卡模块可以存储任意类型的数据,这里我们将存储文本数据。我们将把温度和湿度数据存储到SD卡上。我们还利用实时时钟模块来记录时间和传感器数据。它每30秒记录一次数据。
原理图:

RTC模块将跟踪时间,并将日期和时间记录到SD卡上。
当SD卡失败、初始化失败或SD卡不存在时,error LED快速闪烁。其余时间,LED保持关闭。
如何设置时间到rtc:
•下载下面的库。
•完成硬件设置后,将arduino连接到PC。
•打开arduino IDE
•进入文件>示例>DS1307RTC> SetTime。
•上传代码,RTC将与计算机的时间同步。
•现在上传下面的代码。
请在上传代码之前下载下面的arduino库。
DS1307RTC: github.com/PaulStoffregen/DS1307RTC
DHT11温湿度:arduino-info.wikispaces.com/file/detail/DHT-lib.zip
计划:
//-----由R.Girish开发的程序-----//
# include < SPI.h >
# include < SD.h >
# include < Wire.h >
# include < TimeLib.h >
# include < DS1307RTC.h >
# include < dht.h >
#定义DHTxxPIN A0
Const int cs = 10;
const int LED = 7;
dht dht;
int应答;
int f;
文件myFile;
无效的设置()
{
Serial.begin (9600);
pinMode(领导、输出);
如果(! SD.begin (cs))
{
系列。println(“卡片失败,或不存在”);
而(真)
{
digitalWrite(领导、高);
延迟(100);
digitalWrite(领导、低);
延迟(100);
}
}
系列。println(“初始化完成”);
}
无效循环()
{
myFile = SD.open("TEST.txt", FILE_WRITE);
如果(myFile)
{
以 ("----------------------------------------------");
myFile.println ("----------------------------------------------");
tmElements_t tm;
如果(! RTC.read (tm))
{
转到一个;
}
如果(RTC.read (tm))
{
并同时(“:”);
if(tm.Hour>12) //24小时到12小时转换//
{
如果(tm.Hour = = 13)
{
并同时“01”);
myFile.print (01);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 14)
{
并同时(02);
myFile.print (02);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 15)
{
并同时“03”);
myFile.print(“03”);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 16)
{
并同时“04”);
myFile.print(“04”);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 17)
{
并同时“05”);
myFile.print (05);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 18)
{
并同时(06);
myFile.print (06);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 19)
{
并同时(07);
myFile.print (07);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 20)
{
并同时“08”);
myFile.print(“08”);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 21)
{
并同时“09”);
myFile.print(“09”);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 22)
{
并同时“10”);
myFile.print(“10”);
并同时(“:”);
myFile.print(“:”);
}
如果(tm.Hour = = 23)
{
并同时“十一”);
myFile.print(“十一”);
并同时(“:”);
myFile.print(“:”);
}
其他的
{
并同时tm.Hour);
myFile.print (tm.Hour);
并同时(“:”);
myFile.print(“:”);
}
并同时tm.Minute);
myFile.print (tm.Minute);
并同时(“:”);
myFile.print(“:”);
并同时tm.Second);
myFile.print (tm.Second);
如果(tm.Hour > = 12)
{
系列。打印(“点”);
myFile。打印(“点”);
}
如果(tm.Hour < 12)
{
并同时(“我”);
myFile。打印(“我”);
}
系列。打印(“日期:”);
myFile。打印(“日期:”);
并同时tm.Day);
myFile.print (tm.Day);
并同时(“/”);
myFile.print(“/”);
并同时tm.Month);
myFile.print (tm.Month);
并同时(“/”);
myFile.print(“/”);
以tmYearToCalendar (tm.Year));
myFile.println (tmYearToCalendar (tm.Year));
以 ("----------------------------------------------");
myFile.println ("----------------------------------------------");
其他}{
答:
如果(RTC.chipPresent ())
{
系列。打印(“RTC停止! !”);
myFile。打印(“RTC停止! !”);
系列。println("运行SetTime代码");
myFile。println("运行SetTime代码");
其他}{
系列。打印(“RTC读取错误!”);
myFile。打印(“RTC读取错误!”);
系列。println(“检查电路!”);
myFile。println(“检查电路!”);
}
}
ack = 0;
int chk = DHT.read11(DHTxxPIN);
开关(分)
{
案例DHTLIB_ERROR_CONNECT:
ack = 1;
打破;
}
如果(ack = = 0)
{
f = DHT.temperature * 1.8 + 32;
并同时(“温度(C) = ");
myFile.print(“温度(°C) = ");
以DHT.temperature);
myFile.println (DHT.temperature);
并同时(“温度(F) = ");
myFile.print(“温度(°F) = ");
并同时(f);
myFile.print (f);
并同时“n”);
myFile。println (" ");
并同时“湿度(%)= ");
myFile.print("湿度(%)= ");
以DHT.humidity);
myFile.println (DHT.humidity);
并同时“n”);
myFile。println (" ");
}
如果(ack = = 1)
{
系列。println(没有数据);
myFile。println(没有数据);
}
for (int i = 0;我< 30;我+ +)
{
延迟(1000);
}
}
myFile.close ();
}
}
//-----由R.Girish开发的程序-----//
一旦电路被允许记录一段时间的数据,你可以把SD卡连接到你的电脑上,就会出现一个TEXT.txt文件,里面记录了所有的温度和湿度数据以及时间和日期,如下图所示。

注意:上面的想法是一个如何接口和记录数据的例子。这个项目的使用取决于您的想象,您可以记录任何类型的传感器数据。