在本篇文章中,我们将学习如何基于Arduino开发板使用一个SD卡模块。同时结合DS3231实时时钟模块,我们将制作一个数据记录仪的示例,在示例中,我们将温度传感器的数据存储到SD卡中,并将这些数据导入到Excel中以制作图表。

Arduino SD卡模块

首先让我们来看看SD卡模块。它适用于标准MicroSD卡,工作电压为3.3 V。因此,该模块带有稳压器和电平转换器,因此我们可以将其与Arduino电路板的5 V引脚配合使用。

SD卡模块有六个引脚,两个用于为模块供电,VCC和GND引脚,以及另外四个用于SPI通信的引脚。以下是我们将其连接到Arduino开发板的方法。

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

该示例所需的组件如下:

●    Micro SD卡模块

●    Arduino开发板

●    面包板和跳线

编程Arduino SD卡模块

接下来我们需要对Arduino进行编程。以下是这个简单的代码:

  1. /*
  2. *  Arduino SD Card Tutorial Example
  3. *
  4. *  by Dejan Nedelkovski, www.HowToMechatronics.com
  5. */
  6. #include <SD.h>
  7. #include <SPI.h>
  8. File myFile;
  9. int pinCS = 53; // Pin 10 on Arduino Uno
  10. void setup() {
  11. Serial.begin(9600);
  12. pinMode(pinCS, OUTPUT);
  13. // SD Card Initialization
  14. if (SD.begin())
  15. {
  16. Serial.println("SD card is ready to use.");
  17. } else
  18. {
  19. Serial.println("SD card initialization failed");
  20. return;
  21. }
  22. // Create/Open file
  23. myFile = SD.open("test.txt", FILE_WRITE);
  24. // if the file opened okay, write to it:
  25. if (myFile) {
  26. Serial.println("Writing to file...");
  27. // Write to file
  28. myFile.println("Testing text 1, 2 ,3...");
  29. myFile.close(); // close the file
  30. Serial.println("Done.");
  31. }
  32. // if the file didn't open, print an error:
  33. else {
  34. Serial.println("error opening test.txt");
  35. }
  36. // Reading the file
  37. myFile = SD.open("test.txt");
  38. if (myFile) {
  39. Serial.println("Read:");
  40. // Reading the whole file
  41. while (myFile.available()) {
  42. Serial.write(myFile.read());
  43. }
  44. myFile.close();
  45. }
  46. else {
  47. Serial.println("error opening test.txt");
  48. }
  49. }
  50. void loop() {
  51. // empty
  52. }

复制代码

代码描述:首先我们需要包括标准的SD和SPI库,创建一个“File”对象并定义SPI总线的ChipSelect片选引脚,本例中为Arduino Mega开发板的引脚53。对于本示例,我们希望代码只执行一次,因此所有代码都将放在“setup函数”部分,而“loop”部分将保持为空。

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

接下来,使用SD.begin()函数,我们将初始化SD卡,如果初始化成功,“if”语句将变为true,并且字符串“SD card is ready to use.”将打印在串口监视器上,否则将打印字符串“SD卡初始化失败”,程序也将终止。

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

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

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

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

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

Arduino数据记录

现在让我们再创一个更有趣的温度传感器数据记录示例。为此,我们将使用DS3231实时时钟模块,该模块还具有内置温度传感器。您可以在我之前的教程中找到有关如何连接和使用此模块的更多详细信息。

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

  1. /*
  2. *  Arduino Temperature Data Logging
  3. *
  4. *  by Dejan Nedelkovski, www.HowToMechatronics.com
  5. */
  6. #include <SD.h>
  7. #include <SPI.h>
  8. #include <DS3231.h>
  9. File myFile;
  10. DS3231  rtc(SDA, SCL);
  11. int pinCS = 53; // Pin 10 on Arduino Uno
  12. void setup() {
  13. Serial.begin(9600);
  14. pinMode(pinCS, OUTPUT);
  15. // SD Card Initialization
  16. if (SD.begin())
  17. {
  18. Serial.println("SD card is ready to use.");
  19. } else
  20. {
  21. Serial.println("SD card initialization failed");
  22. return;
  23. }
  24. rtc.begin();
  25. }
  26. void loop() {
  27. Serial.print(rtc.getTimeStr());
  28. Serial.print(",");
  29. Serial.println(int(rtc.getTemp()));
  30. myFile = SD.open("test.txt", FILE_WRITE);
  31. if (myFile) {
  32. myFile.print(rtc.getTimeStr());
  33. myFile.print(",");
  34. myFile.println(int(rtc.getTemp()));
  35. myFile.close(); // close the file
  36. }
  37. // if the file didn't open, print an error:
  38. else {
  39. Serial.println("error opening test.txt");
  40. }
  41. delay(3000);
  42. }

