当前位置: 首页 > news >正文

HarmonyOS系统中内核实现烟雾检测的方法

    大家好,今天我们主要来聊一聊,如何使用鸿蒙系统来操作烟雾浓度传感器。

 

目录

第一:烟雾浓度传感器原理

第二: 鸿蒙相关API函数分析

Init_E53_SF1()

MQ2_PPM_Calibration()

Get_MQ2_PPM()

第三:硬件设计

 第四:软件设计

第五:编译调试

修改 BUILD.gn 文件

第六:运行结果


第一:烟雾浓度传感器原理

    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 

相关文章:

  • 【科学文献计量】Networkx基础使用指南
  • 改进YOLOv5 | Stand-Alone Self-Attention | 针对视觉任务的独立自注意力层 | 搭建纯注意力FPN+PAN结构
  • 大数据项目之电商数仓、数据仓库概念、项目需求及架构设计
  • C生万物 | 底层之美,莫过于C【1024,从0开始】
  • Spring Boot集成第三方登录之微信登录
  • 【图像分割】基于遗传算法的进化聚类技术对彩色图像进行分割(Matlab代码实现)
  • Mybatis 拦截器 说明和使用 (二)
  • Vue.js 组件精讲(目前已有6614人一起学习)
  • 【Spring】一文带你吃透IOC技术
  • I2C知识大全系列二 —— I2C硬件及时序
  • Python基础入门(持续更新中)
  • 【预测模型-SVM预测】基于粒子群算法结合支持向量机SVM实现Covid-19风险预测附matlab代码
  • 初阶数据结构 二叉树常用函数 (二)
  • 【正点原子I.MX6U-MINI应用篇】4、嵌入式Linux关于GPIO的一些操作
  • 【C语言】解题训练
  • ES6指北【2】—— 箭头函数
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 08.Android之View事件问题
  • Angular 响应式表单 基础例子
  • ES6语法详解(一)
  • JAVA 学习IO流
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript HTML DOM
  • REST架构的思考
  • SpingCloudBus整合RabbitMQ
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • springMvc学习笔记(2)
  • TCP拥塞控制
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 百度地图API标注+时间轴组件
  • 判断客户端类型,Android,iOS,PC
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 硬币翻转问题,区间操作
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • gunicorn工作原理
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #13 yum、编译安装与sed命令的使用
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)斐波那契Fabonacci函数
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)鸿鹄云架构一服务注册中心
  • (转)socket Aio demo
  • (转)大型网站的系统架构
  • (转)四层和七层负载均衡的区别
  • (转载)PyTorch代码规范最佳实践和样式指南
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .equals()到底是什么意思?
  • .NET Framework杂记
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 材料检测系统崩溃分析
  • .net快速开发框架源码分享
  • .NET下ASPX编程的几个小问题