打印
[STM32F1]

开源教程|智能生态鱼缸的设计

[复制链接]
2239|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

随着科技的飞速发展,鱼缸在国内市场上产品繁多,功能不统一,而且大多是非智能化的,功能使用不灵活、不方便,整体性能也无法得到提升,在科技改变生活的时代,对传统的鱼缸进行科技化的改造势在必得,这将会给人们带来更多的幸福感。




本论文以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.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.3 ESP8266WiFi电路设计



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端历史数据信息查询


(9)以下是作品的整体实物图。






需要代码和演示视频的小伙伴们请自行下载,如遇到不能下载的话请在本帖留言私信给你哈!!
源代码和演示视频链接:链接:https://pan.baidu.com/s/19QdYRAsLA7WCuRHnH24lAg 提取码:mqdw



使用特权

评论回复
沙发
sparrow054| | 2022-8-1 20:21 | 只看该作者
这个,好像都是写论文用的,实际应用不大

使用特权

评论回复
板凳
caigang13| | 2022-8-2 07:53 | 只看该作者
这是搬运论文吗?

使用特权

评论回复
地板
Bblythe| | 2022-10-4 09:06 | 只看该作者

不要根据不同的参数类型走不同的代码逻辑

使用特权

评论回复
5
Uriah| | 2022-10-4 19:06 | 只看该作者

会以switch-case的方式出现

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

67

帖子

1

粉丝