我是靠谱客的博主 怕孤独大船,最近开发中收集的这篇文章主要介绍Arduino读取CCS811+HDC1080模块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

CJMCU-8118是一种气体传感器片上的系统(SSOC)+温湿度传感器,简单来说,通过ccs811内部集成mcu实现i2c接口共用,实现气体和温湿度共同检测。

传感器

外观
在这里插入图片描述

CCS811

CCS811是一种能够检测CO2和TVOC浓度的传感器。安装Adafruit_CCS811.h库,实现CO2和TVOC的读取。

示例程序
#include <Adafruit_CCS811.h>

Adafruit_CCS811 ccs;

void setup() {
  Serial.begin(9600);

  Serial.println("CCS811 test");

  if(!ccs.begin()){
    Serial.println("Couldn't find sensor!");
    while(1);
  }

  // 等待传感器输入数据
  while(!ccs.available());
}

void loop() {
  if(ccs.available()){
    if(!ccs.readData()){
      Serial.print("CO2: ");
      Serial.print(ccs.geteCO2());
      Serial.print("ppm, TVOC: ");
      //Serial.print(ccs.getTVOC());
      Serial.println(ccs.getTVOC());	//换行
    }
    else{
      Serial.println("ERROR!");
      while(1);
    }
  }
  delay(500);
}
串口

对cs811传感器呼出一口气,CO2的ppm值瞬间增加。
ccs811_test

HDC1080

hdc1080是德州仪器生产的数字温湿度传感器,精度为±2%。Arduino可用库有ClosedCube_HDC1080.hAdafruit_HDC1000.h,两个库函数实际检测的值差别不大。ClosedCube_HDC1080.h中的begin()函数是不是布尔类型写的,因此不能判断,这是两个库函数的差别。另外,使用ClosedCube_HDC1080.h库要申明地址,示例给的地址是0x40,转换为二进制是1000000b
多个 HDC1080 如何查找HDC1080 地址?

示例程序

Adafruit_HDC1000.h语法也是类似,库里可以下载,不多赘述。

#include <Wire.h>
#include "ClosedCube_HDC1080.h"

ClosedCube_HDC1080 hdc1080;

void setup()
{
	Serial.begin(9600);
	Serial.println("ClosedCube HDC1080 Arduino Test");

	// Default settings: 
	//  - Heater off
	//  - 14 bit Temperature and Humidity Measurement Resolutions
	hdc1080.begin(0x40);	//物理地址

	Serial.print("Manufacturer ID=0x");
	Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 德州仪器设备ID
	Serial.print("Device ID=0x");
	Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 设备ID地址
	
	printSerialNumber();				//打印设备序列号

}

void loop()
{
	Serial.print("T=");
	Serial.print(hdc1080.readTemperature());
	Serial.print("C, RH=");
	Serial.print(hdc1080.readHumidity());
	Serial.println("%");
	delay(3000);	//延迟3s
}

void printSerialNumber() {
	Serial.print("Device Serial Number=");
	HDC1080_SerialNumber sernum = hdc1080.readSerialNumber();
	char format[12];
	sprintf(format, "%02X-%04X-%04X", sernum.serialFirst, sernum.serialMid, sernum.serialLast);
	Serial.println(format);
}
串口

实际温度检测会高于环境实际温度,我想可能是cs811发热导致的?也有可能是我还没完全老化这块传感器?具体原因占时还没找到。
hdc1080

室内环境监测

通过i2c串口同时监测CO2、TVOC和温湿度,实现代码如下:

/*
 * richowe
 */
 
#include <Wire.h>
#include <Adafruit_CCS811.h>
#include <ClosedCube_HDC1080.h>

Adafruit_CCS811 ccs;
ClosedCube_HDC1080 hdc1080;

void setup()
  {
    Serial.begin(9600);
    Serial.println("HDC1080 TEST");
    Serial.println("CCS811 TEST");
    hdc1080.begin(0x40);
      
    if(!ccs.begin())
       {
          Serial.println("Couldn't find sensor!");
          while (1);
       }
    while(!ccs.available());
      
  }

void loop()
  {  
    if(ccs.available())
      {
        if(!ccs.readData())
          { 
              
            Serial.print("Temp: ");
            Serial.print(hdc1080.readTemperature());
            Serial.print("^C, Hum: ");
            Serial.print(hdc1080.readHumidity());
            Serial.println("%");
            //Serial.println("n");
            Serial.print("CO2: ");
            Serial.print(ccs.geteCO2());
            Serial.print("ppm, TVOC: ");
            Serial.print(ccs.getTVOC());
            Serial.print("ppb, ");
            
          }
        else
          {
            Serial.println("ERROR!");
            while(1);
          }
      }
    delay(1000);	//延时1s
  }
串口

在这里插入图片描述

最后

以上就是怕孤独大船为你收集整理的Arduino读取CCS811+HDC1080模块的全部内容,希望文章能够帮你解决Arduino读取CCS811+HDC1080模块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部