锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

5.15 综合案例2.0-燃气检测系统

时间:2022-07-04 03:00:00 甲烷传感器类型

综合案例2.0-燃气检测系统

  • 简介
    • MQ2气体传感器
  • 准备
  • 硬件连接图
  • 代码流程
  • 功能实现
    • 1.开发物联网平台
    • 2.设备端开发
      • 调试
    • 3.物联网应用开发
      • 3.11新建‘普通项目’
      • 3.2关联产品和设备
      • 3.33新建‘移动应用’
      • 3.4页面设计
      • 3.5关联数据源
      • 3.6.业务逻辑开发
      • 3.7在线预览和发布

简介

天然气是家庭烹饪取暖的主要燃料,其主要成分是甲烷(CH4)还含有少量丙烷、乙烷、丁烷等少量气体。天然气本身无色无味,密度低于空气。天然气泄漏难以察觉,空气浓度达到5%~15%的时候,明火会爆炸。由于使用不当和人为因素,家庭天然气的普及导致燃气泄漏和爆炸事故不断发生。
本案例教开发人员逐步建立燃气泄漏检测系统。

MQ2气体传感器

MQ-2常用于家庭和工厂的气体泄漏监测装置,适用于检测液化气、苯、烷、酒精、氢气、烟雾等。MQ-准确地说,它是一种多种气体探测器。

原理
MQ-2型烟雾传感器属于二氧化锡半导体
气敏材料N型半导体。2000~在300摄氏度时,二氧化锡吸附空气中的氧气,形成氧气的负离子吸附,降低半导体中的电子密度,从而增加其电阻值。当与烟雾接触时,如果晶粒间界处的势垒被烟雾调整并改变,则会导致表面导电性的变化。烟雾浓度越大,导电性越大,输出电阻越低,模拟信号越大。

