Arduino&Dart-甲醛检测仪

Arduino&Dart-甲醛检测仪

装修完房子一年了,不知道空气质量是否合格,所以就打算,检测空气质量,其中一项便是甲醛。网上的许多传感器不知道是否靠谱,遂自己用Arduino和达特甲醛传感器,自己制作了一个。

材料

Arduino Mega 2560 开发版
达特WZ-S-k传感器(K代表插针版)
杜邦线一些

代码

Arduion

/*接线
 TX-Rx1
 RX-TX1
 如果没有任何数据返回,请检查接线
 */
#define DebugSerial Serial
#define HCHOSerial Serial1
unsigned char FucCheckSum(unsigned char *i, unsigned char ln);
byte buffer[9] = {
     };
byte Ask_Recever_Moce_Code[9] = {
     0xFF,0x01,0x78,0x41,0x00,0x00,0x00,0x00,0x46};//切换到问答模式
byte Auto_Send_Mode_Code[9] = {
     0xFF,0x01,0x78,0x40,0x00,0x00,0x00,0x00,0x47};//切换到主动上传模式
byte Ask_code[9] = {
     0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};//问答模式下,请求发送
int count = 0;
bool bufferComplete = false;
void setup() {
     
  DebugSerial.begin(9600);
  HCHOSerial.begin(9600);
  /*
  for(int i=0;i<9;i++){
    HCHOSerial.write(Ask_Recever_Moce_Code[i]);
    //HCHOSerial.write(Auto_Send_Mode_Code[i]);//根据需要打开注释切换模式
  }
  */
}

void loop() {
     
  for(int i=0;i<9;i++){
     
    HCHOSerial.write(Ask_code[i]);//在问答模式下请求数据
  }  
  get_HCHO();
  int h1 = (int)buffer[2]*256+(int)buffer[3];
  int h2 = (int)buffer[6]*256+(int)buffer[7];
  DebugSerial.print("HCHO: ");
  DebugSerial.print(h1);
  DebugSerial.print(" ppb ");
  DebugSerial.print(h2);
  DebugSerial.println(" ug/m3");
  bufferComplete = false;
  delay(1000);
}

void get_HCHO()
{
     
  int flag_end = false;
  int flag_start = false;
  while (flag_end == false)
  {
     
    if (HCHOSerial.available() > 0) {
     //接收到数据
      byte inChar = HCHOSerial.read();
      buffer[count] =inChar;
      if (buffer[count] == 0xFF){
     //接收到起始标志
        count = 0;  
        flag_start = true;
        DebugSerial.println("\r\n##################################################");
        DebugSerial.println("start");
      }
      count++;
      if (count >=9){
     //接收9个byte数据
        count = 0;
        if (flag_start){
     
          for (int i = 0 ; i < 9 ; i++){
     
            DebugSerial.print(buffer[i], HEX);//以16进制输出接收到的数据
            DebugSerial.print(",");
          }
          DebugSerial.println("");
          if(buffer[8]==FucCheckSum(buffer,9)){
      //校验  
            flag_end=true;
          }
          
        }
      }
    }
  }
}
unsigned char FucCheckSum(unsigned char *i, unsigned char ln){
     
  unsigned char j, tempq=0; i+=1;
  for(j=0; j<(ln-2); j++){
     
    tempq+=*i;
    i++; 
  }
  tempq=(~tempq)+1;
  return(tempq);
}

Arduino&Dart-甲醛检测仪_第1张图片

可以用python接受并保存数据

需要将端口号改成自己的,并关闭串口监视器,串口绘图仪

# !/usr/bin/python
# encoding:utf-8
import time
import serial

ser = serial.Serial(
    port='/dev/cu.wchusbserial1410',#需要改成自己的串口编号:arduino软件-工具-端口:“”(双引号里面的)
    baudrate=9600,
    parity=serial.PARITY_ODD,  # 校验位 
    stopbits=serial.STOPBITS_TWO,  # 停止位
    bytesize=serial.SEVENBITS  # 数据位
)
data = ''

while True:
    data = ser.readline()
    t = time.time()
    ct = time.ctime(t)
    print(ct, ':')
    print(data)

    f = open('./HCHO.txt', 'a')
    f.writelines(data.decode('utf-8'))
    f.close()

Arduino&Dart-甲醛检测仪_第2张图片![结果](https://img-blog.csdnimg.cn/20191111161943352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDAwOTUw,size_16,color_FFFFFF,t_70

参考资料

1.传感器手册: https://pan.baidu.c/s/1MtzOl04e1RSN72KxVXHT4A 提取码: 14y3
2.香港空气质量标准: https://pan.baidu.com/s/1Ck0VIDZUy6R1B-mmRSwa7A 提取码: xini 复制这段内容后打开百度网盘手机App,操作更方便哦

注意

传感器请勿接近高浓度酒精或香烟,否则会造成,标定值偏移。

你可能感兴趣的:(Arduino,Arduino,甲醛,Dart,python,空气质量)