使用霍尼韦尔粒子传感器测量2.5微米 PM 和10.0微米 PM 浓度在您的环境
该项目使用霍尼韦尔 HPM 系列粒子传感器测量和显示环境空气中2.5微米 PM 和10.0微米 PM 浓度的颗粒物质。
颗粒物质(PM)是指空气中的固体颗粒和液体微滴的组合。一些粒子大到可以用肉眼看到,而另一些则是微观的。极小的颗粒特别重要,因为这些颗粒很容易被吸入。当吸入浓度足够大且暴露时间足够长时,就会对健康产生不利影响。
粒子的大小可以用微米(缩写为 μm)或微米来表示; 这两个术语都是长度单位,定义为一米的百万分之一(10-6)。由于我们感兴趣的是评估空气中颗粒物的数量,因此用浓度来表示颗粒物的数量是有用的,即每立方米空气中微克的颗粒物(微克/立方米)。
各种粒度的比较
就空气质量而言,颗粒尺寸经常分为两类: 小于2.5微米的和小于10.0微米的。在这方面,美国环保局制定了暴露于这种“颗粒污染”的标准。标准表示为颗粒浓度和暴露时间的函数(例如,24小时和年)。
我们环境中的 PM 来自许多不同的来源,包括人为的和自然的过程。室外颗粒污染受到监测,是美国地区空气质量指数(AQI)的一部分。
在这个项目中,我们将使用霍尼韦尔 HPM 系列粒子传感器来测量和显示采样空气中的 PM 浓度。PM 监测有各种各样的工业和消费应用,包括一般的空气质量测量,以及具体相关的过程有关的供暖,通风,空气调节,空气过滤器和空气净化器。
HPMA115S0-XXX 粒子传感器
HPMA115S0-XXX 颗粒传感器: 左侧,包含进气口的单元前部; 右侧,显示排气风扇和接口连接器的单元后部
该传感器是一个集成单元,包括激光光源、探测室、光电二极管、排气扇和
通信接口。粒子计数采用光散射法。
传感器操作的功能图
内部激光光源通过空气进口和排气风扇照亮粒子的运输,并通过探测室。粒子使光线变得模糊,改变了内部光电二极管的电活动。这种活性被分析并转化为粒子浓度,可以通过串行界面传输。
传感器接口和命令
该 HPMA115S0-XXX 与主机通信使用一个 UART 在9600波特,8数据位,无奇偶校验和1停止位(9600,8,n,1)。该设备接受下面列出的七个命令,并在设备数据表 PDF 中详细说明。
Command Function
- Stop Particle Measurement: 关闭内部排气风扇。
- Start Particle Measurement: 打开内部排气风扇。
- Read Particle Measurement: 返回2.5 μm PM 和10.0 μm PM 浓度(μg/m3)。ions (µg/m3).
- Enable Auto Send: 启用自动发送: 自动发送一个包含2.5 μm PM 和10.0 μm PM 浓度(~ 1/秒)的32字节数据包。
- Set Customer Coefficient: 设置客户系数: 客户系数可用于修正校准曲线的斜率(100以上的数值增加斜率,100以下的数值减少斜率)。t
- Read Customer Coefficient: 返回当前客户系数值。
根据我的评估,下面的默认条件在启动时使用,而不管随后的任何更改; 内部风扇打开,自动发送启用,客户系数值为100。
电源启动后所做的更改是不稳定的,不会在内部保存(也就是说,在下次电源启动时将恢复默认值)。
如数据表所示,命令序列是使用模256的公式(65536-(datum1 + datum2 + datumN))形成的校验和发送的。除了校验和之外,命令还将返回一个正确或负面的确认序列(分别为 Pos ACK 或 Neg ACK)。
粒子传感器在 PC 机上的应用
项目 BOM: HPMA115S0-XXX 颗粒传感器,u*** 到串行板 ,连接器。
为了获得访问的 HPM 接口,我使用了8位置,1.25毫米节距,交配连接器和预轧花单端引线。其他的联系方式也是可能的,包括制作你自己的线索,我承认我选择了简单的方式。
我使用的 u*** 到序列板说明如下。
用于 PC 机的 u*** 到串行接口板
不过,需要注意的是,有许多这样的 u*** 到串行板可用,所以选择一块3.3 v 的板来匹配传感器的串行接口是非常必要的。当传感器的 UART 输入5v 信号超过数据表规定的限制时,建议用电压表实际检查线路。我选择的板有一个5v-3.3 v 的开关,当在3.3 v 的位置,实际上传输3.3 v 的 TXD 线信号,同时保持一个5v 线电源的传感器(这需要最多80ma)。并不是所有的 u*** 到串行板都具有这些特性。
或者,如果您只有5v 信号在 u*** 到串行板,您可以使用电压级转换器(例如这里)。在这方面,值得注意的是,在传感器的连接器上有一个可调节的3.3 v 输出线路。
下面的示意图说明了 u*** 到串行板和 HPM 粒子传感器之间的连接——再次注意,RX,TX,RXD 和 TXD 信号都在3.3 v。
HPM 传感器与 u*** 到串行板的连接
使用 HPM 终端程序
该项目程序 HPM Term 是使用 Microsoft Visual Studio Community 2017 Version 15.5.2用 Visual Basic 编写的。Visual Studio 的版本可以免费下载。这些程序文件(可用于自己构建程序的完整文件和部署包)可在本文末尾下载。
使用这个程序相对来说比较简单。将 HPM 连接到 USB 串行端口板后,只需将板插入 PC 上的 USB 端口即可(见下面的重要说明)。
运行程序并选择适当的 COM 端口,然后单击“连接”按钮。此时,您可以使用屏幕左侧的命令按钮来执行传感器允许的任何命令。终端将以十六进制的形式显示发送到传感器的字节序列和每个动作从传感器接收到的字节。
重要提示: 在连接时,从传感器发送的32字节数据包流大约每秒一次。之所以会发生这种情况,是因为如前所述,该单位启用了自动发送功能。然而,最不幸的是,我发现在我的个人电脑(Windows 7,64位)上,操作系统会判断(显然是误解了字节流)一个微软的串行圆珠笔鼠标已经连接并继续为该设备加载驱动程序,这造成了你能想象到的很多问题。
经过大量的研究和挫折之后,我发现这种行为已知会发生在几个设备上,最明显的是 GPS 设备(参见这些链接获得更多信息)。
我使用的简单的解决方案是将 RXD 线断开连接到 u*** 到串行板(即 HPM 中的 TX 线) ,直到在 HPM 术语中建立连接。此后,RXD 线可以重新连接,没有进一步的问题。我不知道这个问题是否出现在其他操作系统版本中,你可以在上述链接中阅读其他建议的解决方案。
下面显示的屏幕截图说明了该程序的使用。
HPM 术语的屏幕截图
在这个例子中,Serial Out 和 Serial In 窗口首先被清除,然后单击 Read PM 按钮。发送到传感器的命令字节(十六进制)为0x68、0x01、0x04和0x93。这些值构成了 Header (0x68)、命令长度(0x01)、命令(0x04)和校验和(0x93)。校验和的计算方法是从0x10000减去字节之和的结果中取最小的8位。也就是说,((0x10000-(0x68 + 0 x01 + 0 x04) AND 0xFF) = 0x93。有时,这被称为“256模校验和”,并且是基于被称为 Fletcher 校验和的算法。
Serial In 窗口包含由传感器(同样是十六进制)发送的响应为0x40,0x05,0x04,0x00,0x09,0x00,0x0A,0xA4。这些值构成头(0x40)、响应长度(0x05)和命令(0x04) ,并作为正确的 ACK (确认)。接下来的字节告诉你2.5 μm PM 的高字节、低字节顺序(0x00 * 256) + 0 x09) ,10.0 μm PM 的浓度,还是高字节、低字节顺序(0x00 * 256) + 0 x0A,最后是校验和值(0xA4)。
在负 ACK 的情况下,表明传感器无法响应 PM 值,响应序列将只有0x96,0x96。然而,根据我的经验,我没有发现这种情况发生过。
传感器的数据表给出了所有命令交互的详细示例。这些信息可以帮助探索惠普术语的传感器功能。
单机 PM 探测器的构建
项目 BOM: HPMA115S0-XXX 粒子传感器,Teensy-LC 控制器,OLED 128 x 32显示(见文本) ,4.7 k 电阻(2) ,连接器(见前文)。
虽然连接 HPM 传感器到 PC 是值得探索的设备,我也想做一个独立的 PM 探测器。下面的示意图显示了我使用的
电路。
单独的 PM 探测器原理图
对于控制器,我使用了一个小型 lc。该板,如下图所示,具有 ARM Cortex-M0 + 处理器在48兆赫,62K 闪存,8K 内存,12位模拟输入和输出,硬件串行,SPI & I2C,USB,和总共27 i/o 引脚(
微型 lc 微控制器
该板可以使用 AVR c 编译器来编程,但是它也可以与著名的 Arduino IDE 一起使用。此外,许多 Arduino 库也将与 Teensy-LC 一起工作。
HPM 传感器需要5v 电源供电。在一块未经修改的 Teensy-LC 板上,只要你使用标准的5v USB 电源,比如 USB 墙疣,或者在 USB 连接器上安装5v 的便携式电池,就像下图所示:
值得注意的是,如果你在电路板上切割一个跟踪来为电路板提供一个不同的输入电压源(即,将 Vin 和 VUSB 分开) ,那么你将不能以相同的方式使用引脚。
我使用板上的硬件串口(rx1和 TX1)与 HPM 传感器的串口(RX 和 TX)进行通信。由于 Teensy-LC 和 HPM 传感器串行端口都是3.3 v,它们彼此兼容。
有了从传感器读取 PM 值的能力,我需要添加查看这些值的能力。该检测器的设计目的是简单地提供电力,并不断提供检测到的 PM 浓度。因此,一个简单的展示似乎是合适的。
我决定采用小型 OLED 显示器,如下图所示。
128 x 32 OLED 显示屏
这些微型(大约0.91英寸,128 x 32) oled 使用 ssd1306控制器,包含 I2C 接口,可以从许多不同的来源。
OLED 由 Teensy-LC 上的3.3 v 输出引脚提供动力,我使用 I2C 接口(scl0和 SDA0)支持和熟悉的 Arduino Wire 库。此外,每个 I2C 线上使用了4.7 k 的引出电阻。4.7 k 值推荐用于 Teensy-LC,并且没有任何问题。
我还使用了 u8g2单色图形库控制器,它支持 ssd1306控制器,并且很容易写入显示器。
完整的单独的实验板上的 PM 检测器
单机 PM 探测器的源代码
独立 PM 检测器霍尼韦尔 _ hpm 的整个程序。下载项目中包含了一个叫做 ino 的程序。这段代码很简单,并且有注释,但是有一些注释是必要的。
基本上,程序只是简单地运行一个循环,每六秒读取和显示 PM 浓度。可以修改变量 delaymsecs 来调整读取和显示速率。
在设置部分,我们多次尝试禁用自动发送功能的传感器,因为它是开启电源。在此期间,您将在显示器上看到“9999”,如果显示器上仍然存在“ e”,则意味着无法关闭“自动发送”,这可能表明存在连接/通信问题。
读取传感器的例程也会在显示值旁边显示一个 e 之前多次尝试成功读取,以通知用户一个通信问题。然而,一旦读取成功,“ e”将被删除。
这两个例程都使用 maxatures 变量来确定在显示错误通知之前尝试通信的次数。默认情况下,变量设置为2。这样做是为了提醒用户注意潜在的通信问题。除了故意强迫错误,我从来没有在正常的测试中观察到这样的通信错误。
当 PM 浓度超过各个变量(wpm25或 WPM100)的值时,在各个浓度旁边显示一个星号。Pm2.5 μm 和 pm10.0 μm 的缺省值分别为35(μg/m3)和150(μg/m3)。
然而,阈值可以由用户设定或在输入9999后禁用,因为传感器的上限范围不超过1000微克/立方米。
最后,一个测试探测器的简单方法是吹灭靠近进气口点燃的火柴。PM 值应该大幅度增加。
最后的想法
在本计画中,我们将 HPMA115S0-XXX 粒子传感器与一台使用串行介面的个人电脑连接,并且我们也构建了一个独立的探测器来监测2.5微米 PM 和10.0微米 PM 的浓度。总的来说,我对传感器的复杂性和相对容易的使用印象深刻。
在我看来,这个传感器有一些有趣的应用评估室内空气质量在家庭和工作场所,也可以用于评估空气过滤系统的效率。