论坛首页 > 创客天地 > 首届立创商城电子制作节 > 家用燃气&火灾检测报警器(完结...
查看:4178  |  回复:24
家用燃气&火灾检测报警器(完结) 本帖主对外承接开发,联系作者
MiaoKo
4
主题
92
回复
发表于Mon Oct 10 15:48:47 CST 2016   |  只看该作者 1# 电梯直达

一、作品简介:

国庆期间空闲时间比较多,正好趁机赶出来了。已经发出制板,现在来简单介绍下这次的制作内容。

先上个PCB绘制完成后的3D:


为什么我这次选择制作这个东西呢?确实是有一番原因的,前端时间家里发生了燃气泄露事件,所幸发现还算及时,也有正确地进行处理,所以并未造成任何人身和财产损失,不过着实还很后怕。当时整个屋子里都充斥着浓浓的天然气刺鼻的味道,泄露是因为燃气管道和燃气灶的接口松脱了而导致的。事情处理了之后,我就想一定要安装一个可以检测到燃气泄露并进行报警的装置,现在亡羊补牢,为时不晚。在网上翻看了一下,发现现有的燃气报警器并不符合我预期的期望,还存在很大的改进空间,正好本人又是电子攻城狮一枚,也正好借这次制作节的机会来迅速搞定,并和大家一起分享下。

实现用途:作为家用的燃气泄露和火灾的探测和报警器使用

实现功能:

1)、能够实现较为准确的空气中天然气(CH4)的浓度检测,并在超过设定的浓度阀值后进行声、光报警提示,以便人们能够及时发现和处理燃气泄露事件;

2)、能够检测到周围环境是否有火灾事件产生,在检测到有火灾事件后,能够通过声、光方式进行报警,以便人们及时发现和处理火灾事件。

3)、具备较为准确的环境温度检测功能,一是用于传感器温度补偿算法,二是也可作为温度数据通过四位数码管显示出来供用户参考;

4)、其它的辅助功能还包括:84位数码管,用于燃气浓度数据显示,示警,火灾事件示警,温度数据显示;物体接近探测,以便系统可以实现自动开启和关闭数码管,更加智能化,并降低功耗;一个按键,位于报警器正中央位置,用于实现人机交互,可通过按键实现:报警解除,工作模式设置,火灾检测灵敏度设置,燃气传感器校准等操作;蜂鸣器,用于实现声音示警和操作提示声音提示;315MHZ无线数据发送模块,用以实现设备数据向主机推送或提供接口给其它智能家居设备系统,以实现兼容。

5)、方便的燃气浓度传感器校准,在出厂时,仅需在洁净空气中先调节可调电阻,使电路板的NG测试点电压输出为0,然后通过按键和数码管交互,选择进入校准界面,并放入1000ppm浓度的空气中,等待2分钟即可完成校准,以后就可以正常使用了。

设计的作用与意义:旨在为家庭用户提供一个多功能,全方面的家用异常情况(燃气泄露和火灾事件)检测报警装置。而且我也觉得每个家庭确实有必要有一个这样的东西,因为燃气泄露或各种原因导致的火灾事件是家庭事故中发生率最高的两类事件。

二、作品亮点:

         天然气浓度检测电路,采用催化燃烧式传感器MC105,配合差动放大电路和调零电路,能够使电路有效地避免由于环境温度、湿度变化而导致的传感器变化,使燃气浓度检测在正常工作范围内都能够保证很高的精度和稳定性。

         烟雾检测(火灾探测)电路,通过查询相关资料,选择使用光学烟雾传感器。 该类传感器能够比离子火灾传感器通过检测空气中的烟雾浓度变化,从而能够更早检测出火灾事件,并且无任何辐射。
        
人机交互:数码管进行声音显示,蜂鸣器进行声音提示,按键进行具体操作。通过按键的按下与否,按下的时长可实现功能选择、设置。

         本设计比起市面上现有的同类报警器来说,首先是能够准确稳定地检测空气中天然气的浓度,能够最大程度地避免误报警,并提供报警时的燃气浓度显示功能;二是增加了火灾检测报警功能,现在市面上我所看到的报警器基本不带有这项功能,但从家庭安全考虑出发,这项功能应该是很有必要的,并且这种基于光学传感器的火灾检测方式比起市面上一些基于离子传感器方式的火灾报警器来说,还没有潜在的辐射危害,并且能够在起火的烟雾阶段就检测到,以便及时处理火灾事件。

三、系统框架图:

        

四、原理图

基于催化燃烧的燃气浓度检测

基于光学烟雾检测的火灾探测

数码管驱动

蜂鸣器驱动

315MHZ无线数据发送

温度测量

基于光电的物体接近检测

MCUICSP和按键

供电

