作为工程师/开发人员,我们始终依靠收集到的数据来设计或改进系统。记录数据并进行分析是大多数行业的普遍做法,在这里我们正在构建Arduino Data Logger Project,我们将学习如何在特定时间间隔记录数据。我们将使用Arduino开发板读取一些数据(此处是温度,湿度,日期和时间),并将它们同时保存在SD卡和计算机上。
保存的数据可以轻松地在Excel工作表中打开以进行进一步分析。为了保持日期和时间,我们将使用著名的RTC模块DS3231,并且为了获得温度和湿度,我们将使用DHT11传感器。在项目结束时,您将学习
- 如何使用日期,时间和传感器值将数据记录到SD卡中。
- 如何通过串行通讯将数据直接写入PC上的Excel Sheet。
所需材料:
- 面包板
- Arduino UNO(任何Arduino板)
- DHT11温度传感器
- DS3231 RTC模块
- SD卡模块
- SD卡
- 连接线
- 电脑/笔记本电脑
电路原理图:
该Arduino温度记录器项目的电路图如下所示。
如电路图所示,连接非常简单,因为我们将它们用作模块,因此可以直接在面包板上构建它们。下表对连接进行了进一步分类
Arduino引脚 |
模块引脚 |
温度传感器– DHT11 |
|
Vcc |
5伏 |
nd |
nd |
Nc |
Nc |
出 |
销7 |
RTC模块DS3231 |
|
Vcc |
5伏 |
nd |
nd |
SCL |
针脚A5 |
SDA |
针脚A4 |
SD卡模块 |
|
Vcc |
5伏 |
nd |
nd |
味噌 |
针脚12 |
摩西 |
销11 |
SCK |
销13 |
CS |
销4 |
您可以将DHT11温度传感器替换为需要从中记录值的任何传感器。您可以使用Arduino检查LM35以读取温度。
RTC模块DS3231使用I2C通信(SCL,SDA)与Arduino连接,SD卡模块使用SPI通信(MISO,MOSI,SCK,CS)连接。Arduino程序将引脚4和7定义为CS引脚和输出引脚,您可以根据需要将它们更改为任何其他引脚。我们之前在音乐播放器项目中将SD卡与Arduino接口。
Arduino程序说明:
我们必须编写可以执行以下操作的Arduino程序。
- 从DTH11 Sensor读取数据(或您希望记录的任何其他数据)。
- 初始化I2C总线以从RTC模块读取数据。
- 初始化SPI总线以将SD卡模块与Arduino接口。
- 将日期,时间,温度和湿度存储到SD卡中。
- 将日期,时间,温度和湿度存储在计算机/笔记本电脑上运行的Excel工作表上。
上面的步骤可能听起来很复杂,但是它们很容易,因为我们有库为我们做艰苦的工作。您必须下载以下两个库
- 来自GitHub的DHT11传感器库
- Rinky-Dink Electronics的DS3231 RTC模块库
下载库后,请按照以下说明将它们添加到Arduino IDE中
草图->包含库->添加.ZIP库
要将数据从Arduino生动地馈送到计算机上的Excel表中,我们还需要安装Parallax Inc.提供的称为PLX-DAQ的软件。单击链接下载文件并根据您的操作系统进行安装。这应该已经在桌面上创建了一个名为PLS-DAQ的文件夹。我们将在后面的工作部分中进行介绍。
现在,在添加两个库并安装软件之后,您可以使用完整代码(在教程底部提供)并将其上传到Arduino。我已尽力使代码尽可能简单,并且注释部分也给出了解释。此外,我将在下面解释重要的部分。
1.从DS3231读取数据:
DS3231是RTC(实时时钟)模块。它用于维护大多数电子项目的日期和时间。该模块具有自己的纽扣电池电源,即使主电源被拔出或MCU经过硬复位后,它也可以使用该电源来维持日期和时间。因此,一旦我们在此模块中设置了日期和时间,它就会一直跟踪它。
由于Arduino提供的库,使用此模块非常容易。
//使用硬件接口DS3231 rtc(SDA,SCL)初始化DS3231;void Initialize_RTC(){//初始化rtc对象rtc.begin(); // ####以下行可以取消注释以设置第一次的日期和时间### / * rtc.setDOW(FRIDAY); //将“星期几”设置为SUNDAY rtc.setTime(18,46,45); //将时间设置为12:00:00(24小时格式)rtc.setDate(6,30,2017); //将日期设置为2014年1月1日* /}
注意:首次使用此模块时,必须设置日期和时间。只需删除上述注释并写上日期和时间即可完成。确保对它们进行评论并上传,否则每次运行开发板时都会重新设置日期和时间。您也可以使用RTC IC DS1307与Arduino读取时间。
2.从DHT11读取数据:
DHT11是温湿度传感器。它通过模块的输出引脚将温度和湿度值作为8位数据串行发送。该库通过使用Arduino的软件串行功能读取此数据。
#define DHT11_PIN 7 //传感器输出引脚连接到DHT的引脚7; //名为DHT的传感器对象void Read_DHT11(){int chk = DHT.read11(DHT11_PIN); }
在这里,我已将输出引脚连接到引脚7,例如,您可以选择任何支持软件串行的引脚。调用 DHT.read(pin码); 将读取温度和湿度值并将其分别存储在参数 DHT.temperature 和 DHT.Humidity中 。还要检查此基于DHT11的Arduino温度测量。
3.初始化SC卡模块:
void Initialize_SDcard(){//查看卡是否存在并且可以初始化:if(!SD.begin(chipSelect)){Serial.println(“卡失败或不存在”); //不做任何其他事情:return; } //打开文件。请注意,一次只能打开一个文件,因此//您必须先关闭该文件再打开另一个文件。文件dataFile = SD.open(“ LoggerCD.txt”,FILE_WRITE); //如果该文件可用,则写入该文件:if(dataFile){dataFile.println(“ Date,Time,Temperature,Humidity”); //写入excel文件的第一行dataFile.close(); }}
将SD卡与Arduino一起使用很容易,因为SD卡库默认情况下会添加到Arduino IDE中。在SD卡初始化功能中,我们将创建一个名为“ LoggerCD.txt”的文本文件,并写入内容的第一行。在这里,我们使用“,”作为分隔符来分隔值。这意味着当放置逗号时,这意味着我们必须移至Excel工作表中的下一个单元格。
4.将数据写入SD卡
void Write_SDcard(){//打开文件。请注意,一次只能打开一个文件,因此//您必须先关闭该文件再打开另一个文件。文件dataFile = SD.open(“ LoggerCD.txt”,FILE_WRITE); //如果文件可用,请写入该文件:if(dataFile){dataFile.print(rtc.getDateStr()); //将日期存储在SD卡上dataFile.print(“,”); //使用“,” dataFile.print(rtc.getTimeStr());移至下一列//将日期存储在SD卡上dataFile.print(“,”); //使用“,” dataFile.print(DHT.temperature);移至下一列//将日期存储在SD卡上dataFile.print(“,”); //使用“,” dataFile.print(DHT.humidity);移至下一列//将日期存储在SD卡上dataFile.print(“,”); //使用“,” dataFile.println();移至下一列//行尾移至下一行dataFile.close();//关闭文件} else Serial.println(“ OOPS!SD卡写入失败”); }
如前所述,我们的目的是将日期,时间,温度和湿度保存到我们的SD卡中。借助DS3231库和DHT11库,我们的Arduino将能够读取所有这四个参数并将它们存储到以下参数中,如下表所示
日期 |
rtc.getDateStr()); |
时间 |
rtc.getTimeStr()); |
温度 |
DHT温度 |
湿度 |
DHT湿度 |
现在我们可以使用打印线直接使用这些参数将它们存储在SD卡上
dataFile.print(参数);
您可能会注意到,每个参数都用逗号分隔,以使其看起来清晰易懂,并带有 dataFile.println();。 用于指示行尾。
5.将数据写入PLX-DAQ
PLX-DAQ是Microsoft Excel插件软件,可帮助我们将Arduino的值直接写入笔记本电脑或PC上的Excel文件中。这是我个人的最爱,原因有两个:
1.您可以同时写入和监视数据,并为我们提供了将其绘制为图形的方式。
2.您不需要像DS3231这样的RTC模块来跟踪日期和时间。您只需使用笔记本电脑/计算机上运行的日期和时间,然后将其直接保存在Excel中即可。
要将此软件与Arduino一起使用,我们必须以特定的模式串行发送数据,就像在串行监视器上显示值一样。关键线说明如下:
void Initialize_PlxDaq(){Serial.println(“ CLEARDATA”); //清除以前项目中剩余的任何数据Serial.println(“ LABEL,Date,Time,Temperature,Humidity”); //始终写入LABEL,以将其表示为第一行} void Write_PlxDaq(){Serial.print(“ DATA”); //始终写入“ DATA”以将以下内容初始化为Data Serial.print(“,”); //使用“,” Serial.print(“ DATE”);移至下一列//将日期存储在Excel Serial.print(“,”); //使用“,” Serial.print(“ TIME”);移至下一列//将日期存储在Excel Serial.print(“,”); //使用“,” Serial.print(DHT.temperature);移至下一列//将日期存储在Excel Serial.print(“,”); //使用“,” Serial.print(DHT.humidity);移至下一列//将日期存储在Excel Serial.print(“,”); //使用“,” Serial.println();移至下一列//行尾移至下一行}
该软件可以识别标签,数据,时间,日期等关键字。如初始化功能所示,关键字“ LABEL”用于写入Excel工作表的第一行。稍后在Write函数中,我们使用关键字“ DATA”来表示以下信息应被视为DATA。为了表明我们必须移至下一行,我们必须使用逗号(“,”)。为了指示行的结尾,我们必须发送 Serial.println();。
如前所述,我们可以分别通过发送关键字“ DATE”和“ TIME”来编写系统日期和时间,如上所示。
注意: 使用此PLX_DAQ软件时,请勿使用串行监视器。
工作说明:
该工作Arduino的数据记录器是简单的。一旦硬件和软件准备就绪,就可以将程序刻录到Arduino开发板中了。程序一旦上传,您的温度和湿度值就会开始存储在SD卡中。您必须按照以下步骤操作,以使PLX-DAQ能够登录到计算机的Excel工作表中。
步骤1:打开在安装过程中在桌面上创建的“ Plx-Daq电子表格”文件。
第2步:如果存在安全块,请单击 选项->启用内容->完成->确定 以获取以下屏幕。
步骤3:现在将波特率选择为“ 9600”,并将Arduino连接到的端口,然后单击“连接”。您的值应该开始记录下来,如下图所示。
您可以将此excel工作表保持打开状态,并在记录值时监视它们。在这种情况下,我们的SD卡也将保存相同的值。要检查其是否正常运行,只需取出SD卡并在计算机上将其打开。您应该在其中找到一个名为 “ LoggerCD.txt” 的文本文件。打开时,它看起来像这样。
该文件具有数据,但是很难在记事本上对其进行分析。因此,我们可以将其作为CSV(逗号分隔值)文件在Excel上打开,从而使其更加有效。要在Excel中打开
1.打开Excel。单击文件->打开,然后选择右下角的“所有文件”,然后从SD卡中选择“ LoggerCD”文件。这将打开一个文本导入向导。
2.单击“下一步”,然后选择逗号作为分隔符。再次单击“下一步”。然后完成。
3,现在您的值将在Excel文件中打开,如下所示
我每5秒记录一次值;您可以通过更改程序中的延迟功能将它们记录为任何所需的时间。有关工作的详细信息,请观看下面的视频。
希望您喜欢这个项目,如果有任何疑问,请在下面的评论部分中写下它们,我会为您提供帮助。
奖金改善-使用Arduino进行无线数据记录:
一旦成功完成了这一步,只需稍作改进,只需添加几行代码,就可以无线记录数据。
只需连接HC-05等蓝牙设备,然后通过蓝牙(而不是串行)将数据写入PLX-DAQ。那就是替换 Serial.print(parameter); 带有 BluetoothName.print(parameter); 并将笔记本电脑连接至蓝牙模块,然后选择与笔记本电脑蓝牙连接的COM端口,然后选择Taadaaa……您可以立即使用无线数据记录系统。