电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
基于鸿蒙系统的家庭燃气报警器
分 享
扫描二维码分享
基于鸿蒙系统的家庭燃气报警器
鸿蒙
Hi3861
MQ-2
嵌入式从0到1
关注
发布时间: 2020-12-01
丨
阅读: 659
### 应用场景 应用于家庭和工厂的气体泄漏监测装置, 适宜于液化气、丁烷、丙烷、甲烷、酒精、氢气、人工煤气、烟雾等的探测。 ### 产品说明: #### 特点 * 广泛的探测范围 * 高灵敏度 * 快速响应恢复 * 优异的稳定性 * 寿命长 * 简单的驱动电路 #### 适用气体 液化气、甲烷、煤气 ### 基本参数 ![MQ-2可燃气体传感器](https://img-blog.csdnimg.cn/2020112921010756.png) A0 和 A1 之间是短接; B0 和 B1 之间是短接; H0 和 H1之间的电阻为加热电阻,MQ-2 的加热阻值为:加热电阻:31Ω±3Ω ; 在空气中,A 和 B 之间的电阻为敏感体电阻,其阻值为1 KΩ; 加热电压:5.0V±0.2V 加热电流:≤180mA 加热功率: ≤900mW ### 检测原理 MQ-2型可燃气体传感器,它是由二氧化锡半导体气敏材料构成,属于表面离子式N型半导体。当处于200~300℃温度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与可燃气体接触时,如果晶粒间界处的势垒受到该可燃气体的调制而变化,就会引起表面电导率的变化。利用这一点就可以获得这种可燃气体存在的信息。 MQ-2可燃气体传感器在一定工作条件下,接触同一种可燃气体,其电阻值Rs随气体浓度变化的特性称之为灵敏度特性,用K表示。 K=Rs/Ro,其中Ro为可燃气体传感器在洁净空气条件下的电阻值,Rs为可燃气体传感器在一定浓度的检测可燃气体中的电阻值。 ![](https://img-blog.csdnimg.cn/20201129210220606.png) 我们观察上图,可以看出,当处于一种气体中时,随着气体浓度的升高 K值降低,由于Ro为常量,所以**随着气体浓度的升高--K值降低即Rs降低,即其电阻降低**。 ### 原理图 ![](https://img-blog.csdnimg.cn/20201129210243865.png) 图中电阻Rh为加热电阻,电阻Rs为传感器的阻值,其阻值随着周围气体的浓度变化而变化; 电阻Rs和电阻R2串联到一起,ADC求得的就是两个电阻分压后的电压值。 R2的电阻值固定不变,**Rs随浓度变高而变小**,根据分压原理,那么ADC处测得的电压将升高,我们只需要根据实际情况,设定一定值为报警阈值,当ADC处的电压高于阈值时,蜂鸣器响,这样使用MQ-2制作燃气报警器就做出来了。 | **引脚** | **描述** | | --- | --- | | A11 | ADC对应的引脚,GPIO11/UART2_TXD/SPI0_RXD/@@**ADC5**/PWM2_OUT | | A9 | 蜂鸣器对应的引脚,GPIO9/UART2_RTS/SPI0_TXD/ADC4/@@**PWM0_OUT**/I2C0_SCL | ### 代码实现 本实例主要用到了两个知识点,一个是使用Hi3861自带的ADC功能获取MQ-2模块的输出电压,另一个是当MQ-2输出电压大于阈值之后,使用PWM功能驱动蜂鸣器响。 本实例的实现过程大致如下: 1. 本实例的入口函数`MQ2ExampleEntry()` ,该函数主要完成了本实例使用的ADC和PWM功能的初始化,并在最后创建了一个新的线程`MQ2_Task()` ,该线程主要用于循环获取ADC的值,当ADC的值超过阈值时,启动PWM使蜂鸣器响,用于对身边的人进行预警。 ```C static void MQ2ExampleEntry(void) { unsigned int ret = 0; GpioInit(); //蜂鸣器初始化 hi_pwm_set_clock(PWM_CLK_XTAL); //设置时钟源为晶体时钟; IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_PWM0_OUT);//IO复用为PWM功能 ret = GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);//设置为输出 if (ret != WIFI_IOT_SUCCESS) { printf("=====ERROR======gpio -> GpioSetDir ret:%d \r\n", ret); return; } hi_pwm_init(HI_PWM_PORT_PWM0);//初始化PWM hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_GPIO); /@@* GPIO11 ADC5 */ ret = hi_gpio_set_dir(HI_GPIO_IDX_11, HI_GPIO_DIR_IN); if (ret != HI_ERR_SUCCESS) { printf("===== ERROR ======gpio -> hi_gpio_set_dir1 ret:%d\r\n", ret); return; } osThreadAttr_t attr = {0}; attr.name = "MQ2_Task"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = 1024; attr.priority = osPriorityNormal; if(osThreadNew((osThreadFunc_t)MQ2_Task,NULL,&attr) == NULL) { printf("Failed to create MQ2_Task ! \r\n"); } } SYS_RUN(MQ2ExampleEntry); ``` 2. 新线程中,循环判断MQ-2模块输出的电压是否超过阈值,超过阈值将触发蜂鸣器工作。 ![](https://img-blog.csdnimg.cn/20201129210307245.png) 本实例使用的两个知识点,具体的使用方法参见之前咱们分享的网文: Hi3861开发板上的ADC功能如何使用,请参考下文: [**一个ADC实现多个按键检测**](https://mp.weixin.qq.com/s/iZV_5Qe2YbA5Mw_ucIIBCg) 如何使用PWM输出驱动无源蜂鸣器工作,请参考下文: [**基于鸿蒙操作系统的《爱若琉璃》(蜂鸣器版本)**](https://mp.weixin.qq.com/s/32KI7H_ASYNOwH-P7FjbRA) 本实例的完整工程,在本文留言区置顶消息处获得。 ### 结果展示 **结果展示过程现象描述:** 整个板子刚上电的时候,输出电压为0.21V左右,然后输出电压逐渐升高至2.39V(超过阈值),然后随着系统预热,输出电压逐渐降低,2分钟以后大约降到0.45V左右,此后MQ-2模块的输出电压持续降低,大约十分钟时间,电压稳定到0.305V,20分钟稳定到0.290V。(所以) 此时用手摸MQ-2模块有微微发热的感觉。 触发一次蜂鸣器报警,一分钟后降至0.45V,大约三分钟,MQ-2的输出电压可以恢复至0.31V。 所以如果系统尚未稳定就开始判断,可能会出现误报的情况。 断电,隔20分钟冷却后,再次上电,初始输出电压仍为0.27V左右,然后输出电压升至0.54V,随后五分钟内降至0.290V,应该算是稳定了。 上述测试过程没有完全重现,此过程仅供参考。 ### 欢迎关注 程序员小哈带你玩转嵌入式,微信搜索:**嵌入式从0到1**,更多干货等着你。 也可以进入小哈哥的个人博客:[www.xiaohage.com](www.xiaohage.com) 获取更多内容。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
嵌入式从0到1
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交