五、主要元器件清单

      1)、天然气传感器:炜盛MC105

      2)、烟雾检测传感器:光学迷宫(这个器件真不好找,名字也不一定正确,网上目前也只找到一家有卖的)

      3)、温度测量传感器:DS18B20 http://www.szlcsc.com/product/details_10283.html

      4)、光电传感器:ST188

      5)LED数码管驱动:TM1628 http://www.szlcsc.com/product/details_38154.html

      6)、低功耗精密运算放大器:TLC27L2 http://www.szlcsc.com/product/details_7456.html

      7)、MCU:PIC16F1829 http://www.szlcsc.com/product/details_37289.html

      8)、5V有源蜂鸣器:TMB09055 http://www.szlcsc.com/product/details_3242.html

      9)、315MHZ数据发送模块:H34A

      10)、0.4英寸8段四位绿色数码管:FJ4401AG http://www.szlcsc.com/product/details_19891.html


六、PCB

        

PCB图

PCB实物图

焊接后的调试

装上外壳后的实物图(正常温度显示)

装上外壳后的实物图(菜单显示)

装上外壳后的实物图(烟雾检测报警)


7、软件描述

因为采用的MCUMicroChip的,所以开发环境就用MPLAB X IDE,这个软件还是蛮强大的。就是有些臃肿,吃电脑性能。MCU底层操作直接由MPLAB插件MCC图形化配置自动生成

MCC配置



需要写的软件代码主要就是:应用初始化及应用进程控制,按键事件处理,蜂鸣器事件处理,基于DS18B20的温控进程,基于TM1628的数码管显示进程。

实现的功能包括:

    1)、  燃气泄露检测报警以及校准:上电后,延迟3分钟左右使能燃气检测,因为催化燃烧式的传感器需要一定来加热到工作状态,之前的传感器是处于不正确工作状态的,所以需要跳过。在平时运行时,如果检测到空气中的燃气值超过一定浓度,会控制蜂鸣器以一定间隔鸣叫进行声音提示,并在数码管上实时检测到的空气中的燃气浓度值(PPM),并闪烁数码管。在此状态下,按一下按键即解除报警,并暂时关闭燃气检测,2分钟后,继续进行正常的燃气检测,不然会造成刚解除又报警的BUG

    2)、  烟雾检测报警:通过检测空气中的烟雾浓度,来判断是否有火灾发生。和燃气泄露报警类似,在检测到空气中烟雾浓度超标后,会驱动蜂鸣器和数码管进行声光报警。数码管会显示FIRE字样,并闪烁。在报警状态下,按一下按键即解除报警,并暂时关闭烟雾检测,2分钟后,继续进行正常的烟雾浓度检测,不然会造成刚解除又报警的BUG

    3)、  功能选择以及设置:由数码管和按键共同构成一个菜单系统,在非报警状态下,按一下按键即进入菜单选择界面,并在数码管上实时显示菜单编号。轻触一下按键,可以进行菜单功能选择,并同时伴随一声短暂的蜂鸣器鸣叫来反馈选择操作;保持按键长按2s以上,即可设定该菜单对应的功能,设备同时发出一声长达1S的蜂鸣器鸣叫来反馈设定操作。菜单数目共有6个,包括以下功能设定:温度显示常开,温度显示仅在有物体靠近时,烟雾检测灵敏度设置为低,烟雾检测灵敏度设置为中,烟雾检测灵敏度设置为高,燃气浓度传感器校准(1000PPM).在设定功能后,即退出菜单选择。如果在菜单选择界面停留超过30S,而没有进行任何按键操作,则自动返回空闲状态。

    4)、  温度显示功能:可以进行0.25°精度的温度测量以及显示,并可根据菜单设置进行温度实时显示或仅在需要时显示。

    5)、  燃气浓度校准:基于MC105的催化燃烧式传感器,在组装完毕后,需要进行燃气浓度和传感器输出电压值的映射。我自己设定的方法是,在菜单中有一个功能来进行该操作。选择该功能后,在10S内将设备放在燃气浓度为1000PPM的透明密封箱体内,设备会自动采集当前燃气传感器的输出电压值,并认为这是1000PPM时的输出电压值,再通过燃气输出电压和浓度的转换公式来确定电压输出每个单位值对应的浓度变化。所幸这个传感器的浓度-电压变化还算线性。

    6)、(还未实现)报警信息通过自定义的315MHZ编码格式向外界发送,以便能够被其它对应;

代码采用状态机方式编程运行,限于篇幅,帖子中只贴出两处关键代码:

应用进程(由系统10ms定时调用):


应用进程流程图


