Arduino SD卡和数据记录教程

在本教程中,我们将学习如何使用Arduino板的SD卡模块。结合DS3231实时时钟模块,我们将制作一个数据日志示例,将温度传感器的数据存储到SD卡中,并导入到Excel中制作图表。你可以观看下面的视频或阅读下面的书面教程。

亚博88下载


首先让我们来看看SD卡模块。它适用于标准microSD卡,工作电压为3.3V。因此,该模块具有电压调节器和电平移位器,以便我们可以使用它的5 V引脚的Arduino板。

Arduino SD卡模块

SD卡模块具有六个引脚,两个用于为模块,VCC和GND引脚供电,以及用于SPI通信的四个引脚。以下是我们如何将其连接到Arduino Board。

Arduino SD卡模块电路原理图教程

注意,每个Arduino板都有不同的SPI引脚,需要相应的连接。

Arduino SPI引脚列表

你可以从下面的链接获得这个Arduino教程所需的组件:

yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我的收入来自符合条件的购买。

Arduino SD卡模块代码


接下来我们要给Arduino编程。下面是一个简单的代码:

/* * Arduino SD卡教程示例* * by Dejan Nedelkovski, www.HowToMechatronics.亚搏手机版官方下载com */ #include  #include  File myFile;int pinCS = 53;// Pin 10 on Arduino Uno void setup() {Serial.begin(9600);pinMode (pinCS、输出);// SD卡初始化if(sd.begin()){serial.println(“SD卡已准备好使用”);} else {serial.println(“SD卡初始化失败”);返回;} //创建/打开文件myFile = SD.open("test.txt", FILE_WRITE);//如果文件打开了,写入它:println(“写入文件…”);//写入文件myFile。println("Testing text 1, 2 ,3..."); myFile.close(); // close the file Serial.println("Done."); } // if the file didn't open, print an error: else { Serial.println("error opening test.txt"); } // Reading the file myFile = SD.open("test.txt"); if (myFile) { Serial.println("Read:"); // Reading the whole file while (myFile.available()) { Serial.write(myFile.read()); } myFile.close(); } else { Serial.println("error opening test.txt"); } } void loop() { // empty }

代码说明:因此,首先,我们需要包含标准SD和SPI库,创建“文件”对象并定义SPI总线的芯片选择引脚,在我的案例中为Arduino Mega板。对于此示例,我们希望只有一次执行我们的代码,因此所有代码都将放在“设置”部分中,而“循环”部分将保持空。

因此,首先我们需要启动串行通信并将ChipSelect引脚定义为输出。我们必须这样做,因为ChipSelect pin需要是“低”的,以便模块和Arduino之间的SPI通信工作。

接下来,使用SD.begin()函数初始化SD卡,如果初始化成功,“if”语句将变为真,字符串“SD卡可以使用了”。将在串行监视器上打印,否则将打印字符串“SD卡初始化失败”,程序也将被终止。

接下来,使用SD.open()函数,我们将创建一个名为“test.txt”的新文件,包括FILE_WRITE参数,这意味着我们可以读写该文件。如果文件已经存在,则SD.open()函数将直接打开它。

因此,如果文件已经成功创建,首先我们将在串行监视器上打印字符串“Writing to file”,然后使用myFile.println()函数将文本“Testing text 1,2,3…”打印到文件中。之后,我们需要使用close()函数来确保之前写入文件的数据被物理地保存到SD卡中。

接下来,我们将看到如何从文件中读取。因此,我们将再次使用相同的函数SD.open(),但这一次由于文件“test.txt”已经创建,该函数将只是打开文件。然后使用myFile.read()函数读取文件并在串行监视器上打印出来。read()函数实际上一次只读取一个字符,因此我们需要使用“while”循环和myFile.available()函数来读取所有字符或之前写入的全部数据。最后,我们需要关闭该文件。

现在将代码上传到Arduino之后,如果一切正常,串行监视器上将出现以下内容。

SD卡串行监控结果

正如我们所看到的,SD卡已成功初始化,写入它的写作也取得了成功,并且还读取了书面数据或字符串“测试文本1,2,3 ...”已经成功阅读。如果我们在计算机上打开SD卡,我们可以看到创建的“test.txt”文件和其中的书面文本。

Arduino SD卡数据记录


现在让我们来做另一个更有趣的例子,它记录温度传感器的数据。为此,我们将使用DS3231实时时钟模块,它也有一个内置的温度传感器。您可以在my . com中找到关于如何连接和使用这个模块的更多细节前一教程

因此,在将两个模块连接到Arduino之后,让我们看看这个示例的代码。