复制代码

代码描述:首先我们需要包含两个模块所需的库,然后创建两个对象,并在设置部分初始化它们。

在使用Serial.print()函数的循环部分中,我们将在串行监视器上打印时间和温度值,它们之间带有“逗号”字符,温度值后面有一个新行。我们需要这种形式的线条,以便我们可以轻松导入它们并在Excel中创建图表。另请注意,温度值将转换为整数。

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

上传代码后,Arduino将每隔3秒开始存储温度值。过了一会儿,我们可以在计算机上打开SD卡查看结果>

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

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

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

有关Arduino开发板的更多文章,请参考以下链接:https://www.yiboard.com/thread-999-1-1.html

使用Arduino和SD卡模块记录数据并导出到Excel的更多相关文章

  1. 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题

    数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据.解决图片恢复后打不开的问题. 用过非常多数据恢复软件.最早EasyRecovery pro.恢复过U盘.手机SD卡,硬盘数据.但如今下载不了最新版 ...

  2. android中读取SD卡上的数据

    通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...

  3. 把数据库里面的stu表中的数据,导出到excel中

    # 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...

  4. 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?

    https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...

  5. 转-Android 之 使用File类在SD卡中读取数据文件

    如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码:   <!-- 在sd中创建和删除文件的权限 --> ...

  6. 恢复SD卡错删数据

           对于众多米粉来说,手机里存储的很多资料都非常宝贵,如果不小心删除了,想要重新收集这些资料就显得非常困难.有道是千金易得,数据无价,特别是一些珍贵照片之类的充满回忆的数据,丢失了甚至会抱憾 ...

  7. JAVA实现数据库数据导入/导出到Excel(POI)

    准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/poi/release/src/(重要) 如下 2.导入Java界面美 ...

  8. ssm框架之将数据库的数据导入导出为excel文件

    在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...

  9. 使用pentaho工具将数据库数据导入导出为Excel

    写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...

随机推荐

  1. dubbo如何解决循环依赖的问题

    在分布式项目中,A调用B,  B再调用A,或者A调B,B调用C,C再调用A,形成一个环路时,就会出现循环依赖的问题, 当启动A服务时,需要B服务暴露的接口,找不到就会抛异常,B服务启动时,需要同样需要 ...

  2. siglongjmp和sigsetjmp 用法

    1. 引入原因 由于在信号处理期间自动屏蔽了正在被处理的信号,而使用setjmp/longjmp跳出信号处理程序时又不会自动将 信号屏蔽码修改会原来的屏蔽码,从而引起该信号被永久屏蔽. 可以使用sig ...

  3. PHP设计模式 - 解释器模式

    给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 角色: 环境角色(PlayContent):定义解释规则的全局信息. 抽象解释器(Empress):定 ...

  4. TimSort Java源码个人解读

    /*JDK 1.8 */ package java.util; /** * A stable, adaptive, iterative mergesort that requires far fewe ...

  5. fineui 实现下拉框模糊查询

    官网下拉框模糊查询只能实现首字母模糊匹配,如果实现类似这样的 like '%'+关键字+'%',却没有. 今天群里的没想好同学分享了,前后模糊匹配代码.   代码示例: <body>   ...

  6. webbench网站测压工具源码分析

    /* * (C) Radim Kolar 1997-2004 * This is free software, see GNU Public License version 2 for * detai ...

  7. C语言:求π

    1835: 圆的面积 本题的关键在于如何求π: 今天先给给大家介绍一种针对本题的方法——利用反三角函数求π. 在高数中arcsin(0)=arccos(1)=π,不过编译器中并没有arcsin和arc ...

  8. php的json_encode第二个参数学习及应用

    php5.4以上: json_encode($data, JSON_FORCE_OBJECT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); p ...

  9. bootstrap-wizard向导插件的使用

    引用文件 <link rel="stylesheet" href="bootstrap-wizard/bootstrap-wizard.css"> ...

  10. bootstrap-paginator + ajax 实现动态翻页功能

    1.下载http://plugins.jquery.com/bootstrap-paginator/ 2.引用<script src="/static/bootstrap/js/boo ...