void AppTask_PollHandler(void)
{
    switch(sys_run_data.sys_ccs)
    {
        case SYS_HSTATE_IDLE:
            if(sys_run_data.task == SysTask_Ng_Alarm)//燃气泄露报警激活
            {
                LedDisplay_Control(LedDisplay_ControlAction_Number,2,sys_run_data.NG_PPM);//开启显示

                AuxEvt_Add(AUX_EVT_BEEP_NG_ALARM);//启动蜂鸣器烟雾报警

                sys_run_data.BitFlag.LedDisplay_Toggle = 0;//清0数码管显示翻转标志位

                SYS_Timing_EVT_Add(&alarm_led_display_toggle_space_10ms_cnt, SYS_TIMING_EVT_ALARM_LED_DISPLAY_TOGGLE_SPACE);//启动LED定时翻转计时任务

                sys_run_data.sys_ccs = SYS_HSTATE_DISPLAY_NG_ALARM;//跳转到 燃气报警 应用流程
            }
            else if(sys_run_data.task == SysTask_Smoke_Alarm)//烟雾报警激活
            {
                LedDisplay_Control(LedDisplay_ControlAction_PredefinedChar,sizeof(LedDisplay_SmokeAlarmCharData),LedDisplay_SmokeAlarmCharData);//开启显示

                AuxEvt_Add(AUX_EVT_BEEP_SMOKE_ALARM);//启动蜂鸣器烟雾报警

                sys_run_data.BitFlag.LedDisplay_Toggle = 0;//清0数码管显示翻转标志位

                SYS_Timing_EVT_Add(&alarm_led_display_toggle_space_10ms_cnt, SYS_TIMING_EVT_ALARM_LED_DISPLAY_TOGGLE_SPACE);//启动LED定时翻转计时任务

                sys_run_data.sys_ccs = SYS_HSTATE_DISPLAY_SMOKE_ALARM;//跳转到 烟雾报警 应用流程
            }
            else if(sys_run_data.task == SysTask_Menu_Display)//菜单显示
            {
                sys_run_data.MenuFunctionIndex = MenuFunctionIndex_DisplayTemperature_AlwaysOn;//初始化菜单指示索引变量
                
                LedDisplay_Control(LedDisplay_ControlAction_PredefinedChar, 4, &LedDisplay_MenuCharData[sys_run_data.MenuFunctionIndex][0]);//开启菜单显示
                
                sys_run_data.BitFlag.LedDisplay_MenuQuit = 0;
                
                SYS_Timing_EVT_Add(&led_display_menu_quit_delay_10ms_cnt,SYS_TIMING_EVT_LED_DISPLAY_QUIT_DELAY);//启动LED显示菜单的退出延时 计时任务

                sys_run_data.sys_ccs = SYS_HSTATE_DISPLAY_MENU;//跳转到 菜单显示 应用流程
            }
            else if(sys_run_data.task == SysTask_Temperature_Display)//探测到有物体接近
            {
                sys_run_data.sys_ccs = SYS_HSTATE_DISPLAY_TEMPERATURE;
            }

            break;

        case SYS_HSTATE_DISPLAY_TEMPERATURE://温度数据显示

            if(sys_run_data.task == SysTask_Temperature_Display)//当前任务仍然是温度显示
            {
                if(DS18B20_GetRunState() == DS18B20_RunState_RunSus)//温度转换成功:进行显示
                {
                    //获取转换后的温度数据:整数部分
                    sys_run_data.TemperatureDataArray[0] = 0;
                    DS18B20_GetTemperature_Integer(1, &sys_run_data.TemperatureDataArray[1]);
                    
                    //获取转换后的温度数据:小数部分
                    DS18B20_GetTemperature_Decimal(1, &temp_u16);
                    sys_run_data.TemperatureDataArray[2] = temp_u16>>8;
                    sys_run_data.TemperatureDataArray[3] = temp_u16;
                        
                    LedDisplay_Control(LedDisplay_ControlAction_Number,4,sys_run_data.TemperatureDataArray);
                    
                    DS18B20_Run();//再次进行温度转换 
                }
                else if(DS18B20_GetRunState() == DS18B20_RunState_Running)//温度转换 正在运行中:等待,不做处理
                {

                }
                else//其余未运行或运行错误:启动温度转换
                {
                    DS18B20_Run();
                }
            }
            else//当前任务已经改变(或变化,或取消):返回IDLE态,以便重新进入对应任务
            {
                LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));//关闭数码管显示
                
                sys_run_data.sys_ccs = SYS_HSTATE_IDLE;
            }

            break;

         case SYS_HSTATE_DISPLAY_NG_ALARM:
            if(sys_run_data.task == SysTask_Ng_Alarm)//当前的显示任务仍然是Ng Alarm
            {
                //数码管显示处理:翻转
                if(sys_run_data.BitFlag.LedDisplay_Toggle)//LED显示翻转间隔到
                {
                    if(LedDisplay_OnOffStateRead())//当前数码管显示 开:关闭显示
                    {
                        LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));
                    }
                    else//当前数码管显示关闭:开启显示
                    {
                        LedDisplay_Control(LedDisplay_ControlAction_Number,2,sys_run_data.NG_PPM);//开启显示
                    }
                    
                    sys_run_data.BitFlag.LedDisplay_Toggle = 0;//清除数码管显示的翻转标志位
                }

                //蜂鸣器报警处理:停止报警驱动,则开启继续报警
                if(Aux_RunStateControl(AuxDevRunState_Beep_Read));//蜂鸣器仍在工作中:不动作
                else//蜂鸣器停止工作:再次启动蜂鸣器
                {
                    AuxEvt_Add(AUX_EVT_BEEP_NG_ALARM);//启动蜂鸣器烟雾报警
                }                
            }
            else//当前任务已经改变(或变化,或取消):返回IDLE态,以便重新进入对应任务
            {
                LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));//关闭数码管显示

                SYS_Timing_EVT_Del(SYS_TIMING_EVT_ALARM_LED_DISPLAY_TOGGLE_SPACE);//关闭数码管显示定时翻转 定时任务

                Aux_RunStateControl(AuxDevRunState_Beep_Off);//关闭蜂鸣器鸣叫

                sys_run_data.sys_ccs = SYS_HSTATE_IDLE;
            }
            
            break;

         case SYS_HSTATE_DISPLAY_SMOKE_ALARM:
            if(sys_run_data.task == SysTask_Smoke_Alarm)//当前的显示任务仍然是Smoke Alarm
            {
                //数码管显示处理:翻转
                if(sys_run_data.BitFlag.LedDisplay_Toggle)//LED显示翻转间隔到
                {
                    if(LedDisplay_OnOffStateRead())//当前数码管显示 开:关闭显示
                    {
                        LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));
                    }
                    else//当前数码管显示关闭:开启显示
                    {
                        LedDisplay_Control(LedDisplay_ControlAction_PredefinedChar,sizeof(LedDisplay_SmokeAlarmCharData),LedDisplay_SmokeAlarmCharData);
                    }
                    
                    sys_run_data.BitFlag.LedDisplay_Toggle = 0;//清除数码管显示的翻转标志位
                }

                //蜂鸣器报警处理:停止报警驱动,则开启继续报警
                if(Aux_RunStateControl(AuxDevRunState_Beep_Read));//蜂鸣器仍在工作中:不动作
                else//蜂鸣器停止工作:再次启动蜂鸣器
                {
                    AuxEvt_Add(AUX_EVT_BEEP_SMOKE_ALARM);//启动蜂鸣器烟雾报警
                }                
            }
            else//当前任务已经改变(或变化,或取消):返回IDLE态,以便重新进入对应任务
            {
                LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));//关闭数码管显示

                SYS_Timing_EVT_Del(SYS_TIMING_EVT_ALARM_LED_DISPLAY_TOGGLE_SPACE);//关闭数码管显示定时翻转 定时任务

                Aux_RunStateControl(AuxDevRunState_Beep_Off);//关闭蜂鸣器鸣叫

                sys_run_data.sys_ccs = SYS_HSTATE_IDLE;
            }
            break;

        case SYS_HSTATE_DISPLAY_MENU:
            if(sys_run_data.task == SysTask_Menu_Display)//当前的显示任务仍然是显示菜单
            {
                //有按键动作
                if(sys_run_data.PbAction>PushButton_Action_No)
                {
                    if(sys_run_data.PbAction == PushButton_Action_Select)//选择
                    {
                        sys_run_data.MenuFunctionIndex++;

                        if(sys_run_data.MenuFunctionIndex > MenuFunctionIndex_NgSensorCal_In_1000ppm)//显示回滚
                        {
                            sys_run_data.MenuFunctionIndex = 0;
                        }

                        LedDisplay_Control(LedDisplay_ControlAction_PredefinedChar, 4, &LedDisplay_MenuCharData[sys_run_data.MenuFunctionIndex][0]);//显示对应菜单
                    }
                    else if(sys_run_data.PbAction == PushButton_Action_Sure)//确定
                    {
                        switch(sys_run_data.MenuFunctionIndex)
                        {
                            case MenuFunctionIndex_DisplayTemperature_AlwaysOn:
                                sys_run_data.BitFlag.InfraredSensorEnable = 0;
                                break;
                                
                            case MenuFunctionIndex_DisplayTemperature_WhenApproached:
                                sys_run_data.BitFlag.InfraredSensorEnable = 1;
                                break;
                                
                            case MenuFunctionIndex_SmokerSensorSensitivity_Low:
                                
                                sys_run_data.SmokeSensor_DetectThd_AdcVal = SMOKE_SENSOR_DETECT_SENSITIVITY_LOW_ADC_VAL;

                                //【增加写入到EEPROM】
                                
                                break;
                                
                            case MenuFunctionIndex_SmokerSensorSensitivity_Medium:
                                
                                sys_run_data.SmokeSensor_DetectThd_AdcVal = SMOKE_SENSOR_DETECT_SENSITIVITY_MEDIUM_ADC_VAL;

                                //【增加写入到EEPROM】
                                
                                break;
                                
                            case MenuFunctionIndex_SmokerSensorSensitivity_High:
                                
                                sys_run_data.SmokeSensor_DetectThd_AdcVal = SMOKE_SENSOR_DETECT_SENSITIVITY_HIGH_ADC_VAL;

                                //【增加写入到EEPROM】
                                
                                break;
                                
                            case MenuFunctionIndex_NgSensorCal_In_1000ppm:
                                
                                break;

                            default:

                                break;
                        }

                        //退出菜单显示任务
                        sys_run_data.task = SysTask_No;
                        
                        LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));//关闭数码管显示
                        
                        sys_run_data.sys_ccs = SYS_HSTATE_IDLE;
                    }
                    
                    sys_run_data.PbAction = PushButton_Action_No;//清0 记录的按键动作

                    SYS_Timing_EVT_Add(&led_display_menu_quit_delay_10ms_cnt,SYS_TIMING_EVT_LED_DISPLAY_QUIT_DELAY);//【重置】LED显示菜单的退出延时 计时任务
                }
                else if(sys_run_data.BitFlag.LedDisplay_MenuQuit)//进入菜单界面,长时间无操作:退出菜单显示
                {
                    sys_run_data.task = SysTask_No;
                    
                    LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));//关闭数码管显示
                    
                    sys_run_data.sys_ccs = SYS_HSTATE_IDLE;
                }
            }
            else//当前任务已经改变(或变化,或取消):返回IDLE态,以便重新进入对应任务
            {
                LedDisplay_Control(LedDisplay_ControlAction_Off,0,(void *)(0));//关闭数码管显示
                
                sys_run_data.sys_ccs = SYS_HSTATE_IDLE;
            }

            break;

        default:

            break;
    }
}

