亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

测量二氧化碳水平,又名嗜睡乘数

组件和用品

Andium Anduino WiFi
× 1
Arduino Due
× 1
二氧化碳传感器
× 1

应用和在线服务

Arduino IDE
Adafruit IO

关于这个项目

动机

你有没有努力通过下午的会议?忍不住打哈欠? 3 小时的讲座睡不着?不,我不会卖给你能量补充剂。你昨晚可能没有睡够,我们大多数人都没有。但是,你的困倦可能不完全是你的错!通风不良和二氧化碳含量高可能会导致您感到困倦!

使用此 NDIR CO2 传感器,您可以准确测量 CO2 水平并使用简单的 UART 串​​行接口读取值。传统的 CO2 传感器过去需要消耗大量电能,并且在准备读取读数之前需要花时间预热灯。现在使用 LED 和红外探测器,您可以使用这个 3.3v 传感器准确测量气体,该传感器平均拉动小于 1.5ma。它使用了光学色散和其他一些魔法,查看 Cozir 的数据表了解更多细节,令人印象深刻。

开始使用

是的,我需要什么来开始测量我办公室隔间的“睡眠因素”?

  • Arduino到期或零
  • AnduinoWiFi 屏蔽
  • Cozir 二氧化碳传感器
  • 一些跳线用于连接传感器并为其通电。

这个连接很简单,传感器有 10 个引脚,但你只需要连接 4 个。

使用 Due 将 3.3v 连接到 3V3,GND 连接到地,Rx(DIO19) 连接到 Tx,Tx(DIO18) 连接到 Rx。确保你已经“交叉”了 UART 线,并记住你不能使用 Tx(DIO1) 和 Rx(DIO0),除非你想放弃使用串行术语来监视你的读数。我已经将 Serial1 用于传感器,尽管您可以使用其余三个 UART 中的任何一个。

** 如果您现在想绕过 Arduino 并测试直接向传感器发送命令,只需打开腻子或您最喜欢的串行术语并以 9600 波特、8 位、无奇偶校验、1 个停止位连接。您可能需要在每次提交 ascii 时启用发送“/r/n”。**

***这个传感器是3.3v TTL 所以如果 coms 源自 5v 源,请务必使用逻辑移位器***

校准传感器

有几种方法可以校准 CO2 传感器。最好的方法之一是将传感器浸入不含二氧化碳的已知气体(氮气)中。这将产生一个已知的零读数。如果您周围没有任何氮气,您也可以使用新鲜空气进行相当准确的校准。所以带上你的太阳镜,我们要去实地考察。

当你在外面时,你会想要运行下面的示例草图并取消注释

calibrateFreshAir();  

在 Setup() 例程中。这会通过串行向传感器发送“G”命令,请求...

校准!现在这并不完美,因为我不知道纽约市 14 楼当前的二氧化碳浓度条件到底是什么(这里可能比夏威夷的“地球”平均值高一点)。但由于我们实际物理感知环境差异的阈值在 1,000 ppm 左右,我认为我们可以非常安全地使用 450 ppm 的新鲜空气读数作为我们测量会议室和教室的校准点。

