《基于STM32F103C8T6单片机的观赏鱼养护系统设计》14000字(论文)_第1页
《基于STM32F103C8T6单片机的观赏鱼养护系统设计》14000字(论文)_第2页
《基于STM32F103C8T6单片机的观赏鱼养护系统设计》14000字(论文)_第3页
《基于STM32F103C8T6单片机的观赏鱼养护系统设计》14000字(论文)_第4页
《基于STM32F103C8T6单片机的观赏鱼养护系统设计》14000字(论文)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于STM32F103C8T6单片机的观赏鱼养护系统设计摘要根据对市场现在的分析和研究,本文提出了一套多功能的智能鱼缸设计方案。本设计以STM32F103C8T6单片机为核心,添加多个传感器,实现自动换水、自动喂食、温度检测、浑浊度检测等功能。整个系统可分为两个部分:第一部分是以芯片为核心的控制电路,包括温度传感器、水位检测电路、喂食电路、换水电路等,可以对温度、水位、浑浊度等数据进行存储和处理。第二部分是手机APP部分,通过无线WIFI与上位机通信,将相关数据传输给手机APP,实现显示和控制功能。同时,相关温度数据、水位数据、喂食状态、换水状态都会显示在液晶屏上,更为直观。通过传感器的相互作用和手机APP的远程操作,本系统能更好的实现对观赏性鱼类的养护,形成了一套可完成浑浊度检测、温度检测、自动换水、自动喂食等功能的智能鱼缸系统。关键词:STM32F103C8T6,无线WIFI模块,TFT触摸彩屏模块,水深检测,光敏电阻,浑浊度检测电路。目录第一章绪论 11.1背景和意义 11.2国内外研究现状 11.3本文主要工作 31.4论文组织结构 3第二章系统方案分析 52.1系统需求分析 52.2系统整体框架 52.3主控模块的选型和论证 62.4无线遥控模块的选型和论证 72.5显示模块的选型和论证 8第三章系统硬件设计 93.1系统总体硬件电路图的设计 93.2STM32F103C8T6最小系统设计 93.3TFT彩屏显示电路的设计 93.4无线WIFI模块的设计 103.5温度检测模块的设计 103.6水深检测模块的设计 113.7浑浊度检测模块的设计 123.8舵机模块的设计 123.9按键模块的设计 133.10水位控制模块的设计 14第四章系统软件设计 154.1程序整体设计和实现 154.2温度监测实现 164.3浑浊度监测实现 174.4喂食设计 204.5换水设计 214.6报警提示系统 234.7APP的设计 24第五章系统实物调试 285.1系统初始化调试 285.2APP控制演示 295.3测温演示 305.4喂食演示 325.5换水演示 335.6浑浊度演示 36第六章总结与展望 386.1课题总结 386.2进一步开发的展望 38=绪论背景和意义现在物质生活已经逐渐丰富,人们对于生活的追求早已摆脱了酒足饭饱等简单的需求,现在的人们越来越追求精神生活的美满。大部分人对室内养鱼有着巨大的兴趣,但是鱼缸养鱼技术有着很大的学习成本,温度、湿度、喂食时间对鱼的成活都有着很大的影响,但大部分并没有那么多的学习时间去研究,这时候智能鱼缸的出现极大的拉低了鱼缸养鱼技术的学习成本,所以有更多的养鱼爱好者愿意购买一个智能鱼缸去检测自己鱼的生活状态,因此,在这样的背景下,本设计的完成了一款基于STM32芯片的智能鱼缸开发和设计。水族箱起初是为了公共场所所涉及的,随着经济的发展,科技的提高,水族箱成为了普通家庭的家居装饰,越来越多的家庭喜欢家里安排一个鱼缸去点缀自己的生活,是自己更多的去亲近自然。但很多人可能时间有限,无法对水族箱进行很好的维护,往往最后的结局便是“草桔鱼亡”。针对智能水族箱的设计有很多,主要集中在水温控制,氧气控制,换水加水等相关系统。但产品的繁杂,且功能也各有不同,使得用户的挑选也变得困难,且如果自己进行多个功能的组装,无法形成有效的配合,也存在一定的资源浪费。给用户造成了多余的经济负担又无法达成其预期的效果。因此,在市场的需求催促下,一个集合多个功能的智能鱼缸的出现,成了用户们的迫切需求。本设计不仅解决了鱼类日常养护问题,同时对智能化家居进入百姓家中的发展有着重大的意义。国内外研究现状本文对市面上已经有的智能鱼缸装置进行了调研,发现了很多公司在智能鱼缸方面的研究已经非常的深入。下面,就是本文在调研了相关的文献之后,得到的一些研究现况。发展了多年的嵌入式技术如今已经十分成熟,而且用嵌入式技术配合传感器做成的智能鱼缸可以很好的实现温湿度的控制,对于水位的检测,浑浊度的检测有着很好的精度控制,加上无线技术的突破,现在的鱼缸能实现远程控制进行操作等。国外研究现状:国外的一个团队在2016年3月推出了一套智能鱼缸系统,该系统由监控器、插座控制器和对应的安卓app组成。该系统虽然把部分功能集成了起来,但集成化程度较低,且使用配置又及其繁琐,给用户的上手造成了很大程度的负担。此外,系统售价过于高昂,很多家庭购买可能需要很大考虑,故推广过程较为困难。国内研究现状:国内的智能鱼缸主要由森森公司在研发生产。有一款2000多元的低端产品集成度不够高,很多附属设配需要用户自行购买加装,非诚的不方便。另外一款售价约为4000元左右的智能控制系统则是利用了一个类似于电视数字机顶盒大小的控制设备,包含了插座功能、显示功能以及网络通讯功能,可以与手机app连接进行远程控制,但与设备匹配的app端用户数有限制,且设备集成度较低,占用空间较多,不够简洁,影响美观,并且价格高昂,智能程度低,与普通大众的消费能力不匹配。还有一家鱼乐多品牌的厂家生产的智能鱼缸,虽然产品价格只有600多元,但产品没有远程控制系统,智能程度只有显示屏控制,只能显示基础的温度调节和灯光调节,连喂食系统也还是依靠手动旋钮组成,智能程度水平比较低。最近国内知名品牌小米也推出了自己的智能鱼缸,该鱼缸采用画法几何C系智能鱼缸Pro版的缸体为椭圆形,看起来圆润小巧,提供了全方位的视角,且采用的玻璃耐磨防破裂,安全性较高。供电采用USB供电,做了低压和断电保护。同时该鱼缸可以使用小米自家的语音识别系统—小爱同学进行语音识别控制。相比上面两家的设计,小米的智能鱼缸更撑得上是一个智能产品,可以很好的进行远控控温,APP操作,自动投喂食。但对于自动换水等操作还是没有实现,并且鱼缸的体积比较小,水容量只有8-9L,只能养殖小型鱼或者中型鱼,无法实现大部分市场的需求。目前国内的智能鱼缸市场存在空白很大,仅有的几款产品也都不够完善,故本设计有着较高的研究价值和应用价值。本文主要工作本设计主要基于STM32F103C8T6芯片,由两个光敏电阻组成的电路对水进行浑浊度的检测,利用防水温度传感器对水的温度实行实时采集,利用WIFI模块实现上位机和单片机的相互通讯,处理器将采集到的相关数据进行处理放到TFT液晶屏上显示。这样做的优点是成本低廉,较容易实现,同时可以更好的实现远程操控。主要功能:(1) 通过两个光敏电阻探测水的浑浊度,如果浑浊度超过设定值,手机和液晶同时提示“换水”;(2) 液晶和手机实时显示所有数据参数;(3) 单片机内部自我计时,超过设定时间自动喂食,也可通过手机实时查看看喂食间隔,手动喂食;(4) 单片机自动检测温度,将温度值实时传送给液晶屏和手机软件进行显示;(5) 实时检测水位高低,超过上下限液晶提示,同时可通过手机和液晶屏观察水位高低通过手机输入指令或者按键的控制进行操作。技术指标:(1) 温度检测的误差在±0.5度之间;(2) 浑浊度通过两光敏电阻实现,将两光敏所得值相减取绝对值,如果值小于20为正常,大于20则液晶提醒换水;(3) 自动喂食控制在24小时一次。一次投喂量4-5颗鱼食;(4) 显示屏和移动端在进行相应操作以后都会及时更新目前的数据情况。创新点:主要创新点通过传感器和远程操作,实现更好的鱼类养殖。论文组织结构本论文的组织结构包括:第一章阐明课题的研究背景,介绍课题的研究现状和来源,并概述设计(论文)的主要工作和创新点。第二章论文的方案分析和进行零件的选型辩证。第三章硬件的主要介绍和电路图。第四章软件的工作流程和设计,以及上位机的实现。第五章系统的实物调试及数据分析。第六章对系统未来的拓展和升级阐述。系统方案分析系统需求分析此次课题所制作的智能鱼缸其主要功能应具有采集鱼缸内的温度、湿度、光照强度,能自己进行换水,喂食等基本操作,可以远程控制进行通信,系统监测到的温湿度数据、光照强度数据皆由WIFI模块传至APP上显示,且环境监测系统也需有个液晶显示器显示监测系统所监测到的数据。由此,本次课题需要有STM32F103C8T6微控制器、温湿度传感器、光敏电阻模块、液晶显示模块、WIFI模块以及换水所需要的水泵系统等。系统整体框架智能鱼缸基于STM32F103C8T6作为主控芯片,对各个电路模块进行操作以实现相应的功能,硬件电路模块主要包括:温度监测模块、水位检测模块、液晶显示模块、无线WIFI通讯模块、浑浊度检测模块、喂食模块、按键模块、换水模块以及电源模块等。(1)温度监测模块:DS18B20是常用的数字温度传感器,可以直接输出数字信号,少了转换的步骤,所以使用起来较为方便,且体积小,精度高,有着众多的优点。该温度传感器测温范围在-55℃~+125℃之间,测温误差在上下一摄氏度之间,可以很好的完成鱼缸的温度检测功能。(2)水位检测模块:本设计使用的是SS水深检测传感器模块,该传感器简单易用,发出的模拟电压较低,可以直接接入单片机引脚,利用单片机的ADC进行模数转换,完成水位的检测。该方案成本低廉的同时很好的完成了单片机的检测要求,符合预期的设计要求。(3)液晶显示模块:本设计采用TFT触摸彩屏1.44寸模块,其优点非常的明显,亮度、对比度展示效果好,但也有着高功耗的缺点。但对比于其所存在的质量上乘的优点,这些缺点也是可以接受的。(4)无线WIFI通讯模块:本设计使用的是ESP8266-01无线WIFI模块,其超低功耗的优点是我们选择它的最大原因,极大的减少了设备功耗负担。拥有业内最富竞争力的封装设计和低功耗技术,是专为移动设备和物联网设计的WIFI模块,为设备实现联网功能,进行上位机的交流通信。(5)浑浊度检测模块:本设计的浑浊度检测模块是利用两个光敏电阻完成的,将一个光敏电阻置于水面上方,一个光敏电阻置于水面下方,利用两个光敏电阻引起的电流的变化进行浑浊度的判定。(6)喂食模块:喂食模块是由一个SG90舵机完成的,预先将所要的食物置于喂食盒中,当达到预先设定的喂食时间,或者按键或上位机发出喂食指令以后,给舵机通电,打开阀门进行喂食。SG90舵机转速快、耗电小,质量轻盈,是很好的选择。(7)按键模块:这是人机交互的一种手段,通过按键控制,可以对发出换水,喂食,等指令,达到控制的多样化。(8)换水模块:整个换水模块由水泵,水位传感器和排水舵机组成。由排水舵机先将水排出,当水位感应器感应到水位排到一定程度以后关闭排水阀门,打开水泵注入新的水资源。本设计上采用的是一个5V水泵。(9)电源模块:给整个电路供电5V。本设计的硬件组成方案,如图2.1所示。图2.1系统框架图主控模块的选型和论证本设计在单片机芯片的选型上有两种选择,分别是MSP430芯片和STM32F103芯片。方案一:MSP430芯片MSP430系列单片机是美国某公司在1996年研发的一种混合处理器,有着16位超低功耗、精简指令集的特点,目前MSP430市场占有量大,型号多样。如果选择MSP430芯片,其强大的处理能力可以很好的控制和协调各个模块,不会出现对模块控制的延迟。而且MSP430芯片对尘埃的防范能力具有非常出色的表现,日常的使用可以很大程度的降低对芯片的维护保养工作,所以MSP430芯片无疑是很好的选择。但利弊总是伴行的,MSP430强大的处理能力及其各项优点伴随的其成本的高昂,相比于同类型的芯片,MSP430芯片的售价足足高了50%,因此在各项权衡和成本控制下,不得不放弃该芯片的选择。方案二:STM32F103芯片STM32F系列是一款32位ARM微控制器的产品,有着三种不同的闪存种类。虽然STM32F103芯片的处理能力不如MSP430芯片的强大,但此芯片的价格优势相比于MSP430芯片好了不少,使用这款嵌入式芯片,在本设计中对各个模块的处理,包括:采集温度、水位的数据、判断换水条件、接受按键、上位机指令、对液晶屏信息的显示等方面也可以很好的完成这些任务。在大幅度降低成本的同时,略微牺牲处理器的性能无疑是个很好的选择,自古以来,鱼和熊掌不可兼得,所以最后选择了STM32F103芯片作为本设计的主控芯片。无线遥控模块的选型和论证伴随着科技的飞速发展,无线遥控模块已经是非常成熟的技术了,无线遥控是指通过非接触式的方法对被控目标发出指令,使得实施控制人员可以更加灵活的对被控目标进行掌控,目前无线遥控模块应用及其广泛,在工业控制中、航天事业、家庭电器领域都有涉及。相比于以前的电缆连线的方法,无线遥控技术安装成本低廉,无需对连接设备进行布线,无需大规模的地下工程,也不会占用空间上的资源,极大的提高了控制的灵活性和降低了维护的成本。目前无线控制的主要方法有红外线遥控、WIFI模块、蓝牙模块、GSM模块。方案一:红外遥控红外遥控是一种应用广泛的无线控制技术,功耗小,成本低,较为容易实现,所以为广泛应用于手机电脑等产品上。红外载波的频率是38KHZ,理论的遥控距离在8到10米之间,但容易受障碍物的影响,如果中间有障碍物遮挡,那么遥控距离会进一步的下降,由于本设计需要实现长距离的远程控制,所以这里不使用红外遥控模块。方案二:无线WIFI模块使用WIFI模块覆盖性强,传输距离远,使得智能鱼缸脱离的网线的布线麻烦性,提高了本设计的灵活性,实现了本设备的远程控制。方案三:蓝牙模块如果使用蓝牙模块进行本系统的无线数据传输,可以代替很多便携式的电缆,但相比于WIFI模块,蓝牙模块对场景的要求比较高,必须是固定场景下餐能使用,也没有WIFI模块覆盖的范围广,蓝牙的短距离传输无法满足本设计的设计要求,故在此不使用蓝牙模块作为无线传输模块。方案四:GSM模块GSM模块的使用依赖于移动卡,需要插上移动卡才可以进行通讯。本设计鱼缸并不需要频繁的更换环境,或者频繁的移动,再考虑到目前每家每户基本都配备有无线网络的覆盖,故本设计不使用GSM模块作为无线数据传输模块。显示模块的选型和论证本设计为智能鱼缸,需要及时的显示鱼缸当前的状态及时的给使用者反馈信息,所以显示模块也是及其重要的组成部分。所谓显示模块,就是将传感器采集到的数据通过芯片的加工传输给显示模块显示出来,本文选取的显示模块是TFT触摸彩屏1.44寸模块。本设计采用TFT触摸彩屏1.44寸模块,其优点非常的明显,亮度、对比度展示效果好,但也有着高功耗的缺点。但对比于其所存在的质量上乘的优点,这些缺点也是可以接受的。。系统硬件设计系统总体硬件电路图的设计系统的总体硬件由STM32核心芯片、TFT彩屏显示电路模块、无线控制模块、水深检测模块、温度监测模块、水泵控制模块、浑浊度检测电路、独立按键模块、舵机喂食模块以及舵机排水模块组成。STM32F103C8T6最小系统设计本设计是基于嵌入式芯片完成对整个鱼缸系统的控制,使用的核心器件也就是本设计所完成的单片机部分的设计。如图3.1所示,芯片所具有的引脚已经全部展示出来了。后面的其它模块,都需要按照芯片手册,将其和本芯片进行交互,从而完成基于单片机的控制,指令信号的下达等动作。图3.1芯片模块TFT彩屏显示电路的设计本设计为智能鱼缸,需要及时的显示鱼缸当前的状态及时的给使用者反馈信息,所以显示模块也是及其重要的组成部分。所谓显示模块,就是将传感器采集到的数据通过芯片的加工传输给显示模块显示出来,本文选取的显示模块是TFT触摸彩屏1.44寸模块。模块连接上将TFT液晶显示模块的的BL、CS、DS、RES、SDA、SCL引脚连接到STM32的PB15、PB14、PB13、PB12、PB11、PB10引脚。如图3.2所示。图3.2TFT彩屏模块电路连接图无线WIFI模块的设计ESP8266是一款超低功耗的UART-WiFi透传模块,该模块功耗低,是一款专门为物体联网设计的WIFI模块。WIFI模块连接由STM32内部的SPI引脚控制,模块连接上将ESP8266的TXD、RXD引脚连接到STM32的PA9、PA10引脚。ESP8266电路图如图3.3所示。图3.3无线WIFI电路连接图温度检测模块的设计鱼缸对于温度的检测需要的是一种灵敏的、高精度、高可靠的温度传感器,因此,在这选择的是数字型传感器,DS18B20是一种很好的选择。DS18B20是常用的数字温度传感器,可以直接输出数字信号,少了转换的步骤,所以使用起来较为方便,且体积小,精度高,有着众多的优点。该温度传感器测温范围在-55℃~+125℃之间,测温误差在上下一摄氏度之间,可以很好的完成鱼缸的温度检测功能。DS18B20拥有很多的引脚,GND负责进行接地,DQ引脚负责信号的输入输出,VDD负责供电,完整的实现了温度传感器的自身的功能。DS18B20温度传感器温度转换的最大精度时间为750毫秒,用户可自定义报警设置,很好的符合本设计的实验要求。DS18B20温度传感器采用的单线接口方式,所以只需要将它的DQ引脚连接上芯片的PC13口,就能实现其和芯片的双向通讯,其他的1号引脚接地,3号引脚接电源即可。其电路图如图3.4所示。图3.4DS18B20温度监测模块电路连接图水深检测模块的设计本设计使用的是SS水深检测传感器模块,利用水平导线检测水滴大小进行水位的检测判断。该方案成本低廉的同时很好的完成了预期检测要求,符合设计需求。并且此模块输出电压为0~4.2V,而芯片的PA5引脚作为I/O输入最大电压为5.5V,所以我们可以直接将其连接在芯片上,通过芯片的ADC进行模数的转换。将取到的AD采样值转换到0-99的数之间作为水位深度值,水位深度值、值的计算公式如公式3.1所示。水位深度值=(AD采样值−200)∗99/(450−200)此模块也是比较容易连接的,将2号引脚和1号引脚分别接电源的正负极,3号引脚连接PA5,便可以把模拟信号传输给芯片。其电路图如图3.5所示。图3.5水位检测电路连接图浑浊度检测模块的设计本设计的浑浊度检测模块是利用两个光敏电阻完成的,将一个光敏电阻置于水面上方,一个光敏电阻置于水面下方,利用两个光敏电阻引起的电压的变化取其两者的差值进行浑浊度的判定。将取到的AD采样值转换到0-100的数之间作为电压值,电压值的计算公式如公式3.2所示。电压值=99−AD采样值∗99/4096(3.2浑浊度值计算公式如3.3所示。浑浊度=电压值1−电压值2(3.3)将光敏电阻上和一个10KΩ的电阻进行串联,可以很方便地把输出电流转变为电压。因选用的光敏电阻亮阻为10K欧左右,故给其串联一个10K欧的电阻,然后将两组电路分别接入芯片的PA1和PA0引脚,获取模拟信号。其电路图如图3.6所示。图3.6浑浊度检测模块舵机模块的设计舵机是一种位置伺服的驱动器,目前,被广泛应用于各种高档的玩具模型中。舵机在模型中主要用来控制方向,不同类型的模型需要的舵机种类也不一样。舵机的组成部分有外壳、电路板、马达、减速器和定位器构成,主要是通过接受信号后由马达对力臂进行摆动,通过改变电阻值的大小,来确定力臂是否转动到固定位置。本设计中,舵机的主要作用是打开排水阀门或者打开喂食阀门。SG90舵机转速快、耗电小,质量轻盈,工作电压在4.2-6V之中,温度范围:0℃--55℃,运行速度:0.3秒/60度,扭矩为1.5kg/cm,无论是电压上还是温度上,都符合鱼缸正常环境,所以在此选中此舵机。舵机的功率计算公式如3.4所示。P=T∗W=1.5∗0.3=0.45式中,T为扭矩,W为角速度。在连接上,将1号引脚数据写入位连接单片机,2号、3号分别接入电源和接地,其电路图如图3.7所示。图3.7舵机电路连接图按键模块的设计在本设计中总共使用了4个机械式独立按键,通过4个按键协同工作来完成指令的发布。每一个按键会有一个独立的IO,使得按键的状态会被实时的检测。这是人机交互的一种手段,通过按键控制,可以对发出换水,喂食,等指令,达到控制的多样化。连接上,将每个按键分别接在芯片的PB0、PB1、PB3、PB4上,另一端统一接地,电路图如图3.8所示。图3.8按键电路连接图水位控制模块的设计本设计使用了一个5V的水泵,主要是完成换水任务的注水功能。由于本设计本身使用的是USB转DC2.0mm小口圆孔数据线进行供电,该数据线能提供的电压有限,只有5V,故选择这个工作电压为4.5V,工作电流为0.18A,额定功率为0.91W的小水泵,该水泵可以提供的流量为100L/H,同时有着IP68级的防水等级,可以很好的满足这个模拟的小鱼缸环境。因为在电路中存在一个IB=50mA时,其VBE=1.2V的三极管,其基极限流电阻值计算过程如3.4所示。R=V−VBEI式中:V为输入电压,VBE为基极与发射极之间的电压差,IB为基极电流。所以至少要76Ω的电阻,所以给其串联一个100Ω的电阻进行电路的保护。连接上将电阻段引脚接入PA8,其他引脚分别接地和接入电路,其电路图如图3.9所示。图3.9水泵控制电路连接图基于STM32单片机的智能鱼缸系统系统软件设计本系统主要针对主芯片STM32F103C8T6进行编译,主要使用Keil软件完成程序的编写。综合单片机程序主要分为六部分,分别是针对温度传感器、水位检测传感器、无线WIFI模块、浑浊度检测模块、液晶显示模块和按键模块的程序进行编译。程序整体设计和实现本章就要对智能鱼缸的整体功能进行整体逻辑代码的开发和实现。主要控制流程设计如图4.1所示。图4.1软件整体流程图本设计的主要功能是一项具有多个功能的智能鱼缸,主要有温度检测、浑浊度检测、液晶屏显示功能、自动或手动喂食、换水模块和无线信号发送几个模块。每个模块都有对应的库函数,最后通过主函数对各个库函数中子函数的调用完成所有功能的整合。本设计的主要的代码,主函数、子函数、库函数如图4.2所示。图4.2主要程序图.c结尾的文件,都是其中的逻辑代码,.h则是定义了一些引脚,为库函数,大多是传感器厂家所提供的,直接调用即可。温度监测实现本设计选择的传感器是DS18B20防水型温度传感器。温度传感器的高速暂存存储器是9个字节组成,当要进行温度转换的时候,转换得到的温度值以二字节补码的形式放在高速缓存器的0和1字节。单片机可通过数据接口直到读到该数据,再对应温度进行计算,不同的符号对应读取到的数据不一样。温度传感器主要是采集鱼缸内水的温度,传递给芯片进行处理后再由芯片传输给液晶屏进行显示,给使用者提供一个参考。程序会先初始化温度传感器的IO口,接着去接收传感器传来的一个字节数据,将读取到的值写入芯片,由于DS18B20防水型温度传感器本身就是传递的数字信号,所以只要进行补码的转换就可以得到单片机需要的温度。其流程图如图4.3所示。图4.3温度检测流程图浑浊度监测实现本设计的浑浊度检测模块是利用两个光敏电阻完成的,将一个光敏电阻置于水面上方,一个光敏电阻置于水面下方,当两个光敏电阻的光照值产生差别时,会产生两个不同的电压,取两个电压的差值作为水浑浊度的判定。其水深监测工作流程如图4.4所示。图4.4浑浊度检测流程图本系统设计的浑浊度阈值为20,两个光敏电路差值大于20的时候液晶提示换水,如果小于20则正常显示浑浊度。光敏电阻组成的浑浊度检测电路生产的模拟电压输出需要通过使用AD转换器进行模数的转换,所以要想采集到光敏电阻的数据,首先要设置好ADC。初始化ADC,并设置好工作模式,设置完之后进行一次采样,将采样的值传递给转换函数进行转换,最后进行电压值的计算。ADC的部分代码如下。//初始化ADC

voidMy_ADC_PreInit(ADC_TypeDef*ADCx,u32trigger,boolenableDMA)

{

*******

if(ADCx==ADC1)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

}

elseif(ADCx==ADC2)

{

******

}

elseif(ADCx==ADC3)

{

*******

}

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

for(i=0;i<ArrayCount(Pins_ADC);i++)

{

GPIO_Pin_Init(Pins_ADC[i],GPIO_Mode_AIN);

}

ADC_DeInit(ADCx);

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode=enableDMA?ENABLE:DISABLE;

ADC_InitStructure.ADC_ContinuousConvMode=enableDMA?ENABLE:DISABLE;

ADC_InitStructure.ADC_ExternalTrigConv=trigger;

ADC_Init(ADCx,&ADC_InitStructure);

if(enableDMA)

{

*******

for(i=0;i<ArrayCount(Pins_ADC);i++)

{

ADC_RegularChannelConfig(ADCx,My_ADC_GetADCChannel(ADCx,Pins_ADC[i]),i+1,ADC_SampleTime_239Cycles5);

}

*******

}

********

}//获得ADC值

