大家好,我是程序员小哈。
是时候分享知识了。今天我想和大家分享一个激光粉尘传感器模块,希望对大家有所帮助。
ZH07粉尘传感器简介
ZH07 利用米氏散射原理,可以检测空气中的粉尘颗粒。该传感器具有良好的一致性和稳定性。
传感器还具有串口输出和串口输出 PWM 输出能力,使用方便,体积小,集成应用方便。
应用场景
- 空气净化器
- 新风系统
- 空气质量监测
- 便携仪表
管脚定义
硬件连接
ZH07串口输出是TTL我们可以使用电平串口输出USB转TTL串口连接,用串口助手调试,也可以用单片机(如STM32)串口,与之交叉通信,数据分析,然后得到粉尘浓度值。
我们只需要连接传感器模块,接传感器模块 、、和 四个引脚就可以了。
ZH07与USB转TTL模块连接
5V | VDD |
GND | GND |
TXD | RXD |
RXD | TXD |
ZH07与STM32连接
5V | VDD |
GND | GND |
U4T | RXD |
U4R | TXD |
串口通信
以上两种调试方法均采用ZH调试07串口输出时,串口通信的相关参数如下:
波特率 | 9600 |
数据位 | 8位 |
停止位 | 1位 |
校验位 | 无 |
ZH07传感器的默认通信模式是主动上传。当硬件连接正确,串口按正确参数配置并打开时,我们将收到传感器模块在串口助手中上传的数据,上传32字节数据:
例如,收到的一帧传感器数据如下:
42 4D 00 1C 00 0B 00 0E 00 0F 00 0B 00 0E 00 0F 08 80 02 7B 00 72 00 0E 00 03 00 00 00 32 02 B5
主动上传协议各字节的数据含义如下:
最后两个字节是验证值。验证值的计算方法是添加前30个字节的数据。结果中的16位数据为验证值,存储顺序为前8位,后8位。
通过收到的传感器数据,我们可以得到PM1.0、PM2.5及PM以上数据为例,我们得到的传感器测量结果为:
PM1.0 测量结果 = 0x00 * 256 0x0B = 11 μg/m3;
PM2.5 测量结果 = 0x00 * 256 0x0E = 14 μg/m3;
PM10 测量结果 = 0x00 * 256 0x0F = 15 μg/m3;
:PM1.0、PM2.5、PM10 测量结果的范围为 0 ~ 1000 μg/m3。
问答模式和主动上传模式切换
ZH07粉尘传感器模块也可以切换上传数据的模式:
发送: FF 01 78 41 00 00 00 00 46
,设置成问答模式;
发送: FF 01 78 40 00 00 00 00 47
,设置为主动上传模式。
问答模式通信指令
在问答模式下发送: FF 01 86 00 00 00 00 00 79
,一帧传感器数据每发送一帧。
: 问答数据帧的验证值计算方法不同于主动上传数据帧的验证方法。问答式验证和第1(从0开始计数)字节到第7字节 ,然后对结果的低8位进行处理 , 操作,结果为验证值。
STM32解析ZH粉尘传感器数据07
要想实现STM32解析ZH07传感器数据,首先,我们应该能够正确、完整地获取一帧数据。由于主动上传模式每次上传的数据字节数相同,我们可以通过固定长度接收或加班正确获取完整的帧数据。
获取一帧数据后,我们需要分析这一帧数据。分析的内容包括收到的数据长度是否为32字节,计算出的验证值是否与收到的验证值一致。也可以判断这一帧数据中的一些固定位是否与协议预设一致,比如收到的前两个字节是否为:42 4D
,验证通过后,我们可以按照协议规定的位置进行验证PM1.0、PM2.5、PM转换10浓度值。
具体验证过程如下:
if(USART4_RX_STA&0x8000) { uart4Len=USART4_RX_STA&0x3f; ///获得此次收到的数据长度 if(uart4Len==32) { nSum=0; for(i=0;i<uart4Len-2;i ) { nSum =USART4_RX_BUF[i]; } if((nSum>>8)==USART4_RX_BUF[30] && (nSum&0x00FF)==USART4_RX_BUF[31]) { nPM10=USART4_RX_BUF[10]*256 USART4_RX_BUF[11]; nPM25=USART4_RX_BUF[12]*256 USART4_RX_BUF[13]; nPM100=USART4_RX_BUF[14]*256 USART4_RX_BUF[15]; printf("PM1.0浓度为=%d μg/m3;PM2.浓度为=%d μg/m3;PM10浓度为=%d μg/m3 。\r\n",nPM10,nPM25,nPM100);
}
else
{
printf("返回数据校验值错误 \r\n");
}
}
USART4_RX_STA=0;
memset(USART4_RX_BUF, 0, sizeof(USART4_RX_BUF)); //清空数组
}
源码获取
小哈哥 中提供本文实例的测试Demo,公众号后台回复:,获取小哈哥联系方式。
结果展示
: ZH07粉尘传感器还有PWM输出方式,PWM输出默认为3.3V TTL电平,通过计算一个输出周期中,高低电平的时间进而求得PM2.5的浓度,PWM输出仅能输出PM2.5数据。
总结
怎么样?有没有收获?可以文末留言交流一下哈,或者加小哈哥微信,我们群里聊。
好了,今天的文章内容到这里就结束了,希望对你有帮助,我们下一期见!~
欢迎加入
2022年抱团成长:,里面有更多技术解读和资料分享,让我们一起抱团学习、成长、交流、分享,更可以与小哈哥一对一交流,现在加入还有部分优惠名额。