按键事件处理:

void PushedButton_Process(void)
{
    U8 PushedButton;
    U16 PushTime;
    
    PushedButton = HMI_PbGetLastButton(&PushTime);//【如果同时按下了两个按键,则返回值应是如何呢?待调试验证】
    
    switch(PushedButton)
    {
        case Hmi_PbState_Pb1:
            if((sys_run_data.task == SysTask_Ng_Alarm) || (sys_run_data.task == SysTask_Smoke_Alarm))//如果系统当前正处于燃气报警或烟雾报警:解除报警
            {
                //AuxEvt_Add(AUX_EVT_BEEP_ALALRM_RELEASED);

                //先根据当前执行任务各自关闭对应的传感器检测功能,并添加使能延时计时
                if(sys_run_data.task == SysTask_Ng_Alarm)
                {
                    sys_run_data.BitFlag.NgSensorEnable = 0;
                    
                    NgSensor_detect_delay_10ms_sum = NG_SENSOR_DETECT_DELAY_WHEN_RELEASED_10MS;//设置燃气传感器延迟使能时间为:2分钟
                    
                    SYS_Timing_EVT_Add(&NgSensor_detect_delay_10ms_cnt,SYS_TIMING_EVT_NG_SENSOR_DETECT_DELAY);
                }
                else if(sys_run_data.task == SysTask_Smoke_Alarm)
                {
                    sys_run_data.BitFlag.SmokeSensorEnable = 0;
                    
                    SmokeSensor_detect_delay_10ms_sum = SMOKE_SENSOR_DETECT_DELAY_WHEN_RELEASED_10MS;//设置烟雾传感器延迟使能时间为:2分钟
                    
                    SYS_Timing_EVT_Add(&SmokeSensor_detect_delay_10ms_cnt,SYS_TIMING_EVT_SMOKE_SENSOR_DETECT_DELAY);
                }

                sys_run_data.task = SysTask_No;//重置当前正在执行的任务为NO
            }
            else if((sys_run_data.task == SysTask_Temperature_Display) || (sys_run_data.task == SysTask_No))//如果系统当前任务是温度显示(或当前无任务):则切换到菜单显示
            {
                sys_run_data.task = SysTask_Menu_Display;

                AuxEvt_Add(AUX_EVT_BEEP_BUTTON_SELECT);
            }
            else if(sys_run_data.task == SysTask_Menu_Display)//如果系统当前任务是菜单显示:则进一步区分按键时长,对按键功能进行区分
            {
                if(PushTime >= PUSH_BUTTON_ACTION_SURE_PUSHED_TIME_10MS)//按键按下的持续时长大于一定值
                {
                    sys_run_data.PbAction = PushButton_Action_Sure;

                    AuxEvt_Add(AUX_EVT_BEEP_BUTTON_SURE);
                }
                else
                {
                    sys_run_data.PbAction = PushButton_Action_Select;

                    AuxEvt_Add(AUX_EVT_BEEP_BUTTON_SELECT);
                }
            }

            break;

        default:

            break;
    }
}