//ch:通道值0~3

u16My_ADC_GetValue(ADC_TypeDef*ADCx,u8ch)

{

ADC_RegularChannelConfig(ADCx,ch,1,ADC_SampleTime_239Cycles5);

ADC_SoftwareStartConvCmd(ADCx,ENABLE);

while(!ADC_GetFlagStatus(ADCx,ADC_FLAG_EOC));

returnADC_GetConversionValue(ADCx);

}//ADC的值转换u8My_ADC_GetPercent(ADC_TypeDef*ADCx,u8ch,u8times,floatadcVlaueMin,floatadcValueMax)

{

*******

if(percent<adcVlaueMin)

{

return0;

}

if(percent>adcValueMax)

{

return100;

}

else

{

percent=(percent-adcVlaueMin)*100/(adcValueMax-adcVlaueMin);

}

returnpercent;

}//电压值的计算floatMy_ADC_GetCurrent_ASC712(ADC_TypeDef*ADCx,u8ch,u8times,floatscale)

{

floatvolt=My_ADC_GetVoltage(ADCx,ch,times,scale);

if(volt<Volt_ACS712_ZERO)

{

volt=0;

}

else

{

volt=(volt-Volt_ACS712_ZERO)/0.185;

}

returnvolt;

}喂食设计本设计的喂食设计分为两种情况,一种是手动喂食,由使用者进行按键操作或者通过上位机发出对应指令,芯片解析指令打开喂食阀门。另外一种是自动喂食,由使用者提前设置好喂食间隔,当达到固定的时间间隔,系统自动打开喂食舵机,完成喂食操作,同时自动重新计时。本模块的使用流程如图4.5所示。图4.5喂食流程图舵机的驱动通过PWM实现,舵机的伺服系统主要由脉冲信号的宽度进行实现的,控制线主要传输脉冲信号,舵机的基准信号周期为20ms。当舵机接收到一个大于1.5ms的脉冲,输出轴会顺时针旋转一定角度。接收到的脉冲大于1.5ms时候,输出轴会逆时针旋转对应的角度。脉冲信号宽度及舵机转动角度关系如图4.6所示。图4.6脉冲宽度及舵机转动角度关系图具体控制代码如下所示。voidMy_PWM_SetDuty(TIM_TypeDef*TIMx,TIM_Channelch,floatpercent)

