DIY编程器网

标题: 轻松打造智能家庭卫士系统(原理,软硬件实现,器件选型) [打印本页]

作者: admin    时间: 2014-10-10 07:17
标题: 轻松打造智能家庭卫士系统(原理,软硬件实现,器件选型)
前言
         
        家庭是社会的细胞,家庭的幸福也就预示着社会的和谐。一个良好的居住环境不但可以给我们一个健康的体魄,更能让我们以一个良好的心情参加到工作、学习当中。然而,生活在这个喧嚣的城市,整天忙于工作和学习的我们也会常常忽视我们休整的地方——家庭,导致室内各项生活指数都严重的超过了正常值;我们也会时常看到这样的报道:出门时忘记关掉正在使用的煤气,结果就引发了一场损失惨重的火灾;还有,由于家里没有防盗装置,致使猖狂的小偷经常对我们的人身、财产安全构成严重的威胁。
         
        基于以上的背景,我们就提出了这样一个方案,它使得我们能够随时随地了解到家里的各种情况(如:家里温度高低,光线明亮与否)。当出现意外险情时(如家里燃气泄露、有小偷闯入等),此系统能及时的告知我们,已达到有备而无患的效果。
         
        1.1 系统整体设计
         
        1.1.1硬件平台选用及资源配置
         
        本方案拟采用基于Atmel  AVR32单片机的EVK1100开发板作为硬件平台。本平台有几大优势以利于设计方案的完成。首先是GPIO的引出,这就方便我们的各个模块的扩展。
         
        其次是多达两个的串口,可以很方便的让我们完成实验调试。再次是上面的扩展模块(光线传感器、温度传感器、LCD液晶)设置,可以加快设计完成的进度。
         
        在控制信息采集方面,方案使用了传感器。相对来说,传感器的使用不是太难,购买也比较方便。主要用了:烟雾传感器(采集环境烟雾浓度数据)、湿度传感器(采集周围环境湿度数据)、温度传感器(采集周围环境温度数据)、光线传感器(采集室内光强数据)。  本设计系统框图如下图1所示:
         
       

          图 1

         
        1.1.2软件设计
         
        主控芯片AVR32 AT32UC3A0512,为降低CPU运行负载,提高系统实时性,采用以1.8S为周期对占用时间长的程序运行,重点对标志进行判断,同时以中断的方式对标志作处理。下图2为本系统详细软件流程图
         
       

        图 2

         
        1.2各个模块设计
         
        1.2.1远程通信模块GSM
         
        GSM:global system for mobile communications全球移动通信系统,GSM 是当前应用最为广泛的移动电话标准。全球超过200个国家和地区超过10亿人正在使用GSM电话。通过GSM我们能够从任何地方远程遥控家里,借助于GSM我们只需支付极低的费用,而不需要自己搭建一个通信系统,自己搭建通信系统需要极大的人力,物力且通信范围有限,GSM作为覆盖最为广泛的移动电话系统,可以很好的被我们所利用。
         
        本设计核心模块采用simcom公司的sim300模块,具有相当高的性价比。广泛用于手机,PDA,无线数据传输等领域。sim300是采用60Pin板板连接器的双频GSM/GPRS模块解决方案。模块具有工业标准化接口,功耗低,可通过GSM/GPRS 850/900/1800/1900MHz通信网络传输语音、短信、数据和传真。
         
        本项目中家里的任何情况,在任何时刻,任何地点都能及时的通知到我们,让我们随时随地的了解家里的情况。同时远程手机可在异地通过发短信了解家里的情况,温度、湿度、光照等等,同时家里发生异常,例如有外人闯入也可以通过GSM向远程手机报告,如果家里有小孩,在外的父母也能通过GSM及时了解家里的情况,例如拨通电话,对小孩作必要的嘱咐。GSM模块的通信示意图如图3所示:
         
       

        图 3

         
         
        1.2.2人机交互设计
         
        (1)语音模块
        采用WT588D语音芯片的应用框图如下:
       

        图 4

         
        三线串口控制模式由三条通信线组成,分别是片选 CS,数据 DATA,时钟 CLK,时序根据标准 SPI 通信方式。通过三线串口可以实现对 WT588D语音模块命令控制、语音播放。三线串口模式下,所有按键均无效。三线串口控制模式下的时序图5如下:
       

        图 5

         
        另外、由于直接使用WT588D驱动喇叭时的驱动能力不够,需要外接语音放大器,本系统使用运放TDA2882来放大语音信号,放大电路如下图6所示:
               

        图 6

                                     
        (2)LCD显示模块
         
        作为人机交互的重要模块,lcd显示采用avr开发板上面的lcd204,我们目前的项目显示内容主要是温度,湿度,光线强度,天然气浓度等,显示的内容比较少。同时,本次参赛的avr例程上面对lcd204有详细的介绍,使用起来比较方便。
         
        1.2.3传感器检测模块
         
        (1)红外热释电探测模块
        热释电红外传感器是一种能检测人或动物发射的红外线而输出电信号的传感器。随着激光、红外技术的迅速发展,热释电晶体已广泛用于红外光谱仪、红外遥感以及热辐射探测器,它可以作为红外激光的一种较理想的探测器。
         
        本系统的设计采用的是HC-SR501人体红外感应模块,其内部传感器芯片为LHI778。
         
        系统中本模块的工作原理如下图7示:
         
       

        图 7

         
        (2)MQ2气体浓度检测模块
         
        本系统中采用的可燃易爆气体浓度检测装置是对液化气、甲烷、丁烷、烟雾等都有较好的灵敏度的MQ2传感器。
         
        其灵敏度特性曲线如下图8所示:
         
       

        图 8

         
        本MQ2浓度检测模块的原理图如下图9所示:
         
                                          

        图 9

         

        系统中MQ2浓度探测模块的工作原理如下图10示:
                                  
       

        图 10

         
        (3)湿度传感器
         
        本设计采用的湿度传感器是:HR31电阻型湿度传感器。HR31湿敏电阻是采用有机高分子材料的湿度敏感元件,感湿范围宽,长期使用性能稳定。能够达到精度5%RH增减的要求。
        其阻抗特性如下图11所示:
       

        图 11

         
        本系统中湿度传感器的工作原理如下图12所示:
         
       

        图 12

         
        (4)温度传感器
         
        考虑到EVK1100板卡上面已经安装了温度传感器NCP18WF,为了开发的进度和成本,就没有再买模块,直接使用就可以了。
         
        在系统中的电路原理图如下图13所示:
         
       

        图 13

         
        (5)光照强度传感器
         
        与温度传感器类似,光线传感器也是使用的EVK1100上面自带的TEMT6000光线传感器。其电路原理图如下左图14所示,特性原理图如下右图15所示:
         
                       
         
                图 14                               图 15
         
        1.3软件设计
         
        1.3.1中断
         
        为了更好的提高系统效率,本系统充分的利用了AVR32单片机的中断功能。
         
        (1)定时器中断
        在定时中断服务函数里面利用AD采集各种传感器数据是一种常用的手段,本设计就是利用1.8s定时来采集各种室内数据
         
        定时器后台中断程序流程:                  定时器前台主程序流程:
         
                       
         
         
        (2)串口中断
         
        在设计中,AVR单片机与GSM模块的通信是利用串口进行的。由于用查询方式接收串口数据会大大的降低系统性能实时,故串口接收部分利用串口中断。
         
        远程用户为了远程监视家里的情况,只需要向目标板GSM发送短信,GSM收到短信后会向核心板AVR32串口发送数据,当AVR32串口接受到数据后,在串口中断中把标志位flag置1,同时把串口接受到得数据储存到缓存中,主程序在定时器控制下,每隔1.8s检测flag,当检测到flag等于1的时候,读取缓存中的数据,根据读取到得不同数据,作不用的处理,然后单片机AVR32通过串口向GSM发送相应的室内信息代码,然后GSM通过短信向远程用户发送室内检测到的信息,例如温度、湿度等等,从而高效的查询家里的情况,达到远程控制的功能,流程如下图16。
         
       

        图 16

         
        1.3.2语音部分  
         
        作为人机交互的重要平台,语音处理部分主要是将各种传感器采集到的参数,通过语音提示用户,语音部分的软件框图如下图17所示,并通过发出警告的方式,提醒用户改善居住环境。
         
         
                                                                               
         
         
         
         
        图 17
         
        2 总结
         
        本次项目设计时间相对紧迫,离最初的要求有一定的距离,但是总体效果还算令人满意,实现了远程用户实时监视家里环境,在家里环境发生异常的情况下,如有外人闯入,温度、湿度、可燃气体浓度发生异常时,及时的做出报警,同时通过GSM发送短信向远程用户发出警告,其语音模块能够准备的根据当时环境测得的情况,做出语音提示。
         
        本次设计加强了我们动手、思考和解决问题的能力。在设计过程中,是心里老想着这样的方法可以行得通的,但实际上,总是实现不了,因此耗费在这上面的时间也挺多的。但是到后面,我们又会换换方案,解决问题。感触最深的就是:无论多么简单的事情,一定要亲自去做了才能做评价。想象中的简单不等于实现的简单。在本次设计当中,我们的模块调试用了相当长的时间。本来以为很简单,但是在实际调试过程中却总是会遇到这样那样的问题。最后连调的时候,本来以为模块调试通过了,连调就容易了,但是当所有模块连接在一起的时候就会因为相互的冲突而不能同时工作。所以又话了很长时间来调试系统,经过几天不分昼夜的努力,我们终于完成了我们的系统。
         
        在调试系统的过程中,遇到的问题真的很麻烦,比如在调试GSM SIM300模块的过程中,需要通过avr单片机控制短信的接收和发送,但是,短信的接收过程中对于数据的采集,判断,分析都是异常艰难的,需要从众多的信息中提取出短信中的有效信息,就需要不断地判断,不断地选择。所以,在这个过程中会有很多莫名其妙的死机,但是,我们还是坚持了下来,通过串口,分别调试gsm和avr部分。不断优化我们的程序,最后达到了我们想要的结果。另外,在语音模块的控制上面,我们选择使用三线spi控制过程中,仍然遇到了不少的问题,比如,由于wt588d模块上面的输出,有busy信号,这对于实时查询语音的播报情况十分重要,所以在调试这个语音模块的过程中,始终想把这个忙信号用起来,但是,通过反复地调试,发现busy信号并不是随语音的实时播报而一直显示为高电平,反而只是在开始播报时会产生一个上升沿而已,所以,我们最后修改方案,不使用这跟信号线了。
         
        总之,通过本次设计,我们又学到了不少知识。尤其是对AVR单片机又有了更深入的了解。通过本次大赛,我们对AVR32单片机的高级性能算是有了一个全新的认识。它的内部Flash多达512KB,完全保证了程序的存储。方便的基于优先级的中断管理,能让我们快速的实现程序的设计。还有,不能不说集成开发环境AVR Studio 5.0真的很方便,尤其是里面的模块化编程asf部分,在我们的设计过程中起到了很大的作用。
         
        3 参考文献
        《信号与系统》,ALAN V.OPPENHEIM著,西安:西安交通大学出版社,1997年;
        《数字图像处理学》,元秋奇著,北京:电子工业出版社,2000年;
        《模拟电子线路基础》,吴运昌著,广州:华南理工大学出版社,2004年;
        《数字电子技术基础》,阎石著,北京:高等教育出版社,1997年;
        《数据结构与算法》,张晓丽等著,北京:机械工业出版社,2002年;
        《ARM&Linux嵌入式系统教程》,马忠梅等著,北京:北京航空航天大学出版社,2004年;
        《单片机原理及应用》,李建忠著,西安:西安电子科技大学,2002年;
         
        附1:程序清单
        /////////////////////////////////////////////////////////
        //*************语音模块头文件***************************//
        /////////////////////////////////////////////////////////
         
        #ifndef _SOUND_H_
        #define _SOUND_H_
        #include "asf.h"
         
        //IO口控制
        #define GPIO_sound_control_Pin1    AVR32_PIN_PX23 //jidan0818 语音模块IO:PX17
        #define GPIO_sound_control_Pin2    AVR32_PIN_PX25 //jidan0818 语音模块IO:PX17
        #define GPIO_sound_control_Pin3    AVR32_PIN_PX27 //jidan0818 语音模块IO:PX17
         
        #define sound_cs   GPIO_sound_control_Pin1 //PTAD_PTAD1
        #define sound_clk  GPIO_sound_control_Pin2 //PTAD_PTAD2
        #define sound_data GPIO_sound_control_Pin3 //PTAD_PTAD0
         
        //函数声明
        void init_sound_io(void);
        void delay100us(unsigned char cnt);
        void delay1s(unsigned char cnt);
        void send_sound(unsigned char addr);
        void sound_plus(void);
        void sound_minus(void);  
        void sound_cycle(unsigned char addr);
        void sound_stop(void);
         
        void sound_test(void);
         
        //各种报警语音声明
        void sound_wet_waring_high(void); //湿度过高报警
        void sound_wet_waring_low(void);  //湿度过低报警
        void sound_temp_waring_high(void); //湿度过高报警
        void sound_temp_waring_low(void);  //湿度过低报警
        void sound_sunshine_waring_high(void); //湿度过高报警
        void sound_sunshine_waring_low(void);  //湿度过低报警
        void sound_gas_waring_high(void); //湿度过高报警
        void sound_gas_waring_low(void);  //湿度过低报警
        void sound_people_waring(void); //湿度过高报警
         
        void sound_temp(short int t ) ;
        void sound_time(unsigned char hh,unsigned char mm,unsigned char ss);
        void sound_sunshine(short int t );
        void sound_wet(short int t );
        void sound_gas(short int t ) ;
        void sound_welcom(void);
        #endif
         
         
         
         
        /////////////////////////////////////////////////////////
        //****************延时服务函数***************************//
        /////////////////////////////////////////////////////////
         
        //系统延时初始化函数
        void delay_init(unsigned long fcpu_hz)
        {
        #ifndef FREERTOS_USED
          s_fcpu_hz = fcpu_hz;
        #endif
        }
         
        //系统ms延时函数
        void delay_ms(unsigned long delay)
        {
        #if (defined FREERTOS_USED)
          vTaskDelay( (portTickType)TASK_DELAY_MS(delay) );
        #elif (defined NUTOS_USED)
          NutSleep(delay);
        #else
          cpu_delay_ms(delay, s_fcpu_hz);
        #endif
        }
         
        //系统us延时函数
        void delay_us(unsigned long delay)
        {
        #if (defined FREERTOS_USED)
          vTaskDelay( (portTickType)TASK_DELAY_MS(delay) );
        #elif (defined NUTOS_USED)
          NutSleep(delay);
        #else
          cpu_delay_us(delay, s_fcpu_hz);
        #endif
        }
        /////////////////////////////////////////////////////////
        //**********部分重要的服务函数***************************//
        /////////////////////////////////////////////////////////
         
        //播放存放语音的底层函数
         
        相关阅读
        智能家庭离我们还有多远?




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2