标题:观赏鱼缸控制系统设计
文档介绍:
1绪论
1.1 研究背景及意义
城市化进程持续推进,现代都市居民的生活节奏变得更快,工作压力不断加大,人们对于精神文化生活的追求愈加强烈,在此情形下,观赏鱼养殖这一低强度,富有趣味性的休闲活动渐渐被城市家庭普遍认可并当作兴趣爱好,观赏鱼可用来美化家居环境,观赏它们的时候能平缓情绪,减轻压力,对于调和现代人紧张的生活节奏有着积极作用,但观赏鱼养殖可不是一项简单的日常照看事务,鱼缸环境的维持牵涉水温调控,水质守护,水位维持等诸多方面,只要其中一个环节出问题,就有可能引发鱼类患病乃至死亡。 传统鱼缸运作大多靠人工来完成,这就要求养殖者定时监测水温,更换水体,留意水质改变情况,这样的运作既耗时又费力,而且很难立即察觉到偶发事件并加以解决,常常是在养殖者外出或者粗心的时候带来一些本可避免的损失。
物联网技术飞速发展,给传统鱼缸经营方式向智能化转型赋予了技术支持,经由把传感器技术,自动控制技术和无线通信技术有机融合起来,就能形成起一套可即时监测鱼缸环境参数并自动开展相应控制动作的智能经营系统,此系统可以把养鱼者从繁杂琐碎的日常守护事务当中解脱出来,而且凭借远程观察功能,无论养鱼者身处何方,均能及时了解鱼缸状况并予以必要干涉,所以,设计出一套功能完备,运行可靠的观赏鱼缸智能控制系统,对于加强家庭观赏鱼养殖的便捷程度及其达成率有着重要的实际价值,本课题就依托这样的大背景,力求研制出一套兼具环境检测,自动控制和远程守护功能的鱼缸控制系统,从而为现代家庭水族养殖给予更为科学高效的养护计划。
1.2 国内外研究现状
1.2.1 国外研究现状
国外关于智能水族养殖系统的相关研究启动得比较早,其技术发展比较成熟,欧美那些发达国家,在水产养殖自动化方面的研究投入了诸多资源,创建起较为完善的技术体系。在外传感器的应用上,国外的研究者较早便把多参数水质传感器用在水族养殖当中,从而做到对水温,pH值,溶解氧,氨氮这些关键指标的即时检测,这给精准化养殖经营形成了技术根基,至于控制系统,则大多是国外的产品采取模块化的设计理念,把温度控制,过滤循环,自动投喂等功能整合起来,用户可以依循自己的实际需求来灵活设定功能模块,这表现出很高的系统整合程度以及设计的灵活性。 近些年来,伴随着物联网技术得到全面推广,国外的智能水族产品朝着云端化,移动化的方向迈进,很多产品具备经由智能手机应用程序执行远程观测和控制的能力,一些高端产品还融入了人工智能算法,它们可以遵照鱼类的行为特征及其生长状况自动调节养殖参数,智能化水平持续优化。
从商业应用角度看,德国,日本等国的智能水族设备制造技术位于世界前列,它们的产品在测量精度,运行稳定性以及用户体验上存在突出优势,这些国家有着比较完善的产业链和成熟的技术标准体系,产品从传感器精度到执行机构可靠性都要经过严格的检测认证,但是国外产品大多价格昂贵,高端产品常常超出一般家庭用户的消费水平,而且有些产品的功能设计更多依照国外家庭的养殖习惯和使用环境,不能完全契合国内家庭用户的真实需求,在鱼缸尺寸适应性,本地化交互界面等方面也存在一定差距,正是由于这样的情况,国外高端产品想要在国内市场广泛推广就会碰上诸多困难,这也给国内自行研发的智能水族系统创造出了不同的竞争机会。
1.2.2 国内研究现状
国内关于智能水族养殖系统的研究开始得比较晚,但是近年来发展速度很快,随着植入式技术和物联网技术得到普及,国内的高校以及科研机构展开了许多这方面的研究,并收获了丰富的理论与应用经验,从学术研究角度看,国内的研究人员针对鱼缸环境检测,自动控制算法,远程传达等内容做了细致探究,给出了很多依靠单片机,ARM 处理器和植入式操作系统的解决办法,覆盖了从传感器收集数据一直到执行器控制的整套技术流程,这些研究在技术路线方面表现出多种化特征,有的是按照简单控制逻辑制定的低成本方案,也有的是采用即时操作系统并结合复杂控制算法而作出的全面性规划,从而给智能水族系统的产业化进程供应了技术支持。 在产品开发这个层面上,国内智能水族设备市场处于快速发展当中,许多科技公司推出了一些针对家庭用户的智能鱼缸产品,其功能包含自动恒温,智能照明,自动投喂,水质监测等众多方面,相关的产品种类和功能一直在增多。
国内产品大多看重性价比并执行本地化功能设计,在 WiFi 联网,手机控制,云平台接入这些方面有一定的优势,可以较好地符合国内用户的使用习惯及消费水平,国内企业在国内软件开发和人机交互方面投入较多,所以手机应用程序的功能和界面设计常常更为贴近国内用户的需求。不过总的来说,国内产品在传感器精度,系统稳定性以及智能化水平上同国外先进水平还是存在一定的差距,格外是在多参数综合判定和自适应控制算法上有着很大的改善余地,当前大多数产品仍旧着眼于单个功能的达成,并未深入地针对系统整体框架及其各功能模块之间的协作展开设计。 国内研究大多着眼于功能达成的层面,对于长时间运行的可靠性,故障自动回复能力等考量有所短缺,前面的问题便是本课题研究的关键着手点,经由系统的软硬件协作设计来探寻塑造起功能完备,运行稳定的智能鱼缸控制系统的方案。
1.3 研究内容
本课题旨在设计并实现一套基于单片机的观赏鱼缸智能控制系统,围绕环境监测、自动控制、本地显示和远程通信四大功能模块展开研究。具体研究内容包括以下几个方面:
经由系统总体架构设计,综合考量功能需求,成本控制以及技术可行性之后,可以确定系统的硬件平台与软件框架。
展开硬件电路设计时,以主控芯片为核心设计时钟电路,复位电路等基本电路,还要针对温度监测,水质监测,水位监测,液晶显示以及无线通信等外围电路执行选型与设计,促使各个模块稳定又可靠地运行。
执行系统软件开发任务的时候,要搭建起依靠嵌入式即时操作系统创建起来的软件平台,完成主程序框架的设计工作,并编写好数据采集,数据显示,网络传达,自动控制这些子程序然后执行调试。
进行系统集成与调试时,要逐一考察硬件模块并综合调校软件功能,以解决开发阶段产生的技术难题,核实系统各功能是否得到落实。
完成系统功能验证及结果分析,依靠实际运作检测来考量系统的稳定性和可靠性,并总结设计阶段的经验与短缺。
前面的研究内容执行完毕之后,就可以达成一个智能化的鱼缸经营系统,这个系统可以随时监测水温,水质,水位这些参数,并且具有本地显现,自动加水,远程观测与控制这样的功能。
2系统总体结构设计
2.1 系统组成方案
本课题开始设计的时候,就针对鱼缸智能控制系统所需要的功能以及性能标准给出了两个可行的设计方案。
方案一采取以8位单片机为核心控制器的集中式控制架构,这个方案把STC系列或者AVR系列的8位单片机当作主控芯片,再加上DS18B20温度传感器,TDS水质传感器和红外光电式水位传感器来收集环境参数,显示方面使用1602字符型液晶屏,经由串口和ESP8266模块关联达成WiFi通信。此方案的优点在于硬件成本低,开发工具比较成熟,入门难度不大,比较适合功能需求较为简单的情形,但是8位单片机的处理能力存在一定局限性,无法兼顾多路传感器数据的采集及处理,液晶显示的更新以及网络协议栈的执行,特别当需运行即时操作系统时,资源瓶颈表现得越发明显,而且1602液晶屏仅能显示字符内容,不能显示图形界面,这方面的用户体验还需进一步改良。
方案二把32位 ARM 处理器当作核心控制器,采取分层结构,此方案选定凭借 ARM Cortex - M4 内核的 STM32 系列单片机做主控芯片,这个系列的芯片有着较强的处理能力,外设接口也很多,可以应对多任务同时处理的情况,传感器方面挑选了数字式温度传感器,模拟输出水质传感器以及非接触式电容式水位传感器,依靠模拟数字转换和单总线协议来做数据收集,显示部分用的是 TFT 彩色液晶屏,其可表现图形界面,这样就能直观地显示出各种环境参数。无线通信利用 ESP8266 模块,经由 MQTT 协议同物联网云平台相连,达成数据上传与远程控制的目的,从软件角度来说,采用了 RT - Thread 实时多线程操作系统,依靠多任务调度机制来同步执行数据采集,显示更新以及网络通信等事务。
综合对比两个方案,方案一成本较低,但其扩展性欠佳,处理能力也较为有限,无法满足本课题设计的所有功能需求,方案二在性能,扩展性和用户体验上有着突出的优势,特别是在采用即时操作系统之后,可以更好地应对多任务并发的情况,保证系统运行的即时性和稳定性,所以,本课题选定方案二作为最终的执行方案。
2.2 系统工作原理
本系统的工作原理包含数据采集,本地处理,自动控制和远程交互这四个环节,它们以形成闭合回路的方式运作,当系统接通电源并完成初始化之后,主控芯片会遵照预先设定好的采样间隔,先后获取温度传感器,水质传感器以及水位传感器所产生的输出信号。温度传感器利用单总线协议来传递数字形式的温度值,水质传感器则发出和水中溶解性固体含量呈线性比例关系的模拟电压信号,而水位传感器则给出表示当前水位高低的数字电平信号,主控芯片会对这些收集得来的原始数据执行滤波和数值转換操作,从而得出真实的环境参数数值。
数据处理完毕之后,系统会做两件事,其一,系统把处理过的数据传送到TFT液晶显示屏上实施本地化显示,这样一来,用户就能直接从屏幕上得知当下的温度,水质以及水位情况。其二,系统经由ESP8266模块把数据封装成MQTT协议报文并上传到ThingsBoard物联网云平台,从而达成数据的远方储存与显现,在自动控制层面,系统随时判定水位检测信号是否低于预先设定的阈值,一旦水位过低,系统便会自动开启水泵来实施补水,直到水位恢复常态才终止补水行为。 在远程控制方面,用户借助云平台发出控制指令,系统接收到该指令并执行相应的远程补水操作。这个系统包含前面提及的工作流程,可即时监测鱼缸环境,本地显示相关信息,并自动调节相关参数,还能做到远程运维,从而创建起一套较为完善的智能控制体系。
2.3 系统构建
本系统若按照功能模块来划分,则包含有五个主要形成单元,它们分别是主控模块,传感检测模块,显示模块,执行模块以及通信模块。
主控模块处于整个系统的核心地位,它承担协调各个模块工作顺序的任务,还要处理传感器传来的数据,运行控制算法并管理通信事务,本系统采用STM32F411CEU6作为主控芯片,此芯片以ARM Cortex - M4内核为基础,其最高工作频率可达到100MHz,自带512KB的闪存以及128KB的静态随机存取存储器,具备较多的外设接口资源,其中覆盖大量通用同步异步收发器,串行外设接口,集成电路总线接口以及模拟数字转换器通道,这些完全可以满足本系统对外设的各种对接需求,而且,主控模块里还包含了时钟电路和复位电路,可以给芯片供应稳定的运行时钟,并给予系统可靠的重新启动功能。
传感检测模块承担着收集鱼缸环境参数的任务,包含温度检测单元,水质检测单元以及水位检测单元,温度检测单元所用的是DS18B20数字温度传感器,这种传感器凭借单总线通信机制,其测量精度较高,而且经过防水封装处理,适宜长时间置于水中运行。水质检测单元则依靠TDS传感器,经由测量水的电导率来间接体现水中溶解性固体的含量,输出的模拟电压信号会由主控芯片内的模拟数字转换器转为成数字值,水位检测单元采用的是非接触式的电容式水位传感器,此传感器借助感知电容的改变来判别水位是否低于预定阈值,并把开关量信号传递给主控芯片以执行读取操作。
显示模块选用 TFT 彩色液晶屏,经由串行外设接口同主控芯片交互,用以及时显现温度,TDS 值,水位状况等系统参数,而且可以依循设计图形化的用户界面,改善交互感受。执行模块重点在于水泵控制单元,主控芯片借助通用输入输出引脚来控制继电器,从而控制水泵的开启与停止,做到自动补水和远程补水的目的,通信模块利用 ESP8266 WiFi 模块,依靠通用同步异步收发器接口和主控芯片相接,达成与 ThingsBoard 物联网云平台的无线通信,完成数据上传和远程指令接收。 前面所述各个模块经由恰当的硬件拼接及软件调配,形成起一个功能完备,运行稳定的智能鱼缸控制系统。
3系统硬件设计
3.1 主控电路设计
3.1.1 主控芯片选择
本系统主控芯片选型围绕处理性能,外设资源,功耗特性以及开发支持等方面展开综合考量,经由对诸多主流单片机实施对比分析之后,选定意法半导体公司所生产的 STM32F411CEU6作为系统主控芯片,此芯片具备 ARM Cortex - M4 内核,包含数字信号处理指令集以及浮点运算单元,其最高主频能够达到100MHz,可以高效达成传感器数据采集,数字滤波,数值转换以及控制算法等各类计算任务。在存储资源上,该芯片预先设置了512KB的闪存和128KB的静态随机存取存储器,给 RT - Thread 嵌入式即时操作系统以及多任务应用程序的运行赋予了足够的空间,而且,这个芯片还具备多种低功耗工作模式,很符合长期运行设备的需求,它有着较为成熟的开发工具链,也有许多的技术文档做支撑,这样就能切实减小开发的困难,削减开发的时间。
图3.1 STM32F411CEU6引脚分配图
STM32F411CEU6在外设接口上,带有诸多通用同步异步收发器,串行外设接口,集成电路总线接口以及12位模拟数字转换器通道,可以一次性挂接温度传感器,水质传感器,显示模块和无线通信模块,不需要做接口复用或者扩展,使得硬件设计更为简捷,此芯片有36个通用输入输出引脚,其丰富的引脚资源保障了各个功能模块得以独立相连,免除了引脚冲突的状况出现,而且,该芯片自带的模拟数字转换器具备12位分辨率,能够达到对TDS传感器模拟信号高精度采集的目的,凭借前面这些因素,STM32F411CEU6在性能,资源,功耗以及开发便捷性等诸多方面基本符合本系统对主控芯片的所有需求,给系统功能的完全达成赋予了可信赖的硬件支撑。
3.1.2 时钟电路
时钟电路对于单片机系统来说非常重要,它可以给芯片内部的时序逻辑电路给予同步基准信号,STM32F411CEU6芯片内置了时钟管理单元,该单元包含多种时钟源选项,比如内部高速振荡器,内部低速振荡器,外部高速晶振以及外部低速晶振。若想达成较高的工作精度并且保证频率稳定,本系统把外部高速晶振当作主时钟源,外部高速晶振选取8MHz的无源石英晶体,再加上两个22pF的负载电容形成并联谐振电路,再接到芯片的 OSC_IN 和 OSC_OUT 引脚上。这个晶振的频率经由芯片内部的锁相环电路放大之后,可以达到100MHz的系统主频,这就满足了系统对于处理性能的要求,锁相环电路具备增频和减频的功能,从而给主控芯片各个不同的功能模块供应灵活多变的工作时钟。
系统配有32.768kHz的外部低速晶振,用以激发芯片内部的实时时钟模块,给系统赋予精确的时间参照,利于做到定时采样,定时上报等功能,实时时钟模块可在系统主电源断电时凭借备用电池持续运行,维持时间的连贯性。时钟电路的规划要留意晶振和芯片引脚间的连线最好短而且直,负载电容要靠近晶振摆放,以此来减小分布参数对振荡频率的影响,保证时钟信号的稳定性及其抗干扰性能,在印刷电路板设计时,晶振电路周边应当设置地线实施隔离,防止高频信号线造成干扰,经由恰当的时钟电路规划与布局,就为系统给予了稳定可靠的时钟源,从而保障了主控芯片和各个外设模块按时序同步并协同运行。
3.1.3 复位电路
复位电路可在系统上电或者运行异常的时候把单片机重新设成指定的起始状态,使得程序从正确的入口地址启动执行。STM32F411CEU6芯片的复位引脚NRST属于低电平有效类型,一旦这个引脚得到维持一段固定时延的低电平信号,那么芯片内部所有的寄存器都会被复位成预置值,程序计数器会指向前置向量地址,从而让系统得以再度运行,本系统经由把阻容复位电路同按键复位融合起来的办法来达成复位的目的,这样既保全了上电自动复位的稳定性,又增添了人机互动时能够执行手动复位的可能性,阻容复位电路包含一个10kΩ的上拉电阻和一个0.1μF的复位电容,其中电阻的一端与3.3V电源相连,另一端则接在NRST引脚上,而电容则是跨接于NRST引脚和地之间。
图3.2 复位电路图
上电的刹那间,电容两端的电压无法突然改变,NRST引脚维持着低电平,伴随电容经由电阻得到充电,引脚上的电压慢慢升至高电平,如此便完成了上电复位的过程。对于电阻和电容的参数选取而言,需与芯片的复位时间需求相符合,从而保证低电平所持续的时段能够达到芯片内部复位动作的执行目的,按键复位电路在NRST引脚和地之间串联了一个轻触开关,当系统必要实施手动复位的时候,按下这个开关就能把NRST引脚直接接地,发出低电平的复位信号。 要防止由于按键抖动而造成误复位,可以考虑在软件层面做去抖动处理,或者在硬件方面增添滤波电容,复位电路设计时还得重视静电保护手段,在NRST引脚和地之间可用瞬态抑制二极管,免除静电放电致使系统误复位的情形发生,利用阻容复位结合按键复位这样一种设计方案,此系统就具有了稳定的复位功能,可在各类不同情况下保证系统从预知状态开始执行运作。
3.2 温度检测电路设计
温度属于影响鱼类生存状况的重要环境要素,水温过高或者过低都会干扰鱼类的正常生理机能运作,情况恶劣的时候甚至会造成鱼类死亡,所以,及时而精确地监测鱼缸内的水温,对于维持鱼类健康成长而言十分关键,本系统选择了 DS18B20 数字温度传感器来执行水温检测任务,这种传感器依靠单总线传送协议,只需一条数据线就能同主控芯片达成双向信息交互,这在很大程度上精简了硬件之间的耦合关系。传感器内部装配有 12 位的模拟数字转换元件,其温度分辨能力能够达到 0.0625 摄氏度,测温区间从 -55 摄氏度延伸到 125 摄氏度,而在 0 至 85 摄氏度之间时的精度可控制在正负 0.5 摄氏度之内,完全符合鱼缸水温监测的需求,而且该传感器采用了不锈钢材质并做了防水处理,附带防水电缆,所以可以直接放入水中长时间运行,具备较好的抗腐性与耐久性。
图3.2 DS18B20温度检测电路图
DS18B20传感器同主控芯片的结合比较简易,总共涉及三个引脚,其分别为电源引脚,数据引脚以及接地引脚。传感器的工作电压由主控芯片的3.3V输出端给予,数据引脚则连接到STM32芯片某一个通用的输入输出引脚之上,按照单总线协议,数据线在空闲时应维持高电平,所以要在数据引脚施加一个4.7kΩ的上拉电阻以接通电源端,从而确保通信时序的准确性,当执行数据收集任务的时候,主控芯片会发出依照单总线时序设计的重置脉冲和读写脉冲,以此来依次做到传感器的初始化,开启温度变换功能并获取温度数值这些事情,传感器送回的原始温度数据是16位的二进制形式,主控芯片经过数值换算便能得出真实的摄氏度数值,进而给后面的温度显示和调节供应依照。
3.3 水质检测电路设计
水质状况会直接左右观赏鱼的健康情况,而水中溶解性固体含量则属于评定水质清洁度的关键指标,这个系统用 TDS 传感器来检测鱼缸里的水质,这种传感器经由测定水的电导率来间接表现水中溶解性固体的含量。传感器包含探针以及信号调理电路两部分,探针浸入水中去获取电导率信号,信号调理电路则会把微小的电信号放大约化,并转变成0到2.3V之间的模拟电压输出,这个电压值和水里总溶解固体的含量成线性关系,传感器所需的供电电压范围是3.3到5伏特,这个系统使用3.3伏特的电源,其测量范围限定在0到1000ppm,精度控制在满量程正负百分之五以内,如此便能满足家庭鱼缸水质日常监测的需求,传感器依靠交流激励信号来激发探针,这样就能避开直流极化效应给电极带来的不良影响,进而提升探针的使用寿命。
图3.2 TDS传感器模块引脚示意图
TDS传感器和主控芯片的连接以模拟接口方式为主,传感器的模拟信号输出引脚连在STM32芯片的一个模拟数字转换器输入通道上,主控芯片经由模拟数字转换器定时获取传感器输出的模拟电压值,遵照电压与TDS值的线性关系执行换算,从而得出真实的水质参数,在电路设计时,要重视模拟信号的抗干扰处理,传感器信号线应尽量短,并且远离高频数字信号线,而且,因为TDS测量结果同环境温度有关,系统在数据处理的时候,会把温度传感器采集到的水温值融合进来,针对TDS测量结果开展温度补偿修正,把测量值转换成标准温度下的等效TDS值,这样就能进一步加强水质监测的精准度,给养殖户判断水质情况以及决定换水时间给予科学按照。
3.4 水位检测电路设计
鱼缸水位若要维持在合理范围之内,这对于保障鱼类的生存空间以及水循环系统的正常运行来说十分关键,本系统利用非接触式电容水位传感器来执行水位监测,此传感器按照电容感应原理来运作。当传感器表面同水体之间的介质出现变化的时候,感应电容就会发生改变,内部电路经由检测电容的这种变化来判定是否存在水流,传感器属于非接触式设计,所以它可以被装在外壁上,并不需要与水直接接触,这样就避开了传统浮子式传感器常常会由于水垢附着而失灵这一问题,而且也免除了金属探头给水质带来污染的可能性,传感器所发出的是开关量信号,只要检测到有水流就会输出高电平,如果没有水流就输出低电平,这个信号可以直接接到主控芯片的通用输入输出端口上面去,无需再加装什么专门的信号调节电路才行。
图3.2 水位检测电路图
电容式水位传感器存在三根引出线,即电源线,地线以及信号线,其中电源线需接到3.3V电源端,信号线则要与STM32芯片某一个通用输入输出引脚相接,主控芯片经由读取此引脚的逻辑电平来判断当前水位状况,为适配不同鱼缸的大小及安装地点,可利用传感器上设置的电位器去调整其灵敏度,在系统运行期间,主控芯片始终监测水位传感器的状态,一旦探测到信号电平由高变低,也就是水位低于预定阈值时,便会立刻开启自动补水流程,借助控制继电器闭合促使水泵通电运行。 水位上升到正常水平的时候,系统会让继电器断开,从而让水泵停止工作,依靠这样的闭环控制方法就达成了自动维持水位的目的,免除了由于水位过低而产生的各类问题。
3.5 显示电路设计
人机交互界面的设计会直接左右用户使用系统的便捷程度,本系统需随时向用户显示温度,TDS值,水位状态等关键信息,所以选择了TFT彩色液晶屏作为显示模块。该显示屏利用的是薄膜晶体管技术,其特点是响应快,色彩还原度高,可视角度大,屏幕大小为1.44英寸,分辨率达到了128×128像素,可以清楚地显示文字,数字以及简单的图形,显示模块里融合了驱动控制器,这个控制器向外给出串行外设接口,只需要四根信号线就能和主控芯片展开通讯,包含片选信号,时钟信号,数据输入信号和数据输出信号,这样的接口方式所占的引脚比较少,有益于简化硬件设计。
TFT液晶显示屏同STM32主控芯片相连,采用串行外设接口总线形式,显示模块的片选引脚挂接在主控芯片某一个通用输入输出引脚之上,时钟引脚则连向串行外设接口的时钟输出引脚,数据输入引脚同主出从入引脚相接。显示模块的工作电压是3.3V,在软件控制方面,主控芯片经由串行外设接口向显示屏传送初始化命令序列,设置显示参数以及通信模式,当处于正常工作状况时,主控芯片会把待显示的文本和图形数据送进显示模块的显存当中,从而由其内部的驱动控制器自行更新屏幕上的显示内容。 本系统界面设计包含温度显示区,TDS值显示区,水位状态指示区以及网络连接状态指示区,利用不同颜色和图标来区分各类信息,用户可直接从屏幕上掌握鱼缸当前状况。
3.6 无线通信电路设计
要达成鱼缸环境数据远程检测及远程控制的功能,该系统需具有接入互联网的能力,无线传达方式比有线传达更简单易布线,其安装更为灵活,更契合家庭应用场景,此系统采用ESP8266无线WiFi模块来解决网络通信问题,此模块属于高度综合性的单芯片无线局域网微控制器,其内部包含TCP/IP协议栈,并且符合802.11 b/g/n无线标准,能够处于工作站模式,接入点模式或者混合模式,该模块向外供给通用同步异步收发器接口,主控芯片经由串口传送AT指令以操控模块执行网络关联和数据输送,从而减小了开发的困难度,模块的工作电压为3.3V,这与主控芯片的电源电压相符合,如此便利于统一供电。
图3.2 ESP8266WiFi模块电路图
ESP8266模块和STM32主控芯片之间采用通用同步异步收发器(UART)异步串行通信方式进行结合,模块的串口接收引脚需连接到主控芯片的发送引脚上,串口发送引脚则应连接到主控芯片的接收引脚,经由交叉连接达成全双工通信效果,模块设置为工作站模式,并依靠AT指令连接到家庭路由器以接入互联网,之后再同ThingsBoard物联网云平台创建起MQTT长连接,MQTT协议属于一种轻量级的物联网通信协议,具备开销低,可靠性强的特性,在数据上传时,主控芯片会把所采集到的温度,TDS值以及水位状态等数据依照JSON格式加以封装,接着经由串口发送给ESP8266模块,该模块接着把这些数据转化为成MQTT协议报文并转发到云平台当中。 在远程控制方面,模块会接收到云平台下达的控制指令,经由串口传递给主控芯片,主控芯片解读指令之后便展开相应的远程补水操作,从而达成了设备端的联网功能及其远程运作的能力。
4系统软件设计
4.1 软件开发环境与编程语言
本系统软件开发依托 ARM 嵌入式开发平台,并利用集成开发环境来执行程序编写,编译及调试任务,开发工具选取 Keil MDK - ARM,这种集成开发环境由 ARM 公司官方认可,适用于 STM32 系列芯片的开发,其自带 ARM 编译器,效率突出,调试功能完备,具备代码编辑,编译结合,仿真调试等多种功能,足以符合本系统软件开发的要求,所选编程语言为 C 语言,C 语言具有代码效率较高,可移植性能较好,底层控制力较强等特点,比较契合嵌入式系统开发需求,可以直 接操控硬件寄存器,从而做到对外设的精准控制,在代码规划上,运用模块化设计理念,把具有不同功能的代码各自封装成单独的源文件与头文件,主程序文件,硬件初始化模块,传感器激发模块,显示激发模块,网络通信模块以及控制逻辑模块等都是如此设置,这些模块相互之间借助函数接口来开展交互,这样做不但减小了代码之间的耦合程度,而且提升了程序的可读性与可维护性。
为改进系统的即时性及其并发处理能力,本系统采用 RT - Thread 嵌入式即时多线程操作系统,RT - Thread 是一款国产开源即时操作系统,具备体积小巧,启动快速,即时性良好的特性,它能支持多任务同时运行,而且内核对资源的占有量小,很适合资源有限的微控制器平台。经由操作系统的线程经营,信号量,消息队列这些机制,把数据采集,显示更新,网络通信以及控制任务各自安排到不同的线程去执行,这样就能全面利用处理器的资源,保证各个任务依照预定的优先顺序和时间要求及时做出回应,使用操作系统以后,系统各个功能模块之间存在的资源争夺和同步难题得到了有效的解决,开发者可以重点考虑每个功能模块的实际达成情况,不需要过多去理会任务调度那样的底层细枝末节,于是程序的整体架构就变得越发清晰易懂,其扩展性也得到了很大的改良。
4.2 主程序设计
主程序位于整个系统软件的前端,起着调度的关键作用,它需完成系统初始化,进而启动各种功能线程,系统上电之后,主程序首先执行硬件初始化步骤,譬如设置系统时钟,初始化中断向量表,设置通用输入输出引脚,初始化串行外设接口以及通用同步异步收发器之类的外设模块。当硬件初始化结束时,系统转入到操作系统初始化环节,调用 RT - Thread 操作系统的相关函数来形成内核运行环境,涉及内存运作模块的初始化,调度器的初始化以及定时器的初始化等事务,等到基本的硬件初始化以及操作系统内核初始化均告完成,主程序便创建各种应用线程,此系统创建了数据采集线程,显示更新线程,网络通信线程以及自动化控制线程,各个线程均有自己独立的栈空间和优先级,其中,数据采集线程的优先级最高,以确保能及时取得传感器的数据;显示更新线程和自动化控制线程次之,网络通信线程的优先级则相对较低。
线程创建完毕以后,主程序会启动操作系统调度器,这样,系统就进入了多任务并发运行的状态,从那时起,主程序就不再去执行具体的业务逻辑,而是由操作系统依照线程的优先级以及调度策略来决定各个线程的运行时间。操作系统的调度器采取了基于优先级的抢占式调度算法,即高优先级线程能够抢占低优先级线程的执行权,以此来保障那些对即时性要求比较高的任务得以及时得到处理,如果出现许多同优先级线程同时就绪的情况,那么调度器就会凭借时间片轮转的方式来实施调度,从而做到让各个线程均等地获取到处理器资源,主程序的设计体现出一种依靠即时操作系统的应用程序开发模式,也就是把系统功能拆解成很多个相互独立又并行运行的任务,这样做的好处是提升了程序的模块化水平及其可扩展能力,还减小了程序开发时的难度。
4.3 数据采集子程序设计
数据采集子程序定时读取各个传感器的输出信号,把原始数据转变成真实的物理量,给其他功能模块给予数据支持,这个子程序作为单独的线程运行起来,依照预设的采样时间不断重复执行,它的设计重点考虑到了数据采集的即时性和准确性需求,在每一次采样阶段到来的时候,数据采集线程首先要利用单总线协议从 DS18B20 温度传感器那里获取信息,遵照传感器规定的步骤发出温度转换指令,等到转换完毕之后再去查看温度寄存器里的数值,经由对这些数值的分析得出具体的温度数据,单总线通信非常看重时序安排,程序里面借助精准的延时函数来把控相关的时序节奏,从而保障读写操作能够顺利完成。 接着去读取水位传感器通用输入输出引脚上的电平状态,按照高低电平来判定当前水位是否正常,这项操作很简洁又很直接,可以立即得到水位状态的信息。
模拟数字转换器开始采集 TDS 传感器输出的模拟电压信号,该模拟数字转换器以连续扫描模式运行,转换完毕会产生中断,经由读取转换结果寄存器取得数字量,并结合参考电压来计算实际电压值,再按照电压与 TDS 值的标定曲线计算出当前的水质参数,等到所有数据采集结束后,数据采集线程会把更新后的温度值,TDS 值以及水位状态存储到共享数据结构里,而且借助消息队列向显示线程和控制线程发出数据更新通知,为确保采集数据稳定,程序里加入了滑动平均滤波算法,针对连续多次采集的数据执行平均处理,从而有效地抑制偶然干扰给测量结果带来的影响,数据采集线程在完成一个采集阶段之后,利用操作系统的时间片延时功能去等待下一个采集阶段的到来,如此一来就规避了无效的忙等待,减小了系统的功耗。
4.4 显示子程序设计
显示子程序把系统运行状况以及传感器数据经由图形化界面展现在TFT液晶屏上,达成人机交互的目的,这个子程序以独立线程形式运行,系统初始化时做显示屏的硬件初始化及界面布局的设定工作,初始化靠串行外设接口总线向显示屏发送诸多初始化命令来设置显示参数与通信模式,涉及显示方向,色彩格式,扫描方式等,并清除显存。界面布局用固定区域划分法,把屏幕分成标题栏,温度显示区,TDS显示区,水位状态区和网络状态区,各个区域都有其特定的功能,利于用户立即得到所需信息,在正常运行期间,显示线程不断侦听数据更新消息,按照事件激发的方式回应数据变化情况,免去了毫无意义的定时刷新。
显示线程接到数据采集线程的数据更新通知以后,从中共享的数据结构里获取最新的温度值,TDS值以及水位状态,把这些数值转换成字符串形式,然后借助字符显示函数在预定的地方执行显示更新。至于水位状态,则依照实际水位情形来显示“正常”或者“报警”两种状态,而且会用不同的图标和色彩加以区别,一旦水位过低就会出现红色的报警图标,从而提醒用户留意。在网络状态区当中,按照通信线程反馈回来的关联状态,来显示已经连接或者尚未连接这样的提示信息,这样就能让用户知道系统当前是否具备网络连通能力,显示更新这种行为实行局部更新策略,只是针对那些数值发生变化的地方实施更新,规避因全屏刷新而产生的闪烁情况,另外还缩减了数据传送的总量,提升了显示的速度,显示线程的设计很看重界面的反应速率和用户的感受,使得用户可以随时清楚地掌握鱼缸内的各种环境参数,界面简单又直观,操作起来也很方便。
4.5 通信子程序设计
通信子程序用来管理ESP8266模块和ThingsBoard物联网云平台之间的网络连接及数据交互,达成数据上传和远程指令接收的功能,这个子程序以独立线程的形式运行,包含网络连接管理,数据发布和指令订阅这三个功能模块,这些模块相互配合来完成网络通信的任务。网络连接管理模块负责执行ESP8266模块的初始设置并维持其连接状态,在线程启动时经由串口传送AT指令集,逐步完成模块重置,模式设定,关联路由器以及形成MQTT连接等工作流程,每次发送AT指令之后,模块都会给出相应的回应信息,程序借助分析该回应内容来判断操作结果是否达标,如果有误就执行重试或者错误校正流程。 连接创建起来以后,线程便转入到循环观察阶段,并开始处理数据的发出和指令的接收事务,利用多路混用机制做到双向通信的效果。
数据发布模块依照预定的上报时段,从数据共享区获取最新传感器数据,并把温度,TDS值以及水位状态按 JSON 格式整合成数据报文,再经由 MQTT 协议的发布消息功能发送到云平台指定的主题当中,JSON 格式有着不错的可读性和扩展性,利于云平台实施解读与保存。指令订阅模块主要负责应对云平台所发出的控制指令,利用 MQTT 订阅的方式来接收远程补水指令,一旦收到指令便对该指令里的控制参数加以分析,然后向自动化控制线程传达信息,从而引发远程补水动作,为了保障通信的可靠性,程序里嵌入了超时重连机制,借助心跳包定时去检查连接状况,一旦察觉到网络被切断或者存在连接问题,就会自动试图重新创建连接,包含再次关联路由器,重新形成 MQTT 连接等环节,进而保证系统长时间运行期间网络处于有效状态,即便在网络短暂中断的时候也可自行恢复正常通信。
4.6 自动控制子程序设计
自动控制子程序依靠传感器采集到的即时数据来执行各种控制操作,从而达成鱼缸环境的自动化调节,这个子程序以独立线程的形式运行,其中最主要的就是水位自动控制功能和远程补水控制功能这两种控制手段各自独立,而且互相配合,一起保证鱼缸水位的稳定。水位自动控制功能要不断检测水位传感器的状态才行,控制线程在每次采样阶段都会去读取水位传感器发来的信号,一旦发现水位低于预先设定的界限,就会让控制通用输入输出端口发出高电平信号,促使继电器产生磁性吸合现象,进而开启水泵来进行补水,在补水期间,控制线程一直要关注水位情况,等到水位回升到正常范围以后,就把那个通用输入输出端口设置成低电平,于是继电器就断电失磁,水泵也就自动停机不转,这样一种形成闭合回路的控制方法达成了水位的自主保持目的,免去了由于水位过低而引发的一系列麻烦状况。
程序里加入了延时确认机制,防止因为水位波动而使水泵频繁开停。水位传感器状态发生改变之后,要连续多次确认其处于稳定状态,这样才执行对应的动作,从而有效地解决了临界状态下的抖动问题,这个延时确认机制依靠软件定时器来达成,一旦水位状态发生变化就开启计时,如果在指定的时段里状态维持稳定,就会执行控制操作;如果有状态回落的情况出现,则放弃当前的操作,远程补水控制功能从通信线程那里获取到来自远方的指令,只要接收到远程补水指令,不论当前水位情况怎样,都会启动水泵运转预设好的一段时间,以此做到按需补水的目的。 这种设计符合用户远程补水的需求,即便系统自动补水功能正常运行的时候,用户还是可以依照自己的实际情况来执行补水操作。自动控制子程序的设计按照安全可靠的原则,其在控制输出引脚时采取了必要的保护手段,比如在初始化的时候保证输出为低电平,而且设置看门狗以防止程序失控等,从而规避由于程序异常造成的误动作,进而保障系统的运行安全。
5调试与结果分析
5.1 硬件调试
硬件调试属于系统开发的关键部分,其主要目的在于核实电路板焊接的质量,以及各个硬件模块基本功能的正常性,调试流程包含三个阶段,即电源检测,基础电路检测和外设模块检测。在电源检测阶段,主要任务是查看电路板供电系统的稳定性,利用万用表去测量电源输入端和各个芯片电源引脚对于地的电压,以确定3.3V电压输出没有异常并且不存在短路问题,一旦给电路板上电,就可以留意一下各芯片表面的温度,不会有不正常的高温状况发生,而且电源指示灯也会正常点亮,这显示出电源模块运行正常,从而为后续的调试给予稳定的供电保障,在基础电路检测阶段,重点在于核查主控芯片的最小系统能否正常运行,借助示波器来测量时钟电路晶振引脚的波形,当看到8MHz正弦波信号平稳地被发出的时候,就说明时钟电路运行正常,晶振也能稳定地产生振荡。 复位电路检测时,经由示波器观察上电时 NRST 引脚的电压变化曲线,其低电平持续时间需符合复位要求,手动复位按键的功能也应正常,按下该按键时芯片就能可靠复位,进而保证系统可在必要时刻回到初始状态。
外设模块检测阶段需逐一核实各传感器及功能模块的硬件关联是否准确,在温度传感器检测时,利用示波器观察数据引脚波形,可见符合单总线时序的通信信号,这显示传感器与主控芯片的通信链路正常,在水位传感器检测时,改变传感器表面的水位状况,观测输出电平能正确翻转,这就验证了传感器的响应特性,TDS传感器检测时,把传感器探针浸入不同浓度的水样里,观测模拟电压输出随浓度变化而变化的情况,从而确定传感器输出信号与水质参数有较好的对应关系。 显示屏模块上电之后可以正常显示出初始画面,其背光亮度正常,这表明显示模块的供电和通信接口连接正确,ESP8266模块上电以后电源指示灯就会亮起,经由串口调试工具能够获取到模块的启动信息,从而确认该模块运行正常,在完成硬件调试之后,电路板便能够稳定地上电运行,各个硬件模块的功能也都正常,这就给后续的软件调试赋予了可靠的硬件平台,也给系统整体功能的达成形成了稳固的基础。
5.2 软件调试
软件调试重点在于核查各功能模块的程序代码是否恰当地达成了预期功能,其采用分模块,分阶段的调试策略展开,在此之前先执行基础软件平台的调试,涉及系统时钟设置,通用输入输出口的初始化,串行外设接口的初始化以及通用同步异步收发器的初始化等事务,经由调试器逐步运行代码来留意寄存器设置值是否无误,并借助示波器考察时钟输出端和通信接口的波形是否合乎预期,从而保证基础软件环境设置准确无误。在调试期间察觉到系统时钟设置开始阶段存在倍频系数设定欠妥之处,引发系统主频陷入低于预期状况,经过参照芯片数据手册调整锁相环设置参数以后,系统主频得以回归正常水平,接着着手对传感器推动程序加以调试,在温度传感器推动调试环节撰写简单的评定程序并不断读取温度值,利用调试器检查所读取的数据,把它们与实际水温及显示数值做对比,以此来确认时序和数值转换是否准确。 TDS传感器推动调试时需设置模拟数字转换器实施连续采样,利用调试器查看转换结果,并结合串口输出不同浓度水样时的电压值,以验证模拟数字转换通道的线性度。在水位传感器推动调试过程中,读取通用输入输出引脚的电平状态,模拟水位的变动情况,检查状态转变是否快速而精确,从而保证传感器数据收集的准确性。
再次执行显示驱动程序的调试工作,并编写图形检测程序来验证屏幕初始化序列是否正确,逐步考察画点,画线,显示字符以及显示图形等功能,从而保证显示模块按设计要求显示出界面内容。在调试期间察觉到屏幕初始化时序出现偏差,引发了显示异常现象,经由调节串行外设接口的通信速率及延时参数之后,该问题得以解决,在串口通信驱动调试阶段利用串口调试助手与ESP8266模块展开交互活动,向其发送AT指令用以考量模块的连接状况及其数据收发能力,并核实相关指令回应的准确性,接下来才着手对网络协议栈和操作系统功能执行调试流程,检查MQTT协议是否能与ThingsBoard云平台形成关联并开展数据交换,以此确认数据上传以及指令接受方面存在的功能特性。 RT-Thread操作系统被采用以后,要考查多线程的创建情况,也要探究其调度情形以及同步机制是否完善,保证各个线程依照预设目标协同运作,还要解决好资源访问时可能出现的争执问题。在操作系统相关调试的时候,碰上因为线程栈空间划分短缺而导致系统无法正常运行这种情况,于是便增扩大该空间,改良相关线程的任务安排,如此一来就把先前提及的故障给排除掉了,软件调试过程所找出的各类问题都得细致分析后再加以改正,这样一来,各个模块的功能才得以符合预先规划的目的,进而为接下来要做的系统综合调试工作构筑稳固根基。
5.3 综合调试
综合调试把硬件和软件各模块融合起来,做系统整体功能的验证检测,重点看系统数据收集是否准确,控制响应是否及时,网络传达是否稳定,长时间运行是否可靠。系统上电以后先留意显示屏的初始化情形,检查界面能否正常显示,各参数初始值是否恰当,把温度传感器和TDS传感器投入鱼缸的水里,注意显示屏上温度值和TDS值随时的变动,同实际测量值作比较,温度测量误差在正负0.3摄氏度之内,TDS测量误差在满量程的正负百分之五范围内,符合设计需求。 由改变鱼缸水位来观察水位状态显示的变化,水位降到传感器安装位置之下时,屏幕上的水位状态指示就会变成报警状态,水泵会自动开启实施补水作业,等水位回升之后,水泵便自动关闭,其自动补水功能运作正常。在自动补水功能的调试期间,最初出现过水位波动致使水泵频繁启停的情况,不过经过在软件当中添加了延时确认机制之后,水泵启停的次数就大幅度缩减,控制的稳定性也得到了改善。
利用网络调试工具来观察ThingsBoard云平台的数据接收状况,核实系统是否依照设置好的上报间隔发送温度,TDS以及水位数据,云平台仪表盘能否正确显示出各个参数的变动趋势图,数据上传既迅速又精准。在通信功能调测的时候,存在网络断开以后不能自动重建链接的现象,经由改良超时重建机制,加上了心跳包监测和自动重建逻辑,网络链接的稳定性得到有效加强,经由云平台发送远程加水指令,系统可在几秒钟之内作出回应并且开启水泵运作,远程控制功能得以达成,响应时间处于可被接受的范围内。 要想证实系统长时间运行是否稳定,就执行了连续48小时的运行检测,此期间,系统一直在采集数据并上传到云平台,其自动控制功能也正常激活,未发生死机或者数据中断现象,系统运行稳定可靠,综合调试成果显示,本系统各个功能模块配合得当,数据采集精确,控制响应快速,网络通信正常,整体性能符合预先设定的目标,经过这个课题的研究和应用,做到了依靠单片机的观赏鱼缸智能控制系统的开发,这个系统能减小人工干预的频次,改善鱼缸守护的智能化程度,具备比较好的实用价值和推行潜力。