如何用TPYBoard开发板制作PM2.5检测仪

技术如何用TPYBoard开发板制作PM2.5检测仪今天就跟大家聊聊有关如何用TPYBoard开发板制作PM2.5检测仪,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收

今天跟大家聊聊如何用TPYBoard开发板制作PM2.5探测器。很多人可能不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

以下是如何使用更少的成本和更短的时间。自己做一个更精确的pm2.5检测仪。

那么PM2.5(细颗粒物)是什么?(废话段)

因为国家标准不同,天气预报也报道空气质量。预测空气质量和实际空气质量一样吗?但是对于这个问题,我想做一个PM2.5探测器。有了自己做的PM2.5检测仪,当空气质量差或污染严重时,提醒家人、同学和身边的人尽量减少户外活动,真正减少细颗粒物的吸入。

制作PM2.5探测器的想法很好。你能在一小时内做一个PM2.5检测仪吗?如果C/C是一门接近硬件的语言,那么先学习C语言需要很长时间甚至半年,然后再考虑手工制作,更不要说一小时内制作一台PM2.5检测仪。

接下来我介绍一个一小时制作PM2.5的方法。

1. PM2.5检测仪原理

控制处理器采用TPYBoard开发板,PM2.5粉尘传感器GP2Y1010AU0F通过串口检测低级别空气污染。PM2.5可以区分香烟和室内外灰尘,当前空气粉尘浓度(ug/m)通过SPI接口显示在LCD5110显示屏上。当空气中的粉尘浓度达到设定限值时,点亮不同的LED灯,了解当前的空气质量水平。

探测器使用Python脚本语言访问和控制硬件底部的细颗粒检测传感器。传感器定期自动检测,检测到的空气粉尘浓度数据通过串口上传至主控板。主控板采集数据后,还使用Python脚本语言在LCD5110上显示PM2.5的检测结果。

参照1: TPYBOARD LED照明状态与PM2.5日平均浓度指数等级对应表:

PM2.5值数

