【《基于单片机的智能鱼缸系统的硬件和软件设计案例》5400字】_第1页
【《基于单片机的智能鱼缸系统的硬件和软件设计案例》5400字】_第2页
【《基于单片机的智能鱼缸系统的硬件和软件设计案例》5400字】_第3页
【《基于单片机的智能鱼缸系统的硬件和软件设计案例》5400字】_第4页
【《基于单片机的智能鱼缸系统的硬件和软件设计案例》5400字】_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

基于单片机的智能鱼缸系统的硬件和软件设计案例目录TOC\o"1-3"\h\u23549基于单片机的智能鱼缸系统的硬件和软件设计案例 1165151硬件设计 1129941.1单片机系统设计 1235541.1.1单片机设计 15061.1.2电源系统框架设计 214931.1.3复位电路设计 3184771.2温度传感器设计 4189041.3浑浊度传感器设计 549761.4时钟模块设计 743021.5蜂鸣器模块设计 8308341.6水位检测模块设计 860751.7显示屏模块设计 958761.8 WIFI模块设计 1089581.9其他硬件模块设计 11161101.9.1继电器模块设计 11213461.9.2舵机模块设计 1292011.9.3灯光模块设计 12298121.9.4LED模块设计 13144711.9.5按键模块设计 1358662软件设计 14229412.1程序设计 1479022.2手机APP界面设计 201硬件设计1.1单片机系统设计1.1.1单片机设计单片机选型:51系列单片机优点:容易上手,缺点是:运行速度太慢,且芯片易被烧毁,不适用于本设计。相对于来说,STM32系列单片机具有性能强、功耗低、成本低、性价比高的优点,且具有高精度的A/D转换模块,而本设计中的温度检测和浑浊度检测都需要较高精度的A/D转换模块[2]。具体选定STM32F103RCT6作为MCU,引脚图如图1.1所示,它具有一流的外设,集成度高。最高工作频率72MHz,拥有51个通用I/O口,,引脚图如图1.1所示。图1.1STM32F103RCT6引脚图1.1.2电源系统框架设计电源系统框架设计如图1.2所示:图1.2系统电源框图本系统以5.0V充电宝作为电源,通过Micro-USB直流供电(如图1.3所示),可以直接给WIFI模块、时钟模块、舵机模块、继电器模块、水位检测模块、温度检测模块、浑浊度模块供电,蜂鸣器和MCU正常工作电压低于5.0V,为了使器件能正常工作,参考芯片资料,设计了一个稳压模块(如图1.4所示)。通过该模块,将输入的5.0V电压转为1.3V稳定电压,使得单片机和蜂鸣器都能正常工作。图1.3USB供电电路图图1.45V转1.3V稳压模块为了电路获得良好的电源,在每个外围电路中都加入了滤波电路,如图1.5所示。图1.5滤波电路1.1.3复位电路设计本研究设计的系统复位电路如图1.6所示,当手动按下RST按键,或上电瞬间强大的电压使得C6两端电压近似为0,异步复位引脚输入低电平,使MCU处于复位状态,即可实现复位。图1.6复位电路1.2温度传感器设计研究显示观赏鱼的生活温度为:-5℃-50℃,本文选用DS18B20温度传感器,它的灵敏度高,且为单总线通信方式,无需外接任何模块,仅将DQ数据线需与单片机I/O口相连。其测量范围广泛,且分辨率最高可达到零点零六二五摄氏度[3]。芯片图如图1.7所示:图1.7DS18B20器件芯片DS18B20电路原理图(如图1.8),在使用过程中,将VDD引脚接入电源VCC5.0V,并需往I/O线上加入一个上拉电阻,来确保其在温度转换期间得到足够的电流。一般选取2.7k电阻。图1.8DS18B20电路原理图1.3浑浊度传感器设计为了能检测鱼缸中水质环境,需选择一种浑浊度传感器来检测水的浑浊程度。结合成本、实用性因素,综合考虑下,选择浊度传感器TSW-30,并搭配浊度传感器模块TS-300B。TSW-30结构尺寸图如1.9所示,其内部为一个红外线对管,基于光学原理因水中的悬浮物会减少光线透过量,当光线量减少时,电流减小。所以它可以通过检测光线透过量来检测出水的浑浊程度。在使用浑浊度传感器过程中,应避免光照直射,以免引起测量误差偏大。图1.9TSW-30结构尺寸图传感器模块TS-300B将传感器TSW-30输出的电流信号转换为电压信号,由于输出的电压值会受到温度的影响,使用时为了提高测量精度,一般需进行温度补偿。应用电路框图如图1.10所示,将模拟信号接入单片机,经由A/D转换得出电压值,并经过相关标准曲线计算公式得出具体的浑浊度值。图1.10应用电路框图电路原理图如图1.11所示,浑浊度传感器额定工作电压:5.0VDC,可以选择输出数字信号或模拟信号。为防止5.0V传感器输入信号直接接入单片机1.3VI/O口引起单片机损坏,在电路设计时,通过使用两个2.7K和10K的电阻设计一个分压电路,使得5.0V输入信号转换成单片机可以接收的电压信号。图1.11浑浊度传感器电路原理图1.4时钟模块设计系统采用定时任务来执行自动控制,通过判断设定时间是否到来执行相关的控制。故需要搭配一个精确的时钟,来为定时任务提供精确时间判断。单片机自带时钟精确度误差过大,不适用于本设计。综合考虑下,选择DS1302芯片为时钟芯片,它不仅精确程度高、能实现掉电走时,而且使用简单,仅需进行读取即可。他具有两个VCC电源引脚,一个引脚接单片机5.0V,作为主供电源,另一个引脚可以接纽扣电池,作为备用电源。当系统断电时,可以通过备用电源供电,实现在系统断电情况下,时钟也能正常走时[4],芯片及部分引脚如图1.12所示。图1.12DS1302芯片及部分引脚图它的工作电压范围较宽,可以在电压为2.0V到5.0V正常工作。仅需与单片机三个引脚相连(电路原理图如1.13),即可实现串行通信。DS1302提供的精确时间,不仅可以为喂食、充氧控制提供定时时间,还可以用于制作定时闹钟等功能。图1.13DS1302电路原理图1.5蜂鸣器模块设计本文设计采用有源蜂鸣器,来实现高温报警提醒。相对于无源蜂鸣器需要PWN波驱动,它的程序控制简单,其内部自带震荡源,仅需直流信号通电,就可让其发出声音。(电路原理图如图1.14)可以工作在1.3V-5.0V范围内,仅用单片机的高低电平控制,即可实现鸣叫发声。图1.14蜂鸣器电路原理图1.6水位检测模块设计为了能检测鱼缸中水位的高低,在综合实际使用及成本的因素考虑下,本系统设计选择使用两个非接触液位传感器,一个用于检测高水位,一个用于检测低水位,其采用进口的芯片,灵敏度高。输入电压:DC5±0.3V感应距离:3mm(0-5mm),液面变化精度检测精度:±2mm输出方式:高低电平接线方式:黑色线接GND,棕色线接VCC5.0V,绿色线接单片机I/O引脚。水位传感器器件接入5.0V电压,信号输出线仅需与单片机一个引脚相连。电路原理图设计如图1.15,同理为了防止单片机被损坏,也在电路中设计一个电阻分压电路。水位传感器置于鱼缸外围,可以随时通过移动传感器位置,来改变水位检测位置,方便用户调节水位。图1.15水位检测模块电路原理图1.7显示屏模块设计本文设计需要有一个显示屏模块实现显示当前时间、传感器数值及定时时间的功能,在节约成本、方便使用的考虑下,决定采用1.44寸TFT-LCD液晶显示屏模块。相对于OLED显示屏颜色单调的缺点,它有16位真彩色;相对于无源TN-LCD亮度低的缺点,它将TFT按照要求分布于像素点上,降低了相互之间的串扰,提高了亮度。图1.1616位数据与显存对应关系图表1.2SPI接线说明序号名称引脚说明1VCC电源正1.3V2GND电源地3SDISPI数据线4SCLSPI时钟线5CSSPI片选6SDO数据/命令控制管脚7RS复位管脚8BLK显示屏背光控制开关根据表1.2显示屏的SPI接线方式的引脚线说明,设计出如下图1.17所示的电路原理图,显示屏模块需与单片机6个I/O引脚相连,由SPI通信方式,实现屏幕多彩显示。图1.17显示屏电路原理图1.8 WIFI模块设计在目前电子产品中,主要使用无线通信协议来实现远距离通信。一般有WIFI模块、GSM模块等。为了实现能与手机端APP远程通信,本设计选用成本低、操作方便、性能强的ESP-8266WiFi模块作为远程通信模块,模块原理图如图1.20所示:图1.20ESP-8266WIFI模块原理图ESP-8266模块采用有6个引脚,可工作电压范围为:1.3-5.0V,在本设计中采用5.0V电源供电,并将收发引脚RXD和TXD与单片机相连,因本文使用的模块已烧入固件,故RST复位脚和GPIO_0都不接,置为默认高电平。电路原理图如图1.21所示:图1.21ESP-8266WIFI模块电路原理图1.9其他硬件模块设计1.9.1继电器模块设计本设计采用5V3路继电器模块分别控制2个水泵和1个充氧泵。电路设计原理图见图1.22。图1.22继电器模块电路原理图继电器负载接线方法:将继电器的工作引脚接入外接电源,将负载的正极,接入NC常开端口,再将负载的负极与电源负极相连。再由通过单片机的I/O口来控制继电器的开闭,从而实现单片机控制机械设备的启动与关闭。1.9.2舵机模块设计使用舵机来控制喂食器出口的开关。在结合成本考虑下,本设计采用sg90舵机,通过PWN波形控制舵机转动的角度,仅需与一个单片机I/O口(PA8)相连,采用5V供电,即可实现转动控制。图1.22舵机模块电路原理图1.9.3灯光模块设计在本系统设计中,为了增加鱼缸的观赏性,附加了一个灯光控制功能,能控制灯光的亮灭。使用单片机的PB8引脚控制。1.9.4LED模块设计在设计中为了设计了LED灯模块,如图1.23所示,通过判断灯的亮灭,更好的显示对应一些功能的是否正常开启。图1.23led灯模块1.9.5按键模块设计在设计中为了设计了8个按键,如图1.24所示,实现对鱼缸的本地控制功能。图1.24按键模块