8、作品演示:

待制作

9、总结:

对于作品的:1)、构思这个作品,是事出有因的,就是文章开头所说的事情。所以就想着自己要做一个。我自己对作品的需求呢,不光要有燃气泄露检测,再加上烟雾检测,温度检测,还预留了射频数据发送端口。

2)、在帖子刚贴出来后,和网友讨论发现,果然自己的需求和大家的期望还是很不一样的,对于温度传感器和数码管的使用,有朋友觉得不太实用。我也反复思考了下,在单设备方式下,数码管进行温度,报警信息,菜单选择上还是很有优势的,虽然单独的声音反馈也可以做到。说这话,意思是,一个成熟的产品,是不能闭门造车,完全按自己的预构来弄,这是要不得的,要充分了解大家对于一个产品有没有需求,有啥需要才能做出大家满意的东西来。

3)、还有网友提到,作品有些地方不太符合这个行业的要求规范。至少要短路,防爆之类的,别发生燃气泄露,设备自己产生火花搞出事故,虽然一般不可能。但设计之初,确实也没参考行业规范。这一点,如果待到改进的时候,肯定会多考虑的。

4)、设备调试方面:花费功夫比较多的是在两个传感器的调试上。首先说烟雾传感器吧,虽然好不容易找到了光学迷宫这种玩意,但具体怎么测量还真是一头雾水。烟雾传感器原理其实和夏普的PM2.5红外光学传感器很类似,空气中的烟雾颗粒会折射红外发射管发出的红外光,并被红外光敏二极管接收到。红外发射管的驱动,刚开始设为常亮,发现功耗很大,后面改为在每次检测前,先提前10ms点亮,然后在对传感器的输出进行电压采集后就关闭红外发射管,大大降低了功耗。红外接收检测端,由一个红外光敏二极管和一个电阻串联到GND组成,电阻上的电压通过运算放大器进行同相比例进行放大后传送给MCUADC采集。

