基于CC2530的PM2.5传感器模块实验

实验内容

  • 了解PM2.5模块工作原理;
  • 使用PM2.5模块检测当前环境PM2.5值;
  • 编写程序检测环境的PM2.5值并将数据传输到LCD显示屏模块上显示。

实验目的

  • 认识PM2.5模块模块;
  • 了解PM2.5模块工作原理;
  • 掌握PM2.5模块配合其他模块使用技巧。

实验环境

实验所需硬件

序号 名称 数量 备注
1 电脑 1台 系统Windows7及以上
2 CC2530底座模块 1个 ·
3 PM2.5模块 1个 ·
4 OLED屏模块 1个 ·
5 CC Debugger 仿真器和连接线 1套 ·
6 USB线 1根 ·
7 PM2.5实验代码 1份 ·

实验所需软件

CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。

实验硬件

CC Debugger 仿真器和连接线

实验硬件

PM2.5模块

PM2.5模块

OLED模块

OLED模块

USB线

USB线

实验要求

  • 理解PM2.5工作原理;
  • 能够编写程序使用PM2.5模块检测环境PM2.5值。

实验原理

什么是PM2.5

细颗粒物又称细粒、细颗粒、PM2.5。细颗粒物指环境空气中空气动力学当量直径小于等于 2.5 微米的颗粒物。它能较长时间悬浮于空气中,其在空气中含量浓度越高,就代表空气污染越严重。虽然PM2.5只是地球大气成分中含量很少的组分,但它对空气质量和能见度等有重要的影响。与较粗的大气颗粒物相比,PM2.5粒径小,面积大,活性强,易附带有毒、有害物质(例如,重金属、微生物等),且在大气中的停留时间长、输送距离远,因而对人体健康和大气环境质量的影响更大。

PM2.5模块

pm2.5模块检测大气中粒径小于2.5μm细颗粒物质量的检测仪。虽然细颗粒物只是地球大气成分中含量很少的组分,但它对空气质量和能见度等有重要的影响。细颗粒物粒径小,有些细颗粒物富含大量的有毒、有害物质且在大气中的停留时间长、输送距离远,因而对人体健康和大气环境质量的影响更大。

pm2.5检测模块检测大气中粒径小于2.5μm细颗粒物质量的检测仪。其基本原理是激光经尘埃粒子散射后,对光学传感器输出的脉冲信号进行数字信号处理,测量参数设定。

由专用的激光模块产生一束特定的激光,当颗粒物经过时,其信号会被超高灵敏的数字电路模块检测到,通过对信号数据进行智能识别分析得到颗粒计数和颗粒大小,根据专业的标定技术得到粒径分布与质量浓度转换公式,最终得到跟官方单位统一的质量浓度。

PM2.5模块工作原理

实验步骤

① 将PM2.5模块、OLED屏模块安装在CC2530底座上,用CC Debugger连接底座与电脑,如下图所示:

模块组装

② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:

模块组装

③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:

操作步骤

④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):

$ cd workspace

⑤ 运行clone命令:

$ git clone https://github.com/aiotcom/eps.git 

下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code -> DownLoad ZIP 下载所有工程代码。如下图所示:
下载代码
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。

⑥ 打开 IAR Embedded Workbench 工程软件,点击工具栏: File -> Open -> Workspace,选择工程文件:基于CC2530的模块实验\7.PM2.5模块\PM2p5.eww 并打开。

打开工程

选择文件

⑦ 点击Make按钮,重新编译文件,显示没有错误。

文件编译

⑧ 点击Download and Debug按钮,将程序下载到模块中。

下载程序

代码下载成功

⑨ 点击X退出仿真模式。

退出仿真

⑩ 移除CC Debugger仿真器,采用USB线供电。

⑪ 观察显示屏显示的数据:

实验结果

代码讲解

① 程序目录结构,源代码文件如下图:
代码目录结构

② main.c代码,对OLED屏、串口(用于调试)、PM2.5模块驱动初始化完成后,对PM2.5的反馈信号进行多次ADC采集,采集完成进行排序,去除最大值与最小值。求取平均值并转化成PM2.5数值。

    uint16_t ADC_Sum,ADC_Value,i;
	uint16_t PM2p5_ugm3 = 0;
	uint8_t  tmpbuf[16];
	uint16_t PM2p5_Data,ADC_Data;
	Hal_Init_32M();//初始化系统时钟32M
	USRT0_Init();//初始化串口1,波物就给9600bps
	printf("this is uart0 print\r\n");
	OLED_Init();//OLED 屏初始化
	PM2p5_Init();//PM2.5模块初始化,初始ADC采集及传感器使能控制IO
	while(1){
		/*进行采集*/
		for(PM2P5_ADC_Count = 0;PM2P5_ADC_Count<SAMPLE_SIZE;PM2P5_ADC_Count++){
			PM2P5_LED_ENABLE();
			Delay_280us();//延时280us
			PM2P5_ADC[PM2P5_ADC_Count++] = PM2p5_ADC();//ADC值保存到数据中
			PM2P5_LED_DISABLE();
			Dealy_10ms();//延时10ms
		}
		bubbleSort(&PM2P5_ADC[0], PM2P5_ADC_Count);//排序
		ADC_Sum = 0;        
		for(i=1;i<(SAMPLE_SIZE-1);i++){//去除采样数据中的最高值及高低值
			ADC_Sum += PM2P5_ADC[i];
		}
		ADC_Value  = ADC_Sum / (SAMPLE_SIZE-2);//减去最大和最小的两个	
		voltage    = (ADC_Value/2048.0)*3.3;//将ADC值转化成PM2.5值(ug/m3)
		PM2p5_ugm3 = voltage*0.13*1000;
		printf("PM2p5_ugm3=%d ug/m3\r\n",PM2p5_ugm3);//调试打印
		sprintf(OLED_DispBuf,"PM2.5=%d ug/m3 ",PM2p5_ugm3);//转成字符串
		OLED_P8x16Str(0,4,OLED_DispBuf);//OLED屏显示
		delay_ms(500);
	}

通过调用PM2p5_ADC()函数,返回PM2.5传感器返回的数据,由于有误差故需要需要进行多次采集滤波。

    /*进行采集*/
	for(PM2P5_ADC_Count = 0;PM2P5_ADC_Count<SAMPLE_SIZE;PM2P5_ADC_Count++){
		PM2P5_LED_ENABLE();
		Delay_280us();//延时280us
		PM2P5_ADC[PM2P5_ADC_Count++] = PM2p5_ADC();//ADC值保存到数据中
		PM2P5_LED_DISABLE();
		Dealy_10ms();//延时10ms
    }

常见问题

  1. 弹出警告窗口,不能下载程序。

    • 请确认CCDebugger驱动否安装。
    • 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
    • CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
  2. 下载代码后程序没观察到实验现象。

    • 请重新上电,或者按下底座上的复位按键。
    • 模块没有安装稳妥。

实验思考

  1. 实现功能,将ug/m3的数值转成ppm为单位的的数值。