4931|6

39

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【英飞凌XENSIV™ PAS CO2传感器】读数测试 [复制链接]

本帖最后由 未见 于 2022-11-13 14:03 编辑

关于传感器的参数,网友:秦天qintian0303的帖子已经说得非常好了,具体大家可以移步他的帖子观看,链接

我这里先主要测试一下传感器通讯,使用最快速的方法把传感器"Blink"起来

首先,看规格书,传感器是支持多种输出模式,串口、I2C、PWM等等,我们选择I2C模式,然后,因为英飞凌的这款传感器远离比较特殊,其实它是一个麦克风传感器,通过超高灵敏度的麦克风,来探测特定光谱下的CO2气体分子振动来检测的,这真的是属于黑科技级别的技术了,我之前做传统的电化学方式传感器,大多数这种传感器,都是受制于化学组分的电化学变化产生电流来测量,经常会遇到高温,潮湿,等等一系列环境因素影响传感器精度,需要经常进行校准。同时,还有偶尔暴露在高浓度气体下,会产生特殊的传感器中毒现象,非常影响传感器的使用寿命,最好的CO2传感器,寿命也不会超过5年,又贵又不得不换成本非常高昂。相较于传统NDIR的红外传感器,它的体积要小得多,而且精度更高。英飞凌这款传感器从原理上就避免了这些难题,使用寿命长达10年,这款传感器最主要影响的,还是传感器灯光的寿命,通过合理的控制灯光寿命,我觉得还有机会做到更长。

英飞凌为了让大家快速体验传感器的功能,提供了两组非常好用的库,其中arduino的库可以说是非常小白化的了,只需要在git上拉取库下来,连读取例程都给你直接做好了,我们可以非常省事的直接拿来主义:

链接已隐藏,如需查看请登录或者注册

看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,

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

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

连接好硬件以后:

 编译。。。下载。。。一气呵成:

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

我对着他吹了一口气,大概3s以后,数值就飙升到1700多,看起来灵敏度还是相当可以的。稍后我再和公司里的传统NDIR的CO2传感器做下数据对比,看看数据的一致性怎么样。

 

此帖出自传感器论坛

最新回复

楼主二氧化碳传感器还有吗?能转让给我玩玩吗?  详情 回复 发表于 2024-9-26 11:37
点赞 关注
 
 

回复
举报

5220

帖子

236

TA的资源

管理员

沙发
 

精彩

此帖出自传感器论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 
恭喜成功点亮,期待有更精彩的应用作品呈现!
此帖出自传感器论坛
 
 
 

回复

6060

帖子

6

TA的资源

版主

4
 

楼主的环境还是相当不错的,我这个密闭的空间就不行

此帖出自传感器论坛
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

5
 

这用的是什么开发环境啊?

此帖出自传感器论坛
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

6
 

吹口气就那么高了,楼主,你能耗多,污染大阿,建议你待机运行

此帖出自传感器论坛
 
 
 

回复

1228

帖子

0

TA的资源

纯净的硅(高级)

7
 
楼主二氧化碳传感器还有吗?能转让给我玩玩吗?
此帖出自传感器论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表