{

u16per;

if(percent>100){

percent=100;

}

switch((u32)TIMx)

{

case(u32)TIM1:per=Pwm_Per[0];break;

case(u32)TIM2:per=Pwm_Per[1];break;

case(u32)TIM3:per=Pwm_Per[2];break;

case(u32)TIM4:per=Pwm_Per[3];break;

default:break;

}

if(ch&TIM_CH_1)TIM_SetCompare1(TIMx,per*percent/100);

if(ch&TIM_CH_2)TIM_SetCompare2(TIMx,per*percent/100);

if(ch&TIM_CH_3)TIM_SetCompare3(TIMx,per*percent/100);

if(ch&TIM_CH_4)TIM_SetCompare4(TIMx,per*percent/100);

}换水设计整个换水模块由水泵,水位传感器和排水舵机组成。由排水舵机先将水排出,当水位感应器感应到水位排到一定程度以后关闭排水阀门,打开水泵注入新的水资源。本设计上采用的是一个5V水泵。如图4.7所示。图4.7换水流程图此处的L和H为水位的低水位和高水位的设定,分别为10和70。系统收到换水指令以后会打开换水舵机,打开阀门将水排出,水位检测传感器协助换水。当水位传感器检测到水位低于L值以后,便会关闭排水阀门,同时打开水泵进行注水。当水位传感器检测到水位高于H值以后,系统将自动关闭水泵,停止注水,此时,整个换水流程便完成了。电路中水泵的控制是通过PWM的方式进行控制,程序上电的同时对PWM进行初始化,初始化TIM1定时器、TIM_CH通道和设定周期为2000,当水位降低到设置值时,因为本身的水泵的工作电压是4.5V的,所以需要给其设置45%的占空比进行电压的调整,通过PWM的方式可以更加精准的达到对水泵电路的控制。PWM的初始化代码。//PWM初始化函数voidMy_PWM_Init(TIM_TypeDef*TIMx,TIM_Channelch,u16period)

