使用Arduino和SD卡模块记录数据并导出到Excel
在本篇文章中,我们将学习如何基于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进行编程。以下是这个简单的代码:
- /*
- * Arduino SD Card Tutorial Example
- *
- * by Dejan Nedelkovski, www.HowToMechatronics.com
- */
- #include <SD.h>
- #include <SPI.h>
- File myFile;
- int pinCS = 53; // Pin 10 on Arduino Uno
- void setup() {
- Serial.begin(9600);
- pinMode(pinCS, OUTPUT);
- // SD Card Initialization
- if (SD.begin())
- {
- Serial.println("SD card is ready to use.");
- } else
- {
- Serial.println("SD card initialization failed");
- return;
- }
- // Create/Open file
- myFile = SD.open("test.txt", FILE_WRITE);
- // if the file opened okay, write to it:
- if (myFile) {
- Serial.println("Writing to file...");
- // Write to file
- 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库,创建一个“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后,让我们看看这个例子的代码。
- /*
- * Arduino Temperature Data Logging
- *
- * by Dejan Nedelkovski, www.HowToMechatronics.com
- */
- #include <SD.h>
- #include <SPI.h>
- #include <DS3231.h>
- File myFile;
- DS3231 rtc(SDA, SCL);
- int pinCS = 53; // Pin 10 on Arduino Uno
- void setup() {
- Serial.begin(9600);
- pinMode(pinCS, OUTPUT);
- // SD Card Initialization
- if (SD.begin())
- {
- Serial.println("SD card is ready to use.");
- } else
- {
- Serial.println("SD card initialization failed");
- return;
- }
- rtc.begin();
- }
- void loop() {
- 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);
- }
复制代码
代码描述:首先我们需要包含两个模块所需的库,然后创建两个对象,并在设置部分初始化它们。
在使用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的更多相关文章
- 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据.解决图片恢复后打不开的问题. 用过非常多数据恢复软件.最早EasyRecovery pro.恢复过U盘.手机SD卡,硬盘数据.但如今下载不了最新版 ...
- android中读取SD卡上的数据
通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...
- 把数据库里面的stu表中的数据,导出到excel中
# 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...
- 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?
https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...
- 转-Android 之 使用File类在SD卡中读取数据文件
如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码: <!-- 在sd中创建和删除文件的权限 --> ...
- 恢复SD卡错删数据
对于众多米粉来说,手机里存储的很多资料都非常宝贵,如果不小心删除了,想要重新收集这些资料就显得非常困难.有道是千金易得,数据无价,特别是一些珍贵照片之类的充满回忆的数据,丢失了甚至会抱憾 ...
- JAVA实现数据库数据导入/导出到Excel(POI)
准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/poi/release/src/(重要) 如下 2.导入Java界面美 ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
- 使用pentaho工具将数据库数据导入导出为Excel
写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...
随机推荐
- EasyNVR摄像机网页无插件直播方案H5前端构建之:如何区分PC端和移动端
背景分析 随着互联网基础设施建设的不断完善和发展,带宽的不断提速,尤其是光纤入户,4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看.可控的诉求越来越多,尤其是移动应用技术和前端技术的 ...
- Centos7安装部署MongoDB教程
安装方式: RPM包安装 安装步骤: 一.下载RPM包 下图是需要注意的事项.其一选择MongoDB的社区版本,默认是企业版本.其二,选中版本后,在下方会出现下载地址,直接复制下载即可 二.安装并查 ...
- [Go] 数据类型,变量与变量作用域,常量
// var.gopackage main import ( "fmt" ) func main() { // 声明变量的一般形式是使用 var 关键字,可以一次声明多个变量 // ...
- linux用户态和内核态理解
1.特权级 Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提供了一套特权级使用的相关机制 ...
- CentOS升级kernel
CentOS升级kernel 升级命令: yum update kernel yum update kernel-devel yum update kernel-firmware yum update ...
- SaltStack 是一个服务器基础架构集中化管理平台
SaltStack详细部署 一.基础介绍============================================================================== ...
- sqlalchemy python中的mysql数据库神器
在介绍sqlalchemy之前,我们先了解一下ORM. ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.也就是说ORM 将数据库中的表与面向对象语言中的类建 ...
- PHP多进程编程初步
转自:https://www.pureweber.com/article/php-multi-process-programming-preview/ 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是 ...
- PostgreSQL学习笔记(二)—— 概览
数据库 创建数据库: createdb dbname 指定用户名创建数据库: createdb -U username dbname 删除数据库: dropdb dbname 访问数据库: psql ...
- Mybatis自动生成代码工具
项目结构如下 一:在POM中添加mybatis-generator-maven-plugin 插件 <plugins> <plugin> <groupId>org. ...