基于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份 | · |
实验所需软件
- IAR 驱动安装步骤
- CC Debugger 驱动安装步骤
- Git 软件下载(可选)
CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。
CC Debugger 仿真器和连接线
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模块、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
}
常见问题
-
弹出警告窗口,不能下载程序。
- 请确认CCDebugger驱动否安装。
- 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
- CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
-
下载代码后程序没观察到实验现象。
- 请重新上电,或者按下底座上的复位按键。
- 模块没有安装稳妥。
实验思考
- 实现功能,将ug/m3的数值转成ppm为单位的的数值。