{

/*SetTIM3andTIM4forPWMmode*/

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

TIM_OCInitTypeDefTIM_OCInitStructure;

switch((u32)TIMx)

{

case(u32)TIM1:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

if(ch&TIM_CH_1)GPIO_Pin_Init(PA8,GPIO_Mode_AF_PP);

if(ch&TIM_CH_2)GPIO_Pin_Init(PA9,GPIO_Mode_AF_PP);

if(ch&TIM_CH_3)GPIO_Pin_Init(PA10,GPIO_Mode_AF_PP);

if(ch&TIM_CH_4)GPIO_Pin_Init(PA11,GPIO_Mode_AF_PP);

Pwm_Per[0]=period;

break;

case(u32)TIM2:

******

case(u32)TIM3:

*******

case(u32)TIM4:

******

default:break;

}

TIM_TimeBaseStructure.TIM_Period=period-1;

TIM_TimeBaseStructure.TIM_Prescaler=71;

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIMx,&TIM_TimeBaseStructure);

if(ch&TIM_CH_1)TIM_OC1Init(TIMx,&TIM_OCInitStructure);

if(ch&TIM_CH_1)TIM_SetCompare1(TIMx,0);

********

TIM_CtrlPWMOutputs(TIMx,ENABLE);

if(ch&TIM_CH_1)TIM_OC1PreloadConfig(TIMx,TIM_OCPreload_Enable);

