摘要
随着科技的飞速发展,鱼缸在国内市场上产品繁多,功能不统一,而且大多是非智能化的,功能使用不灵活、不方便,整体性能也无法得到提升,在科技改变生活的时代,对传统的鱼缸进行科技化的改造势在必得,这将会给人们带来更多的幸福感。
本论文以 STM32F103C8T6 单片机为核心,设计了一款基于机智云物联网平台的智能温控,智能换水,智能供养,智能照明和智能显示系统。该系统以 esp8266WiFi 模块通信为基础,可以远程手机监控。本设计硬件电路结构简单,分为单片机核心控制器模块,NTC 温度传感器检测智能鱼缸的水温,通过 OLED 显示当前设备的电流值、温度值和充氧速率等,按键电路用来调节充氧速率、水温参数的阈值、控制供养和补光,继电器用来驱动水泵给鱼缸加水。
还实现了通过 ESP8266WIFI 模块实时将数据上传手机 APP 进行控制,而且可以通过按键或手机 APP 调节控制鱼缸的各项功能,本论文基于物联网的智能鱼缸系统设计对当代物联网行业的发展具有一定的意义。
1 绪论
基于物联网的智能鱼缸的发展意义重大,因此,根据市场需求,本次设计的产品采用了 STM32,该产品集成了多种控制功能,包括智能温度控制,智能换水,智能供氧,智能照明和智能显示。该系统通过 WiFi 模块连接到机智云手机 APP,以通过移动应用程序实现鱼缸温度,照明和水变化的远程监控,并可以在显示器上显示时间,水温,电流,功率和功耗统计信息。
综上所述,基于物联网的智能鱼缸监测系统的设计与实现解决方案可以节约人工管理的繁琐,在被动的管理模下,转化为宏观的控制,当监视的人不在的时候可以根据微信端来控制供养和照明系统的的控制,还有电流和电量也可以进行调节,对于大型的水族馆,可以节约大量人力和物力,对于家庭环境,可以提高家庭的和睦性,对现代生活的发展意义重大。
1.1 本设计主要完成工作
基于以上研究背景和研究意义,本文详细介绍基于 stm32 单片机和 ESP8266WIFI 对接机智云物联网云平台的无线鱼缸智能监控系统,实现鱼缸远程控制功能。硬件电路结构简单,由一些传感器模块和系统硬件电路组成,具体包括 ESP8266WIFI 通信模块,OLED 人机交互显示模块,按钮电路控制模块,继电器驱动电路模块,水温检测 AD 处理电路,以及六个电路模块,如系统电流和电压检测。其中,核心控制微控制器为 STM32F103C8T6,人机交互模块使用 OLED12864 来显示各种参数数据,并使用按键来调节每种模式作为输入设备。
本文的结构如下:
第一部分介绍了系统的设计背景,介绍了基于物联网的智能鱼缸控制系统的总体方案设计和研究目的。
第二部分是研究系统各模块的通信原理,包括建立 WIFI 模块或 Gizwits 终端服务器。
第三部分是完成整个物联网智能鱼缸系统的原理图和 PCB 图。
第四部分是完成系统使用的开发环境的介绍和应用,并编写每个模块的子功能和主要功能的程序设计。
第五部分是完成系统的 PCB 设计,然后完成系统的焊接和实物功能测试。
2 各模块的通信原理
2.1 系统功能分析
(1)基于 STM32 硬件系统,结合 ESP8266WiFi 通信技术对接机智云平台,实现手机 APP 远程控制照明灯光和继电器等。
(2)系统实时显示时间、水温、电流、功率、耗电量等基本信息,能实现 APP 操作控制。
(3)系统手机端可以远程一键切断设备的输出控制,即 “紧急停止” 功能。
(4)LED 照明可以实现亮度调节,充氧可以实现速率调节。此功能可以远程控制,也可以远程手机控制。
(5)人机交互采用 OLED 显示屏,具有好的人性化操作界面。
(6)设备能够联网与机智云平台实时进行信息交互,实现手机端可以远程控制设备、监测设备运行数据。
2.2 系统总体方案设计
通过对硬件模块选择方案的比较和分析确定了这个想法,系统总体结构框图如图 2.1 所示,将整个系统分为以下组成部分:STM32 核心控制、按键调节、OLED 显示、ESP8266 感知层配网、继电器驱动电路、补光灯 LED 照明系统,电源稳压组成电路。
系统运行时,通过控制器通过程序读取由温度感测元件组成的温度检测电路输出的 AD 值,以读取当前的输出温度值 C,四路继电器分别控制加热电路,补光电路,供氧电路,输出一定的电流电压信号,温度测试采用探头式 DS18B20 传感器,系统的输入电压电流由 DACMP2303 转换电路采集之后经过内部再经过内部 AD 转换为电压,再计算出器功率,系统运行时控制器通过串口访问 ESP8266WiFi 模块,通过GAgent协议上传机智云终端服务器,并经过单片机数据处理通过手机 APP 显示,当用户想调节手动控制加热或补光灯,只需通过手机 APP 发送指令,实现远程控制的功能。最后,该系统通过按钮扫描,响应按钮输入并控制 OLED 显示屏以显示各种相关数据信息,完成人机交互。
2.3 主要元器件的选型
2.3.1 主控单片机
方案 1:STM32F103C8T6 单片机主要的特点就是运行速度快,这就要从它的内核架构 Cortex-M3 说起,该架构是 ARM 系列中最经典的架构,而 STM32 系列单片机恰好使用了这个架构,不但提高了单片机的运行速度,还在根本上提升了单片机的性能。而从内存上来看 STM32 系列的单片机至少也有 16K 的内存,而且还带有 AD 转换器、I2C 接口以及 SPI 接口,简化了电路连接。
方案 2:目前的主控制器中,STC89C52 单片机延用的架构仍然是传统的 51 系列单片机特有的 8051 架构,基本上每一款的 51 系列单片机的程序、引脚等都是可以通用的。从单片机的引脚上来看,该款单片机有 32 个 I/O 口可以开发使用,引脚的功能也都非常清楚明了,能够帮助开发者来快速设计出电路,从软硬件两方面降低了系统的开发难度。但是该款单片机只能容纳 8K 的代码,会降低系统运行速度。
结论:STC89C52 单片机的运行速度会影响系统全局,而 STM32F103C8T6 单片机软件和硬件更加简单,符合系统需求,因此首选 STM32F103C8T6 方案。
2.3.2 显示模块型号的选择
方案 1:LCD1602 是一款显示容量为 32 个字符的液晶式显示屏,其中包括大小写字母、符号、简单的图形等内容。使用 LCD1602 时直接采用电压就能对显示屏的显示区域进行控制。如果想详细的了解 LCD1602 可以查阅显示屏的手册,从手册中可以找到显示屏的代码直接调用及修改即可,还可以了解到 LCD1602 的电路及各引脚功能,但是该模块是不能显示文字和图片的,很多数据信息都无法显示完整的,因此从软件和硬件这两个方面以及显示内容来看还得寻求其它的方案设计。
方案 2:本次系统设计选择 0.96 寸的 OLED(Organic Light-Emitting Diode,有机发光半导体)是有机发光二极管的英文缩写,液晶屏显示。考虑到低功耗和交互的友好性,液晶屏显示必然成为首先。传统的字符型液晶显示器,虽然可以能符合以上两点要求。但相比于便携性,选用 OLED 显示器,将更为优越,非常便合于便携式设备上。本设计选用 OLED 最大支持 64 个字符显示,其 4 行,每行 16 字符,除了支持所有 ASCII 码,还自带字体库。非常便于显示信息。显示字符支持黄,蓝两种不同颜色。
结论:OLED12864 在显示上更有优势,符合本系统要求,因此选择方案 2。
2.3.3 无线通讯方案的选择
使用 ESP8266 系列无线模块是高性价比 WiFiSOC 模组,它能够快速联网,只需要五步就可以实现 “IoT 技术”,WiFi 模块采用低功率 32 位 CPU,并且可以作为处理器,主频最高可达 160MHz。内置 10 位高精度 ADC 转换模块,具备缓存能力、上手容易、开发逻辑简单等特点,关键是传输数据较为稳定,可以连接机智云终端服务器进行远程监控,如下表是 ESP8266 工作的指令。
2.3.4 温度传感器方案的选择
为了实时检测鱼缸内的温度,我们需要一些防水的温度传感器,本设计采用 NTC 温度传感器,是一个热敏电阻、探头,其原理是:的电阻值随着温度的升高而迅速降低,实际尺寸非常灵活,它们可以小到 0.010 英寸,也可以是非常小的直径,最大尺寸几乎没有限制,但通常不到半英寸。一般结构由 NTC 热敏电阻、探头 (金属外壳或塑料外壳等) 组成,延长线和金属端子或连接器,检测的时候测得数据很稳定,误差很小。
图 2-3 NTC 温度传感器
它的特点一般是灵敏度高,阻值和 B 值精度高,一致性互换性比较好,并且采用双层包封工艺,具有良好的绝缘密封性和抗机械碰撞,抗弯折能力。
2.3.5 继电器驱动方案的选择
为了驱动继电器更加有效的工作,系统增加了 ULN2003 驱动芯片,该芯片的主要作用就是对于输入电流进行放大,然后再驱动 5V 和 12V 的继电器,因为继电器驱动的模块电路是需要较大的电流和电压工作的。该芯片可用于设置脉冲驱动步进电机、驱动马达或者直流电机,更有效的和最佳的选择就是驱动继电器来控制设备,比如水泵、电压电流互感器等。并且直接使用的时候该芯片和一些其他的类芯片大致原理上都相同,就直接可以用来使用并检测。
图 2-4 ULN2003 芯片逻辑图
3 系统硬件电路设计
STM32F103C8T6 单片机可以说是系统的控制中枢部分,外部的器件都需要单片机通过内部程序进行指挥和协调,这样才能保证特定功能的完成。将能够实现自己功能的各模块搭建在一起就能有效降低系统制作的复杂性。
3.1 STM32F103C8T6 单片机最小系统
如下时本次系统的最小系统板原理图设计如图 3.1 所示,它由最小系统中芯片控制器、震荡电路、晶振电路以及串口下载电路。
图 3-1 最小系统单元电路
3.1.1 晶振电路
在单片机中,晶振电路的地位是不可取代的,系统能否启动成功该部分的电路起到了决定性的作用。晶振电路和单片机内部的晶体振荡器连接构成了晶振电路,能使单片机拥有更高的运行速度。可以说晶振电路为单片机的运行提供了重要的基础。
STM32F103C8T6 单片机就是在 OSCIN 和 OSCOUT 引脚连接了 8MHZ 的晶振,在单片机上就能看到,选用的是 20PF 的电容能保证单片机更加快速、稳定的运行。晶振电路如图 3.1 所示。
图 3-2 晶振电路
3.1.2 复位电路
在单片机上还有一个白色的按钮就是复位电路的按钮,能支持单片机完成程序的初始化,直接就能将系统从头开始执行。STM32F103C8T6 单片机的 RST 复位引脚上连接了对应的电阻和电容,通过按键就能控制复位。在语音分类垃圾桶系统中,就是选用了直接、方便的按键复位方式,阻值为 10K,电容的容量为 10μF。按下连接好的按键就能将系统重启。图 3.2 为复位电路。
图 3-3 复位电路
3.1.3 电源电路
电源模块电路如图 3.6 所示,本系统需要两种电压,由于 OLED12864 显示和 WiFi 通信模块需要的电压为 3.3V~5V,而 MCU 工作于 3.3V,由于主控 MCU 采用 3.3V 供电,就选用 AMS1117 三端稳压器模块产生 3.3V 电压。电容 E1,C22 为输入电容,作用是防止断电后出现电压倒置。C23,E2 为输出滤波电容,作用是抑制自激振荡和稳定输出电压。
图 3-4 电源电路
但是系统中需要用到 12V 电压去给继电器模块供电,继电器控制的设备需要的电压电流功率较大,所以使用 MP2303 外接电源适配器,然后再降压来整个设备需求,并且该模块输入电压为 4.7v-28v,输出电压 0.8V-25v 直接调节,输出电流连续输出不低于 3A。
图 3-5 MP2303 模块降压原理图
3.2 EEPROM 存储电路设计
该电路 EEPROM 存储模块采用 AT24C04 芯片,用于各种电参数的存储以及各种传感器的阈值的参数记录,便于断电情况下对数据进行保存。
图 3-6 EEPROM 存储电路
3.3ESP8266WiFi 电路设计
ESP866 电路设计如图 2.2 所示,GPIO 口为通用 IO,内部以上拉,且有两种工作模式:悬空 GPIO0 是工作模式,下拉 GPIO0 是下载模式。并且在 VCC 和 GND 之间使用钽电容 E1,这样能保证 WiFi 模块长时间维持更好的性能。
图 3-7 ESP8266WiFi 电路
3.4 继电器驱动电路的设计
ULN2003 用于驱动控制继电器不仅简化了复杂的电路,还能对 MCU 引脚输出的电流进行放大,提高了系统的带载能力。在使用该 IC 时候,很多人喜欢在驱动感性负载两端并联一个二极管,用于续流或者快速放电,其实这个根本没有必要,在 IC 内部本身就是集成了续流二极管,在此给出了经典得驱动电路,用于驱动继电器电路,如下所示:
图 3-8 ULN2003 驱动电路
其中需要注意得有两点:
首先:COM 引脚,即引脚 9 必须连接到驱动器电源的正极(而不是芯片电源的正极)。
第二:GND 引脚(即芯片的接地引脚)必须与驱动电源的负极形成等电位。
图 3-9 继电器控制电路
3.5 温度检测电路的设计
温度检测电路采用内部 AD 转换,在电路设计上用 100nf 电容对采集的信号先进行滤波处理,在 P7 端口外界一个探头式得 NTC 温度传感器,探头采集得模拟信号经过滤波处理后,将信号传给单片机,经过 AD 转换,将模拟信号转换位数字信号,通过显示屏显示出温度。
图 3-10 温度检测电路
3.6 电流采样电路设计
如下图所示:R15 康铜丝作为采样电阻,在经过 LM358 差分放大电路,然后 R14,R17,R13,R18 是对输入的电流进行放大,R16,C12 是对输出做 RC 滤波,Rp18=Rp13,Rp14=R17。Vout=Rp18/Rp17*(Vin+-Vin-)。输出电流传给单片机 PA5 管脚,然后经过单片机内部 AD 数据处理再通过 OLED 显示屏显示出电流大小。
图 3-11 电流采集电路
3.7 按键电路设计
为了满足按键调节各个参数,一共设计了四个按键,分别接 PA0,PB12,PB13,PB14 这四个接口,按键 1 用来控制 OLED 显示界面的切换,以达到可以调节温度,充氧速率等操作。按键 3 可以设置温度,补光灯强度,以及充氧速率等参数的增加。按键 4 是用来将参数数值调小。按键 2 是确认键,每次调整后,按键 SW2 将存储于系统保存当前的变化。
图 3-12 按键控制电路
3.8 报警电路设计
系统中加入无源蜂鸣器电路,主要用于系统出现异常时进行报警,通常通通过 BUZZER 引脚输入方波信号,该电路同样是采用 NPN 三极管作为开关进行驱动,其基极的高电平使三极管饱和导通,使蜂鸣器发声,而基极低电平则使三极管关闭,蜂鸣器停止发声。
图 3-13 按键控制电路
4 系统软件设计
在前三章中的硬件电路章节中已经将便携式风光互补系统的硬件部分介绍完毕,此时就进行下一步的软件开发介绍。程序代码编程软件 KEIL 和 C 语言在系统的软件部分起到了重大作用,达到软件编程完成的目的。
4.1 软件开发环境简介
本设计中选用德国 keil 公司推出的专为 arm 核控制器开发的一款编译器软件。该软件集成了业内最领先的技术,Keil5 软件使用时候特别方便,它所占的系统类型为 64 位,兼容 WIN7/WIN8/WIN10,而且下载速度 SWD 模式是 keil4 的五倍,它的特点是集成开发环境,调试器和仿真环境。完美支持 Cortex-M,Cortex-R4、ARM7 和 ARM9 系列器件,并且有大量的项目可以让使用者快速熟悉强大的内置特征。
4.2 主程序设计
为了满足水质温度、电流、用电量及其功率采集的实时性,本程序采用循环扫描的方式对 NTC 温度传感器进行数据读取。系统开始首先对各个模块功能初始化,初始化完成之后可以通过按键调整系统参数(充氧速率、水位阈值、限流大小、照明亮度、净化速率以及一键换水操作),当实际测得水温低于阈值时,继电器闭合加热棒开始给水温加热,反之亦然。当系统负载电流大于限流阈值时,蜂鸣器报警,负载电器都停止工作。系统参数设定完成之后,按键退出自动保存参数,并且有断电保存的效果。系统 WiFi 通过无线将数据发送给手机 APP 和终端控制中心,发送完毕后自动清除缓存,结束本次循环。
图 4-11 主程序流程路
4.4 系统子程序设计
4.4.1 IIC 通信程序设计
串行通信主要使用三条线路来实现:CS,SCLK 和 SDA。其中,CS 是可选芯片,SCLK 是同步时钟信号,SDA 是发送数据信号。该时序刚开始 CS 片段为高电平,SCLK 为矩形脉冲波动,CS 为低电平时,SCLK 也为低电平,CS 为高电平时,SCLK 就会产生脉冲信号。同时 STD 就开始进行时钟字节的选取,经过几个周期,RW 进行数据的读取,RS 将数据发送给更高的电平进行数据的选择。最后进行筛选到第二储存区域,进行第二次的字节变化,产生时序信号,最后 CS 片选回复低电平,脉冲信号停止,STD 停止字节的位选。图 4-1 是串行通信时序图:
图 4-2 串行通信时序图
4.4.2AD 采集程序设计
使用该 STM32 单片机采集电压的时候大致可以分为两种,一个是 DMA 采集,另外一种是定时采集,本次系统对电压的采集是用了 DMA 方式进行采集的,采集流程设计如下,ADC 采样的话首先就是对 ADC 进行初始化,确定 ADC 的通道的级别方式,采集时间窗口预定目标转化为相应的时间和时钟,定义好三种电压、电流和温度的采用结果,对每一个信号采样 8 次,然后再将阈值通过 STMFLASH 存储到到芯片当中,所以系统共采集了 3 个数据。如果预定的 ADC 中断发生,则系统会进入中断服务程序,然后对当前的设备的电压电流采集进行数据的传输和处理。
图 4-3 电压采集流程图
4.4.3 WiFi 通信程序设计
本设计中 ESP8266WiFi 串口通讯协议是机智云平台标准接入协议(4.2.0),设备的通讯信息为 9600 波特率,8 位数据位,无校验,1 位停止位,传输字节序采用大端编码,通信交互形式是采用一问一答,每条命令需要由接收方给出 ACK 应答确认信息,超时时间 200ms,超时后重新发送。WiFi 模组上电后,需要向 MCU 查询设备信息,获取信息成功后,WiFi 模组才能正常工作,基本通信协议流程图如下所示。
图 4-4 WiFi
AIoT 设备自助开发平台:
机智云 AIoT 自助开发平台,提供从产品定义、开发调试、应用开发、产测、云端开发、运营管理、数据服务等覆盖 IoT 设备接入到运营管理全生命周期服务的开发能力。通过傻瓜化的自助工具、完善的 SDK 与开放的 API,最大限度降低 IoT 设备开发的技术门槛,已服务 320000 + 开发者。
5 系统调试分析
5.1 软件调试
软件程序的开发环境是 KEIL5,新建工程的选对单片机的型号,不断地给系统,保证系统运行的稳定,意淫单片机选用的是 C8T6 的型号,所以在 Target 目标选择栏里一定要记得修改晶振的大小,这样才能保证时间的精确度。
图 5-1 单片机型号选择
反复通过断点调试和单步调试的方式对代码进行检查以及修改后,就可以编译代码查看程序调试的结果,在编程后看到了 “0 error” 的提示,如果看到这个提示结果就表示程序已经是正确的了。如图 5.2 所示。
图 5-2 程序编译通过
程序编译完毕后接下来就是将单片机的程序通过串口烧录软件烧写进去,第一步就是打开 Fly-Mcu,设定 BOOT0 和 BOOT1 都为低电平,然后将串口软件设定为 DTR 低电平复位,RTS 高电平进 Bootloader,
图 5-3 程序烧写设计
5.2 硬件调试
对于本系统的制作,首先采用的是硬件的焊接,然后是代码的编写,最后是运行实物,因此对软件和硬件这两部分分别的调试是最后调整实物的基础。
系统硬件的调节和测试主要时针对系统的电路和程序入手的,在设计电路时可采用 AD 软件根据各元器件的管脚特性及系统功能先绘制好电路,然后再根据电路进行实物焊接,如果有耐心的话可以边焊接边使用万用板测试,可以大大降低硬件焊接的错误率。一般的硬件调试可以遵循以下几个步骤,得到事半功倍的效果:
(1)第一步:利用电路图绘制软件(本设计使用的软件为 Altium Designer,作为 PROTEL 公司推出的一款智能型较高的专业绘图软件)绘制系统整体电路图,如下图所示,然后仔细检查软件里的元器件及电路连接走向是否正确;
(2)第二步:对照检查好的原理图绘制 PCB 图,确保 PCB 图的正确性、与原理图绘制电路的一致性;
(3)第三步:查找元器件资料,对照实物功能及每个元器件的引脚,同时检查原理图及 PCB 图;
(4)设计规则,注意电源线的线宽和元件之间的安全间距,设置 + 12V 电源线宽为 2mm,+5V 线宽 1.5mm,+3.3V 线宽 1.2mm,其余信号线 0.2mm。
(5)根据 EMC 设计规范摆放元器件布局,先连电源线,再连信号线,最后再对 GND 进行敷铜处理,信号接口再滴泪处理,PCB 布线如下所示。
(6)第四步:安装完成实物后,可以借助万用表等工具测试局部电路和整体电路,防止出现短路现象,及时纠正元器件电路错误及整体电路中的错误。
图 5-4 PCB 布局及连线设计
图 5-5 PCB 敷铜设计
图 5-6 PCB3D 模型
5.3 实物测试
(1)通过电源系统给设备供电,显示器显示当前时间,当前水簇箱水质温度,环境大气的温度,以及当前设备的供电电流、设备功率以及耗电量度,如下图所示。
图 5-7 供电显示视图
(2)水簇箱水温传感器 NTC 检测与阈值显示。
图 5-8 水温阈值调试
(3)充氧气速率调试。
图 5-9 充氧气速率设置
(4)水族箱内照明灯光调试。
图 5-10 LED 照明亮度设置
(5)限流保护设计,当设备超过 5A 时,系统紧急停止工作。
图 5-11 系统保护电流设置
(6)水泵控制进出水,可以实现 APP 远程操控和一键轻松换水。
图 5-12 直流水泵设备
(7)以下是机智云公版手机 APP 显示界面。
图 5-13 远程 APP 登录和操作界面
(8)以下是机智云物联网平台的终端服务器数据历史查询界面。
图 5-14 PC 端历史数据信息查询