刚开始的时候,放大倍数设置过小,基本检测不到电压变化,后面逐步尝试,将放大倍数设置为430K/1K=430倍,才能够在空气中烟雾浓度变化时,检测到明显的传感器输出电压变化。另外红外发射管的限流电阻如果用贴片的话,要选用0805以上的;ADC在进行传感器电压采集时,一定要多次采集后再进行处理,建议一般剔除头2次的电压采集值,因为有一定可能出现采集到的数值偏低,可能是采样电容充电未完成吧。

5)、燃气传感器,采用差动放大电路是正确的选择,并且同样也需要极高的放大倍数,因为由于燃气浓度变化而在传感器输出端产生的电压值实在太微弱了,必须进行放大处理。燃气浓度和采样值的对应关系目前只有通过1000PPM浓度和采样ADC数值进行处理,算出每个ADC对应的浓度值来进行映射的。看手册,其变化曲线还算线性,所以这么处理应该还能凑和。

7)、像这类空气成分检测,最好还是设计一个风道,单靠空气的自然流通,检测效果是不理想的,因为空气流动是随机的,成分的浓度分布也是有差异的,所以最好有风扇能够将空气吸入,增加空气流通量,以达到更加准确和及时的检测。

8)、关于作品的升级,如果以后还重做的话,我会首先压缩设备体积,长宽大大减小,以增加高度的方式来补偿,正确做到能够简洁地插在插座上,而不会占到其它插孔。再把220V5V直接放在设备内,去掉温度传感器,替换315MHZ通讯为Wifi/Zigbee通讯。最后,如果再做一个安卓手机客户端就更可以了。;)

 

写到最后的最后:1个月时间实际上确实有点不够,平时上班时间都是有工作的,这些只能晚上回去捣鼓一下,周末捣鼓一下,再除去吃饭和休息的时间,一周最多也就:1*5+3*2 = 11个小时来搞,一个月算下来也就40个小时左右,如果不是趁着国庆期间把电路图搞完了,我还真不一定搞得完。即便到了现在,程序中也还有很多粗糙的地方,之后还要一周左右时间来慢慢修改调试程序。感谢公司做结构的同事,在听说我的制作后,帮我设计并用3D打印机打了一个外壳。看起来确实比裸电路板好多了,也比较个性化。如果以后再升级,相信在配合下,提前设计好结构,提前规划好功能,可以做出更美观实用的设备。



该帖子已被MiaoKo于Wed Nov 02 10:55:45 CST 2016编辑过
回复 收藏
  举报
红尘客
32
主题
4555
回复
发表于Mon Oct 10 16:53:34 CST 2016   |  只看该作者 2#

这是小概率事件,所以数码管其实没什么必要,没人去看这个,看了也不懂。

你的电路防爆吗,这方面我也不懂。不过应该是有要求的!也就是你的电路,不能产生电火花之类的。异常情况下也不能,像短路什么的!

