这几天在玩嵌入系统Arduino,发现学起来很简单,就打算组个二氧化碳检测仪。主要因为PM2.5一直关窗,想要知道下房间氧气到底够不够,到底要装什么样的新风。

组装使用材料:

材料 价格RMB(含运费)
Arduino Nano 兼容开发板 15
Logic Level Converter 5.5
DS-CO2-20 传感器 145
SSD1306 128x64 OLED 显示屏 14
3x7 双面万能版 5.14
电线 4
M2*15 螺丝柱 5

电烙铁用T12头自制的那种就行,价格只要170左右就能达到原版2000多的性能。

线路图

传感器通讯协议是3.3v的UART,偷懒用Level Converter转换下

代码

这里只贴简单的获取传感器数值的代码:

#include <SoftwareSerial.h>

#define rxPin 12
#define txPin 11
SoftwareSerial CO2_Serial(rxPin, txPin);
const byte readCO2[] = {0x42, 0x4d, 0xe3, 0x00, 0x00, 0x01, 0x72}; //Command
byte responses[12];

void setup()
{
  CO2_Serial.begin(9600);
}

unsigned int GetCo2()
{
  int valMultiplier = 1;

  while (!CO2_Serial.available())
  {
    CO2_Serial.write(readCO2, 7);
    delay(1000);
  }

  CO2_Serial.setTimeout(2000);
  CO2_Serial.readBytes(responses, 12);

  int high = responses[4];              //high byte
  int low = responses[5];               //low byte
  unsigned int val = high * 256 + low; 
  return val * valMultiplier;
}

void loop()
{
  auto co2 = GetCo2();
  draw_co2(co2);
  delay(1000);
}

显示部分我用的u8g2库。为了增加渲染速度,只能渲染部分区域,所以我开了fullbuffer,结果直接用掉了92%的内存,这么看的话,可能换个库比较好。

结论

那么回归本来的问题,一直关窗氧气到底够不够呢?以下是我这个不运动的1人,垃圾铝合金窗户的1室,大约30m2m^2的经验:

  • 关窗大概每30分钟CO2上升500ppm,最大会在3000-4000ppm左右(视测试位置)
  • 窗户开一点缝隙,最大可以稳定在1000左右
  • 门窗都开一点,可以稳定在500左右(可见南北同时透气很重要)

每10,000ppm相当于1%含量CO2

多少CO2对人体有害?这个科学上有争议,有实验发现1200以上会降低认知,但又有键盘打字实验发现5000都不会。生命安全上的医学建议为待在1w以上环境不要超过8小时,所以可以认为一直关窗安全性肯定没问题,有条件最好保持在1000-2000。

EDIT: 之前怀疑是老房子气密性不好导致CO2最大3000-4000ppm,但装修了系统窗并且负压测试确认不漏气的房子测试结果也一样

既然窗户开一点缝隙效果就那么明显,那是不是每个房间装一个壁挂式新风系统就行了? 还可以避免全屋新风(管道新风)屋顶排管增加复杂度?如果只考虑氧气的话是可以的。

全屋新风一般每小时可全屋换气1-2次,因此可以除味除甲醛,当然甲醛现在问题不大,多是智商税,但是安装麻烦,考虑怎么排管道就能废掉脑子,机器坏了更是不敢想怎么修。

而壁挂式换气量很低,送风距离近,只能小房间内使用,而且热交换能力有限会有吹出冷风热风的问题。