Funpack12-Wio Terminal 任务一 环境监测(温湿度 紫外线 挥发性有机化合物 二氧化碳)
本项目为Funpack12-Wio Terminal 任务一 , 使用温湿度 ,紫外线 ,TVOC eCO2传感器对环境进行检测并将采集到的数据显示在设备自带屏幕上。
标签
嵌入式系统
紫外线强度
温湿度
TVOC
eCO2
xuyu
更新2021-12-24
1238

 

1.实现的功能

本项目使用Wio Terminal 连接 VEML6070(紫外线传感器),SGP30 (二氧化碳(CO2)和挥发性有机化合物(VOC)传感器),DHT11(温湿度传感器),读取数据并在LCD屏幕上实时更新。

2. 各功能对应的主要代码片段 和 功能展示与说明

2.1 紫外线传感器 VEML6070

如下图所示,太阳光的紫外波段仍可依据波长继续细分为UVA,UVB,UVC。其中UVA的波长范围为320nm-400nm。

FjEQcmG4GSF73YN3ZpK36iW_Pjox

 

根据数据手册,此传感器对于355nm即UVA波段的紫外线最敏感。所以此传感器适用于监测UVA紫外线强度的应用场景。

FkybWliYH6QBrVpJwGGboS_W3fGj

使用CAN 总线接口与Wio Terminal 相连。Wio Terminal 的左侧Grove接口支持CAN协议。CAN总线支持多个设备同时连接通信,只要地址不同,因此使用扩展板将两个传感器连接在左侧接口即可。

FkkH_k-ZgXzUjd8eVPVdMZjwPyze

代码(读取并显示UV强度部分):

#include <Wire.h>

#include "Adafruit_VEML6070.h"

Adafruit_VEML6070 uv = Adafruit_VEML6070();


uv.begin(VEML6070_1_T);  



void loop() {
  Serial.print("UV light level: "); Serial.println(uv.readUV());
  //tft.fillScreen(TFT_BLACK); //Red background
  tft.drawString("UV Light Level:", 0, 0);
  tft.fillRect(0,40 , 100, 40,TFT_BLACK );
  tft.drawString(String(uv.readUV()), 3, 40);
  
  delay(1000);
}

2.2 VCO传感器 SGP30

同样使用CAN 总线接口与Wio Terminal 相连。测试 TVOC 和 eCO2 含量数据。

TVOC的主要成分是烃类、卤代烃、氧烃和氮烃,它包括:苯系物、有机氯化物、氟里昂系列、有机酮、胺、醇、醚、酯、酸和石油烃化合物等(引自知乎,原文链接)。

传感器的官方介绍如下:

GP30 是一个数字化多像素气体传感器,专为轻松集成到空气净化器、按需新风控制和物联网应用中而设计。SGP30 设计用于智能家居、家电和物联网应用,它提供两个经过校准的空气质量信号和湿度补偿功能。Sensirion 还通过 SGPC3 为移动应用提供低功率的可靠气体传感解决方案。

SGP30 可提供有关空气质量的更详尽指数。针对现实生活环境中的污染气体,该传感器具有无与伦比的可靠性,可以实现独一无二的长期稳定性和低漂移。

网址 SGP30 传感器介绍页

这段代码包含自动校准的过程,每秒需要运行一次测量,实现对传感器的校准。此外由于传感器需要湿度补偿,引入DHT11 对温湿度进行测量,实时补偿测量数据。

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

Adafruit_SGP30 sgp;
int counter = 0;
void loop() {

if (! sgp.IAQmeasure()) {
    Serial.println("Measurement failed");
    return;
  }
  Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t");
  Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");

  

  if (! sgp.IAQmeasureRaw()) {
    Serial.println("Raw Measurement failed");
    return;
  }
  Serial.print("Raw H2 "); Serial.print(sgp.rawH2); Serial.print(" \t");
  Serial.print("Raw Ethanol "); Serial.print(sgp.rawEthanol); Serial.println("");
 
  delay(1000);
  

  counter++;
  if (counter == 30) {
    counter = 0;

    uint16_t TVOC_base, eCO2_base;
    if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
      Serial.println("Failed to get baseline readings");
      return;
    }
    Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX);
    Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX);
  }
}

2.3 温湿度传感器 DHT11

最简单的部分了,直接导入库,读取温度、湿度数据就行了。

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN A2

DHT11.read(DHT11PIN);

Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);

Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);

2.4 LCD 显示

Wio Terminal 的官方wiki,介绍了显示屏的使用方法。显示屏介绍

安装 Adafruit Zero DMA 库之后即可使用。 Adafruit 简直无所不包,本项目的两个传感器都使用对应的已经封装好的库,直接调用即可。

显示字符串的代码

#include"TFT_eSPI.h"
TFT_eSPI tft;
 
void setup() {
  tft.begin();
  tft.setRotation(3);
 
  tft.fillScreen(TFT_RED); //Red background
 
  tft.setTextColor(TFT_BLACK);          //sets the text colour to black
  tft.setTextSize(1);                   //sets the size of text
  tft.drawString("Hello world!", 0, 0); //prints strings from (0, 0)
  tft.setTextSize(2);
  tft.drawString("Hello world!", 0, 10);
}
 
void loop() {}

 

还需要对显示数据进行刷新,通过绘制黑色方块的方法对旧数据显示区域进行覆盖,然后再显示新数据,类似黑板,要显示新内容,需要用黑板擦先把黑板变成黑色的板,然后再书写新内容,实现刷新。

tft.drawString("TVOC ", 0, 80);
tft.fillRect(120,80 , 60, 40,TFT_BLACK );
tft.drawString(String(sgp.TVOC), 120, 80);
tft.drawString(" ppb/t", 180, 80);

这段代码里还有坐标的概念需要说明,官方wiki,LCD坐标介绍

 

2.5 效果展示

FghOBwoNOtf7uKGmwQec01prkkR_

如图所示,紫外线传感器、总可挥发性气体和等效二氧化碳传感器、温湿度传感器的数据在屏幕上汇总显示。 

这部分展示主要放在已经上传的视频中,把温湿度传感器放到窗边可以看到温度急剧下降。

 

 

Fs2JS2D8OntZoe8n2OwRk6vsTdEu

展示UV传感器的数据变化主要通过调整台灯的亮度和冷暖来实现,如图所示,UV强度为62,相对于刚才测试温湿度传感器的时候的6相比已经是10倍的辐射强度了。

 

FtRVP59fDinFZry0fwQhpy6An6XP

 

 

为了测试TVOC和等效二氧化碳传感器,首先对室内通风后的情况进行了检测,TVOC此时仅为122 ppb/t 。接下来准备了面团,由于酵母菌无氧呼吸情况下会产生酒精和二氧化碳,这些产物刚好可以用来测试SGP30. 可以看到靠近面团后,传感器回传数据已经爆表。

Flnz0wPEq54VMZV5q20hushgW8Jd

 

 

3.对本活动的心得体会

这个活动很有意义,能够让大家在休息时间做个小玩具,以后一直插电可以放在家里随时监测空气质量。

 

 

5.可编译下载的代码

将所有功能集合在一起并实现显示的代码已经上传到附件中。

 

 

 

附件下载
wio_lcd_co2_uv_dht11.ino
源代码
团队介绍
一个既搞软件又搞硬件的微波工程师, EE Ph.D. 在读学生
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号