构建一个Arduino温度数据记录系统,可读取LM35传感器的温度并将其存储到CSV文本文件中
在本项目中,您将学习如何使用Arduino Uno和Python构建一个低成本的多通道数据采集(DAQ)系统。该系统可实时采集多个通道的传感器数据,并自动将测量结果保存到CSV(逗号分隔值)文件中,便于在电子表格软件或其他数据处理工具中进行分析。
引言
DAQ系统设计用于同时监测四个独立传感器的温度,并可根据需要扩展以支持更多通道,因此非常适合用于实验、环境监测和教育项目。
硬件
•Arduino Uno
•基于LM324运算放大器的模拟前端
•以及四个LM35温度传感器
传感器的模拟信号在经过LM324电路进行调理后,由Arduino内置的10位ADC(ATmega328P)采样。
将传感器读数数字化后,Arduino通过USB虚拟串口将数据传输到Windows电脑或Mac。一个Python应用程序接收这些数据,实时显示,并将每次测量结果记录到CSV文件中,以便永久保存和后续分析。
什么是CSV文件以及它们的工作原理
CSV(逗号分隔值)文件是存储表格数据最简单且最广泛使用的格式之一。在CSV文件中,每一行代表一条记录,而逗号则用于分隔该行中的各个值或字段。由于其采用纯文本格式,因此可以使用文本编辑器、Microsoft Excel或Google Sheets等电子表格软件,以及Python等编程语言来创建、查看和编辑CSV文件。
Python Arduino 数据记录仪的硬件设计
LM35温度传感器产生的低电平模拟信号首先通过一个LM324四路运算放大器进行放大,然后输入到Arduino Uno的模拟输入端口。
每个放大级的电压增益设置为3.44,以提高传感器输出电压,从而提升Arduino 10位ADC的测量分辨率。
信号调理电路以一个LM324四路运算放大器为核心,每个LM35温度传感器分别由一个放大器负责。关于放大器设计的详细说明,包括电路图和增益计算,可参见LM35放大器设计文章。
放大后的输出连接到Arduino Uno的方式如下:
•放大器通道1(AN1)→ Arduino A0
•放大器通道2(AN2)→ Arduino A1
•放大器通道3(AN3)→ Arduino A2
•放大器通道4(AN4)→ Arduino A3
Arduino Uno 通过其 USB 接口连接到计算机,该接口同时也充当虚拟串行(COM)端口。这种串行连接使 Arduino 能够实时将温度测量数据传输给运行在电脑上的 Python 应用程序。
在采样四个模拟输入通道并将传感器电压转换为数字值后,Arduino 会通过串行端口以简单、逗号分隔的格式发送温度读数。每个串行消息包含四个 LM35 温度传感器的读数,顺序如下:
温度1、温度2、温度3、温度4
例如,一个典型的串行数据包可能如下所示:
25.3,24.9,26.1,25.7
Python 应用程序会持续读取每个传入的数据包,提取其中的四个温度值,在屏幕上显示,并将这些数据存储到 CSV 文件中,以便后续分析和可视化。
Python数据记录系统软件架构
Python数据记录器代码首先创建一个唯一的CSV文件,用于存储温度测量数据。
文件名会根据当前日期和时间自动生成,确保每次日志会话都保存到不同的文件中。
创建文件后,程序会写入一行标题,包含每列数据的名称。
接下来,Python 应用程序使用 PySerial 库与 Arduino 建立串行连接。由于 Arduino 在打开串行端口时会自动复位,因此程序会在开始数据采集前短暂等待板子重启。
一旦建立通信,数据记录器便进入连续采集循环。在每次迭代中,Python程序会向Arduino发送字符“$”,以请求获取一组新的温度读数。作为回应,Arduino测量四个LM35传感器,并将数据以单行文本格式返回,格式如下:
温度1、温度2、温度3、温度4
Python 程序接收这些数据,记录计算机当前的日期和时间,并将时间戳与四个温度值结合,生成一条完整的日志条目。
随后,该条目会被追加到CSV文件中,整个过程持续循环进行,从而实现温度数据的实时记录。
该程序还会安装一个CTRL+C(SIGINT)信号处理程序,使用户能够随时安全地停止数据记录。当用户按下CTRL+C时,采集循环将优雅退出,CSV文件会被正确关闭,并在程序终止前释放串行端口。
运行 Python 数据记录器代码
在运行 Python 数据记录器之前,请确保您的 Windows 电脑上已安装 PySerial 库。
如果您是PySerial的新手,请参考我们的PySerial教程,其中介绍了如何安装该库以及使用Python与串行设备进行通信的方法。
接下来,确定分配给您的Arduino Uno的COM端口编号。
您可以通过在 Windows 中打开设备管理器,然后展开“端口(COM 和 LPT)”部分来找到它。
请注意与Arduino关联的COM端口,因为您需要在Python程序中指定它。
更新COM端口编号(如有需要)后,打开命令提示符,进入包含Python脚本的文件夹,并使用以下命令运行程序:
如果您的系统使用 Python 启动器,您也可以通过以下方式启动程序:
程序启动后,将连接到Arduino,创建一个带有时间戳文件名的新CSV文件,并开始实时记录温度数据。
数据记录结束后,您可以打开生成的CSV文件,使用Microsoft Excel、LibreOffice Calc或其他支持CSV文件的电子表格应用程序。然后,您就可以对记录的温度数据进行整理、筛选和分析。
在 Excel 中从 CSV 数据创建图表
您可以在 MS Excel 中使用快速分析工具,以直观的方式生成图表或图形来展示您的数据。
本文编译自hackster.io





