第一:烟雾浓度传感器原理
MQ-2可用于家庭和工厂的气体泄漏监装置,适宜于液化气、丁烷、丙烷、甲烷、酒精、烟雾等的探测。它的优点是灵敏度高、响应快、稳定性好。寿命长、驱动电路简单以及方便安装。
MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~3000摄氏度时,二氧化锡表面吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从面使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至面变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息烟雾浓度越大导电率越大,输出电阻越低,则输出的模拟信号就越大。
第二: 鸿蒙相关API函数分析
Init_E53_SF1()
void Init_E53_SF1(void)
功能描述:
初始化E53_SF1
MQ2_PPM_Calibration()
MQ2_PPM_Calibration()
功能描述:
MQ2传感器校准
Get_MQ2_PPM()
float Get_MQ2_PPM(void)
功能描述:
获取烟雾浓度ppm
第三:硬件设计
本案例使用开发板上,ADC输出引脚为第五脚,将E53_SF1扩展板插在 BearPi-HM_Nano 开发板上后,该ADC输出引脚与GPIO_13相连接,通过查看芯片手册可知GPIO_13对应的是 ADC Channel 6 ,所以需要编写软件去读取ADC Channel 6的电压实现对烟雾浓度的读取。
第四:软件设计
首先调用 Init_E53_SF1()
函数初始化E53_SF1所接的引脚的功能,再等待1s后进行校准,获取正常环境下传感器的参数,然后循环调用 Get_MQ2_PPM()
函数读取ppm值并通过串口打印出来,当ppm大于100时触发蜂鸣器报警,小于100时关闭报警。
static void Example_Task(void) { float ppm; Init_E53_SF1(); /****传感器校准****/ usleep(1000000); // 开机1s后进行校准 MQ2_PPM_Calibration(); // 校准传感器 while(1) { printf("=======================================\r\n"); printf("*************ADC_MQ2_example***********\r\n"); printf("=======================================\r\n"); ppm = Get_MQ2_PPM(); printf("ppm:%.3f \n", ppm); if(ppm > 100) { Beep_StatusSet(ON); } else { Beep_StatusSet(OFF); } usleep(1000000); // 延时1s } }
第五:编译调试
修改 BUILD.gn 文件
修改applications\BearPi\BearPi-HM_Nano\sample
路径下 BUILD.gn 文件,指定 e53_sf1_example
参与编译。
"C1_e53_sf1_mq2:e53_sf1_example", #"C2_e53_ia1_temp_humi_pls:e53_ia1_example", #"C3_e53_sc1_pls:e53_sc1_example", #"C4_e53_sc2_axis:e53_sc2_example", #"C5_e53_is1_infrared:e53_is1_example",
第六:运行结果
示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手查看日志,会打印以下信息,对着烟雾探头制作烟雾,ppm会升高蜂鸣器发出报警。
======================================= *************E53_SF1_example*********** ======================================= ppm:19.094 ======================================= *************E53_SF1_example*********** ======================================= ppm:18.797