在本篇文章中,我们将学习如何基于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. Houdini Python开发实战 课程笔记

    P2 + P3 + P4 + P5 - 基础: 1. Houdini中使用Python的地方 2. Textport:可使用cd.ls等路径操作的命令(命令前加%,可在python中使用) 3. So ...

  2. git diff/difftool

    参考好文:使用命令和P4Merge进行diff::https://www.cnblogs.com/cgzl/p/8597066.html git difftool 即可弹出比较工具的界面 哈哈 === ...

  3. 【LOJ2292】[THUSC2016]成绩单(区间DP)

    题目 LOJ2292 分析 比较神奇的一个区间 DP ,我看了很多题解都没看懂,大约是我比较菜罢. 先明确一下题意:abcde 取完 c 后变成 abde ,可以取 bd 这样取 c 后新增的连续段. ...

  4. Java 中不允许使用静态局部变量

    Java 中不允许使用静态局部变量

  5. 深层目录文件复制,C# 递归,录音录像图片文件过多,用于测试程序

    /// <summary> /// 录音录像图片文件过多只复制目录的前几个文件,用于测试程序 /// d:\file/images/2019-10/01/01/xxxxx.jpg(前几个文 ...

  6. Mysql 索引基础

    [1]什么是索引?为什么要建立索引? 索引,其实就是目录. 索引,用于快速找出在某个列中有某个特定值的行. 不使用索引,MySQL必须从第一条记录开始查找整张表,直到找出相关的行,那么表越大,查询数据 ...

  7. 《学渣Linux笔记》——关于.bashrc与profile(涉及交互式与非交互式、登录与非登录shell)

    <学渣Linux笔记>--关于.bashrc与profile(涉及交互式与非交互式.登录与非登录shell) 1.基本概念(个人理解) 交互式shell:等待用户输入,并执行相应操作的sh ...

  8. Haffman编码

    Huffman树又称为最优树,是一种带权路径最短的树. 一.带权路径 在一棵树中我们把一个节点到另一个节点之间的通路叫做路径,在路径中每经过一个节点路径的长度就加一.如果对一个节点附上权值,则该节点的 ...

  9. 唯一ID生成器--雪花算法

    在微服务架构,分布式系统中的操作会有一些全局性ID的需求,所以我们不能用数据库本身的自增功能来产生主键值,只能由程序来生成唯一的主键值.我们采用的是twitter的snokeflake(雪花)算法. ...

  10. C# vb .net实现宝丽来效果滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的宝丽来效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...