装修完房子一年了,不知道空气质量是否合格,所以就打算,检测空气质量,其中一项便是甲醛。网上的许多传感器不知道是否靠谱,遂自己用Arduino和达特甲醛传感器,自己制作了一个。
Arduino Mega 2560 开发版
达特WZ-S-k传感器(K代表插针版)
杜邦线一些
/*接线
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);
}
需要将端口号改成自己的,并关闭串口监视器,串口绘图仪
# !/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()
![结果](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,操作更方便哦
传感器请勿接近高浓度酒精或香烟,否则会造成,标定值偏移。