********

TIM_ARRPreloadConfig(TIMx,ENABLE);

TIM_Cmd(TIMx,ENABLE);

}报警提示系统本设计的报警提示系统主要是对浑浊度模块和换水模块进行液晶提示报警。在浑浊度模块上,当系统检测到浑浊度超过了系统设计的预定值20时,会在液晶屏上提示“浑浊度过高,请换水”。该部分代码如下所示。if(remupData_02!=nowHzVal)¯{remupData_02=nowHzVal;if(nowHzVal>20){FRONT_COLOR=Color16_RED; sprintf(dis2,nowHzVal);}else{FRONT_COLOR=Color16_WHITE; sprintf(dis2,nowHzVal);}MyLCD_Show(X_PLACE,yPlace++,dis2);}else{yPlace++;}在换水模块中,整个换水过程都会有液晶提醒,提示当前换水步骤以及水位高低,主要提示包括“开始换水..”、“排水至<L”、“加水至>H”、“换水完成!”。其提醒代码如下所示。if(runStep==0){sprintf(dis0,"%s开始换水..",dis0);}//发送数据

elseif(runStep==1){sprintf(dis0,"%s排水至<L",dis0);}//发送数据

elseif(runStep==2){sprintf(dis0,"%s加水至>H",dis0);}//发送数据

elseif(runStep==3){sprintf(dis0,"%s换水完成!",dis0);}//发送数据APP的设计本设计的APP开发使用的是安卓系统,使用的编译器为IDEA。安卓系统是在Linux基础上开发的开源操作系统,现主要使用在手机上,作为移动端的主要操作系统,之所以选择安卓作为开发平台也是因为其开源的性质,使开发的APP可以很好的安装与手机上,而苹果系统的封闭性就无法提供这么高的便捷性。安卓系统的开发主要用JAVA语言,而JAVA的开发需要进行系统环境的搭建(图4.8),安装JDK来提供JAVA的编译,环境搭建完以后就可以开始创建开发工程。图4.8开发环境变量配置图单片机和上位机的通讯用的是WIFI模块,所以主要使用的类为Socket类,而Socket类有一个子类为TcpClient,TcpClient类中封装了部分简单的通讯方法,调用这些方法我们可以较为方便的实现网络来连接、发送和接收流数据。所以开发主要使用TcpClient完成。软件的工作流程图如图4.9所示。图4.9软件工作流程图TCP是面向连接的协议,服务器和客户端进行通信直接需要先进行连接的建立。因此,TCP的server需依次调用以下函数:listen():转换套接字状态从关闭转换为监听状态,是客户端的请求可以被监听。accept():它在监听到套接字的第一个请求后,创建一个新的连接套接字,并返回标志信号。通常情况下,服务器进程在accept调用中进入休眠(sleep)状态,等到下一次被唤醒。TCP连接使用三次握手来建立连接。TCP的client需调用以下函数:connect():为一个套接字分配一个空闲的端口号,并尝试去建立一个新的TCP连接。TCP的交互流程图如图4.10所示。图4.10TCP交互流程图软件部分源码如下所示。

