我们用MH-Z19测量公寓中的CO2浓度

几乎任何气象站,包括售价仅几美元的廉价中国机型,都可以测量空气的基本参数-温度和湿度。二氧化碳变得越来越困难:几乎没有可测量其市售的设备。使情况复杂化的是,CO2是一种没有颜色和气味的气体,因此几乎不可能感觉到“鼻子”的浓度。

细节和剪裁下。

MH-Z19传感器本身已在此处进行了描述。本文以“ 红外CO2传感器概述为基础,该材料是其逻辑上的延续。关于测量街道上的二氧化碳浓度的信息已写在这里,但没有关于公寓中二氧化碳浓度的数据。填补这一空白。


在eBay上的第一件事以下组件已经下令:
- Arduino的微ATmega32U4 3.3V($ 5发行价)。因为传感器具有3伏逻辑,普通Arduino最好不要使用。
- 在OLED液晶显示屏,0.91 I2C«128×32(发行价$ 7)。显示器连接到标准Arduino i2c引脚。
-实际上是传感器MH-Z19(发行价$ 28)。
-一组带有用于引脚接触的连接器的电线(发行价1-2美元)
因此,总成本约为40美元,即2600r。来自知名公司的品牌设备的价格大约是其两倍,尽管在这里它更可能不是节省费用,而是技术利益。

Arduino的代码是从以上文章中借用的,将向显示器输出的数据添加到其中,并且为了更方便地进行数据分析,将输出转换为带有分隔符的简单行格式。还添加了时间戳,每个时间戳对应10秒。
源代码
#include <SoftwareSerial.h>
#include <Wire.h>

// I2C OLED
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;

// CO2 sensor:
SoftwareSerial mySerial(8,9); // RX,TX
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; 
unsigned char response[9];

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

  // OLED
  Wire.begin();         
  oled.begin(&Adafruit128x32, I2C_ADDRESS);
  oled.set400kHz();  
  oled.setFont(ZevvPeep8x16);  

  oled.clear();  
  oled.println("setup::init()");
}

long t = 0;

void loop() 
{
  mySerial.write(cmd, 9);
  memset(response, 0, 9);
  mySerial.readBytes(response, 9);
  int i;
  byte crc = 0;
  for (i = 1; i < 8; i++) crc+=response[i];
  crc = 255 - crc;
  crc++;

  oled.clear();  
  if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
    Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
    oled.println("Sensor CRC error");
  } else {
    unsigned int responseHigh = (unsigned int) response[2];
    unsigned int responseLow = (unsigned int) response[3];
    unsigned int ppm = (256*responseHigh) + responseLow;
    Serial.print(String(t)); Serial.print(","); Serial.print(ppm); Serial.println(";");
    if (ppm <= 400 || ppm > 4900) {
      oled.println("CO2: no data");          
    } else {
      oled.println("CO2: " + String(ppm) + " ppm"); 
      if (ppm < 450) {   
        oled.println("Very good");
      }
      else if (ppm < 600) {   
        oled.println("Good");
      }
      else if (ppm < 1000) {   
        oled.println("Acceptable");
      }
      else if (ppm < 2500) {   
        oled.println("Bad");
      }
     else {   
        oled.println("Health risk");
      }
    }
  }
  delay(10000);
  t += 10;
}


将所有这些放在一起,将草图倒入arduino中,结果看起来像这样:
图片

当然,这不是工业设计的最高要求(计划寻找某种外壳),但是对于显示设备既可以独立工作又可以通过USB传输数据的任务,该设备相当应付。要通过USB接收数据,只需在Arduino IDE中打开端口监视器,数据就会显示在其中。可以在任何程序中(例如在Excel中)复制并打开其中的文本。

测量值


下一个问题:我们实际上在衡量什么?该设备以ppm(百万分之一,百万分之一)为单位提供数据。 1000 ppm = 0.1%的CO2含量。在互联网上,你可以找到允许浓度如下表:
- 350 - 450 ppm的的:正常室外水平。
- <600 ppm:可接受的水平。等级推荐用于卧室,幼儿园和学校。
- 600 - 1000ppm的的:针对不新鲜空气投诉可以减少关注的浓度。
- 1000 PPM:ASHRAE标准(采暖,制冷的美国社会和最高级别的空调工程师学会) 和OSHA(职业安全与健康管理局) 。
- 一零零零年至2500年ppm的:嗜睡,注意力不集中,可能出现头痛。
- 2500 - 5000 PPM的:对健康可能产生的不利影响。

最后是结果。该传感器安装在厨房中,窗户是金属塑料的,测量时间约为8小时。

结果非常有趣。水平时间以秒为单位,3600秒对应于1小时。

图上的曲线解密如下:
0h:读数约为420ppm(相当于街道),家里没人,我下班回家,同时打开传感器。
0-2小时:我在厨房里,可以看到有人在场时二氧化碳的浓度缓慢上升到900ppm。
2-4小时:我离开了房间,您可以看到浓度如何逐渐降低。
4-6小时:我回来了,注意力又开始增长了。
第6个小时:在火炉上放一锅馄饨。有趣的是,浓度几乎是如何立即增加到1700ppm,然后缓慢开始下降。尽管气体没有燃烧很长时间(10-15分钟),但> 1000 ppm的高水平气体至少燃烧了一个小时。
图表结束:打开了一个窗口,二氧化碳水平几乎立即下降。

结论


事实证明,该设备非常有趣,特别适合那些在家中计算机工作的人。因此,例如,在撰写本文期间,室内的二氧化碳含量从500ppm增加到770ppm。看着屏幕要么迫使您更频繁地打开窗户,要么最后考虑室内通风正常的设备(可能窗户的微通风模式不是多余的,而是某种通风橱)。如果我现在购买新的窗户,我可能会想到一个或多或少高质量且通风正常的型号。

同样重要的是要注意厨房良好通风的相关性:如图所示,即使在10分钟内,一个燃气燃烧器也可以“烧尽”整个氧气供应,使CO2浓度达到很高的水平。在卧室进行的测量表明,就通风而言,一切也不是很好:到早晨,二氧化碳的浓度超过1000ppm,对于脑力劳动来说,良好的睡眠非常重要。

通常,这种简单且便宜的设备使您可以非常有效地检查公寓或办公室中的空气质量。
作者祝大家身体健康,心情愉快。好吧,当然,空气也不错。

Source: https://habr.com/ru/post/zh-CN395755/


All Articles