日均浓度值(ug/m

空气质量等级

LED灯状态

050

0-35

绿灯亮

50~100

35-75

绿灯亮

100150

75-115

轻度污染

蓝灯亮

150200

115-150

中度污染

黄灯亮

200300

150-250

重度污染

红灯亮

300

250

严重污染

红灯亮+黄灯亮

参照2: TPYBoard的硬件特点:

————————————————————————————

ü  STM32F405RG MCU.

ü  168 MHz Cortex-M4 CPU with 32-bit hardware floatingpoint.

ü  1 MiB flash storage, 192 KiB RAM.

ü  USB口, 支持 串口,通用存储,HID协议。

ü  SD卡插槽。

ü  MMA76603轴加速度计.

ü  4 LEDs, 1复位按钮, 1通用按钮.

ü  3.3V0.3A板载 LDO , 可从USB口或者外置电池供电。

ü  实时时钟。

ü  30个通用IO口,其中28个支持5V输入输出。

ü  2个 SPI接口, 2个 CAN接口, 2个I2C接口, 5个USART接口.

ü  14个 12-bit ADC引脚。

ü  2个DAC 引脚。

————————————————————————————

2. 材料准备

制作PM2.5检测仪所需材料如下:

1.PM2.5粉尘传感器1个,检测PM2.5(细颗粒物)传感器,TXD串口输出。

2.TPYBoard开发板1块,主要用来当主控开发板,读入传感器数据。

3.Lcd5110显示屏1个,主要用来显示检测的信息。

4.杜邦线若干。

5.数据线一条。

3.硬件接线方法传感器的针脚

传感器上一共六根线,从1到6依次是GND,VCC,NC,NC,RX,TX。其中我们只用三根线,电源(GND,VCC)和串口(TX),传感器与TPYBorad接线参照图1,具体用哪个串口请参照官方网站上文档TPYBoard 关于串口的使用,小编用的串口为  UART(2) is on: (TX, RX) = (X3, X4)  = (PA2, PA3),因为只需要将数据传到PTYBoard,所以只用到RED即PTYBoard的X4引脚。

如何用TPYBoard开发板制作PM2.5检测仪

图1

LCD5110的针脚

TPYBoard       LCD5110    memo

————————————————————————————

Y10          =>RST       Reset pin (0=reset, 1=normal)

Y11          =>CE        Chip Enable (0=listen for input,1=ignore input)

Y9          =>DC        Data/Command (0=commands, 1=data)

X8          =>DIN       data flow (Master out, Slave in)

X6          =>CLK       SPI clock

VCC

Y12         => LIGHT     Light(0=on, 1=off)

GND

如何用TPYBoard开发板制作PM2.5检测仪

                   图2

PM2.5检测仪整体接线方法

按照图1、图2所示将PM2.5粉尘传感器以及5110显示屏与PTYBoard连接起来,硬件连接完毕,如图3:

           如何用TPYBoard开发板制作PM2.5检测仪

                         图3

PM2.5粉尘传感器工作原理及数据处理PM2.5粉尘传感器工作原理

PM2.5粉尘传感器的工作原理是根据光的散射原理来开发的,微粒和分子在光的照射下会产生光的散射现象,与此同时,还吸收部分照射光的能量。

当一束平行单色光入射到被测颗粒场时,会受到颗粒周围散射和吸收的影响,光强将被衰减。如此一来便可求得入射光通过待测浓度场的相对衰减率。而相对衰减率的大小基本上能线性反应待测场灰尘的相对浓度。光强的大小和经光电转换的电信号强弱成正比,通过测得电信号就可以求得相对衰减率,进而就可以测定待测场里灰尘的浓度。在传感器的中间有一个洞,这个洞可以让空气在里面流通。在洞的两个边缘 ,一面安装有一个激光发射器,另一面安装有激光接收器。这样一来,空气流过这个小洞,空气里的颗粒物呢就会挡住激光,从而产生散射,另一面的接收器,是依据接收到的激光强度来发出不同的信号的(其实就是输出不同的电压值)。这样一来,空气里的颗粒物越多,输出的电压越高,颗粒物越少,输出的电压越低。

内部结构如图内部结构仿真图所示:

如何用TPYBoard开发板制作PM2.5检测仪

内部结构仿真图

PM2.5粉尘传感器传感器数据处理

上面说了传感器的原理,接下来就说说它传出来的信号和对于接收到的信号的计算吧。

这个传感器的输出数据是靠串口进行传输的,传感器会通过串口每10ms不到(一般3~4ms)发送一个数据,数据的类型大致是个“0X00”这样的16进制的数据。每次的数据会以“0XAA”作为起始端,以“0XFF”作为结束端。共7个数据位,7个数据位中包含了起始位,结束位,数据高位,数据低位,数据高校验位,数据低校验位和校验位(校验位是怎样计算出来的,下面会讲到)。数据格式大致如下:

如何用TPYBoard开发板制作PM2.5检测仪

其中校验位长度=Vout(H)+Vout(L)+Vref(H)+Vref(L)的长度。

数据的组成一共是有7个数据位,但是只有Vout(H)和Vout(L)这两个数据才是我们真正所需要的。我们需要依照这两个数据算出来串口输出的数字数据,从而通过数模转换公式来计算出输出的电压。进一步的通过比例系数计算出空气中颗粒物的数量。下面来说一下怎么计算。

传感器输出的数据分为高位和低位,其中呢Vout(H)为高位,Vout(L)为低位。因为串口传进来的Vout(H)和Vout(L)是16进制的,第一步先转化成10进制的(这个大家都会,不多说了)。然后根据这两个输出值的10进制数计算出串口输出数值的电压。

公式如下(其中Vout(H)和Vout(L)是已转化为10进制的):

       Vout=(Vout(H)*256+Vout(L))/1024*5

这样就算出来了他输出出来的电压了,再根据比例系数A,就可以计算出空气中的颗粒物的值了。(A的值一般是在800到1000,具体的数值还要根据你买到的传感器的精度,准确度和误差值进行确定。我现在用的是800。)

PM2.5粉尘传感器的采样频率及程序编码PM2.5粉尘传感器的采样频率

PM2.5粉尘传感器的采样频率是非常高的,一般3~4ms发送一个16进制的采样数据,也就是说传感器通电(接通VCC和GND)后,每隔3~4ms发送一个16进制的采样数据,这么高的采样频率作为一个检测仪来说显然是没有必要的。

TPYBoard通过串口接收粉尘传感器数据,使用串口当然先定义串口,通过打开就可以接收串口数据,关闭串口就停止接收数据的特点,来自由控制PM2.5粉尘传感器的采样频率。

程序编码

我们main.py中,采用首先定义串口,其次是打开串口接收采样数据,最后关闭串口,并且处理采样数据及显示,依次循环。

运行测试

接线ok后,导入font.py文件和upcd8544.py文件(主要用于5110显示数据),再运行main.py即可看到当前的空气质量等级以及PM2.5的浓度值了。

下面链接是我用烟熏的演示视频,供大家参考一下。

http://v.youku.com/v_show/id_XMTY5NjM5NDYwMA==.html

源代码

把我写的程序的源码分享给大家,有需要的可以参考一下。

#main.py

import pyb

import upcd8544

from machine import SPI,Pin

from pyb import UART

from ubinascii import hexlify

from ubinascii import *

#M0 = Pin('X1', Pin.OUT_PP)

i=0

K=1

T=0

E=0

F=0

W=0

P=0

L=0

SHUCHU=0

 

A=800#A比例系数,在北方一般使用800-1000.南方空气好一些,一般使用600-800.这个还和你使用的传感器灵敏度有关的,需要自己测试再定下来。

G=1024/5#G为固定系数,是为了把串口收到的数据转换成PM标准值。

SHI=0#后面会赋值转换成十进制的数值。

#*******************************主程序**********************************

#pyb.delay(5000)

SPI = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK

#DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in)

#CLK =>SPI(1).SCK  'X6' SPI clock

RST    = pyb.Pin('Y10')

CE     = pyb.Pin('Y11')

DC     = pyb.Pin('Y9')

LIGHT  = pyb.Pin('Y12')

while True:

    u2 = UART(2, 2400)

    pyb.delay(1000)

    #print('kaishi ')

    u2.deinit()

    pyb.delay(10)

    if(u2.any()>0):

        W=1

        _dataRead=u2.readall()

        #print('_dataRead=',_dataRead)

        R=0

        while (W>0):

            #print('截取开始')

            T=_dataRead[R]

            if(T==170):

                E=R+1

                F=R+2

                #R=_dataRead[65]

                #print('十位=',_dataRead[E])

                #print('个位=',_dataRead[F])

                W=0

            R=R+1

        P=_dataRead[E]

        L=_dataRead[F]

        SHI=P*256+L#把串口收到的十六进制数据转换成十进制。

        SHUCHU=SHI/G*A

    if(SHUCHU<35):

        Quality = 'Excellente'

        print('环境质量:优','PM2.5=',SHUCHU)

        pyb.LED(1).off()

        pyb.LED(2).on()

        pyb.LED(3).off()

        pyb.LED(4).off()

    elif(35<SHUCHU<75):

        Quality = 'Good'

        print('环境质量:良好','PM2.5=',SHUCHU)

        pyb.LED(1).off()

        pyb.LED(2).on()

        pyb.LED(3).off()

        pyb.LED(4).off()

    elif(75<SHUCHU<115):

        Quality = 'Slightly-polluted'

        print('环境质量:轻度污染 ','PM2.5=',SHUCHU)

        pyb.LED(1).off()

        pyb.LED(2).off()

        pyb.LED(3).on()

        pyb.LED(4).off()

    elif(115<SHUCHU<150):

        Quality = 'Medium pollution'

        print('环境质量:中度污染 ','PM2.5=',SHUCHU)

        pyb.LED(1).off()

        pyb.LED(2).off()

        pyb.LED(3).on()

        pyb.LED(4).off()

    elif(150<SHUCHU<250):

        Quality = 'Heavy pollution'

        print('环境质量:重度污染 ','PM2.5=',SHUCHU)

        pyb.LED(1).on()

        pyb.LED(2).off()

        pyb.LED(3).off()

        pyb.LED(4).off()

    elif(250<SHUCHU):

        Quality = 'Serious pollution'

        print('环境质量:严重污染 ','PM2.5=',SHUCHU)

        pyb.LED(1).on()

        pyb.LED(2).off()

        pyb.LED(3).on()

        pyb.LED(4).off()

    lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT)

    lcd_5110.lcd_write_string('AQI Level',0,0)

    lcd_5110.lcd_write_string(str(Quality),0,1)

    lcd_5110.lcd_write_string('PM2.5:',0,2)

    lcd_5110.lcd_write_string(str(SHUCHU),0,3)

