当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在本项目中,您将学习如何使用Arduino Uno和Python构建一个低成本的多通道数据采集(DAQ)系统。该系统可实时采集多个通道的传感器数据,并自动将测量结果保存到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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

厌倦了普通的不透明LED矩阵吗?在这个项目中,我将向你展示如何使用150颗WS2812B可寻址RGB LED,通过一块柔性透明PCB设计并制作出一个完全透明的15x10 LED矩阵。该PCB没有接地平面,因此在可见铜线的...

关键字: Arduino LED矩阵 柔性PCB WS2812B

如果我们用Arduino核心在ESP8266上写任何代码,很可能已经遇到了这个瓶颈。你写的每一行代码都运行在loop()函数内部,而loop()是协作式的——它从上到下依次执行,只有在完成所有操作后,SDK才会有机会进行...

关键字: Arduino CPU LED ESP8266

你真的每天喝1.5升水吗?这款智能饮水机通过RFID徽章识别你的身份,精准分发毫升级的饮用水,并通过LoRaWAN长距离网络自动将你的饮水数据发送至网络应用!

关键字: RFID LoRaWAN 继电器 Arduino

Arduino GPS地理围栏报警系统是一种智能追踪与安全解决方案,旨在监控贵重资产、车辆或人员在预设地理范围内的移动情况。该系统适用于车辆追踪和儿童安全防护。系统结合GPS定位追踪与基于GSM的短信通知功能,当被监控设...

关键字: Arduino GPS 物联网

作为一名学生,我常常难以合理分配时间来专注于某些作业。虽然我曾使用过在线计时器,但随着时间推移,几乎所有的计时器都变得令人分心,因为我不喜欢它们要显示在与我工作相同的屏幕上。

关键字: OLED显示屏 计时器 Arduino

我们生活在一个信息过载的世界。我想将计算机视觉与日常生活结合起来,解决一个简单的问题:为了查看早间新闻,不得不在手机上不停地滚动浏览。

关键字: 计算机视觉 Arduino LCD屏

市面上的每款智能音箱看起来都像是出自同一场设计会议:圆柱形机身、网状格栅、发光环。我想打造一个东西,你一眼望去以为是装饰品,直到你注意到那支手工绘制的黄铜号角里传来微弱的音乐嗡鸣声。

关键字: 智能音箱 扬声器 Arduino

在传统模式下,人类使用手工库存管理系统,这种方式耗时且容易出错。随着技术的发展,我们开发了一款条码扫描器,能够快速扫描产品并管理库存系统。本项目展示了如何构建一款基于树莓派的条码扫描终端,通过即时扫描和记录产品信息,实现...

关键字: 树莓派 条码扫描器 Arduino

无论您是在打印购物小票、餐厅账单、停车券、运单还是排队凭证,很可能您都曾使用过热敏打印机。与传统的喷墨或激光打印机不同,热敏打印机通过选择性加热特殊的热敏纸张来生成文字,因此无需使用墨盒或碳粉。

关键字: 热敏打印机 Arduino QR204

在这个项目中,你将学习如何使用Arduino构建一个智能报警系统。当有人靠近传感器时,系统会触发警报,并向用户发送电子邮件通知。

关键字: 传感器 Wi-Fi Arduino
关闭