/ * * arduino温度数据记录* *由dejan nedelkovski,www.www.kuaixg.com *亚搏手机版官方下载 / #include  #include  #include 文件myfile;DS3231 RTC(SDA,SCL);int pinCS = 53;// Pin 10 on Arduino Uno void setup() {Serial.begin(9600);pinMode (pinCS、输出);// SD卡初始化if(sd.begin()){serial.println(“SD卡已准备好使用”);} else {serial.println(“SD卡初始化失败”);返回;} RTC.BEGIN();void循环(){serial.print(rtc.gettimestr()); Serial.print(","); Serial.println(int(rtc.getTemp())); myFile = SD.open("test.txt", FILE_WRITE); if (myFile) { myFile.print(rtc.getTimeStr()); myFile.print(","); myFile.println(int(rtc.getTemp())); myFile.close(); // close the file } // if the file didn't open, print an error: else { Serial.println("error opening test.txt"); } delay(3000); }

代码说明:首先,我们需要包含两个模块所需的库,然后在安装部分中创建两个对象,并在安装部分初始化它们。

在loop部分使用serial .print()函数,我们将打印串行监视器上的时间和温度值,在时间和温度值之间使用“逗号”字符,并在温度值之后新建一行。我们需要这种形式的线,以便我们可以很容易地导入它们,并在Excel中制作图表。还要注意,温度值被转换为整数。

因此,这些相同的值也将写入新创建的“test.txt”文件,在最后,我们只需要添加一个延迟,这将表示记录温度数据的时间间隔。

上传代码后,Arduino将开始每3秒存储一次温度值。过一会儿,我们可以打开电脑上的SD卡,看看结果。

SD卡文件文本

在Excel中创建图表,我们需要导入此文件,此处是我们将如何执行以下操作:

从数据菜单中,我们需要单击“从文本获取数据”按钮,然后选择文本文件。在这里,我们将选择“分隔”,然后单击下一步,然后在第二步中单击,选择逗号作为分隔符,然后完成向导。

因此,此过程将将时间和温度值插入单独的列中。现在我们只需要选择两个列,然后从插入菜单中选择“插入界图”。这将创建图表,我们每3秒都可以看到温度值。

Arduino数据记录到Excel

这就是本教程的全部内容,欢迎在下面的评论部分提出任何问题。

17回应

  1. 你好,
    伟大的教程,我如何创建txt文件的名字随机?喜欢日期“01102016.txt”自动由阿杜。

    回复
    • Dejan Nedelkovski.

      谢谢。你可以尝试在myFile = SD.open(" test.txt ", FILE_WRITE)函数中使用一个字符串变量,而不是" text.txt ",例如一个名为fileName = " 01102016.txt "的字符串。我不确定这是否有效,你应该试着告诉我们。

      回复
      • nest

        好主意!它可以使用字符串加法操作符。从RTC获取值,我们可以自动分配“mmddyyyy.txt”,并提出和组织的文件列表。

      • 安德里亚Cescato

        这就跟你问声好!伟大的教程!
        我设法找到创建文件名的解决方案,我决定为需要它的任何人分享它。这样,您可以根据字符串(Y)的名称保存文件:

        字符串x;
        字符串y;
        y =“测试”;
        x = String(y + " .txt ");
        myFile = SD.open(x.c_str(), FILE_WRITE);

  2. 佩耶曼


    在Arduino mega2560(R3) pin #50是MISO, #51是MOSI
    必须更改原理化的绿线和蓝色。
    谢谢

    回复
  3. adatfalo

    这就跟你问声好!

    伟大的教程!我是个小问题,但我解决了。我应得的pin分配和Mega的不一样。这里是连接:
    CS-> Pin 10
    接地- >接地
    MISO,MOSI,SCK->SPI为SAM3X8E(板的中心)

    谢谢,
    Z。

    回复
  4. 现场

    请使用带有标签+钥匙链的MFRC522系统。
    谢谢!我很喜欢你的教程。

    回复
  5. 罗伯托

    能分享一下Arduino SD卡和数据记录教程下载SD.h和SPI.h的链接吗?

    回复
    • Dejan Nedelkovski.

      这些是常规的Arduino库,应该包含在Arduino安装中。当然,你总是可以使用管理库选项,素描>包括库>管理库…,以插入新的库。

      回复
  6. 迈克尔

    感谢Dejan的指导。我想知道你是否会把一个先进的教程,将你的许多老教程结合在一起:

    —温湿度传感器
    - LCD屏幕数据
    ——数据记录
    -无线

    使用额外的组件,如:
    -CO2.
    光电传感器

    我真的很感激。有办法为这样的教程捐款吗?

    谢谢,德州!

    回复

发表评论

您的电子邮件地址不会被公开。

推荐

2019年最佳入门级示波器为初学者和爱好者

为初学者和爱好者最好的示波器

推荐

8个最好的Arduino入门工具包,适合2019年初学者

初学者的8个最佳Arduino Starter Kits

推荐

最好的3D打印机为初学者和爱好者- 3D打印

最好的3D打印机为初学者和业余爱好者