如果您想制作空气质量监测器,或者想尝试空气质量传感器,或者只是对可用于与 Arduino 接口的各种传感器感到好奇,那么这个项目应该非常适合您。它主要涉及一个灰尘传感器作为输入到 Arduino 兼容板的输入。这种特殊的传感器在外壳内的多个组件上运行,例如:红外 LED、一组镜头、光电二极管检测器和电磁屏蔽。所有这些部分协同工作,通过测量灰尘浓度来读取空气质量。大气中的颗粒物水平(PM 水平)是通过计算给定时间单位中的低脉冲占用时间(LPO 时间)来测量的,其中 LPO 时间与 PM 浓度成正比。所以,该传感器可以为空气净化器系统提供可靠的数据,在该系统中,它可以响应直径小于 1μm 的 PM 水平。对于这个项目,您需要的部件包括:
请在此处访问此链接以获取 NextPCB 的特别优惠。
这个项目的电路非常简单,你甚至根本不需要面包板。输入灰尘传感器通过三根跳线直接连接到 Arduino 微控制器。作为开始前的预防措施,请通过 Arduino 移除任何电源。然后,通过 JST 连接器将灰尘传感器上的黄线(信号)连接到 Arduino 板上的 D8(数字引脚 8)。之后,将传感器 JST 连接器的红线 (VCC/+) 连接到 Arduino 电源引脚行上的 5v(+5 伏)。最后,将 Grove Dust Sensor 的黑线 (GND/-) 再次通过 JST 连接到 Arduino 的 GND (-) 引脚之一。这就是关于这个项目的硬件设置!
该代码由多个函数组成,这在 Arduino 中非常有用,尤其是在处理复杂的传感器和接口时。此代码首先声明此传感器的引脚,即 D8(数字引脚 8)为整数。对于接下来的两行,我们声明扩展大小变量仅用于数字存储。稍后可以使用它为该变量分配值或读数。我们可以将数据写入和存储在无符号长变量中,例如来自传感器的数据、数学计算、随时间变化的读数等。这两行中的变量是: 持续时间和 开始时间。继续前进,还有另外两个无符号长变量,当前分配了一个读数(sampletime_ms和 lowpulseoccupancy),它将在代码中进一步使用。这些变量的好处是它们可以携带更多数据,因为它们具有广泛的规模,被证明在收集数据方面很有用。以下 浮点 变量(比率 和浓度)用于十进制数,因此在声明了预设值的情况下,它可用于稍后在此草图中读取十进制数。现在,我们进入void 设置 部分,从设置串行通信开始,以 9600 波特的速率从传感器输出数据。接下来是下一行,我们将 D8(数字引脚 8)设置为输入引脚,以便将来自传感器的数据发送到 Arduino 微控制器。之后,我们命令变量 starttime, 以毫秒为单位读取当前时间,以便变量可以参与计时,更进一步。这就是设置部分,现在是时候进入void循环部分了。void 循环的第一行 是高级 I/O 函数之一,它读取脉冲,无论是 HIGH 还是 LOW(1 或 0)。在此代码中,pulseIn函数设置为 LOW,因此该函数将开始计时 LOW 脉冲,直到它变为 HIGH。在该函数之后,收集的时间将分配给持续时间的无符号长变量,以微秒为单位读取时间。现在,我们声明变量lowpulseoccupancy 读取它自己的读数,加上变量duration的读数。现在我们已经来到了代码的主要部分,我们在这里计算原始数据并将其转换为我们可以读取的单位。if 语句说,如果变量starttime减去当前的计数时间,大于或等于变量sampletime_ms的值(2000 毫秒),则它被编程为执行if 语句下面的其余代码。随后,我们利用我们过去声明的变量之一,通过使用变量ratio 将其分配给一个值,即lowpulseoccupancy, 我们遇到了,并且,通过一点数学,我们可以为该变量分配一个新的读数ratio。因此,variable ratio等于lowpulseoccupancy(添加到变量duration的读数中)除以变量sampletime_ms 乘以 10,得到整数百分比。随后,我们将计算出的值转换为单位pcs/0.01cf。我们将为此使用的变量将被命名为 浓度。开始,浓度由 1.1 乘以可变比率的值组成 到 3 的幂。然后,将该连续方程减去 3.8,乘以可变比率 的 2 次幂。再将其加上 520,再次乘以可变比率,最后,将连续读数相加到 0.62。草图中的pow()函数用于将整数、值或变量提升到其他事物的幂。当我们结束这段代码时,我们将读数打印到串行监视器中,在我们打印变量浓度之前,在串行监视器上使用短语“ Concentration = ” ,因为该变量将来自传感器的原始数据转换为合适的测量单位。此外,在串行监视器的同一行上,我们打印该值的单位 (pcs/0.01cf) 以完全结束读数。因此,串行监视器上的最终读数将显示为“浓度 = (读数) pcs/0.01cf”。最后,变量lowpulseoccupancy 重置为 0,以便根据void 循环获得新的读数,以及变量starttime(当前时间)。最后,这些行包含了我们的代码,它的长度很短,但是当它被剥离时很复杂。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !