• 4.66 MB
  • 2022-04-22 11:39:33 发布

雏鸡鸡舍模糊温湿度控制器的设计农业电气化与自动化毕业论文(1).doc

  • 52页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'雏鸡鸡舍模糊温湿度控制器的设计农业电气化与自动化任小培指导教师许丽佳摘要:针对目前中国雏鸡饲养自动化水平低、管理技术落后的现状,本文采用高精度的数字温湿度传感器AM2302为测量元件,并结合高性能单片机STC89C52RC,设计了一款雏鸡鸡舍温湿度模糊控制器。该系统主要由采集模块、主控模块和系统软件三个部分组成,实现了对雏鸡鸡舍内温湿度的智能监控、显示和报警等操作。经模型测试结果表明,本系统温度控制的最大误差为0.7℃,湿度控制的最大误差为2.5%,可满足育雏的基本条件。本文研究结果可为雏鸡养殖户提供操作简便、控制效果较好的模糊控制器,具有市场推广价值。关键词:鸡舍;模糊控制器;AM2302;STC89C52RC52 ChickencooptemperatureandhumidityfuzzycontrollerdesignElectrificationandautomationofagricultureXiaopeiRenTutorLijiaXuAbstract:ChickensrearedforthecurrentlowlevelofautomationinChina,managingthetechnologybehindthecurrentsituation,weusehigh-precisiondigitaltemperatureandhumiditysensorAM2302asmeasuringelement,combinedwiththehigh-performancesingle-chipSTC89C52RC,designedachickencooptemperatureandhumidityfuzzycontroller.Thesystemconsistsofthreepartsacquisitionmodule,controlmodule,andsystemsoftwarecomponents,toachievethetemperatureandhumiditywithinthechickencoopintelligentmonitoring,displayandalarmoperation.Themodelresultsshowthatthemaximumerrorofthetemperaturecontrolsystem0.7℃,themaximumerroris2.5%humiditycontrol,cansatisfythebasicconditionsofthebrood.Theresultsofthisstudymayprovidesimple,bettercontroloffuzzycontrollerforthechickencoopfarmerswithmarketingvalue.Keywords:chickencoop;fuzzycontroller;AM2302;STC89C52RC52 1绪论1.1课题研究的背景及意义1.1.1课题研究的背景中国是农业生产大国,鸡禽养殖业是中国农业中的重要产业之一。中国鸡禽养殖业经历了稳定快速发展,总产量大幅提高。育雏是鸡禽生产中非常关键的养殖环节,鸡舍环境控制直接影响着雏鸡的生长发育,因此,创造良好的生长环境,培育出发育良好、健壮的雏鸡,才能保障最终获得较好的经济效益[1-2]。目前,针对鸡舍温湿度控制系统的研究有很多,可谓正向两个方向发展。一是不断的融入高新科技技术。例如,无线传感器网络技术[3]可以实现大范围的数据采集,也避免了繁琐的布线工作;智能控制技术[4]可以实现对复杂环境的有效控制;通过网络通信技术[5-6],养殖户通过互联网对鸡舍进行远程监控。这些技术特征虽为养殖户带来了方便,但是增加了养殖成本。二是设计廉价且高效的控制器。这类控制器通常采用高性能的主控芯片,能实现对数据的综合分析功能,并提供便捷的人机交互界面,其着重解决环境监控中的主要矛盾,优化了系统结构,很大程度地降低成本,因而更容易得到养殖户的青睐。科学研究的市场价值是检验研究成果的重要标准之一,能够推广于市场,服务于社会,才能充分发挥研究的价值。目前,针对鸡舍环境控制领域,永星电子仪表有限公司已经推出的鸡舍智能控制器,该仪器结合上位机实现对鸡舍环境的控制,功能全面且提供良好的人机交互界面,该产品由于使用上位机控制,成本较高,主要适合大规模饲养的养殖户。1.1.2课题研究的意义本设计是以高性能的单片机为主控芯片,提供便捷的人机交互界面,方便养殖户的操作,启动后便开始逐点采集数据,并采用模糊控制技术实现了智能监控,这是一套价格低廉、方便实用的温湿度控制器。本设计具有以下几项重要意义。(1)探究调控温湿度能够改善鸡舍空气质量。本设计主要通过控制加热、增湿和通风装置实现对温湿度的自动调控,而温度与湿度之间存在相互反向制约的关系,导致温湿度最终处于动态平衡。若采集的温度或湿度偏高,控制器便启动通风装置,即可起到净化鸡舍空气质量的作用。(2)设计采集控制电路节省单片机I/O资源。本设计采用AM2302数字温湿度传感器,该传感器支持单总线通信协议。据其资料介绍,传感器的数据线SDA需单独接至单片机I/O口完成通信,便导致一个传感器占用一个管脚。52 (3)探究51单片机实现模糊控制算法的设计。本设计的模糊控制算法所涉及的变量较多,又限于单片机内部资源较少,则需对模糊控制模型进行等效简化。又因单片机的浮点运算会占用过多的资源,故将模糊变量均定义为整型。1.2论文研究的内容和目标1.2.1论文研究的内容(1)按键模块的设计按键模块作为养殖户设置目标温湿度的输入接口,其硬件电路的设计应遵循结构简单,和减少占用单片机I/O口的原则;其软件功能的设计应满足可设置任意温湿度,简单高效以避免养殖户频繁的操作。另外,由于随着育雏日龄的增长,所需求的温湿度会有所变化,本设计的按键模块应可供养殖户任何时刻的操作。(2)显示模块的设计显示模块是本设计中重要的部分,其任务是实现人机的实时交互。由于显示器件的种类繁多,价格悬殊。本设计应选择一种价格低廉、高性能的显示器。另外,显示器可以实时反映出系统运行状态和环境参数。例如,在温湿度设置阶段,显示器能实时显示出养殖户当前设定的各参数值;在采集控制阶段,其能显示当前温湿度,以及各个AM2302温湿度传感器的输入和各个执行装置的输出状态。(3)采集模块的研究温湿度传感器是整个系统误差的主要来源,故对其精度要求较高。由于,本设计采用模糊算法实现高精度的控制,相较于普通控制,增加了对参数值变化率的分析,因此,传感器还应具有较强的稳定性和飘移抑制能力。采集控制电路的目的是节约单片机I/O资源,同时满足远距离数据的传输。本设计采用七个AM2302传感器采集环境参数,且该传感器支持单总线通信协议,故需研究如何实现单片机一个I/O口与各传感器通信,这也是本设计的重点。(4)模糊控制算法的设计模糊控制算法是对参数分析处理的核心部分,其运算过程较为复杂,往往是通过上位机进行处理。而本设计中是通过单片机实现模糊运算[7],而且要达到理想的控制效果,可见在软件设计上具有相当的难度。1.2.2论文研究的目标本设计工作流程为:养殖户52 根据雏鸡饲养实际需求,通过按键设置温湿度目标值并启动;单片机通过参数采集模块对鸡舍内外温湿度进行定时轮流采集,由LCD1602模块显示舍内温湿度,并调用模糊控制算法对舍内温湿度进行模糊分析;单片机根据模糊分析结果,同时结合舍外环境参数,得到最终控制信息,并通过驱动电路直接控制加热装置、增湿装置、通风装置;另外,若温度或湿度超出允许范围,控制器进行报警并继续进行调控。基于实现上述功能,本设计研究的具有四大目标。一是,参数采集的出错率接近于零;二是,操作简单,良好的人机交互方式;三是,环境综合控制能力强,满足雏鸡饲养条件;四是,整体设计低成本,具有市场推广潜力。1.3论文的结构本论文的结构如下:第一部分初步介绍了基于单片机实现的温湿度模糊控制器基本框架,和课题研究的背景和意义,以及论文研究的具体内容和目标。第二部分介绍温湿度模糊控制器的硬件设计,其中着重介绍了采集模块、按键模块、显示模块和继电控制及报警模块的电路设计。第三部分介绍温湿度模糊控制器各个模块的软件设计,其中重点针对模糊控制算法的实现进行了详细的阐述,以及结合舍外环境划分的各种控制方式。第四部分详细介绍了对该控制器性能的测试方法与测试结果。第五部分客观地评价该模糊控制器,并对本设计进行前景与展望分析。2总体设计2.1系统组成本设计主要由采集模块、主控模块和系统软件三大板块构成。其中,采集模块最多可支持7个采集点,由采集控制电路选通并实现;主控模块主要包括高性能的单片机、按键电路、显示电路、继电控制及报警电路等,其结构如图1所示。图1系统结构图52 (1)采集模块采集模块是本设计的重要部件,所选用传感器的精度和稳定性直接关系到整个控制器的控制效果。本设计采用具有单总线通信的AM2302数字温湿度传感器,通过采集控制电路实现对多个AM2302的数据采集工作,由于其仅占用主控芯片一个I/O通信口,也大大地节省了管脚资源。(2)主控模块主控模块是本设计的核心部件,选用高性能的STC89C52RC单片机为主控芯片。该模块连接按键电路实现温湿度目标值的设定并启动,通过单片机P1.0口读取采集模块的数据,由显示电路实时显示采集的温湿度,并连接继电控制及报警电路以实现对加热装置、增湿装置和通风装置的实时控制;若采集参数超出设定值允许的范围则启动蜂鸣器报警。(3)系统软件系统软件犹如控制器的指挥官,使控制器按预设的时序工作。严谨的软件设计可实现各个硬件模块的正常工作,良好的逻辑设计可节省硬件资源,降低设计成本。本设计采用模块化编程,通过按键电路和显示电路实现人机交互,具有操作简单、性能可靠的特点,启动后,系统依次循环调用采集程序、显示程序、报警程序、模糊控制程序、综合控制程序最终实现对各继电器的开关控制。2.2系统特征(1)结构的人性化本设计将采集控制电路和主控模块集成于主控板(PCB板)。各路采集和控制的连线方式均采用三线制设计,其中包括:电源线、信号线和地线。该控制器最多可支持7个采集点,经测试,传输距离最远可达到80米,可充分满足普通雏鸡鸡舍的监测条件。另外,采集和控制信号接口线均位于控制器的左侧,其右侧安装按键电路和显示电路,具有布局合理,设计美观和安装调试方便的特点。(2)操作的安全性该控制器采用继电器实现弱电对强电的开关控制,本设计将各继电器安装在各个单独的PCB板上,并分别通过主控板引出的控制信号线进行作用,则避免了由于意外将强电电压施加到主控板的情况,充分保障了养殖户的安全。(3)高性能的传感器本设计选用广州奥松电子有限公司最新推出的AM2302温湿度传感器,该传感器的检测精度具有明显的提高,其温湿度的分辨率达到16位。该传感器在温度为25℃52 的条件下,湿度误差为±2%,在湿度为63%的条件下,温度误差仅为±0.5℃,其测试情况如图2所示。图2AM2302测试结果(4)控制的智能化本设计采用模糊控制算法实现了对采集参数的分析。模糊控制作为智能技术的重要组成部分,具有较为完善的理论体系,并已在诸多领域取得良好的控制效果。为此,本设计将模糊控制技术应用到雏鸡鸡舍环境的监控,可以有效克服鸡舍环境的大滞后、非线性等特性,最终实现代替人工的作用。(5)良好的人机交互开机或复位,显示模块显示完欢迎界面,便提示并等待养殖户设定目标值;养殖户可通过按键模块进行复位、切换、增大、减小和启动操作;启动后,显示电路显示各采集点和各控制信号接口线是否有信号,并分别显示采集的温湿度。3硬件设计本设计为了充分提高温湿度的控制效果,采用全数字电路设计方式,以增强系统运用的可靠性,并选择高精度、稳定性强的数字温湿度传感器以减小系统误差。本设计为实现操作方便,且具有良好的人机交互效果,故对控制器各模块进行人性化布局。该控制器的设计流程见如图3所示。明确功能划分模块接口设计选择器件焊接调试图3设计流程图3.1采集模块器件选型及电路设计3.1.1器件选型(1)AM2302温湿度传感器本设计采用高精度的AM2302温湿度传感器,温度分辨率为16bit,湿度分辨率为1652 bit。AM2302是含有已校准数字信号输出的温湿度复合传感器,具有极高的可靠性,卓越的稳定性,超小的体积和极低的功耗等优点[8]。AM2302采用单总线通信方式,单片机将数据线SDA拉低1毫秒作为起始信号,AM2302响应信号后直接输出40位数据,其格式为“湿度高位+湿度低位+温度高位+温度低位+校验位”。因此可见,采集过程的数据交换、控制均由数据线SDA完成,AM2302可方便地与单片机进行单总线通信,AM2302数传电路如图4所示。图4AM2302数传电路图在图4中,若数据线短于30米时,通常需要外接约5.1kΩ上拉电阻;反之则根据实际情况适当减少上拉电阻的阻值。经过测试,AM2302单总线通信有效距离最远可达80米,可见其完全满足中、小型规模育雏室环境参数的采集工作。(2)74LS138芯片74LS138是3线-8线的译码器,其工作原理为:当选通端G1为高电平,且/G2A和/G2B均为低电平时,才能将地址端A、B、C的二进制编码在对应的输出端以低电平译出;另外,能利用G1、/G2A和/G2B级联拓展成2线-4线译码器,外接反相器可级联拓展成32线译码器等等功能。因此,74LS138较为广泛地被运用到数字电路。其管脚图如图5所示。图574LS138管脚图(3)74LS125芯片74LS125为三态输出的四总线缓冲器,主要是由四个独立的三态门缓冲器构成。其中,C1、C2、C3、C4作为各缓冲器选通的使能端,仅当使能端为低电平时,输入端才能将数据传送到输出端;反之输出端呈现高阻态,近似于断路状态,电压信号跟随52 外部电路变化而变化。其管脚图如图6所示。图674LS125管脚图(4)74HC14芯片74HC14是一款支持高速的CMOS器件,其管脚兼容低功耗肖特基TTL系列,遵循JEDEC标准NO.7A。74HC14实现了6路施密特触发反相器,其主要功能是将上升沿、下降沿较缓,或者畸变较大的数字信号转化为清晰、无抖动的方波信号。因此,74HC14的运用有利于改善信号,提升电路稳定性。其管脚如图7所示。图774HC14管脚图(5)74LS32芯片74LS32是四-2输入的或门集成电路,是一款常用的TTL芯片,其输出端满足Y=A+B的逻辑运算。例如,若输入端A、B均为低电平时,输出端Y为低电平,否则均输出高电平。该芯片的管脚图如图8所示。图874LS32管脚图52 3.1.2电路设计控制器通过高性能单片机实现对多个AM2302的采集工作。本设计中,单片机最多支持7个采集点,包括1个舍外采集点和6个舍内采集点,其中舍内采集点安装的空间位置和数量可由实际控制效果确定,其采集控制电路如图9,详细参见附录A。图9采集控制电路图在图9中,单片机通过P1.0轮流读取各个采集点参数值,该过程是由单片机P1.1-P1.3和P1.7的控制实现。P1.1-P1.3通过74LS138译码器实现了轮流选通各个采集点,P1.7作为数据传输方向控制端,当P1.7为低电平时,允许P1.0作用于已选通的采集点,反之则P1.0接收该采集点输出的数据。单片机P1.0与各采集点均串接两个反向并联的三态门,此运用了三态门在未选通状态下的高阻输出特性,可有效消除各采集点之间的电平影响,从而实现了单片机P1.0与各个采集点的通信。另外,本设计通过排针CJ引出7个信号接口,其中CJ0用于连接舍外采集点,CJ1-CJ6分别连接舍内采集点。3.2主控模块的硬件设计3.2.1主控芯片的选型STC89C52RC单片机是STC公司推出的低功耗、高性能的CMOS8位微控制器,具有8K的可编程Flash存储器,其指令代码完全兼容传统的8051系列单片机,3.3V-5.5V的工作电压,STC89C52RC单片机采用PDIP-40封装形式,其管脚封装如图10所示。52 图10STC89C52RC封装图3.2.2按键模块的设计本设计为养殖户提供可实时操作的按键电路,以实现随时对鸡舍温湿度目标值的设置。此采用独立按键的方法,共使用五个独立按键,各按键的用途分别是复位、切换、增大、减小和启动。而按键电路在结构上可分为复位电路和参数设置电路。其中,复位按键接至单片机的复位管脚,由于单片机采用两个机器周期以上的高电平作为复位信号,故本设计的复位电路如图11所示。另外,切换按键可实现温度或湿度的选择功能;增大按键对温度作用是+1℃/次,对湿度是+1%/次;同理,减少按键对温度的作用是-1℃/次,对湿度是-1%/次;启动按键实现结束参数设置环节。本设计参数设置电路如图12所示。图11复位电路图52 图12参数设置电路图在图12中,单片机P2.4-P2.7分别作为切换(QH)、增大(ZD)、减少(JX)和启动(QD)按键的输入口,各个输入口均外接有上拉电阻,并且串接发光二极管。可见,若没有按键操作,则P2.4-P2.7均上拉至高电平,二极管不发光;若有按键操作,相应输入口立即被下拉至低电平,并且二极管发光直到松开按键。3.2.3显示模块的设计显示模块作为本设计人机交互的重要窗口,需实时反馈控制器运行状态和环境参数。本设计采用LCD1602液晶屏,其可方便地与8位单片机相联,实现数据的传输;其拥有三条控制端,分别是寄存器选择端RS,读/写端R/W和片选端E,控制信号的组合功能如下表2。显示电路如图13所示。表2控制信号功能表RSR/W操作00指令寄存器(IR)写入01忙标志和地址计数器读出10数据寄存器(DR)写入11数据寄存器读出52 图13显示电路图3.2.4继电及报警模块的设计本设计主要是通过对执行机构(加热装置、增湿装置和通风装置)的实时调控,最终实现鸡舍温度和湿度的控制;若检测到鸡舍内部温度或者湿度超出允许范围,则驱动蜂鸣器实现报警。单片机属于低电压、弱电流微控芯片,无法直接驱动执行机构,因此需要增加驱动电路。本设计通过ULN2003芯片驱动常用的SRD-05VDC-SL-C继电器,从而实现对执行机构的开关控制。本设计的报警模块采用有源蜂鸣器,有源蜂鸣器内部集成振荡器,故仅需在两个端口施加直流电压即可发声。有源蜂鸣器额定电流高达40mA,单片机无法直接驱动其工作,鉴于执行机构仅占用ULN2003三个输出口。因此,本设计中有源蜂鸣器同样采用ULN2003进行驱动。本设计继电及报警电路如图14所示。图14继电及报警电路图52 图14中,单片机P3.4-P3.7管脚分别控制有源蜂鸣器、加热装置、增湿装置和通风装置。本设计为实现单片机和ULN2003芯片均是采用灌电流驱动方式,故在单片机与ULN2003芯片之间增加了74HC14反相器,各继电器和有源蜂鸣器均接至+5V电源。另外,各继电器的控制输入端接有发光二极管,其主要目的是为了帮助养殖户直观地判断各继电器是否处于接通状态。4软件设计4.1按键模块本设计采用五个独立按键,其复位键接至单片机专用复位管脚,因此,随时操作复位按键均可实现控制器的复位,而其余功能键的操作仅在参数设置阶段才有效。在参数设置阶段,单片机的工作流程为:(1)、读取P2.4-P2.7电平信息,判断是否有低电平产生,若无则继续读取,直到有低电平信号产生才向下执行;(2)、判断P2.4是否为低电平,若是则进行20mS的延时消抖,再判断是否为低,若是则执行切换子程序,若两次判断中任意次为高电平,表示无操作;(3)、判断P2.5是否为低电平,工作原理同(2);(4)、判断P2.6是否为低电平,工作原理同(2);(5)、判断P2.7是否为低电平,若是则进行20mS的延时消抖,再判断是否为低,若是则表示设置完成,并退出参数设置环节,若任意次为高继续向下执行;(6)、延时0.3S后跳转到(1)。按上述方案,本设计巧妙地利用0.3S的延时有效地避免了一次按键操作多次执行的现象;若长按按键,单片机将每隔0.3秒执行一次该按键的功能,详见附录C。4.2显示模块LCD1602液晶屏功能较为全面,提供192种5×7点字型,32种5×10点字型以及8种可编程字型等等功能。本设计采用两行、16位、5×7点字型和自定义“↓”字型,LCD1602液晶屏的初始化程序如下:52 初始化程序的控制指令具体为:0X38H表示设置显示模式,0X08H表示关闭显示,0X0C表示开显示及光标设置,0X01表示清屏,0X04表示读或写操作后地址指针与光标均减一,写操作后整屏显示不移动。显示模块是人机交互的重要窗口,能够实时反馈运行状态和环境参数。本设计采用结构化编程,并遵循逻辑清晰和信息全面的设计原则。在控制器上电或复位后,LCD1602液晶屏的工作流程如下图15所示,详见附录C。初始化欢迎界面设置提示参数设置并显示启动?采集显示输出显示半秒延时是否图15LCD1602工作流程图4.3采集模块AM2302采用单总线通信协议,其典型的工作原理52 为:单片机先将数据线拉低1mS,作为传感器的起始信号,此后由于上拉电阻的作用数据线被拉至高电平,并维持约30uS,直到传感器出发80uS低电平和80uS高电平的响应信号;单片机接收到相应信号后,便立刻转入数据接收状态,开始接收和识别数据线上的电平信号,并设定高电平持续26uS表示0和70uS表示1,从而最终将电平信号转化为40位二进制数据,其中包括16位温度、16位湿度和8位效验码。AM2302通信协议的详细信号特征如表3所示。表3AM2302单总线通信的信号特征表符号参数最小典型最大单位Tbe主机起始拉低总线0.8120msTgo主机释放总线2030200usTrel传感器响应低电平758085usTreh传感器响应高电平758085usTLOW数据“0”、“1”低电平485055usTH0数据“0”高电平222630usTH1数据“1”高电平687075usTen传感器释放总线455055us本设计利用采集控制电路,实现了单片机P1.0与7个AM2302的轮流通信。其工作原理为:在初始状态,单片机P1.1-P1.3均为高电平,无传感器被选通,并且由于三态门电路的作用,单片机与传感器之间处于高阻态。单片机执行采集程序时,首先仅选通P1.0到舍外AM2302方向的三态门,并向该传感器发送1mS的起始信号,在等待30uS延时后立刻拉高P1.7,从而实现仅选通该传感器到P1.0方向的三态门,便开始接受该传感器数据,其程序实现如图16所示。舍内AM2302均采用相同的工作方式进行数据采集,详见附录C。图16舍外AM2302采集程序4.4模糊控制算法及综合控制4.4.1模糊控制算法模糊控制实质上是非线性的、典型的智能控制,52 是利用模数学的基本理论创造的控制方法。相比于传统的控制方案,模糊控制不需要精确的数学模型,具有并且很强的鲁棒性,能有效地应用到非线性、时变、大滞后的系统控制[9-16]。模糊控制系统中主要包括模糊化、知识库、模糊推理和解模糊四个部分。模糊化是实现输入精确量转换为论语上的模糊量;知识库主要包括数据库和规则库,其中数据库处理模糊数据的相关定义,规则库则根据控制策略给出一套由语言变量描述的控制规则的集合;模糊推理是利用知识库的信息模拟人类的推理决策过程,得到适合的控制量;解模糊则将模糊推理的模糊集合转化为精确值输出,其通常的有最大隶属度函数法、重心法、加权平均法。模糊控制结构图如图17。模糊化模糊推理解模糊知识库被控对象给定值输出图17模糊控制结构图雏鸡鸡舍是时变非线性的系统,故本系统采用模糊控制对育雏室环境进行控制。其中,选择温度和湿度与设定值之差值,和其差值的变化率作为模糊控制器的输入,经模糊推理得到模糊控制器的输出值:0表示正常、1表示偏高、2表示偏低。模糊控制通常包括模糊化、模糊推理和清晰化三个步骤。将温度偏差E1及其变化率EC1、湿度偏差E2及其变化率EC2等4个输入参数进行模糊化,经模糊推理最终得到模糊控制系统的输出量,即:U1、U2。温度输入变量E1、EC1和输出量U1的隶属度函数如图18所示,其模糊规则如表4所示;同理可得,湿度输入变量E2、EC2和输出量U2的隶属度函数如图19所示,其模糊规则如表5所示。图18温度变量隶属度函数52 EC1U1E1表4模糊规则表-12-8-404812-30-9-9-9-9-6-6-3-20-9-9-9-6-6-3EC1U1E1-3-10-9-9-6-3-3000-6-6-30366100033699203366999203669999图19湿度变量隶属度函数表5模糊规则表EC2U2E2-30-20-100102030-75-9-9-9-9-6-6-3-50-9-9-9-6-6-3-3-25-9-9-6-3-3000-6-6-30366250033699503366999753669999本系统使用STC89C52单片机实现模糊运算,经模糊推理后,U1的范围为[-360,360],U2的范围为[-2250,2250]。本系统将输出量U1和U2均离散为3个数值,以分别表征当前温度和湿度的状态.若U1﹥130时,U1=1,表示温度偏高,若U1﹤-130时,U1=2,表示温度偏低,若-130≦U1≦130时,U1=0,表示温度正常;同理,本系统设定湿度的表征正常的范围为[-1000,1000],详见附录C。4.4.2综合控制52 本系统的控制设计涵盖指对外界环境(温湿度)的监测,通过与舍内温湿度进行比较,以选择适当的控制方式,可有效避免因外界环境的差异所造成的错误操作。因此,本系统设定,若舍内温度与外界温度之差在5℃以内,则为0;若舍内温度高外界温度5℃,则为1;若舍外温度低外界温度5℃,则为2。同理可设,湿度表征为0时,则是室内湿度与外界湿度之差在10%以内,其详细分类参考表6。表6室内外温湿度对照表温湿度(内-外)温度相等相等相等高高高低低低湿度相等高低相等高低相等高低编号*,*0,00,10,21,01,11,22,02,12,2单片机根据温湿度模糊推理的结果,再结合舍内外温湿度关系选择控制模式,得到控制信息。控制信息的格式为“舍外温度+舍外湿度+舍内温度+舍内湿度”。例如,“0102”表示舍外与舍内温度相等,湿度偏低,以及舍内温度正常,湿度偏低。若鸡舍温度较设定值偏低,则启动加热装置;若鸡舍湿度较设定值偏低,则启动增湿装置;若鸡舍温度或湿度较设定值均偏高,则根据表6和图20,驱动相应的控制电路,控制程序结构如图20。图20控制程序流程图52 本设计中,若单片机检测到温度偏差(舍内温度与设定温度之差的绝对值)大于或等于4℃,或者湿度偏差(舍内湿度与设定湿度之差的绝对值)大于或等于8%,则单片机P3.0管脚输出低电平以驱动蜂鸣器,从而实现报警功能。5温湿度模糊控制器的测试5.1测试器件本系统以自行选材搭建的密闭式雏鸡鸡舍模型箱体为试验平台,该模型采用为长方体结构,长2米,宽0.68米,高0.34米,经多次试验,其具有较好的保温效果,如图21所示。本设计采集模块共有7个温湿度监测点,其中室外安装1个AM2302,并靠近进风口,而其余的AM2302分别安装在模型箱体内部,如图22所示。图21模型箱体图22传感器布局系统的执行机构如图23所示,其中加热装置采用2个功率为340瓦的热源,且对称52 放置在模型箱体内;通风装置采用纵向通风的方式,模型箱体前后侧安装通风量均为0.003m³/s的风扇,以实现在两分钟内完成1次箱体换气操作;增湿装置采用喷雾头往容器内快速喷雾以实现增湿的效果,容器所积的水通过水管排出模型箱体。图23执行机构5.2测试方法主控板分别连接各个AM2302,以及各个执行机构继电控制信号线。经检查线路无误后打开电源,并设定温湿度目标值分别为30℃和60%(默认值),再启动。同时,记录下初始温湿度,此后每隔半分钟则记录1次舍内温湿度。如图24所示。图24主控板测试5.3测试结果模型箱体内起始温度为26.7℃,湿度为52.5%,经过13分钟后达到稳定状态,测试数据详细见附录D,并利用Matlab对数据进行处理,可得测试曲线如图25所示。由图可知,稳定后的最大温度误差为0.7℃,湿度为2.5%。52 图25测试曲线由图25可知,随着温度或者湿度的增加,系统会自动开启通风装置,故易导致内部环境的波动;其中,温度曲线具有较好的收敛性,并且基本不受到湿度和通风的影响;而因湿度易受到温度和通风的影响,导致湿度曲线波动较大。本设计所采用的模糊控制算法增强了系统抗干扰能力,快速达到平衡,最终实现温湿度的自动控制。6总结6.1难点与创新本设计中的难点主要有2个方面,一是主控板的设计,二是模糊控制编程。主控板作为本设计中最为核心的硬件部件,集成了绝大部分电路,然而其采用的STC89C52RC单片机I/O管脚数量有限。因此,单片机管脚的分配直接影响到主控板布局和PCB布线。同时,主控板分别连接至AM2302模块的7组的导线(包括电源线、数据线和地线),和继电控制及报警电路的4条控制信号线等等,所需外接的导线较多,故本设计采用排针组引出这些导线,并对其进行合理分组;另外,采集控制电路位于单片机的左侧,按键电路和显示电路的均位于单片机的右侧,提高主控板的美观性(见附录B)。模糊控制的程序设计是本文研究的重、难点。STC89C52单片机的运算能力较弱,尤其模糊控制的浮点或除法运算均会占用单片机大量的资源,并且容易导致程序运算出错。因此,本文研究着重实现模糊控制算法的等效简化,并采用整型变量以避免浮点运算,由于采集的温湿度往往带有小数位,故对温湿度均采用放大10倍转化为整型输入,而放大过后的数值可能会超过256,故在程序设计中温湿度变量均采用16位定义;另外,本设计不采用除法运算,以实现运算中的所有中间变量均为整数,减少单片机的运算负担。本设计的创新点也包括2个方面,一是52 采集控制电路的设计,二是鸡舍内外环境对照的分类处理。采集控制电路成功实现单片机的一个I/O口与多个传感器的轮流通信,而且数据采集也非常稳定可靠,其设计原理已得到证实;本设计最多支持7个AM2302传感器,若是针对大型的育雏室往往需要增加传感器数量,则可以级联1个74LS138实现支持15个采集点的拓展。由此可见,采集控制电路能很大程度上地节约单片机的管脚资源。本文研究充分考虑到通风操作对舍内环境的影响,通风除了将舍内空气排出,也会使舍内环境受到舍外环境的干扰,严重时可能使舍内环境发生剧变。为此,本设计增设对鸡舍外部环境的检测,建立鸡舍内外环境的对照表。6.2优点与缺点经过多次模拟测试,本文研究主要包括4个方面的优点:一是设计成本低,本设计均选用价格低廉、高性能的电子元器件;二是良好的人机交互,本设计从硬件布局的合理性到软件设计的全面性两个方面,以实现便捷的人机交互;三是系统稳定性强,参数采集的出错率接近于零;四是控制效果好,温度最大误差为0.7℃,湿度最大误差为2.5%,可满足饲养雏鸡的环境要求。另外,本设计业也存在3个方面的缺点:一是控制器通用性不强,需根据鸡舍的空间大小和硬件设施等等因数人为地调整模糊算法的量化因子;二是需要额外地提供5V的直流电源;三是布线复杂,采用有线传输方式虽可显著减少数据传输的出错率和降低成本,但在本设计中则需要外接25条高质量的导线。6.3前景与展望目前,中国中小规模的雏鸡饲养企业,还是主要依靠人工经验管理,而且需全天候监督,呈现以下几个特点:养殖基础设施落后,机械化程度低,人力劳动成本高;自动、智能化程度低,环境控制波动大,养殖安全隐患高[17-18]。总之,本文所研究的温湿度模糊控制器在原理上实现了代替人工的作用,并且以其价格低廉、稳定性强和控制效果好等等优势,具备较大的市场推广潜力。参考文献[1]王寒笑,安玉发,陈丽芬.中国肉鸡养殖成本分析[J].中国家禽,2006,28(14):10-13.WangHanxiao,AnYufa,ChenLifen.AnalysisonCostofChinaBroilerHusbandry[J].ChinaPoultry,2006,28(14):10-13.[2]申秋红.中国家禽产业的经济分析[D].北京:中国农业科学院,2008.ShenQiuhong.EconomicAnalysisofPoultryIndustryinChina[D].Beijing:ChineseAcademyofAgriculturalSciencesPh.DDissertation,2008.52 [3]周宁.基于ZigBee技术的无线传感器网络的研究与应用[D].河北大学.2010Zhouning.ResearchandapplicationonwirelesssensornetworkbasedonZigBeeTechnology[D].Hebeiuniversity.2010.[4]顾伟军,彭亦功.智能控制技术及其应用[J].自动化仪表.2006,27:101-104.Guweijun,Pengyigong.Intelligentcontroltechnologiesandtheirapplications[J].Processautomationinstrumentation,2006,27:101-104.[5]卜宪宪.关于网络通信技术的发展的探讨[J].信息科技.2012.[6]刘江辉,陶伟业.多媒体网络通信技术的研究[J].网络通讯与安全.2007.[7]赵巍巍.模糊温度控制器的研究[D].大连理工大学.2007.[8]王一帆.基于FPGA的物联网温湿度传感器多功能IP核研究与设计[D].北京工业大学.2012.Wangyifan.Multi-functionIPcoredesignofiottemperatureandhumiditysensorsbasedonFPGA[D].Beijinguniversityoftechnology.2012.[9]单玉鹏,缪新颖,高晓阳.模糊控制在水产养殖监控系统中的应用[J].安徽农业科学.2007,35(17):5331-5332.Shanyupeng,etal.Applicationoffuzzycontrolinaquiculturemonitoringsystem[J].Journalofanhuiagri.Sci.2007,35(17):5331-5332.[10]杨涛,高伟,黄树红.基于Matlab的锅炉过热汽温模糊控制系统仿真[J].华中科技大学学报(自然科学版).2003,31(4):63-65.[11]PauloSalgado,J.BoaventuraCunha.Greenhouseclimatehierarchicalfuzzymodeling[J].ControlEngineeringPractice,2004,Vol.13(5),pp.613-628.[12]王立新.模糊系统与模糊控制教程[M].北京:清华大学出版社,2003.[13]ChaoYang,ShijuanFan,ZhiweiWang,et.al.Applicationoffuzzycontrolmethodinatunnellightingsystem[J].MathematicalandComputerModeling,2011,Vol.54(3).Pp:931-937.[14]JérômeMendes, RuiAraújo, PedroSousa,et.al.Anarchitectureforadaptivefuzzycontrolinindustrialenvironments[J].ComputersinIndustry,2010,Vol.62(3),pp.364-373.[15]许力.智能控制与智能系统[M].北京:机械工业出版社,2007.[16]StefanGering, JürgenAdamy.Fuzzycontrolofcontinuous-timerecurrentfuzzysystems[J].FuzzySetsandSystems,2014.[17]王瑞兵.雏鸡培育的环境控制技术[J].畜牧与饲料科学,2009,30(11-12):171-172.[18]杨福生.浅议中国家禽养殖业现状及经营模式[J].畜牧兽医,2011:117-118.52 致谢时光飞逝,转眼间我的大学已经接近尾声。在毕业论文即将完成之际,我由衷地感谢我的指导老师,与我共同奋斗的同学,以及热心帮助过我的学长。首先,我特别感谢许丽佳老师给予我悉心的指导,从论文选题、技术实现和论文撰写等等都给予了我很多帮助,她严谨的工作态度和乐观的生活态度深深地影响着我;其次,我也非常感谢与我共同参与创新实验的同学,我们共同奋斗的难忘经历让我深深地体会到团队合作的力量,让我学到了许多专业知识。四年的学习生活,我非常感谢我的专业老师,您们的谆谆教诲让我收获到了非常丰富的课堂知识,也让我了解到电子世界的神奇,逐渐树立了走向电子岗位的职业目标,再次由衷地感谢各位老师。最后,我由衷地感谢我的父母,您们在我求学的路上默默地付出与支持,我会加倍努力地做好自己的工作,走向自己远大的目标。52 附录附录A:主控板电路图52 附录B:主控板PCB52 附录C:系统程序#include#include#defineucharunsignedchar#defineuintunsignedint#defineuintlongunsignedlongintsbitE=P1^6;//1602使能引脚sbitRW=P1^4;//1602读写引脚sbitRS=P1^5;//1602数据/命令选择引脚sbitP_QH=P2^4;//切换sbitP_ZD=P2^5;//增大sbitP_JX=P2^6;//减小sbitP_QD=P2^7;//启动sbitP_BJ=P3^0;//报警sbitP_JR=P3^1;//加热sbitP_ZS=P3^2;//增湿sbitP_TF=P3^3;//通风sbitPYM_0=P1^1;//AsbitPYM_1=P1^2;//BsbitPYM_2=P1^3;//CsbitFX=P1^7;//方向控制端O--发出,1--收回sbitSensor_SDA=P1^0;ucharxdataSensor_Data[5]={0x00,0x00,0x00,0x00,0x00};uintlongxdataSensors[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};//{温度0,湿度0,温度1,湿度1,温度2,湿度3......}实际值*10ucharSensor_Check;//校验和ucharSensor_AnswerFlag;//收到起始标志位ucharSensor_ErrorFlag;//读取传感器错误标志uintSys_CNT;uintcodejiantou_xi[]={0X04,0X04,0X04,0X04,0X15,0X0E,0X04,0X04};//细箭头,已选uintlongwendu=300;//放大10倍有:wendu=wendu_add/wendushidu_cntuintlongshidu=600;//放大10倍有:shidu=shidu_add/wendushidu_cntidatauintlongwendu_set=300;//存储温度设置值idatauintlongshidu_set=600;//存储湿度设置值52 idatauintlongwendu_add=0;//有效温度之和idatauintlongshidu_add=0;//有效湿度之和uintflag_QH=0;//切换标志位uintflag_ZD=0;//增大标志位uintflag_JX=0;//减小标志位uintflagwendu_NW=0;//NW表示(内-外),0表示相等,1表示内高外,2表示内低高uintflagwendu_NS=0;//NS表示(内-设),0表示相等,1表示内高设,2表示内低设uintflagshidu_NW=0;//同上设置uintflagshidu_NS=0;//初始均相等,意在执行机构初始不动作uintlongxdataEC_wendu[2]={300,300};//温度{原态,现态},用于求每轮采集的变化值EC_wendu[1]-EC_wendu[0];uintlongxdataEC_shidu[2]={600,600};//湿度{原态,现态},用于求每轮采集的变化值EC_shidu[1]-EC_shidu[0];idataintwendu_e=0;idataintwendu_ec=0;idatauintlongwendu_OUT=0;//解模糊wendu_OUTidataintshidu_e=0;//可能有负数idataintshidu_ec=0;idatauintlongshidu_OUT=0;//解模糊shidu_OUTintcoderules[7][7]={//温度规则表湿度规则表//误差变化率-12-8-404812//误差±1℃-30-20-100102030//误差±3%{-9,-9,-9,-9,-6,-6,-3},//-30{-9,-9,-9,-9,-6,-6,-3},//-75{-9,-9,-9,-6,-6,-3,-3},//-20{-9,-9,-9,-6,-6,-3,-3},//-50{-9,-9,-6,-3,-3,0,0},//-10{-9,-9,-6,-3,-3,0,0},//-25{-6,-6,-3,0,3,6,6},//0{-6,-6,-3,0,3,6,6},//0{0,0,3,3,6,9,9},//10{0,0,3,3,6,9,9},//25{3,3,6,6,9,9,9},//20{3,3,6,6,9,9,9},//50{3,6,6,9,9,9,9}};//30{3,6,6,9,9,9,9}};//75xdatauintwendu_E_FE[4]={3,0,3,0};//温度偏差隶属左函数编号,其隶属度,隶属右函数编号,其隶属度xdatauintwendu_EC_FEC[4]={3,0,3,0};xdatauintshidu_E_FE[4]={3,0,3,0};52 xdatauintshidu_EC_FEC[4]={3,0,3,0};xdatauintlongwendu_U[8]={0,0,0,0,0,0,0,0};//四个对应隶属度函数组xdatauintlongshidu_U[8]={3,0,3,0,3,0,3,0};voiddelay(){_nop_();_nop_();_nop_();_nop_();_nop_();}voidDelay_N10us(uchart)//20us+10*N延时{while(t--){_nop_();}}voidDelay(uintlongt)//i*1毫秒延时{uintx;uintlongj;for(j=0;j500)wendu=500;wendu_shi=wendu/100+0X30;wendu_ge=wendu/10%10+0X30;wendu_fen=wendu%10+0X30;L1602_char(2,3,wendu_shi);Delay(5);L1602_char(2,4,wendu_ge);Delay(5);L1602_char(2,6,wendu_fen);52 Delay(5);}voidshidu_display()//湿度的实时显示,可全程调用{ucharshidu_shi;ucharshidu_ge;ucharshidu_fen;if(shidu<11)shidu=10;if(shidu>999)shidu=990;shidu_shi=shidu/100+0X30;shidu_ge=shidu/10%10+0X30;shidu_fen=shidu%10+0X30;L1602_char(2,12,shidu_shi);Delay(5);L1602_char(2,13,shidu_ge);Delay(5);L1602_char(2,15,shidu_fen);Delay(5);}voidzengda()//增大设定值{if(flag_QH==0){wendu=wendu+10;wendu_set=wendu;//对设置值进行赋值wendu_display();}if(flag_QH==1){shidu=shidu+10;shidu_set=shidu;//对设置值进行赋值shidu_display();}}voidjianxiao()//减小设定值{if(flag_QH==0){wendu=wendu-10;wendu_set=wendu;//对设置值进行赋值52 wendu_display();}if(flag_QH==1){shidu=shidu-10;shidu_set=shidu;//对设置值进行赋值shidu_display();}}voidkeys()//按键检查{while(1){while((P_QH==1)&&(P_ZD==1)&&(P_JX==1)&&(P_QD==1));//判断是否有键按下,没有则等待;if(P_QH==0){Delay(20);//protues中按键闭合时间较长if(P_QH==0){if(flag_QH==0)flag_QH=1;//指向湿度elseflag_QH=0;//指向温度}jiantou();}if(P_ZD==0){Delay(20);if(P_ZD==0){flag_ZD=1;zengda();}}if(P_JX==0){Delay(20);if(P_JX==0){flag_JX=1;jianxiao();}52 }if(P_QD==0){Delay(20);if(P_QD==0){break;//启动,则推出按键检测程序}}Delay(300);//防止一次按键操作多次执行}}voidqidong(){L1602_string(1,1,"running...");L1602_string(2,1,"T=**.*RH=**.*");Delay(1000);L1602_string(1,1,"I:*******O:***");//I/O口指示(数字1代表通,数字0代表不通)Delay(1000);}voidClear_Data(){inti;for(i=0;i<5;i++){Sensor_Data[i]=0x00;}//接收数据清零}unsignedcharRead_SensorData(){unsignedchari,cnt;unsignedcharbuffer,tmp;buffer=0;for(i=0;i<8;i++){cnt=0;while(!Sensor_SDA)//检测上次低电平是否结束{if(++cnt>=300){break;}52 }//延时Min=26usMax50us跳过数据"0"的高电平Delay_N10us(2);//延时30us//判断传感器发送数据位tmp=0;if(Sensor_SDA){tmp=1;}cnt=0;while(Sensor_SDA)//等待高电平结束{if(++cnt>=200){break;}}buffer<<=1;buffer|=tmp;}returnbuffer;}unsignedcharRead_Sensor(void){unsignedchari;//主机拉低(Min=800USMax=20Ms)Sensor_SDA=0;Delay(1);//延时2Ms//释放总线延时(Min=30usMax=50us)Sensor_SDA=1;Delay_N10us(1);//延时30us///从此处来看,还预留有20us-2us=18us的误差允许//主机设为输入判断传感器响应信号FX=1;///***《《《《《《《《《《《《《《***///此处增加FX=1,这个占据的时间从推测上来说,应该不会太长Sensor_SDA=1;///***《《《《《《《《《***///若要FX=1,执行这句话软件需要2us,经致电单片机公司///***《《《《《***///了解到单片机的硬件转换时间是纳秒级的,完全可以忽略不记Sensor_AnswerFlag=0;//传感器响应标///***《***///联系电话:0755-83651053深圳中源单片机发展公司//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行52 if(Sensor_SDA==0){Sensor_AnswerFlag=1;//收到起始信号Sys_CNT=0;//判断从机是否发出80us的低电平响应信号是否结束while((!Sensor_SDA)){if(++Sys_CNT>300)//防止进入死循环{Sensor_ErrorFlag=1;return0;}}Sys_CNT=0;//判断从机是否发出80us的高电平,如发出则进入数据接收状态while((Sensor_SDA)){if(++Sys_CNT>300)//防止进入死循环{Sensor_ErrorFlag=1;return0;}}//数据接收传感器共发送40位数据//即5个字节高位先送5个字节分别为湿度高位湿度低位温度高位温度低位校验和//校验和为:湿度高位+湿度低位+温度高位+温度低位for(i=0;i<5;i++){Sensor_Data[i]=Read_SensorData();}}else{Sensor_AnswerFlag=0;//未收到传感器响应}return1;}voidcaiji()//周期的舍内外数据采集并动态显示{//显示有两项:输入管脚是否通uchari;ucharj=3;uintwendushidu_cnt=0;//有效计数wendu_add=0;52 shidu_add=0;for(i=0;i<14;i++){Clear_Data();//清除数据FX=0;delay();if(i==0)//0号传感器{PYM_0=0;PYM_1=0;PYM_2=0;}if(i==2)//1号传感器{PYM_0=1;PYM_1=0;PYM_2=0;}if(i==4)//2号传感器{PYM_0=0;PYM_1=1;PYM_2=0;}if(i==6)//3号传感器{PYM_0=1;PYM_1=1;PYM_2=0;}if(i==8)//4号传感器{PYM_0=0;PYM_1=0;PYM_2=1;}if(i==10)//5号传感器{PYM_0=1;PYM_1=0;PYM_2=1;}if(i==12)//6号传感器{52 PYM_0=0;PYM_1=1;PYM_2=1;}Read_Sensor();//读取传感器数据Sensors[i]=Sensor_Data[2]*256+Sensor_Data[3];//温度01,2,3,4,5,6wendu_add=wendu_add+Sensors[i];//(内)(外)Sensors[++i]=Sensor_Data[0]*256+Sensor_Data[1];//湿度01,2,3,4,5,6shidu_add=shidu_add+Sensors[i];if(Sensor_AnswerFlag==1)//传感器相应标志,有数据反馈,非0{Sensor_Check=Sensor_Data[0]+Sensor_Data[1]+Sensor_Data[2]+Sensor_Data[3];if(Sensor_Check==Sensor_Data[4])//校验成功,温度可能为O,但是湿度不可能为0,故之和肯定大于0{wendushidu_cnt++;//舍内有效值计数L1602_char(1,j++,"1");if(j==4){j++;}}else{L1602_char(1,j++,"0");if(j==4){j++;}}}else{L1602_char(1,j++,"0");if(j==4){j++;}}Delay(498);//接近0.5秒}PYM_0=1;//指向空端,也间接巧合预留P1.7管脚的用处PYM_1=1;PYM_2=1;if(wendushidu_cnt==0)//舍内无采集点,系统无法正常工作,执行机构无动作52 {wendu=wendu_set;shidu=shidu_set;}else{wendu=(wendu_add-Sensors[0])/wendushidu_cnt;//这是很优秀的巧合,本以为需要加余数,温总和-室外温度shidu=(shidu_add-Sensors[1])/wendushidu_cnt;//余数是在第2位小数点,百分位,故可省,湿总和-室外湿度}/////////Sensors[0]----舍外温度Sensors[1]----舍外湿度wendu_display();/////////wendu_set-----设置温度shidu_set-----设置湿度shidu_display();/////////wendu---------舍内均温shidu---------舍内均湿//wendu=300;//测试//shidu=600;//若能读到采集数据,则不用该语句}voidcaiji_chuli()//考虑外界环境对舍内控制的影响{if(wendu>=(Sensors[0]+50))flagwendu_NW=1;if((wendu+50)<=Sensors[0])//定义±5℃的区间flagwendu_NW=2;if((wendu<(Sensors[0]+50))&&((wendu+50)>Sensors[0]))flagwendu_NW=0;if(shidu>=(Sensors[1]+100))flagshidu_NW=1;if((shidu+100)<=Sensors[1])//定义±10%的区间flagshidu_NW=2;if((shidu<(Sensors[1]+100))&&((shidu+100)>Sensors[1]))flagshidu_NW=0;if((wendu>=(wendu_set+40))||((wendu+40)<=wendu_set)||(shidu>=(shidu_set+80))||((shidu+80)<=shidu_set))P_BJ=0;//报警限定,温度高于设置的4℃,低于-4℃,湿度高于设置8%,低于-8%;elseP_BJ=1;}voidfuzzy()//考虑舍内温湿度的模糊变化趋势,得到0,1,2,同上表示52 {wendu_e=wendu-wendu_set;//温度偏差值EC_wendu[0]=EC_wendu[1];EC_wendu[1]=wendu;wendu_ec=EC_wendu[1]-EC_wendu[0];//温度变化率if(wendu_e>30)//范围界定wendu_e=30;if(wendu_e<-30)wendu_e=-30;//e:-30,-20,-10,0,10,20,30if(wendu_ec>12)//ec:-12,-8,-4,0,4,8,12wendu_ec=12;if(wendu_ec<-12)wendu_ec=-12;//u:-9,-6,-3,0,3,6,9*(40)if((wendu_e>=-30)&&(wendu_e<=30)){if(wendu_e<-20){wendu_E_FE[0]=0;wendu_E_FE[1]=-20-wendu_e;//()/10*10=()*1,将隶属度放大10倍}elseif(wendu_e<-10){wendu_E_FE[0]=1;wendu_E_FE[1]=-10-wendu_e;}elseif(wendu_e<0){wendu_E_FE[0]=2;wendu_E_FE[1]=-wendu_e;}elseif(wendu_e<10){wendu_E_FE[0]=3;wendu_E_FE[1]=10-wendu_e;}elseif(wendu_e<20){wendu_E_FE[0]=4;wendu_E_FE[1]=20-wendu_e;}elseif(wendu_e<=30){wendu_E_FE[0]=5;52 wendu_E_FE[1]=30-wendu_e;}wendu_E_FE[2]=wendu_E_FE[0]+1;wendu_E_FE[3]=10-wendu_E_FE[1];}if((wendu_ec>=-12)&&(wendu_ec<=12)){if(wendu_ec<-8){wendu_EC_FEC[0]=0;wendu_EC_FEC[1]=-8-wendu_ec;//()/4*4=()*1隶属度放大4倍}elseif(wendu_ec<-4){wendu_EC_FEC[0]=1;wendu_EC_FEC[1]=-4-wendu_ec;}elseif(wendu_ec<0){wendu_EC_FEC[0]=2;wendu_EC_FEC[1]=-wendu_ec;}elseif(wendu_ec<4){wendu_EC_FEC[0]=3;wendu_EC_FEC[1]=4-wendu_ec;}elseif(wendu_ec<8){wendu_EC_FEC[0]=4;wendu_EC_FEC[1]=8-wendu_ec;}elseif(wendu_ec<=12){wendu_EC_FEC[0]=5;wendu_EC_FEC[1]=12-wendu_ec;}wendu_EC_FEC[2]=wendu_EC_FEC[0]+1;wendu_EC_FEC[3]=4-wendu_EC_FEC[1];//隶属度以4为参考}//规则对应wendu_U[0]=rules[wendu_E_FE[0]][wendu_EC_FEC[0]];//如同:rule[0][0]wendu_U[1]=wendu_E_FE[1]*wendu_EC_FEC[1];//rule[0][0]隶属度wendu_U[2]=rules[wendu_E_FE[0]][wendu_EC_FEC[2]];//如同:rule[0][1]wendu_U[3]=wendu_E_FE[1]*wendu_EC_FEC[3];//rule[0][1]隶属度52 wendu_U[4]=rules[wendu_E_FE[2]][wendu_EC_FEC[0]];//如同:rule[1][0]wendu_U[5]=wendu_E_FE[3]*wendu_EC_FEC[1];//rule[0][0]隶属度wendu_U[6]=rules[wendu_E_FE[2]][wendu_EC_FEC[2]];//如同:rule[1][1]wendu_U[7]=wendu_E_FE[3]*wendu_EC_FEC[3];//rule[1][1]隶属度//加权法解模糊:其为真实值的40倍[-360—360]wendu_OUT=wendu_U[0]*wendu_U[1]+wendu_U[2]*wendu_U[3]+wendu_U[4]*wendu_U[5]+wendu_U[6]*wendu_U[7];shidu_e=shidu-shidu_set;//湿度偏差值EC_shidu[0]=EC_shidu[1];EC_shidu[1]=shidu;shidu_ec=EC_shidu[1]-EC_shidu[0];//湿度偏差值if(shidu_e>75)//范围界定shidu_e=75;if(shidu_e<-75)shidu_e=-75;//e:-75,-50,-25,0,25,50,75if(shidu_ec>30)//ec:-30,-20,-10,0,10,25,30shidu_ec=30;if(shidu_ec<-30)shidu_ec=-30;//u:-9,-6,-3,0,3,6,9if((shidu_e>=-75)&&(shidu_e<=75)){if(shidu_e<-50){shidu_E_FE[0]=0;shidu_E_FE[1]=-50-shidu_e;//()/25*25=()*1,将隶属度放大25倍}elseif(shidu_e<-25){shidu_E_FE[0]=1;shidu_E_FE[1]=-25-shidu_e;}elseif(shidu_e<0){shidu_E_FE[0]=2;shidu_E_FE[1]=-shidu_e;}elseif(shidu_e<25){shidu_E_FE[0]=3;shidu_E_FE[1]=25-shidu_e;}elseif(shidu_e<50)52 {shidu_E_FE[0]=4;shidu_E_FE[1]=50-shidu_e;}elseif(shidu_e<=75){shidu_E_FE[0]=5;shidu_E_FE[1]=75-shidu_e;}shidu_E_FE[2]=shidu_E_FE[0]+1;shidu_E_FE[3]=25-shidu_E_FE[1];}if((shidu_ec>=-30)&&(shidu_ec<=30)){if(shidu_ec<-20){shidu_EC_FEC[0]=0;shidu_EC_FEC[1]=-20-shidu_ec;//()/10*10隶属度放大10倍}elseif(shidu_ec<-10){shidu_EC_FEC[0]=1;shidu_EC_FEC[1]=-10-shidu_ec;}elseif(shidu_ec<0){shidu_EC_FEC[0]=2;shidu_EC_FEC[1]=-shidu_ec;}elseif(shidu_ec<10){shidu_EC_FEC[0]=3;shidu_EC_FEC[1]=10-shidu_ec;}elseif(shidu_ec<20){shidu_EC_FEC[0]=4;shidu_EC_FEC[1]=20-shidu_ec;}elseif(shidu_ec<=30){shidu_EC_FEC[0]=5;shidu_EC_FEC[1]=30-shidu_ec;}shidu_EC_FEC[2]=shidu_EC_FEC[0]+1;52 shidu_EC_FEC[3]=10-shidu_EC_FEC[1];//隶属度以10为参考}//规则对应shidu_U[0]=rules[shidu_E_FE[0]][shidu_EC_FEC[0]];//如同:rule[0][0]shidu_U[1]=shidu_E_FE[1]*shidu_EC_FEC[1];//rule[0][0]隶属度shidu_U[2]=rules[shidu_E_FE[0]][shidu_EC_FEC[2]];//如同:rule[0][1]shidu_U[3]=shidu_E_FE[1]*shidu_EC_FEC[3];//rule[0][1]隶属度shidu_U[4]=rules[shidu_E_FE[2]][shidu_EC_FEC[0]];//如同:rule[1][0]shidu_U[5]=shidu_E_FE[3]*shidu_EC_FEC[1];//rule[0][0]隶属度shidu_U[6]=rules[shidu_E_FE[2]][shidu_EC_FEC[2]];//如同:rule[1][1]shidu_U[7]=shidu_E_FE[3]*shidu_EC_FEC[3];//rule[1][1]隶属度//加权法解模糊:其为真实值的10倍[-2250—2250]shidu_OUT=shidu_U[0]*shidu_U[1]+shidu_U[2]*shidu_U[3]+shidu_U[4]*shidu_U[5]+shidu_U[6]*shidu_U[7];}voidzhixing()//考虑上两处的数据分析各种组合,用if()语句按条件执行{//经MATLAB分析,温度界限选择±130,湿度范围±1000if(wendu_OUT>80)flagwendu_NS=1;//偏高elseif(wendu_OUT>-80)flagwendu_NS=0;//表征误差±1.1℃内,控制在±2℃内elseif(wendu_OUT>=-360)flagwendu_NS=2;//偏低if(shidu_OUT>600)flagshidu_NS=1;//偏高elseif(shidu_OUT>-600)flagshidu_NS=0;//表征误差±3.2%内,控制在±5%内elseif(shidu_OUT>=-2250)flagshidu_NS=2;//偏低P_JR=1;//用于防治程序运行出错,则关闭原启动P_ZS=1;P_TF=1;//综合:舍内外环境选择的执行控制方案//通用特征if(flagwendu_NS==2){P_JR=0;//温度低,加热}if(flagshidu_NS==2){P_ZS=0;//湿度低,增湿52 }if((flagwendu_NS==0)&&(flagshidu_NS==0)){P_JR=1;//温度正常,湿度正常P_ZS=1;//全关P_TF=1;}//为增强程序可读性,则不进行相同项<2,8>;<3,4,6>的整合//<1>、外界温度0湿度0if((flagwendu_NW==0)&&(flagshidu_NW==0)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常P_ZS=0;//通风,增湿}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高P_JR=0;//通风,加热加热通风,可降低湿度}if((flagwendu_NS==1)&&(flagshidu_NS==1))//以温度为主,同时温度升高会降低湿度{P_ZS=0;P_TF=0;}}//<2>、外界温度0湿度1if((flagwendu_NW==0)&&(flagshidu_NW==2)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常,通风}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高P_JR=0;//通风,加热}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_JR=0;//温度高,湿度高P_TF=0;//通风,加热}}52 //<3>、外界温度0湿度2if((flagwendu_NW==0)&&(flagshidu_NW==1)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常P_ZS=0;//通风,增湿}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高,通风}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高P_ZS=0;//通风,增湿}}//<4>、外界温度1湿度0if((flagwendu_NW==2)&&(flagshidu_NW==0)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常P_ZS=0;//通风,增湿}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高,通风}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高P_ZS=0;//通风,增湿}}//<5>、外界温度1湿度1if((flagwendu_NW==2)&&(flagshidu_NW==2)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常}if((flagwendu_NS==0)&&(flagshidu_NS==1)){52 P_TF=0;//温度正常,湿度高,通风}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高}}//<6>、外界温度1湿度2if((flagwendu_NW==2)&&(flagshidu_NW==1)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常P_ZS=0;//增湿,通风}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高,通风}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高P_ZS=0;//通风,增湿}}//<7>、外界温度2湿度0if((flagwendu_NW==1)&&(flagshidu_NW==0)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高,通风P_JR=0;//加热}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高}}//<8>、外界温度2湿度1if((flagwendu_NW==1)&&(flagshidu_NW==2)){52 if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高,通风P_JR=0;//加热}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高P_JR=0;}}//<9>、外界温度2湿度2if((flagwendu_NW==1)&&(flagshidu_NW==1)){if((flagwendu_NS==1)&&(flagshidu_NS==0)){P_TF=0;//温度高,湿度正常P_ZS=0;}if((flagwendu_NS==0)&&(flagshidu_NS==1)){P_TF=0;//温度正常,湿度高,通风P_JR=0;//加热}if((flagwendu_NS==1)&&(flagshidu_NS==1)){P_TF=0;//温度高,湿度高}}}output_display()//输出指示{if(P_JR==0)L1602_char(1,14,"1");elseL1602_char(1,14,"0");if(P_ZS==0)L1602_char(1,15,"1");elseL1602_char(1,15,"0");52 if(P_TF==0)L1602_char(1,16,"1");elseL1602_char(1,16,"0");}//主函数voidmain(){ucharcaiji_times=0;//采集次数,两次采集才能确定参数变化率xitong_init();L1602_init();huanying();//初始设置shezhi();keys();qidong();while(1)//复位键退出{caiji();//采集显示,接近3.5秒caiji_chuli();//数据处理fuzzy();//模糊分析if(caiji_times==0)//两次采集执行控制{caiji_times=1;}else{zhixing();//执行output_display();//指示}Delay(500);//延时500毫秒,4秒/周期//Delay_S(16);//延时--16秒-可改}}52 附录D:测试数据表序号温度湿度序号温度湿度序号温度湿度126.752.52729.963.85329.360.9226.752.62829.859.25429.462.9326.953.32929.758.35529.562.4427563029.558.75629.658.1527.2583129.4625729.657.5627.5613229.359.65829.656.6727.862.23329.3595929.658.4828.162.93429.258.36029.660928.463.13529.358.76129.661.21028.8643629.458.86229.663.51129.263.63729.458.26329.561.61229.563.83829.659.66429.560.11329.865.63929.758.46529.460.1143064.64029.7586629.3601530.3584129.858.36729.359.51630.455.54229.8596829.460.51730.554.34329.859.96929.460.91830.556.24429.8617029.459.91930.6574529.758.47129.560.22030.658.24629.757.47229.559.52130.5614729.6617329.560.62230.564.64829.5637429.661.62330.359.34929.459.47529.661.22430.2585029.358.37629.660.82530.157.75129.358.27729.659.1263059.65229.359.57829.559.452'