红尘客
32
主题
4555
回复
发表于Mon Oct 10 16:58:49 CST 2016   |  只看该作者 3#
好像也不怎么实用,不用单片机完全可以实现,为什么要多这么个东西呢。
MiaoKo
4
主题
92
回复
发表于Mon Oct 10 17:33:50 CST 2016   |  只看该作者 4#
红尘客 发表于 Mon Oct 10 16:53:34 CST 2016  2# 这是小概率事件,所以数码管其实没什么必要,没人去看这个,看...
燃气泄露肯定是小概率事件,但我觉得很有必要。数码管的目的不仅在于燃气浓度检测,平时还可以用作温度显示和操作设置反馈。我相信大部分家庭都是没有温度计的,按照我自己的生活习惯,我觉得有一个温度计还是会更方便一些的。从这三方面考虑,我选择使用数码管作为人机交互的显示反馈。
MiaoKo
4
主题
92
回复
发表于Mon Oct 10 17:36:37 CST 2016   |  只看该作者 5#
红尘客 发表于 Mon Oct 10 16:58:49 CST 2016  3# 好像也不怎么实用,不用单片机完全可以实现,为什么要多这么个东...
我也做过不用单片机,就一个传感器加一个比较器,再加一个震荡电路构成的燃气泄露报警器。但不够智能,且存在很大的误报可能。如果要做得准确可靠,又很智能化,满足大家对智能家居的预期需求,采用以MCU来控制实现是很有必要的。
MiaoKo
4
主题
92
回复
发表于Mon Oct 10 17:40:23 CST 2016   |  只看该作者 6#
红尘客 发表于 Mon Oct 10 16:53:34 CST 2016  2# 这是小概率事件,所以数码管其实没什么必要,没人去看这个,看...
防爆的问题谢谢提醒,传感器选择的时候有考虑过。这种催化燃烧式的传感器只会发生无焰燃烧反应,是符合防爆要求的。电路的话,可能有必要再串一个自恢复保险丝,以防止短路。
Steven
3
主题
9
回复
发表于Mon Oct 10 17:48:35 CST 2016   |  只看该作者 7#
红尘客 发表于 Mon Oct 10 16:53:34 CST 2016  2# 这是小概率事件,所以数码管其实没什么必要,没人去看这个,看...
防爆第一点电源就要用隔离的,而且数码管确实没有什么用,这个检测设备要做成本安型,
红尘客
32
主题
4555
回复
发表于Mon Oct 10 17:50:29 CST 2016   |  只看该作者 8#
MiaoKo 发表于 Mon Oct 10 17:40:23 CST 2016  6# 防爆的问题谢谢提醒,传感器选择的时候有考虑过。这种催化燃烧式...

可以限制电流在电源入口串入电阻,当然大小要合适,这样就算后面短路,也没有太大的电流,也就不会有电火花什么的了。

电容什么的够用就行。也不要太 大

红尘客
32
主题
4555
回复
发表于Mon Oct 10 17:56:58 CST 2016   |  只看该作者 9#
MiaoKo 发表于 Mon Oct 10 17:33:50 CST 2016  4# 燃气泄露肯定是小概率事件,但我觉得很有必要。数码管的目的不仅...

这是你自己觉得,也是根据你自己的需要。没人想卖个燃气报警器来看温度。何况燃气报警器未必会装在显眼的位置。也没人买燃气报警还要设置!

如果你自己用倒也无所为。

MiaoKo
4
主题
92
回复
发表于Tue Oct 11 10:22:06 CST 2016   |  只看该作者 10#
红尘客 发表于 Mon Oct 10 17:56:58 CST 2016  9# 这是你自己觉得,也是根据你自己的需要。没人想卖个燃气报警器...
嗯,这个算是我根据自己需要来做的吧。加个数码管确实像是工程师才会用到的,可能大部分人都还是觉得没显示的必要。不过我这本来就是个电子DIY,也没想做成商品,主要是时间也不够。如果做成商品,我肯定会去掉数码管的,nest的温控器那种交互方式就很值得借鉴。
MiaoKo
4
主题
92
回复
发表于Tue Oct 11 11:20:05 CST 2016   |  只看该作者 11#
Steven 发表于 Mon Oct 10 17:48:35 CST 2016  7# 防爆第一点电源就要用隔离的,而且数码管确实没有什么用,这个检...
为什么需要用隔离电源呢?
杯吹的恩吉...
15
主题
422
回复
发表于Wed Oct 12 08:48:11 CST 2016   |  只看该作者 12#
题主的内容在我的电脑上显示不全,右边的好多字都在显示区域以外,不知道其它人是怎样的。
美发产品方案:直发器、卷发器、电吹风、电推剪等。MCH发热体智能控温,全球电压自适应,安全、稳定。
MiaoKo
4
主题
92
回复
发表于Wed Oct 12 10:21:08 CST 2016   |  只看该作者 13#
杯吹的恩吉尼 发表于 Wed Oct 12 08:48:11 CST 2016  12# 题主的内容在我的电脑上显示不全,右边的好多字都在显示区域以外...
我这都全部正常显示的。你看下是不是浏览器缩放了网页呢
海之声
0
主题
3
回复
发表于Fri Oct 14 16:55:49 CST 2016   |  只看该作者 14#
这样的东东没有实用性,单独做产品意义不大, 这东东成本不高,也就几块钱的事,可以将他做成附加功能作为别的产品的卖点还是可以的,比如抽油烟机附加这功能还差不多,单独产品没有人会买的没有实用性
MiaoKo
4
主题
92
回复
发表于Fri Oct 14 17:24:05 CST 2016   |  只看该作者 15#
海之声 发表于 Fri Oct 14 16:55:49 CST 2016  14# 这样的东东没有实用性,单独做产品意义不大, 这东东成本不高,也就...