2软件设计2.1程序设计程序设计流程图如图2.1所示:图2.1程序设计流程图系统上电后,首先是对各个模块和引脚进行初始化:delay_init(); //延时函数初始化LED_Init(); delay_ms(500); //LED灯初始化KEY_Init(); //8个按键初始化BEEP_Init(); //蜂鸣器初始化DuoJi_Init(); DuoJi_OFF(); //舵机初始化JDQ_Init(); delay_ms(200); //继电器初始化ShuiWei_IO_Init(); //两个水位传感器初始化 Adc_PA4_Init(); //ADC转换初始化LCD_Init(); LCD_Clear(WHITE); //1.44寸TFT液晶屏初始化DS18B20_Init(); //DS18B20初始化DS1302_GPIOInit(); //DS1302引脚初始化ds1302_init(); delay_ms(50); //DS1302初始化ESP8266_Init(); //ESP8266初始化在系统上电启动时,首先初始化各个硬件模块,并判断ESP-8266模块是否成功初始化成功(即是否成功连接热点),并判断是否成功接入ONENET服务器。通过修改ESP-8266.c文件里的宏定义ESP8266_WIFI_INFO中的AT+CWJAP里面数据,即可将热点改为自己想连接的热点,每次启动ESP-8266即会自动搜索WIFI。#defineESP8266_WIFI_INFO "AT+CWJAP=\"1234\",\"123456789\"\r\n"对于DS1302时钟模块,先将寄存器addr最低为置0,即addr=addr&0xFE,可以实现向DS1302时钟芯片写入时间。写入初始时间数据后,时钟芯片将自己走时。为实现系统掉电重新上电时,不会重新向写入DS1302写入初始时间,有两种实现方式。第一种为第一次烧录程序时,向DS1302芯片写入初始时间后,将程序的向DS1302写入时间操作函数删除,再次烧录一次程序既可。这种操作需要烧录两遍,本设计通过判断charger_add的值,决定是否需要向DS1302芯片写入时间初始值。具体代码如下图:if(ds1302_read_byte(ds1302_charger_add)!=0xa9){ delay_ms(50); //延时LCD_ShowString(5,5+18*0,16,"DS1302failure",0); //显示 ds1302_write_time(); //写入初始值 LCD_Clear(WHITE); //清屏}else{ delay_ms(50); //延时 LCD_ShowString(5,5+18*0,16,"DS1302OK",0); //显示 LCD_Clear(WHITE); //清屏}}通过读取系统当前时间,并转化成秒数。如当前时间为凌晨02:20:00则转换为:2*60*60+20*60=8400,并与定时时间作对比,来判断是否达到定时时间。温度传感器主要就是测量鱼缸中的水温,并在温度高于设定值时,驱动蜂鸣器鸣叫。temperature=DS18B20_Get_Temp(); //读取温度值BEEP=(temperature>(u16)(warn_temp*10.0))?0:1; //温度高于设定值,蜂鸣器响data_flow.temperature=temperature/10.0; //除以10才是真正的温度值Show_DS18B20(temperature); //显示温湿度值浑浊度传感器则是检测水质,通过ADC转换读取到的电压值,并代入标准曲线计算公式中,得出鱼缸中水的浑浊度值,当鱼缸中水的浑浊度过高时直接进行换水操作。adc_reg=Get_Adc_Average(ADC_Channel_4,10); //读取ADC值,PA4接的是水浑浊度传感器ADC_Muddy=(float)adc_reg/4096*1.3;//转换读取到的电压值为实际电压值 TU_value=-865.68*(-0.0192*(temperature/10-25)+ADC_Muddy)+3010.19; if(TU_value<=0){TU_value=0;}if(TU_value>=3000){TU_value=3000;} data_flow.TU=TU_value/100; Show_Muddy(TU_value); //显示ADC值 if((TU_value/100)>warn_TU) //浑浊度超标也要换水 { flag_change_water=1;//换水标志位置1 }LED灯1和2表示高低水位,灯亮表示目前检测到有水。当按下K1按键或浑浊度超标或者APP按下换水按钮或者水位过低,都表示需要进行换水。换水过程中LED灯3常亮,换水操作是先判断是否需要换水,需要换水时开启抽水泵继电器,当判断到低水位没有水时,关闭抽水泵继电器并打开注水泵继电器,开始注水,当检测到高水位有水时,关闭注水泵继电器。流程图如图2.2所示:图2.2换水系统流程图短按按键K2则能进入修改浑浊度上限模式,长按按键K2则进入修改温度上限模式。进入相应修改设置模式后,按下K1,则数值加1,按下K2,则数值减1,按下K3则数值加0.1,按下K4则数值减0.1,K8为确认键,按下则保存当前设定值并退出设置模式。当相应的标志位为1时,则开启相应功能。按键K3、K5、K7分别可以直接控制舵机、充氧泵继电器、灯带,而按键K4、K6进入相应设置模式,能修改相应的定时时间。长按按键K8能进入时间修改模式,方便对时间进行校准。设置模式如表2.1所示,表2.1设置模式操作模式显示短按K2设置浑浊度阈值TUX长按K2设置温度上限值TempX短按K4设置喂食时间WSX短按K6设置充氧时间CYX长按K8设置实时时间清屏,进入修改时间界面智能鱼缸系统出于成本考虑,没有搭建属于自己的服务器,选择使用ONENET物联网平台作为云端服务器。采用MQTT协议与ONENET平台进行通信,协议实现方式如图2.3所示。图2.3MQTT协议实现方式MQTT协议-使用TCP/IP提供网络连接,且具有保活性好、流量低的优点,可以较好的实现对设备的控制管理,非常适用于与设备的远程通信。注册并登录ONENET云平台,通过在文档中心的快速开始,进行产品的创建。产品显示如图2.4所示:图2.4产品显示将产品成功创建好后,将设备的相关数据写入到下面代码中,为与进行平台通信鉴权信息。#definePROID "414550" //产品ID#defineAUTH_INFO "fishtank" //鉴权信息#defineDEVID "704874078" //设备ID如果WiFi模块初始化正常,并当ESP-8266接入ONENET平台访问成功后。会将水温、水质、喂食时间、充氧时间、每次喂食持续时间、

温馨提示

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

最新文档

评论

0/150

提交评论