char buffer[20] ={0}; int c =0;无效设置(){ Serial.begin(9600); while(!Serial){}; Serial1.begin(9600); while(!Serial){}; Serial.println("开始读取二氧化碳水平"); //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //校准FreshAir(); }无效循环(){延迟(10000); c =请求(“Z”); Serial.print("CO2:");Serial.println(c); Serial.println(""); } int Request(char* s) { buffer[0] ='\0'; int idx =0;命令;延迟(250); while(Serial1.available()) { buffer[idx++] =Serial1.read(); } 缓冲区[idx] ='\0'; uint16_t rv =0; switch(buffer[1]) { case 'T' :rv =atoi(&buffer[5]);如果(缓冲区 [4] ==1)rv +=1000;休息;默认值:rv =atoi(&buffer[2]);休息;返回房车; } void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t校准新鲜空气(){返回请求(“G”); } void setOperatingMode(uint8_t mode) { sprintf(buffer, "K %u", mode);命令(缓冲区); }  

还要快速记下草图顶部的两个 #define 语句。当您第一次拆箱时,您可能需要使用 setOperatingMode() 对其进行配置。此草图旨在在轮询模式下工作。如果您已成功校准并正在向终端读取 CO2 水平,您就可以继续将其发布到云端。让我们连接到 Adafruit IO 并开始可视化数据。

将 CO2 指标发布到云端

如果您还没有使用 anduinoWiFi 连接到 Adafruit IO,请查看这篇将开始的项目文章。它涵盖了我将在此处掩盖的所有细节。这是让您开始每分钟发布二氧化碳水平的草图。

#include  #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // WiFi 参数 #define WLAN_SSID "YOUR_SSID" #define WLAN_PASS "YOUR_PASSWD" // Adafruit IO #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "YOUR_AIO_USERNAME" #define AIO_KEY "YOUR_AIO_KEY" WiFiClient 客户端; Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); /******************************** 饲料 ****************** *********************/ // 为 co2 设置提要 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/co2"); /*创建一个AnduinoLCD实例*/ AnduinoLCD LCD =AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, 13);静态 int co2 =0;静态 int co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char buffer[20] ={0};无效设置(){ Serial.begin(115200);延迟(3000); Serial1.begin(9600); //连接到WiFi &Adafruit.IO connectToWiFi(); connectToAdafruit(); //初始化LCD LCD.begin(); LCDinit(); //CO2 校准和初始设置 //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //校准FreshAir(); } void loop() { // ping adafruit io 几次以确保我们保持连接 if(!mqtt.ping(3)) { // 重新连接到 adafruit io if(!mqtt.connected()) connect(); } // 抓取当前的co2读数 co2 =Request("Z"); //将int temp转换为char数组char b[20];字符串 str; str=String(co2); for(int i=0; i=0) mqtt.disconnect(); Serial.println(F("正在重试连接..."));延迟(5000); Serial.println(F("Adafruit IO 已连接!")); } void displayCo2(int co2, int co2Prev) { //清除过时值 LCD.setTextColor(ST7735_BLACK); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(40,60); LCD.setTextSize(3); LCD.print(co2Prev); LCD.setTextSize(1); LCD.print("ppm"); //打印新值 LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(40,60); LCD.setTextSize(3); LCD.print(co2); LCD.setTextSize(1); LCD.print("ppm"); } void connectToWiFi() { // 连接到 WiFi 接入点。延迟(10); Serial.print(F("连接到")); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS);而(WiFi.status()!=WL_CONNECTED){延迟(500); Serial.print(F(".")); Serial.println(F("WiFi 已连接!")); } void connectToAdafruit() { // 连接到 adafruit io connect(); } void LCDinit() { LCD.setBacklight(ON); LCD.fillScreen(ST7735_BLACK); //清屏 LCD.showBanner(); //加载Andium Banner LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(0,40); LCD.print("二氧化碳:"); } uint16_t Request(char* s) { buffer[0] ='\0'; int idx =0; //为CO2命令发送命令请求'Z';延迟(250); while(Serial1.available()) { buffer[idx++] =Serial1.read(); } 缓冲区[idx] ='\0'; uint16_t rv =0; rv =atoi(&buffer[2]);返回房车; } void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t校准新鲜空气(){返回请求(“G”); } void setOperatingMode(uint8_t mode) { sprintf(buffer, "K %u", mode);命令(缓冲区); }  

而已!

这东西非常敏感,即使是通风良好的房间,您也几乎可以根据 CO2 浓度来跟踪房间入住率。是时候向你的教授证明让你失望的不是“diff eq”,而是通风不良!是时候将班级转移到海滩了!

代码

安度诺
用于 Andium(Anduino) 扩展板的 Arduino 库。将您的 Arduino 转换为 AndiumNode。https://github.com/andium/Anduino

制造工艺

  1. CO2 与 Nd 激光切割:有什么区别?
  2. Sensirion:微型二氧化碳传感器
  3. 传感器数据与 Raspberry Pi 微处理器的集成
  4. 破解乐高 EV3:构建自己的物体传感器“眼睛”
  5. 如何将 Lego Mindstorms NXT 超声波传感器连接到 Raspberry Pi
  6. 树莓派上的 HC-SR04 超声波距离传感器
  7. 将 A111 脉冲雷达传感器与 Raspberry Pi 结合使用
  8. 提高货架上的客户服务水平
  9. 射频无线电源释放传感器网络的无处不在
  10. SARS-CoV-2 RapidPlex 传感器的 5 Ws
  11. 工业维修等级是多少?
  12. BME680 – 环境传感器综合指南