在本篇文章中,我们将学习如何基于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. bootCDN引用的bootstrap前端框架套件和示例

    这是bootCDN上引用的bootstrap前端框架套件,由多个框架组合而成,方便平时学习和测试使用.生产环境要仔细琢磨一下,不要用开发版,而要用生产版.bootCDN的地址是:https://www ...

  2. 简单使用Moq框架

    Moq框架简单使用   系列目录 Moq库简介及安装 Moq简介 Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能. 它的流 ...

  3. python 异常处理(25)

    在python开发中,代码书写时难免有疏忽或者意向不到的bug,导致程序run的过程中有可能会直接崩溃:然后对于程序猿而言,程序因bug崩溃是家常便饭,为了增加程序的健壮性,防止程序崩溃,我们可以对程 ...

  4. stm32f103c8串口USART1发送多一字节

    用UART写了一段Bootloader代码,遇到了一个很奇怪的现象. 代码如下:简单介绍一下就是先统一配置MCU的IO端口,然后配置串口参数,然后循环发送‘0’和'\r’.16进制是0x30 0x0d ...

  5. python_并发与通信

    独立的进程内存空间与共享的服务器进程空间 知识点一: 进程间通信的限制 进程是独立的,互不干扰的独立内存空间我们想不能修改变量但是,深层次问题是,这个进程与那个进程完全失去了联系 import mul ...

  6. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现评论功能

    评论功能分析 上图可以看出评论功能主要实现了:评论的发布.评论列表的展示. 在不考虑子评论以及图片评论的场景下,评论功能主要有以下两个接口: 发布评论 获取评论列表(考虑分页) 评论 Model 的建 ...

  7. C# vb .net实现圆角矩形特效滤镜

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

  8. linq根据英文首字母姓名排序

    names.Sort((a, b) => a.name.CompareTo(b.name));

  9. 【开发工具】 - win10设置path变量怎样列表展示?

    如果你的变量值以%开头,打开编辑的时候就会显示一串的变量值,不方便查找编辑. 所以将变量值更改为以盘符开始,就可以解决这个问题,比如:D:\apache-maven-3.6.1\bin\

  10. BFC特性及其简单应用

    BFC是什么? BFC(Block Formatting Context)中文直译就是‘块级格式上下文’,它是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元 ...