找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6028|回复: 2
收起左侧

Micropython/STM32F405:1小时制作PM2.5检测仪视频演示

[复制链接]
ID:130183 发表于 2016-8-25 15:16 | 显示全部楼层 |阅读模式

    制作一个PM2.5检测仪的想法是好,在1个小时内能否制作出一个PM2.5检测仪呢?利用C/C++是贴近硬件的语言来做的话,要花好长一段时间甚至半年先学习C语言以后,再考虑动手制作,更不用说1个小时内制作出一个PM2.5检测仪。(视频+代码演示)

    接下来我介绍一个在1个小时内制作一个PM2.5的方法,首先介绍一下我从网上发现的一个好东西:TPYBoard开发板;它拥有自家的解析器、编译器、虚拟机和类库二次开发和环境,价格在python开发板里来说也是相当亲民,可以开发很多有意思的小玩意,相当的不错啦~

淘宝截图.png
    1. PM2.5检测仪的目的

    采用TPYBoard开发板为控制处理器,通过串口由PM2.5灰尘传感器GP2Y1010AU0F检测低程度的空气污染PM2.5能够甄别香烟和室内/室外灰尘,并通过SPI接口由LCD5110显示屏显示当前空气粉尘浓度(ug/m?)。当空气中粉尘浓度达到所设定限度点亮不同的LED灯来知道当前空气质量等级。

    本系统电路简单、工作稳定、集成度高,调试方便,测试精度高,具有一定的实用价值。该检测仪通过Python脚本语言实现硬件底层的访问和控制细颗粒物检测传感器,每间隔一定时间,传感器自动进行检测,检测到的空气粉尘浓度数据通过串口上传至主控板,主控板收集到数据后,同样使用Python脚本语言将PM2.5的检测结果显示到LCD5110上。

我们先一起看一下最终的成品演示效果视频



    参照1:TPYBoardLED亮灯状态与 PM2.5日均浓度对应的指数等级对应表:

PM2.5值数
日均浓度值(ug/m3 )
空气质量等级
LED灯状态
0~50
0-35

绿灯亮
50~100
35-75

绿灯亮
100~150
75-115
轻度污染
蓝灯亮
150~200
115-150
中度污染
黄灯亮
200~300
150-250
重度污染
红灯亮
>300
>250
严重污染
红灯亮



    参照2: TPYBoard的硬件特点:
    -----------------------------------------------------------------------------------
    √ STM32F405RG MCU.
    √ 168 MHz Cortex-M4 CPU with 32-bit hardware floating point.
    √ 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.数据线一条。

QQ图片20160823165715_副本.png

    3.硬件接线方法

    3.1 传感器的针脚

    传感器上一共六根线,从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引脚。

    1.png
    图1
    3.2 LCD5110的针脚

    先看一下LCD5110针脚含义吧(注意:LCD5110的针脚有些不一样的

    TPYBoard的针脚与5110的针脚对应关系如下:

    TPYBoard       LCD5110    memo
    ----------------------------
    # any   Pin     => RST       Reset pin (0=reset, 1=normal)
    # any   Pin     => CE        Chip Enable (0=listen for     input,   1=ignore input)
    # any   Pin     => DC        Data/Command (0=commands, 1=data)
    # MOSI        => DIN       data flow (Master out, Slave in)
    # SCK        => CLK       SPI clock
    # 3V3 or any Pin    => VCC       3.3V logic voltage (0=off, 1=on)
    # any Pin       => LIGHT     Light (0=on, 1=off)
    # GND        => GND

    还是看不明白的话,直接上针脚编号吧

    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

2.png
                           图2

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

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

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

    4.1 PM2.5粉尘传感器工作原理

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

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

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

   5.png

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

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

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


    6.png

    其中校验位长度=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。)

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

    5.1PM2.5粉尘传感器的采样频率

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

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

   5.2程序编码

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

    6.运行测试

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

7.代码部分

QQ图片20160825151547.png


回复

使用道具 举报

ID:71423 发表于 2016-8-29 09:50 | 显示全部楼层
精彩
回复

使用道具 举报

ID:156845 发表于 2016-12-22 14:04 | 显示全部楼层
感谢分享 谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表