看完上述内容,你们对如何用TPYBoard开发板制作PM2.5检测仪有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154911.html

(0)

相关推荐

  • 舍瑟而作,子路曾皙冉有公西华侍坐实词

    技术舍瑟而作,子路曾皙冉有公西华侍坐实词《子路曾皙冉有公西华侍坐》里面的重点实词如下舍瑟而作:
    1、居则曰:居,闲居,平时在家  
    2、摄乎大国之间:摄,夹、迫近   
    3、加之以师旅:加,加到……上   
    4、比及三年

    生活 2021年10月30日
  • 复审与事件分析

    技术复审与事件分析 复审与事件分析小组的名字和链接
    优点
    缺点,bug报告
    最终名次平平无奇
    1.界面简洁,操作简单2.能够实现的基本功能比较齐全3.没有广告,非常地好
    1.系统反馈页面空白,反馈方式暂

    礼包 2021年12月13日
  • javascript如何将对象转化为数组

    技术javascript如何将对象转化为数组这篇文章将为大家详细讲解有关javascript如何将对象转化为数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    攻略 2021年11月19日
  • docker安装mysql,并navicat远程连接mysql

    技术docker安装mysql,并navicat远程连接mysql docker安装mysql,并navicat远程连接mysql我目前暂用的是mysql5.7版本
    1.拉取mysql镜像docker

    礼包 2021年11月1日
  • Java学习笔记32——二维数组

    技术Java学习笔记32——二维数组 Java学习笔记32——二维数组二维数组
    概述二维数组:就是元素是一维数组的数组举例:二班{{小王,小李},{小刘,小明},{小朱,小伟}}二维数组的定义格式
    格式

    礼包 2021年12月1日
  • 编辑html文件一般用哪些软件

    技术编辑html文件一般用哪些软件这篇文章主要为大家展示了“编辑html文件一般用哪些软件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“编辑html文件一般用哪些软件”这篇文

    攻略 2021年11月18日