//创建tcp连接,需要提供服务器信息

publicstaticXTcpClientgetTcpClient(TargetInfotargetInfo){

returngetTcpClient(targetInfo,null);

}

publicstaticXTcpClientgetTcpClient(TargetInfotargetInfo,TcpConnConfigtcpConnConfig){

XTcpClientXTcpClient=TcpClientManager.getTcpClient(targetInfo);

if(XTcpClient==null){

XTcpClient=newXTcpClient();

XTcpClient.init(targetInfo,tcpConnConfig);

TcpClientManager.putTcpClient(XTcpClient);

}

returnXTcpClient;

}//根据socket创建client端,目前仅用在socketServer接受client之后

publicstaticXTcpClientgetTcpClient(Socketsocket,TargetInfotargetInfo){

returngetTcpClient(socket,targetInfo,null);

}

publicstaticXTcpClientgetTcpClient(Socketsocket,TargetInfotargetInfo,TcpConnConfigconnConfig){

if(!socket.isConnected()){

ExceptionUtils.throwException("socketiscloseed");

}

XTcpClientxTcpClient=newXTcpClient();

xTcpClient.init(targetInfo,connConfig);

xTcpClient.mSocket=socket;

xTcpClient.mClientState=ClientState.Connected;

xTcpClient.onConnectSuccess();

returnxTcpClient;

}