特性

  • MQ-2型传感器对天然气、液化石油气等烟雾的灵敏度较高,特别是烷基烟雾,具有良好的抗干扰性,能准确消除刺激性非可燃烟雾的干扰信息。
  • MQ-2型传感器具有良好的重复性和长期稳定性。初始稳定性,响应时间短,长期工作性能好。需要注意的是,在使用前必须加热一段时间,否则其输出电阻和电压不准确。
  • 可燃气体和烟雾的检测范围为1000~10000ppm(ppm1.体积浓度ppm=1立方厘米/1立方米
  • 电路设计电压范围宽,24V以下均可,加热电压5±0.2V

注:如果加热电压过高,输入电流过大,内部信号线熔断,使设备报废。

准备

本案所需的硬件

器材 数量
HaaS506开发板 1
MQ2气体传感器 1
SIM卡 1
杜邦线 若干

硬件连接图

在这里插入图片描述

代码流程

1.连接阿里云平台。
2.重复读取MQ2气体传感器电压上传阿里云数据。
3、使用移动应用功能,显示天气,MQ2体传感器电压变化,设备报警。

功能实现

1.开发物联网平台

首次使用物联网平台的读者在打开实例后需要使用物联网平台功能。您也可以使用免费的公共实例进行开发。在阿里巴巴云物联网平台中,选择左上角的华东2-上海,点击公共实例打开。

1.平台产品创建可参考haas506 2.0开发教程-aliyunIoT
2.创建产品属性(添加剂模型)

  • 选择产品功能定义编辑草稿
    在这里插入图片描述
  • 添加自定义功能
  • 添加标识符数据类型(标识符应与代码一致)
  • 点击发布上线
    在这里插入图片描述
  • 点击确定
    在这里插入图片描述

2.设备端开发

  • 第一次使用开发板的读者可以遵循haas5062.0开发教程-导学构建开发环境。
  • 构建后,复制以下代码Visual Studio Code,将产品证书复制到代码的相应位置。
    在这里插入图片描述
  • main.py
# coding=utf-8from  driver import  ADCfrom  driver import  GPIOimport  networkimport  ujsonimport  utime as  timeimport  modemfrom    aliyunIoT import  Deviceimport  kv #当iot当设备连接到物联网平台时,触发connect' 事件def  on_connect(data):        global  module_name,default_ver,productKey,deviceName,deviceSecret,on_trigger,on_download,on_verify,on_upgrade    print('***** connect lp succeed****')    data_handle = {
     }    data_handle['device_handle'] = device.getDeviceHandle()#当连接断开时,触发'disconnect'事件def on_disconnect():    print('linkkit is disconnected')#上传报警灯状态warning_data = {
     }#当iot云端下发属性设置时,触发'props'事件def on_props(request):    params=request['params']    params=eval(params)    warn = params["alarmLight"]    warning_data["alarmLight"]= warn    warning_data_str=ujson.dumps(warning_data)    data1={
             'params':warning_data_str        }          device.postProps(data1)#当iot云端调用设备service时,触发'service'事件def on_service(id,request):    print('clound req id is {} , req is {}'.format(id,request))#当设备跟iot平台通信过程中遇到错误时,触发'error'事件def on_error(err):    print('err msg is {} '.format(err))#网络连接的回调函数def on_4g_cb(args):     global g_connect_status     pdp = args[0]     netwk_sta = args[1]     if netwk_sta == 1:         g_connect_status = True     else:         g_connect_status = False#网络连接def connect_network():     global net,on_4g_cb,g_connect_status     #NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.     net = network.NetWorkClient()     g_register_network = False     if net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:         g_register_network = True     else:         g_register_network = False     if g_register_network:    #注册网络连接的回调函数on(self,id,func); 1代表连接,func 回调函数 ;return 0 成功         net.on(1,on_4g_cb)             net.connect(None)     else:         print('网络注册失败')     while True:         if g_connect_status:             print('网络连接成功')             break         time.sleep_ms(20)#动态注册回调函数def on_dynreg_cb(data):     global deviceSecret,device_dyn_resigter_succed     deviceSecret = data     device_dyn_resigter_succed = True # 连接物联网平台def dyn_register_device(productKey,productSecret,deviceName):    global on_dynreg_cb,device,deviceSecret,device_dyn_resigter_succed    key = '_amp_customer_devicesecret'    deviceSecretdict = kv.get(key)    print("deviceSecretdict:",deviceSecretdict)    if isinstance(deviceSecretdict,str):            deviceSecret = deviceSecretdict     if deviceSecretdict is None or deviceSecret is None:        key_info = {
                 'productKey': productKey  ,            'productSecret': productSecret ,            'deviceName': deviceName            }        # 动态注册一个设备,获取设备的deviceSecret        #下面的if防止多次注册,当前若是注册过一次了,重启设备再次注册就会卡住,        if not device_dyn_resigter_succed:            device.register(key_info,on_dynreg_cb)   def upload_value(n):    global value_data    value_data["gasVoltage"]= n    value_data_str=ujson.dumps(value_data)    data={
             'params':value_data_str        }          device.postProps(data)if __name__ == '__main__':    ICCID=None    g_connect_status = False    net = None    device = None    deviceSecret = None    deviceName = None    #替换以下产品信息    ##################################    productKey = "a1JuD7ay6Pj"    productSecret = "yV68ScGy5DgEczVx"    ##################################    device_dyn_resigter_succed = False    # 连接网络    connect_network()     # 获取设备的IMEI 作为deviceName 进行动态注册    deviceName = modem.getDevImei()    #获取设备的ICCID    ICCID=modem.sim.getIccid()    #初始化物联网平台Device类,获取device实例    device = Device()    if deviceName is not None and len(deviceName) > 0 :     #动态注册一个设备        dyn_register_device(productKey,productSecret,deviceName)    else:        print("获取设备IMEI失败,无法进行动态注册")    while deviceSecret is None:        time.sleep(0.2)    print('动态注册成功:' + deviceSecret)    key_info = {
             'region' : 'cn-shanghai' ,        'productKey': productKey ,        'deviceName': deviceName ,        'deviceSecret': deviceSecret ,        'keepaliveSec': 60,        }    #打印设备信息    print(key_info)    #device.ON_CONNECT 是事件,on_connect是事件处理函数/回调函数    device.on(device.ON_CONNECT,on_connect)    device.on(device.ON_DISCONNECT,on_disconnect)    device.on(device.ON_PROPS,on_props)    device.on(device.ON_SERVICE,on_service)    device.on(device.ON_ERROR,on_error)    device.connect(key_info)    #主程序    #气体传感器    adc=ADC()    adc.open("ADC1")    value_data = {
     }    while True:        value=adc.readVoltage()        print('v:',value)        print('--------------------------------------------')        upload_value(value)        time.sleep(1)    adc.close()
  • board.json
{
         "version": "2.0.0",    "io": {
             "ADC0": {
                     "type": "ADC",                "port": 0,                "sampling": 12000000            },        "ADC1": {
                       "type": "ADC",                  "port": 1,                  "sampling": 12000000            },        "serial1":{
                     "type":"UART",                "port":0,                "dataWidth":8,                "baudRate":115200,                "stopBits":1,                "flowControl":"disable",                "parity":"none"            },        "serial2":{
                     "type":"UART",                "port":1,                "dataWidth":8,                "baudRate":115200,                "stopBits":1,                "flowControl":"disable",                "parity":"none"            },        "serial3":{
                     "type":"UART",                "port":2,                "dataWidth":8,                "baudRate":115200,                "stopBits":1,                "flowControl":"disable",                "parity":"none"            }        },    "debugLevel": "ERROR",    "repl": "enable",    "replPort": 0    }    

