_SKU_SEN0233_Arduino空气质量监测仪_ _PM2.5,_甲醛,_温湿度 - jimaobian/DFRobotWikiCn GitHub Wiki
随着科技的进步,人们对生活品质的追求越来越高。健康生活作为最基础的部分,越来越受到人们关注。雾霾,PM2.5,甲醛这是近几年来最热的几个关于空气质量的话题。能够实时地检测身边的空气质量成为了现代人们一种非常迫切的需求。 DFRobot新出空气质量监测仪,兼容Arduino,STM32等设备,可测量PM10和PM2.5数值,同时内置甲醛以及温湿度传感器,可实时监测室内空气质量。其中颗粒(PM 10 & PM 2.5)浓度使用激光散射原理,能够连续采集并计算单位体积内空气中不同大小的悬浮颗粒物数目,即颗粒物浓度分布,可以通过该数值换算成质量浓度。甲醛浓度基于电化学原理检测,具备高精度、高稳定性的特点。同时传感器内嵌入了一个瑞士生产的温/湿度一体检测芯片,能够精确的检测出温度值和湿度值。该传感器把颗粒物浓度数值、甲醛浓度数值及温度、湿度监测功能合并,利用UART接口输出相关数据帧。传感器能够嵌入各种与空气质量监测和环境空气改善相关的仪器设备,为其提供及时准确的环境参数。
- 工作电压:5.0 VDC
- 最大工作电流:100 mA
- 待机电流:≤200 uA
- 数据接口电平:L<0.8V,H>2.7V,电平最大电压3.3V
- 颗粒物测量范围:0.3~1.0 μm;1.0~2.5μm;2.5~10μm
- 颗粒物计数效率:50% @ 0.3μm 98% @ ≥0.5μm
- 颗粒物质量浓度有效量程(PM2.5标准值):0~500ug/m³
- 颗粒物质量浓度最大量程(PM2.5标准值):0~2000ug/m³
- 颗粒物质量浓度分辨率:1ug/m³
- 颗粒物质量浓度一致性(PM2.5标准值):1.±10%@100~500 ug/m³ 2.±10 ug/m³@0~100 ug/m³
- 标准体积:0.1 L
- 甲醛有效量程:0~1 mg/m³
- 甲醛最大量程:0~2 mg/m³
- 甲醛分辨率:0.001
- 甲醛最大误差:<±5%
- 温度测量范围:0~99℃
- 温度测量分辨绿:0.1℃
- 温度测量精度:±0.5℃
- 湿度测量范围:0~99%
- 湿度测量分辨率:0.1%
- 湿度测量精度:±2%
- 响应时间:≤10s
- 串口波特率:9600bps
- 工作温度范围:-10~+50℃
- 工作湿度范围:0~99%
- 平均无故障时间:≥3年
- 产品尺寸:50 mm*38 mm*21 mm / 1.97*1.50*0.83 inches
- 1. 金属外壳与内部电源地导通,注意不要和其他外部板组电路或机箱外壳短接。
- 2. 进风口和出风口所在的平面紧贴用户机内壁与外界连通的气孔为最佳安装方式,如无法实现,则出风口周围 2cm 之内无遮挡。进风口和出风口之间应有结构使气流隔离,避免气流在用户机内部从出风口直接回流到进风口。
- 3. 用户机内壁为进风口所开的通气孔不应小于进风口的尺寸。
- 4. 应用于净化器类产品时,尽量避免将传感器直接置于净化器自身风道中,如果无法避免,应单独设置一个独立的结构空间,将传感器置于其中,使其与净化器自身风道隔离。
- 5. 应用与净化器或固定检测设备时,传感器位置应高于地面 20cm 以上。否则有可能被近地面的大尘埃颗粒甚至絮状物污染导致风扇缠绕阻转。
- 6. 传感器应用于户外固定设备时,对于沙尘暴、雨雪等天气以及杨柳絮的防护,应由设备完成。
- 7. 传感器是一个整体元件,用户切勿将其拆解,包括金属屏蔽壳,以防出现不可逆破坏。
- 8. 传感器底部用 2mm 自攻螺钉固定,螺钉进入壳体长度应不大于 5mm。
- 9. 为使得甲醛探头充分极化,传感器持续通电时间不应低于 48 小时。
- 10. 除甲醛外,其他多种活性气体会对电化学甲醛探头产生影响,主要有甲醇、乙醇、 甲苯、 二甲苯、一氧化碳、硫化氢等。
- 11. 长期在高浓度醛类、醇类等高浓度敏感气体中贮存或使用,会影响传感器甲醛功能使用寿命。特别是长时间在超出最大量程的饱和气体浓度下使用,会使得传感器甲醛功能短期失效,或一定几率下长期失效。
- 12. 腐蚀性气体环境也会令传感器甲醛功能使用寿命降低或失效。
| | | | ---------------------------------- | | | : | |
标号 | 名称 | 功能描述 |
PIN1 | VCC | 电源正(+5V) |
PIN2 | GND | 电源负 |
PIN3 | SET | 设置管脚 /TTL电平@3.3V,高电平或悬空为正常工作状态,低电平为休眠状态 |
PIN4 | RXD | 串口接收管脚/TTL电平@3.3V |
PIN5 | TXD | 串口发送管脚/TTL电平@3.3V |
PIN6 | RESET | 模块复位信号/TTL电平@3.3V,低复位 |
PIN7 | NC | |
PIN8 | NC |
表名
本教程会提供两个样例代码,意在提供一个简单的方法去读取PM2.5、甲醛、温湿度数值。
-
硬件
- 1 x DFRobot Leonardo & Xbee R3控制板
- 1 x IO 传感器扩展板 V7.1
- 1 x Air Quality Monitor (PM 2.5, HCHO, Temperature & Humidity)三合一传感器及配套转接板
- 1 x Micro USB数据线
- 若干 杜邦线
-
软件
- Arduino IDE 点击下载Arduino IDE
- 由于传感器采用串口通信,本样例使用Arduino Leonardo Serial1作为传感器接口。
|
/*
@file SEN0233.ino
@brief Air Quality Monitor (PM 2.5, HCHO, Temperature & Humidity)
@n Get the module here: http://www.dfrobot.com.cn/goods-1422.html
@n This example is to detect formaldehyde, PM2.5, temperature and humidity in the environment.
@copyright [DFRobot](http://www.dfrobot.com), 2017
@copyright GNU Lesser General Public License
@author [lijun]([email protected])
@version V1.0
@date 2017-04-21
*/
char col;
unsigned int PMSa = 0,FMHDSa = 0,TPSa = 0,HDSa = 0,PMSb = 0,FMHDSb = 0,TPSb = 0,HDSb = 0;
unsigned int PMS = 0,FMHDS = 0,TPS = 0,HDS = 0,CR1 = 0,CR2 = 0;
unsigned char buffer_RTT[40]={}; //串口接收数据
char tempStr[15];
void setup()
{
Serial.begin(115200);
Serial1.begin(9600);
}
void loop()
{
while(!Serial1.available());
while(Serial1.available()>0) //检测是否有串口数据
{
for(int i=0;i<40;i++)
{
col =Serial1.read();
buffer_RTT[i]=(char)col;
delay(2);
}
Serial1.flush();
CR1 =(buffer_RTT[38]<<8) + buffer_RTT[39];
CR2 = 0;
for(int i=0;i<38;i++)
CR2 += buffer_RTT[i];
if(CR1 == CR2) //校验
{
PMSa=buffer_RTT[12]; //读取PM2.5高八位数据
PMSb=buffer_RTT[13]; //读取PM2.5低八位数据
PMS=(PMSa<<8)+PMSb; //PM2.5数据
FMHDSa=buffer_RTT[28]; //读取甲醛高八位数据
FMHDSb=buffer_RTT[29]; //读取甲醛低八位数据
FMHDS=(FMHDSa<<8)+FMHDSb; //甲醛数据
TPSa=buffer_RTT[30]; //读取温度高八位数据
TPSb=buffer_RTT[31]; //读取温度低八位数据
TPS=(TPSa<<8)+TPSb; //温度数据
HDSa=buffer_RTT[32]; //读取湿度高八位数据
HDSb=buffer_RTT[33]; //读取湿度低八位数据
HDS=(HDSa<<8)+HDSb; //湿度数据
}
else
{
PMS = 0;
FMHDS = 0;
TPS = 0;
HDS = 0;
}
}
Serial.println("-----------------------uart--------------------------");
Serial.print("Temp : ");
sprintf(tempStr,"%d%d.%d",TPS/100,(TPS/10)%10,TPS%10);
Serial.print(tempStr);
Serial.println("C"); //显示温度
Serial.print("RH : ");
sprintf(tempStr,"%d%d.%d",HDS/100,(HDS/10)%10,HDS%10);
Serial.print(tempStr); //显示湿度
Serial.println(" %"); //“%”
Serial.print("HCHO : ");
Serial.print(FMHDS);
Serial.println(" ug/m3"); // 显示甲醛,单位 ug/m³ 毫克每立方米
Serial.print("PM2.5: ");
Serial.print(PMS);
Serial.println(" ug/m3"); //显示PM2.5 单位 ug/m³ 毫克每立方米
Serial.println();
}
|}
- 由于Arduino UNO只有一个串口,并且该串口已与USB相连,所以只能用软串口与传感器通信
连接线路:
PM2.5 Sensor Adapter | UNO |
VCC | 5v |
GND | GND |
TX | 10 |
RX | 11 |
|
/*
@file SEN0233.ino
@brief Air Quality Monitor (PM 2.5, HCHO, Temperature & Humidity)
@n Get the module here: http://www.dfrobot.com.cn/goods-1422.html
@n This example is to detect formaldehyde, PM2.5, temperature and humidity in the environment.
@copyright [DFRobot](http://www.dfrobot.com), 2017
@copyright GNU Lesser General Public License
@author [lijun]([email protected])
@version V1.0
@date 2017-03-01
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
char col;
unsigned int PMSa = 0,FMHDSa = 0,TPSa = 0,HDSa = 0,PMSb = 0,FMHDSb = 0,TPSb = 0,HDSb = 0;
unsigned int PMS = 0,FMHDS = 0,TPS = 0,HDS = 0,CR1 = 0,CR2 = 0;
unsigned char buffer_RTT[40]={}; //串口接收数据
char tempStr[15];
void setup()
{
Serial.begin(115200);
mySerial.begin(9600);
}
void loop()
{
while(!mySerial.available());
while(mySerial.available()>0) //检测是否有串口数据
{
for(int i=0;i<40;i++)
{
col =mySerial.read();
buffer_RTT[i]=(char)col;
delay(2);
}
mySerial.flush();
CR1 =(buffer_RTT[38]<<8) + buffer_RTT[39];
CR2 = 0;
for(int i=0;i<38;i++)
CR2 += buffer_RTT[i];
if(CR1 == CR2) //校验
{
PMSa=buffer_RTT[12]; //读取PM2.5高八位数据
PMSb=buffer_RTT[13]; //读取PM2.5低八位数据
PMS=(PMSa<<8)+PMSb; //PM2.5数据
FMHDSa=buffer_RTT[28]; //读取甲醛高八位数据
FMHDSb=buffer_RTT[29]; //读取甲醛低八位数据
FMHDS=(FMHDSa<<8)+FMHDSb; //甲醛数据
TPSa=buffer_RTT[30]; //读取温度高八位数据
TPSb=buffer_RTT[31]; //读取温度低八位数据
TPS=(TPSa<<8)+TPSb; //温度数据
HDSa=buffer_RTT[32]; //读取湿度高八位数据
HDSb=buffer_RTT[33]; //读取湿度低八位数据
HDS=(HDSa<<8)+HDSb; //湿度数据
}
else
{
PMS = 0;
FMHDS = 0;
TPS = 0;
HDS = 0;
}
}
Serial.println("-----------------------uart--------------------------");
Serial.print("Temp : ");
sprintf(tempStr,"%d%d.%d",TPS/100,(TPS/10)%10,TPS%10);
Serial.print(tempStr);
Serial.println(" C"); //显示温度
Serial.print("RH : ");
sprintf(tempStr,"%d%d.%d",HDS/100,(HDS/10)%10,HDS%10);
Serial.print(tempStr); //显示湿度
Serial.println(" %"); //%
Serial.print("HCHO : ");
Serial.print(FMHDS);
Serial.println(" ug/m3"); //显示甲醛,单位 ug/m³ 毫克每立方米
Serial.print("PM2.5: ");
Serial.print(PMS);
Serial.println(" ug/m3"); //显示PM2.5 单位 ug/m³ 毫克每立方米
Serial.println();
}
|}
运行结果示意图:
1、下载及安装软件。下载地址:http://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装 2、切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程 3、“扩展”中选择“主控板”中的“Arduino Uno”,选择"功能模块"中的"软串口"。 详细教程:Mind+基础wiki教程-加载扩展库流程 4、进行编程,程序如下图: 5、程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印 项目程序文件下载:点击下载
-
硬件
- 1 x Arduino UNO控制板 或 DFRobot Leonardo & Xbee R3控制板(需修改程序中的Serial为Serial1)
- 1 x IO 传感器扩展板 V7.1
- 1 x Gravity LCD1602 RGB Backlight Module
- 1 x Air Quality Monitor (PM 2.5, HCHO, Temperature & Humidity)三合一传感器及配套转接板
- 1 x Micro USB数据线
- 若干 杜邦线
-
软件
- Arduino IDE, 点击下载Arduino IDE
- 这个样例代码是上面连接图的程序
- 请先下载Gravity: I2C LCD1602 RGB 彩色背光液晶屏Arduino库
|
/*
@file SEN0233.ino
@brief Air Quality Monitor (PM 2.5, HCHO, Temperature & Humidity)
@n Get the module here: http://www.dfrobot.com.cn/goods-1422.html
@n This example is to detect formaldehyde, PM2.5, temperature and humidity in the environment.
@copyright [DFRobot](http://www.dfrobot.com), 2017
@copyright GNU Lesser General Public License
@author [lijun]([email protected])
@version V1.0
@date 2017-07-028
*/
#include <Wire.h>
#include "DFRobot_RGBLCD.h"
char col;
unsigned int PMSa = 0, FMHDSa = 0, TPSa = 0, HDSa = 0, PMSb = 0, FMHDSb = 0, TPSb = 0,
HDSb = 0,PMS = 0,TPS= 0, HDS = 0, CR1 = 0, CR2 = 0,FMHDS = 0;
unsigned char buffer_RTT[40] = {}; //串口接收数据
char tempStr[15];
DFRobot_RGBLCD lcd(16, 2); //RGB address; 16 characters and 2 lines of show
void setup()
{
Serial.begin(9600);
lcd.init();//初始化LCD1602 RGB屏
lcd.setRGB(0, 255, 0); //设置屏的初始背光颜色
lcd.setCursor(0, 0 ); //设置从(0,0)开始显示
lcd.print("T:");//显示T:
lcd.setCursor(9, 0 );
lcd.print("H:");
lcd.setCursor(0, 1 );
lcd.print("F:");
lcd.setCursor(9, 1 );
lcd.print("P:");
}
void loop()
{
while (Serial.available() > 0) //检测是否有串口数据
{
for (int i = 0; i < 40; i++) //读取串口数据
{
col = Serial.read();
buffer_RTT[i] = (char)col;
delay(2);
}
Serial.flush();
CR1 = (buffer_RTT[38] << 8) + buffer_RTT[39];
CR2 = 0;
for (int i = 0; i < 38; i++)
CR2 += buffer_RTT[i];
if (CR1 == CR2) //校验
{
PMSa = buffer_RTT[12]; //读取PM2.5高八位数据
PMSb = buffer_RTT[13]; //读取PM2.5低八位数据
PMS = (PMSa << 8) + PMSb; //PM2.5数据
FMHDSa = buffer_RTT[28]; //读取甲醛高八位数据
FMHDSb = buffer_RTT[29]; //读取甲醛低八位数据
FMHDS = (FMHDSa << 8) + FMHDSb; //甲醛数据
TPSa = buffer_RTT[30]; //读取温度高八位数据
TPSb = buffer_RTT[31]; //读取温度低八位数据
TPS = (TPSa << 8) + TPSb; //温度数据
HDSa = buffer_RTT[32]; //读取湿度高八位数据
HDSb = buffer_RTT[33]; //读取湿度低八位数据
HDS = (HDSa << 8) + HDSb; //湿度数据
}
else
{
PMS = 0;
FMHDS = 0;
TPS = 0;
HDS = 0;
}
}
lcd.setCursor(2, 0 );
sprintf(tempStr,"%d%d.%d",TPS/100,(TPS/10)%10,TPS%10); //显示温度
lcd.print(tempStr);
lcd.write(0xdf); //显示°
lcd.print('C'); //显示C
lcd.setCursor(11, 0 );
sprintf(tempStr,"%d%d.%d",HDS/100,(HDS/10)%10,HDS%10); //显示湿度
lcd.print(tempStr);
lcd.print('%'); //显示%
lcd.setCursor(2, 1 );
lcd.print((float)FMHDS/1000); // 显示甲醛,单位 mg/m³ 毫克每立方米
lcd.print((int)FMHDS%10);
lcd.setCursor(11, 1 );
sprintf(tempStr,"%d%d%d",PMS/100,(PMS/10)%10,PMS%10); //显示PM2.5个、十、百位单位ug/m³ 微克每立方米
lcd.print(tempStr);
}
|}
显示屏上显示当前检测出来的温度(T)、湿度(H)、甲醛浓度(F)、PM2.5浓度 (P)
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
| 更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。 |