privatevoidinit(TargetInfotargetInfo,TcpConnConfigconnConfig){

this.mTargetInfo=targetInfo;

mClientState=ClientState.Disconnected;

mTcpClientListeners=newArrayList<>();

if(mTcpConnConfig==null&&connConfig==null){

mTcpConnConfig=newTcpConnConfig.Builder().create();

}elseif(connConfig!=null){

mTcpConnConfig=connConfig;

}

}系统实物调试系统初始化调试如图5.1所示,这是本设计初步通电时候的状态。可以看到,此时WIFI模块、水位检测传感器和液晶屏显示模块,都已经呈现相关的亮度以及闪现的状态,说明各个部件通电信号正常,可以正常使用。图5.1系统上电效果图以WIFI模块为例,WIFI模块红灯长亮,蓝灯闪烁,说明WIFI已经处于可连接状态,此时可以使用手机连接上对应的WIFI,再通过APP就可以实现上位机对鱼缸的控制。从液晶屏显示可以看到此时系统已经采集到了鱼缸当前的基本状态信息,以及默认情况下自动喂食间隔时间。本系统的程序使用了KEIL软件对程序进行了仿真,仿真过程如图5.2所示,当点击程序下一步的时候,可以发现,寄存器数据会有相应的变换,以此说明此软件的程序运行正常。图5.2KEIL软件仿真图APP控制演示本设计的WIFI模块是ESP8266是一款超低功耗的UART-WiFi透传模块,该模块功耗低,是一款专门为物体联网设计的WIFI模块。ESP8266是一款使用广泛的WIFI模块,在智能家居,工业控制,电力电网,移动交通中都有它的身影。它先进的封装技术,保证了它有着更稳定的工作状态。如图5.3所示,将手机连接上系统的WIFI,然后打开APP,选择连接,就可以看到,在显示屏上的数据就被传送了过来,此时可以通过输入指令FEED或者WATER进行喂食操作或者换水操作。接收到的数据制作成表格(表5.2),再利用MATLAB画成了折线图如图5.4所示。图5.3APP演示表5.1单片机初始化数据表时间s温度℃水位mm浑浊度126.19900226.19900326.19900426.57812527.19915627.79523727.55629827.05817926.566161026.1454图5.4各项数据折线图从上到下依次为水温、水位和浑浊度变化折线图。从折线图中可以看出,当初始上电的时候温度,水位及浑浊度就已经被同步到这边的上位机,然后稍微改变一下各项传感器的条件,可以发现,上位机端都可以很好的实现数据的同步,数据的接受和发送的也同步的很好,基本满足对上位机的开发要求。测温演示自然界的水温不是恒定的,鱼对水温的要求也会发生变化。鱼儿在野生的环境里面,不管是在什么样的季节,它都会迅速的适应环境。随着温度高低变化,它自身都就会有调节的过程。现在人工培育繁殖的观赏鱼很多,但是这些鱼他们身体里面会有一个基因代码,有一定的抵抗温度的能力。对于家里养的观赏性鱼类,鱼缸的温度较为难以把控,夏天炎热的天气会提升鱼缸的温度,冬天寒冷的天气亦会对鱼缸的温度产生影响,所以一个能够灵敏反应温度变化的传感器及时的将鱼缸中的温度反馈给使用者是必要的。DS18B20是常用的数字温度传感器,可以直接输出数字信号,少了转换的步骤,所以使用起来较为方便,且体积小,精度高,有着众多的优点。该温度传感器测温范围在-55℃~+125℃之间,测温误差在上下一摄氏度之间,可以很好的完成鱼缸的温度检测功能。图5.5温度演示如图5.5所示,可以看到当手握住温度传感器的时候,液晶屏上的温度有着明显的变化,说明温度传感器是正常工作的,而且其灵敏程度是有保证的。看一组上位机收到的数据(表5.2),将上位机采集的数据收集到MATLAB中做成折线图5.6。表5.2温度数据表时间s温度℃126.1226.1326.3426.5527.1627.7728.6829.5930.51031.6图5.6温度演示折线图可以看到当手握传感器以后温度有了明显的上升,且随着时间的增加,温度的上升程度由慢到快,说明设计使用的传感器工作正常,且灵敏度是符合要求的。喂食演示鱼缸养鱼的对喂食的要求也是非常高的,养鱼一天要喂一到两次。虽然鱼类的耐饿性比较强,几天喂一次也能养得活,但如果在生长期没有提供足够的养分,鱼儿

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论