燃气泄露和火灾检测报警器单独做,在中国可能确实不会有太多人感兴趣。在国外,特别是美国,这倒是房屋配备的。这也认了嘛,毕竟国情不一样。

要集成到抽油烟机机或者其它厨房设备上,就不是这样一点小打小闹的了。个人觉得还是很有必要给家里配一个,所以也就做了吧。

立创商城赵...
【官方工作人员】
130
主题
1324
回复
发表于Sat Oct 15 10:47:16 CST 2016   |  只看该作者 16#
MiaoKo 发表于 Fri Oct 14 17:24:05 CST 2016  15# 燃气泄露和火灾检测报警器单独做,在中国可能确实不会有太多人...

安全事故不出事就好,出了事,就算只有1次,有时候还是挺严重的。


我个人也认为,家里的厨房确实最好安装一套这样的安全报警装置是必要的,特别是使用液化罐、 煤气罐的环境下。

《立创快报》总编辑、立创电子公共实验室建设者,企业QQ:2355740879
MiaoKo
4
主题
92
回复
发表于Tue Oct 18 12:55:00 CST 2016   |  只看该作者 17#
立创商城赵工 发表于 Sat Oct 15 10:47:16 CST 2016  16# 安全事故不出事就好,出了事,就算只有1次,有时候还是挺严重的...
赞同啊,虽然现在看来工业设计丑了点,但我觉得还是很实用的。
立创商城赵...
【官方工作人员】
130
主题
1324
回复
发表于Wed Oct 19 11:21:47 CST 2016   |  只看该作者 18#
MiaoKo 发表于 Tue Oct 18 12:55:00 CST 2016  17# 赞同啊,虽然现在看来工业设计丑了点,但我觉得还是很实用的。
再联网,实现远程报警(短信或者APP),或者报警到物业中心等等,那用途更明显和实用了!~
《立创快报》总编辑、立创电子公共实验室建设者,企业QQ:2355740879
红尘客
32
主题
4555
回复
发表于Wed Oct 19 16:01:25 CST 2016   |  只看该作者 19#
现在新建的房子都有配的,还是联动的,前面有个电磁阀,有问题直接关断,要手动把阀压下去,才能有燃气过来。 就是太灵敏了,在用气时,春天吹点风,就能感应到。
MiaoKo
4
主题
92
回复
发表于Mon Oct 24 18:46:12 CST 2016   |  只看该作者 20#
立创商城赵工 发表于 Wed Oct 19 11:21:47 CST 2016  18# 再联网,实现远程报警(短信或者APP),或者报警到物业中心等等...
这个配有315MHZ通信模块的,只要和主机匹配是能够进行联网通信的。但正如楼下所说,我们做的这些智能家居设备,只有集成了才实在。
MiaoKo
4
主题
92
回复
发表于Mon Oct 24 18:49:31 CST 2016   |  只看该作者 21#
红尘客 发表于 Wed Oct 19 16:01:25 CST 2016  19# 现在新建的房子都有配的,还是联动的,前面有个电磁阀,有问题直...
你说到智能家居这行业的痛点了。没有集成度,就只是叫好不叫座。比如燃气报警设备,如果能集成到抽油烟机,燃气灶,热水器,那就是价值。单独做个设备,只能是对现有设备的增加。就像我以前看到的一篇文章,说做智能家居的,都是去填坑的。什么智能插座,红外转发,只要大厂商集成在产品内部,如电饭煲,电冰箱自带联网控制功能,现有的智能家居大部分设备就没用了。
kk118a
0
主题
8
回复
发表于Tue Oct 25 21:20:57 CST 2016   |  只看该作者 22#
板子有点大,看看家爆的行业手册
MiaoKo
4
主题
92
回复
发表于Mon Oct 31 12:35:38 CST 2016   |  只看该作者 23#
kk118a 发表于 Tue Oct 25 21:20:57 CST 2016  22# 板子有点大,看看家爆的行业手册
略大略大,是该参考下行业手册
串口MP3
5
主题
76
回复
发表于Wed Mar 22 15:21:15 CST 2017   |  只看该作者 24#
有用警报器的,或者报警芯片的找我罗
爱西西爱卡...
0
主题
1
回复
发表于Sun Aug 20 17:07:41 CST 2017   |  只看该作者 25#
说实话这成本太贵,有点华而不实。/
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部