英飞凌XENSIV™ PAS CO2传感器试用

英飞凌XENSIV™ PAS CO2传感器是一款体积十分小巧且充满了黑科技原理的CO2传感器,他区别于传统红外光谱式CO2传感器检测原理,采用了现在非常先进的微机电封装技术,通过MEMS声学探测器也就是手机和智能音箱产品中使用的高精度数字麦克风,来检测CO2气体在特殊光谱下振动产生的压力波。

PAS原理工作过程如下。来自红外光源的光脉冲通过专门调谐到 二氧化碳吸收波长 (λ= 4.2 µm) 的滤光器。检测室内的二氧化碳分子吸收过滤后的光,使分子震动,每次脉冲都产生压力波。这被称为光声效应。高度灵敏的MEMS声学检测器检测传感器腔内 二氧化碳分子产生的压力变化,微控制器将输出转换为二氧化碳浓度读数。为获得尽可能准确的ppm读数,声学检测器针对低频操作进行了优化,并对吸收室进行了声学隔离,隔离外部噪声。

光声光谱(PAS)原理图解

为了让大家快速体验传感器的功能,英飞凌提供了两组可以直接使用的示例库,其中一组就是大家喜闻乐见的arduino的库,只需要在git上拉取库下来,连读取例程都给你直接做好了,我们可以非常省事的直接拿来使用:Arduino的GitHub库

看Readme.md文档,直接在arduino的库管理器中就可以直接添加,搜索XENSIV PAS CO2即可,在这里还是要赞一下2.0版的arduinoIDE,比1.xx版好多了,速度快了,也支持自动补全了,非常方便的.

搜索库安装
打开示例代码

选择单次测量模式的demo:    single-shot-mode.ino

#include <Arduino.h>

#include <pas-co2-ino.hpp>

/*

* The sensor supports 100KHz and 400KHz.

* You hardware setup and pull-ups value will

* also influence the i2c operation. You can

* change this value to 100000 in case of

* communication issues.

*/

#define I2C_FREQ_HZ 400000

/**

* Create CO2 object. Unless otherwise specified,

* using the Wire interface

*/

PASCO2Ino cotwo;

int16_t co2ppm;

Error_t err;

void setup()

{

Serial.begin(9600);

delay(500);

Serial.println("serial initialized");

/* Initialize the i2c interface used by the sensor */

Wire.begin();

Wire.setClock(I2C_FREQ_HZ);

/* Initialize the sensor */

err = cotwo.begin();

if(XENSIV_PASCO2_OK != err)

{

Serial.print("initialization error: ");

Serial.println(err);

}

}

void loop()

{

/*

* Trigger a one shot measurement

*/

err = cotwo.startMeasure();

if(XENSIV_PASCO2_OK != err)

{

Serial.print("error: ");

Serial.println(err);

}

/* Wait for the value to be ready. */

delay(5000);

/**

* getCO2() is called until the value is

* available.

* getCO2() returns 0 when no measurement

* result is yet available or an error has

* occurred.

*/

do

{

err = cotwo.getCO2(co2ppm);

if(XENSIV_PASCO2_OK != err)

{

Serial.print("error: ");

Serial.println(err);

break;

}

} while (0 == co2ppm);

Serial.print("co2 ppm value : ");

Serial.println(co2ppm);

}

可以看出来代码已经封装的很完善了,调用非常简单

按照图示连接好arduino和传感器,另外注意需要外部提供一个红外光源的12V电压,支持范围是9.6~14.4V,

电气连接图,需要根据你的arduio开发板来选择

因为传统的Arduino单片机像UNO ,Pro Mini等等基于ATmega328的大多都是5V电源的单片机,而我们的传感器是3.3V的通讯电平,所以我这里没有使用传统的arduino单片机,而是换成了一块ESP32-WROOM-32开发板,其他的像ESP8266,STM32等等也都是可以的,

 再找人借张图,ESP32的默认端口:

ESP32模块引脚图

串口观察输出的CO2浓度数值:

CO2浓度数值

 打开串口助手或者arduino自带串口,波特率9600,很快数据就出来了,一开始的时候显示CO2浓度还是挺高的,慢慢稳定下来以后,读数大概是900PPM+,网上稍微查了一下,700ppm以下属于清洁空气,700-1000ppm正常,1000-1500ppm处于临界值,1500ppm以上就属于污染的空气了,人就会感觉到明显的不舒适。

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注