调试

1、串口调试工具log,网络连接成功动态注册成功每秒打印MQ2气体传感器电压
在这里插入图片描述
2、云端有数据传入,打开实时刷新,显示数据会自动更新。
在这里插入图片描述

3、物联网应用开发

以下是物联网应用开发流程,接下来按以下流程介绍移动端应用的开发。
在这里插入图片描述

3.1新建‘普通项目’

  • 使用阿里云IoTStudio创建项目。
  • 在项目管理新建空白项目
    在这里插入图片描述

3.2关联产品和设备

在这里插入图片描述
在这里插入图片描述

3.3新建‘移动应用’

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击上图红框中的‘组件’,就可以看到可用的组件列表。各组件的使用说明请参考组件说明

3.4页面设计

案例使用三个组件:

  • 实时曲线 显示传感器实时数据
  • 指示灯 显示报警状态
  • 天气 用于显示目的地天气

将三个组件拖到中间画布区
在这里插入图片描述

3.5关联数据源

关联数据源分为如下三个步骤
关联产品
关联设备
关联属性
每个组件单独设置
1、‘指示灯’组件设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置好了之后,设置报警
在这里插入图片描述
2、同样的方法设置‘实时曲线’。
在这里插入图片描述
3、设置‘天气’组件,选择需要的地点。

在这里插入图片描述

3.6业务逻辑开发

业务逻辑的主要目的是为了方便用户设定物联网设备端的行为逻辑,常规的物联网系统都是在设备端固话行为逻辑,出厂后如果需要修改设备行为,则需要进行OTA升级。
新建一条燃气超阈值就报警的规则。
在这里插入图片描述
系统自动进入到业务逻辑页面,点击左侧‘节点’,右侧是业务逻辑介绍。
在这里插入图片描述
1、选择目标节点
此逻辑需要判断设备上传的燃气电压值,当电压值超过阈值就打开报警,否则关闭报警。需要四个节点:

  • 设备触发节点
  • 条件判断节点
  • 开启报警灯节点
  • 关闭报警灯节点

分别从左侧拖出需要的节点。

在这里插入图片描述
2、建立节点间的关联关系,拖动鼠标将节点连接
在这里插入图片描述
3、业务逻辑编辑

  • 设备触发节点
    在这里插入图片描述
  • 条件判断节点
    在这里插入图片描述
    设备节点行为设定
    在这里插入图片描述
    在这里插入图片描述
    业务逻辑保存和部署
    在这里插入图片描述

3.7预览和发布上线

业务逻辑设定完毕之后,可以在“燃气监控报警系统”页面‘’保存‘’并点击‘预览’进行预览。
在这里插入图片描述
手机扫描二维码,可以在手机看查看数据。
在这里插入图片描述

相关文章