智能健康饮水机控制系统的研究_第1页
智能健康饮水机控制系统的研究_第2页
智能健康饮水机控制系统的研究_第3页
智能健康饮水机控制系统的研究_第4页
智能健康饮水机控制系统的研究_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

基于ARM的智能健康饮水机控制系统的研究【摘要】饮水机是日常生活中必不可少的电器设备,人们也在不断地追求饮用水的健康,该论文详细阐述了基于ARM的智能健康饮水机系统的硬件组成、软件设计以及系统调试。系统以Open103Z开发板为控制核心,使用数字温度传感器DS18B20构成温度采集电路,对在普通温热饮水机进行加热检测并通过TAD-K220BD人体感应开关控制饮水机工作,再由PC817光电耦合器检测其加热次数并记录空闲时间,以及通过按键模拟出饮水机的一些状态,最后实现LCD液晶屏显示运行天数、空闲时间、饮水次数、工作状态、健康指导等信息。【关键词】:开发板;温度传感器;人体感应开关;光电耦合;Abstract:WaterdispenserisanecessaryElectricalapplianceindailylife,peoplehavebeenpursuinghealthydrinkingwater.ThepaperdetailedexpoundstheintelligenthealthywatermachinesystembasedonARMhardwarecomposition,softwaredesignandsystemdebugging.SystemtoOPEN103Zdevelopmentboardasthecontrolcore,UsingdigitaltemperaturesensorDS18B20temperatureacquisitioncircuit,heatedinordinarywarmwatermachinefortestingandthroughtheTAD-K220BDhumanbodyinductionswitchcontrolwatermachinework,andphotoelectriccouplertodetecttheheatingtimeandrecordthefreetimebyPC817,ThenthroughthebuttonsSimulatedsomeofthestateofwaterdispenser,finallythroughtheLCDscreendisplayeddaysrunning,freetime,frequencyofdrinkingwater,workingstatus,healthguidance,etc.Keywords:OPEN103Z;DS18B20;TAD-K220BD;PC817;目录前言.2第1章设计方案.3第1.1节设计分析.3第1.2节设计背景.3第1.3节设计方案.3第2章系统分析.4第2.1节硬件分析.4第2.2节软件分析.11第3章系统设计.14第3.1节系统设计.14第3.2节健康饮水机控制界面的设计.16第4章系统测试.18第4.1节系统测试.18第4.2节测试结果.18第4.3节测试结果分析.19结论.20参考文献.21致谢.22附录.23附录1:实物照片说明.23附录2:部分源程序.25第0页前言作为现代先进科学技术方面的核心领域,电气自动化控制系统引领现代化工业的前进方向,建立在先进科学技术上的电气自动化工程对于社会和企业的全面发展都起到了不可估量的作用。电气自动化控制系统能够帮助工业企业最大程度地减少劳动力成本和强度,提高检测的精确度,增强传输信息的有效性和实时性,确保了企业生产活动的顺利展开1。自动控制以及智能化的发展越来越切近人们的生活,以机器化的生产方式已经逐步代替人手工操作。然而在追求智能化的同时,环保、健康也不能被忽视,所以本次研究要求以智能、健康为核心研究的主题,研究出一种新型的智能健康饮水机控制系统。随着社会经济的不断发展,我国的水源污染日趋严重,自来水厂的净水工艺、输配水设备和广大市民的饮用水要求之间的矛盾已成为现今社会一大问题2。人们对饮水机的选择已经不是停留在过去的眼光,而是高标准,不仅使用而且要求外形脱俗,而在功能、环保、安全上,也有了更高的要求。因此,智能健康饮水机控制系统的研究已是饮水机发展的必然趋势。本论文是基于ARM为核心控制的智能健康饮水机控制系统的研究,可在教室、图书馆、宿舍和家里等投入使用,这样会大大改善饮用水质量,必定会深受人们的喜欢。设计通过LCD液晶屏将饮水机当前的工作状态显示出来,如:使用天数、空闲时间、加温次数、饮用次数、状态显示、温度显示以及健康指示等,能使用户随时掌握饮水机水质情况,方便用户进行操作。论文通过设计方案、系统分析、系统设计、系统测试4个部分阐述智能健康饮水机控制系统,设计方案主要讲述了课题的要求已经方案的选择。系统分析分为硬件部分和软件部分,其硬件部分主要讲述了人体感应开关、光电耦合器、ARM的外设连接等,软件部分主要讲述了ARM的使用。系统设计讲述了程序的设计以及系统流程。系统测试讲述了智能健康饮水机控制系统的硬件测试和软件测试,测试是否能达到课题任务的要求。最后对测试结果进行分析。第1页第1章设计方案第1.1节设计分析根据设计的要求,主要任务是能对饮水机各种工作状态下进行检测和控制。利用温度传感器检测实时温度、通过人体感应开关控制并为饮水机提供电源、利用光电耦合器检测加温次数并记录饮水机空闲时间、由按键模拟出饮水机的某些工作状态,如饮水次数以及工作状态等。最后实现LCD液晶屏显示信息并对饮水机工作状态并做出健康指示。设计中采用STM32F103ZET6芯片为核心来实现控制,外接温度测量模块、键盘显示模块、人体感应模块以及光电耦合模块等几个部分。要实现系统的设计要用到的知识点有单片机的原理和应用,模拟电路的设计,温度传感器的原理和应用,人体感应开关的原理和应用,光电耦合器的原理和应用,及键盘和显示电路的设计等。第1.2节设计背景饮水机顾名思义就是解决人们饮水问题而诞生的家用产品。因提升人们的饮水质量和生活品位而成为时尚备受国人喜爱。最初的饮水机是人们饮用桶装水的家用产品,分为立式和台式两大类。为了饮水机满足国人的饮水习惯,饮水机的功能又实现了加热与制冷效果,此阶段的桶装纯净水为饮水机的诞生与发展起到关键作用。中国饮水机行业在发展的同时,一些问题也日益显露出来。特别是饮水机行业规范标准不健全,小品牌充斥市场,“二次污染”问题严重,质量安全问题和健康问题严重等制约了行业的进一步发展和品质的提高。因此,抓住健康、环保、安全,加大科技创新,提高技术含量是饮水机新的发展形势。因此本次研究的意义也由此突显。第1.3节设计方案系统以Open103Z开发板为控制核心,使用单线数字温度传感器DS18B20构成前置信号采集电路,对在普通温热饮水机进行加热检测并通过TAD-K220BD人体感应开关控制饮水机工作,再由PC817光电耦合器检测其加热次数并记录饮水机的空闲时间,按键模拟出饮水机的工作状态,最后利用实现LCD液晶屏显示运行天数、空闲时间、加温次数、饮水次数、工作状态、温度、健康指导等信息。第2页第2章系统分析第2.1节硬件分析2.1.1.整体硬件电路智能健康饮水机的硬件电路主要由供电电路,测温电路,人机显示电路与光电耦合电路等。如图2-1所示:220V交流电饮水机测温电路光电耦合电路ARM人机显示电路按键处理图2-1整体硬件电路2.1.2.供电电路供电电路一共分为两个供电电路:一是220V交流供电,为AUX/奥克斯601#型饮水机提供电源,此款饮水机带有静音设计、防干扰保护、节能省电、不锈钢内胆、坚固耐用、全过程空气过滤,制热功率420W。如图2-2所示:图2-2AUX/奥克斯601#型饮水机为了能更好的检测饮水机的工作状态,了解饮水机的加温工作方式,对饮水机的内部元器件的连接进行了分析,饮水机内部原理图如图2-3所示:第3页丝丝丝丝丝丝T1S1丝丝丝丝丝丝丝丝56KR1丝丝56KR2丝丝丝丝LED丝丝丝丝LED丝丝丝丝LED丝丝D1丝丝D2D3T2丝丝丝丝丝丝丝丝丝丝丝丝丝丝丝图2-3饮水机内部原理图当接通电源后,开关S1闭合,绿色电源指示灯点亮。温控开关T1是常闭开关,起到保护电路的作用,当温度过高或者饮水机水箱水位不满水位上限值时,温控开关T1会自动断开。开关S1闭合后,饮水机内部温度传感器开始检测,当检测到需要加温时,闭合温控开关T2,加热器开始工作,红色加温指示灯点亮。当温度达到一定值时,温度开关T2断开,饮水机处于保温状态。黄色保温指示灯点亮,红色加温指示灯熄灭。二是+5V直流电源,为系统控制核心ARM开发板Open103z开发板提供电源,并为开发板外围设备提供电源。本次设计为了调试方便,+5V电源使用了USB电源适配器插头提供电源,实际产品中应通过饮水机220V交流电内部转换而来。2.1.3.人体感应模块为了使智能健康饮水机能做到有人时工作,人离开时断电,本设计在220V供电电路中加入了一个人体感应开关,人体感应开关主要是由一种高热电系数的材料,如锆钛酸铅系陶瓷、钽酸锂、硫酸三甘钛等制成尺寸为2*lmm的探测元件。在每个探测器内装入一个或两个探测元件,并将两个探测元件以反极性串联,以抑制由于自身温度升高而产生的干扰。由探测元件将探测并接收到的红外辐射转变成微弱的电压信号,经装在探头内的场效应管放大后向外输出。为了提高探测器的探测灵敏度以增大探测距离,一般在探测器的前方装设一个菲涅尔透镜,该透镜用透明塑料制成,将透镜的上、下两部分各分成若干等份,制成一种具有特殊光学系统的透镜,它和放大电路相配合,可将信号放大70分贝以上,这样就可以测出1020米距离。在防干扰方面要做到以下三点3:(1)防止小动物干扰:探测器安装在推荐的使用高度,对探测范围内地面上的小动物,一般不产生报警;(2)抗电磁干扰:探测器的抗电磁波干扰性能符合GB10408中要求,一般手机电磁、微波炉、取暖器等干扰不会引起误报;(3)抗灯光干扰:探测器在正常灵敏度的范围内,受3米外H4卤素灯透过玻璃照第4页射,不产生报警。本设计选用型号为TAD-K220BD人体感应开关,在实际连接电路中,第一次使用TAD-K220BD人体感应开关时,需要接通电源几分钟以后方可使用,如图2-4所示:图2-4TAD-K220BD人体感应开关它是基于红外线技术的自动控制产品,当有人进入开关感应范围时,传感器探测到人体红外光谱的变化,开关自动接通负载,人离开时断电,即方便安全又节能。此款人体感应开关具有以下特点:(1)双极性设计:自由安装(三线接驳),且负载能力阻性负载1000W、感应负载500W;(2)全自动感应:人来开关立即接通,人离开后延时自动关闭;(3)继电器开关:接通负载力强,继电器开关使用寿命10万次;(4)自动测光:光线强时不感应,带感光调节(也可调节在任意光线下感应或全天侯感应);(5)自动随机延时(可连续延时方式):人在感应范围活动,开关始终接通,直到人离开后才自动关闭;(6)延时时间可调:16秒-350秒;(7)超低功耗:开关自身功耗#include#includepc817.hintmain(void)/=定义局部变量uint16_ta0;chara2A=0,a2B=0;chara4A=0,a4B=0;uint16_ta3;intn;uint8_tkk;charcc50;u8i;u8*p,id8;/-与DS18B20相关的变量Barb_days,b_idle;/-定义运行天数和空闲时间指示条变量Barb_heat,b_drink;/-定义加温和饮水指示条变量Winw_work,w_temp;/-定义工作和温度窗口变量/=初始化/-变量初始化/-运行天数指示条变量-初始化10,30b_days.dir=Right;/向右增长b_days.x0=10+90;/窗口原点,左上角x坐标b_days.y0=30;/窗口原点,左上角y坐标b_days.width=200;/窗口宽度b_days.high=16;/窗口高度b_days.x1=b_days.x0+b_days.width;/窗口对角点,右下角x坐标b_days.y1=b_days.y0+b_days.high;/窗口对角点,右下角y坐标b_days.bk=Black;/背景色Background;b_days.fg=Green;/前景色Foreground;b_days.fg2=Red;/前景色2Foreground;第25页b_days.edge=Yellow;/边框色b_days.lim_high=par.days;/上限系数;b_days.lim_low=0;/下限系数;/-空闲指示条变量-初始化b_idle.dir=Right;/向右增长b_idle.x0=10+90;/窗口原点,左上角x坐标b_idle.y0=50;/窗口原点,左上角y坐标b_idle.width=200;/窗口宽度b_idle.high=16;/窗口高度b_idle.x1=b_idle.x0+b_idle.width;/窗口对角点,右下角x坐标b_idle.y1=b_idle.y0+b_idle.high;/窗口对角点,右下角y坐标b_idle.bk=Black;/背景色Background;b_idle.fg=Green;/前景色Foreground;b_idle.fg2=Red;/前景色2Foreground;b_idle.edge=Yellow;/边框色b_idle.lim_high=par.idle;/上限系数;b_idle.lim_low=0;/下限系数;/-加温指示条变量-初始化10,30b_heat.dir=Right;/向右增长b_heat.x0=10+90;/窗口原点,左上角x坐标b_heat.y0=70;/窗口原点,左上角y坐标b_heat.width=200;/窗口宽度b_heat.high=16;/窗口高度b_heat.x1=b_heat.x0+b_heat.width;/窗口对角点,右下角x坐标b_heat.y1=b_heat.y0+b_heat.high;/窗口对角点,右下角y坐标b_heat.bk=Black;/背景色Background;b_heat.fg=Green;/前景色Foreground;b_heat.fg2=Red;/前景色2Foreground;b_heat.edge=Yellow;/边框色b_heat.lim_high=par.heat;/上限系数;b_heat.lim_low=0;/下限系数;/-饮水指示条变量-初始化b_drink.dir=Right;/向右增长b_drink.x0=10+90;/窗口原点,左上角x坐标b_drink.y0=90;/窗口原点,左上角y坐标b_drink.width=200;/窗口宽度b_drink.high=16;/窗口高度b_drink.x1=b_drink.x0+b_drink.width;/窗口对角点,右下角x坐标b_drink.y1=b_drink.y0+b_drink.high;/窗口对角点,右下角y坐标b_drink.bk=Black;/背景色Background;b_drink.fg=Green;/前景色Foreground;b_drink.fg2=Red;/前景色2Foreground;b_drink.edge=Yellow;/边框色b_drink.lim_high=par.drink;/上限系数;b_drink.lim_low=0;/下限系数;第26页/-工作和温度窗口变量-初始化w_work.dir=Right;w_work.x0=10+90;/窗口原点,左上角x坐标w_work.y0=120;/窗口原点,左上角y坐标w_work.width=200;/窗口宽度w_work.high=32;/窗口高度w_work.x1=w_work.x0+w_work.width;/窗口对角点,右下角x坐标w_work.y1=w_work.y0+w_work.high;/窗口对角点,右下角y坐标w_work.bk=Black;/背景色Background;w_work.fg=Green;/前景色Foreground;w_work.pen1=Green;/前景色Foreground;w_work.edge=Yellow;/边框色w_work.lim_pen1_high=par.work;/画笔1上限系数;w_work.lim_pen1_low=0;/画笔1下限系数;w_work.pen1=Red;/画笔1颜色;/-温度窗口变量-初始化w_temp.dir=Right;w_temp.x0=10+90;/窗口原点,左上角x坐标w_temp.y0=160;/窗口原点,左上角y坐标w_temp.width=200;/窗口宽度w_temp.high=50;/窗口高度w_temp.x1=w_temp.x0+w_temp.width;/窗口对角点,右下角x坐标w_temp.y1=w_temp.y0+w_temp.high;/窗口对角点,右下角y坐标w_temp.bk=Black;/背景色Background;w_temp.fg=Magenta;/前景色Foreground;w_temp.edge=Yellow;/边框色w_temp.lim_pen1_high=par.temp_h+10;/画笔1上限系数;w_temp.lim_pen1_low=par.temp_l-10;/画笔1下限系数;w_temp.pen1=Green;/画笔2颜色/-时间变量-初始化t_time.tm_year=2013;/初始化时间t_time.tm_mon=12;t_time.tm_wday=0;t_time.tm_mday=9;t_time.tm_hour=0;t_time.tm_min=0;t_time.tm_sec=0;t_time.tm_isdst=0;t_time.tm_yday=365-30;/=部件初始化Init_Dispenser();/-初始化饮水机参数和状态变量LCD_Initializtion();/-初始化LCDLCD_Clear(Blue);/-LCD清屏Joy_Key_GPIO_Init();/-初始化Joy_KeyLED_GPIO_Init();/-初始化LED第27页USART_Configuration();/-初始化USARTADC_Configuration();/-初始化ADC和DMARTC_Init(t_time);/-初始化RTCDelay_Init();/-初始化延时程序Onewire_Enable_GPIO_Port();/-初始化Onewirep=readID();/-读DS18B20的IDwhile(*p)idi=*p;p+;i+;t_time=Time_GetCalendarTime();/-获取RTC时间t_time1=t_time;USART_Transmitter_Str(tt);/-串口发送Logo原始数据PC817_GPIO_Init();/=显示屏幕/-显示标签GUI_String(sc.Logo.c.x,sc.Logo.c.y,sc.Logo.lab,Yellow,Blue);/Logo标签GUI_String(sc.L_days.c.x,sc.L_days.c.y,sc.L_days.lab,Yellow,Blue);/累计运行天数标签GUI_String(sc.L_heat.c.x,sc.L_heat.c.y,sc.L_heat.lab,Yellow,Blue);/空闲时间标签GUI_String(sc.L_work.c.x,sc.L_work.c.y,sc.L_work.lab,Yellow,Blue);/加温次数标签GUI_String(sc.L_temp.c.x,sc.L_temp.c.y,sc.L_temp.lab,Yellow,Blue);/近期饮用时间标签GUI_String(sc.L_drink.c.x,sc.L_drink.c.y,sc.L_drink.lab,Yellow,Blue);/工作状态标签GUI_String(sc.L_idle.c.x,sc.L_idle.c.y,sc.L_idle.lab,Yellow,Blue);/温度标签GUI_String(sc.L_health.c.x,sc.L_health.c.y,sc.L_health.lab,Yellow,Blue);/健康指示标签/-显示指示条LCD_BarDisp(b_days);LCD_BarDisp(b_idle);LCD_BarDisp(b_heat);LCD_BarDisp(b_drink);/-显示窗口LCD_WindowsDisp(w_work);/-显示工作窗口LCD_WindowsDisp(w_temp);/-显示温度窗口/=主循环while(1)/-读取串口if(USART_Receiver_Str(tt)cmd.nu=sscanf(tt,%s%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f,cmd.cmd,&cmd.p0,&cmd.p1,&cmd.p2,&cmd.p3,&cmd.p4,&cmd.p5,&cmd.p第28页6,&cmd.p7,&cmd.p8,&cmd.p9,&cmd.p10,&cmd.p11,&cmd.p12,&cmd.p13,&cmd.p14,i=0;n=cmd.nu;if(n)sprintf(tt,%s,cmd.cmd);while(-n)sprintf(tt,%s%d,tt,(int)cmd.pi+);USART_Transmitter_Str(tt);USART_Transmitter_Str(r);LCD_DrawSquare(10,210,310,230,Black);GUI_Text(10,210,(uint8_t*)tt,White,Black);/-检测外部数据a3=(uint16_t)readTemp();/DS18B20时a0=a3+25;IO.In_temp0=IO.In_temp;/-比较前后温度,用于判断加温IO.In_temp=(uint16_t)a0;/-检测键盘kk=Read_Joy_Key_State();if(NULL_KEY!=kk)/按键指示switch(kk)caseUSER_KEY:GUI_Text(300,220,US,White,Black);L.LED1=L.LED2=L.LED3=L.LED4=1;LED_lights(L);IO.In_replace=1;/-模拟:换水break;caseJOY_A_KEY:GUI_Text(300,220,_A,White,Black);LED_lights(L);IO.Out_day=1;/-模拟:饮水机使用天数break;caseJOY_B_KEY:GUI_Text(300,220,_B,White,Black);LED_lights(L);IO.Out_heat=1;/-模拟:模拟加温次数break;caseJOY_D_KEY:GUI_Text(300,220,_D,White,Black);LED_lights(L);第29页IO.In_move=1;/-模拟:发现有人移动,进行使用饮水机break;caseJOY_CTR_KEY:GUI_Text(300,220,CT,White,Black);par.work=2;/-模拟:状态break;default:GUI_Text(180,180,_,White,Black);if(IO.In_replace)/模拟换水,所有的都置零st.days=0;st.idle=0;st.heat=0;st.drink=0;IO.In_replace=0;if(flag_update)/-有刷新标志,则显示。flag_update=0;if(a0=4)IO.Out_work=0;/读取PC817a2B=a2A;a2A=Read_PC817_State();a4B=a4A;a4A=Read_PC817_State1();if(a2A=1&a2B=0&a4A=0&a4B=0)/a2为PA0端口,a4为PA2端口IO.Out_heat=1;/判断饮水机是否处于加热状态,保温状态不算加温if(a4A=1|a2A=1)/当饮水机工作时空闲时间清零st.idle=0;/按键A模拟运行天数if(IO.Out_day=1)第30页st.days+;IO.Out_day=0;L.LED1=L.LED2=L.LED3=L.LED4=0;L.LED2=1;/按键B模拟加温if(IO.Out_heat=1)st.heat+;IO.Out_heat=0;L.LED1=L.LED2=L.LED3=L.LED4=0;L.LED3=1;/按键D模拟饮水if(IO.In_move)st.drink+;IO.In_move=0;L.LED1=L.LED2=L.LED3=L.LED4=0;L.LED4=1;/按键CTR的模拟工作状态if(par.work=2)IO.Out_work+;par.work=0;/健康指示if(st.heat=0|st.drink=0)st.health=0;if(st.heat0|st.drink0)st.health=1;if(st.heat10|st.drink10)/当加热次数大于20次或者饮水次数超过60次(调试时设置为10和20)st.health=2;if(st.days5|st.idle1440)/运行天数大于15天或者空闲时间大于24小时st.health=3;/-显示变量/累计运行天数标签sprintf(cc,%02d,st.days);GUI_String(sc.L_days.c.x+40,sc.L_days.c.y,(uint8_t*)cc,Green,Black);/空闲时间标签sprintf(cc,%02d:%02d,st.idle/60,st.idle%60);第31页GUI_String(sc.L_idle.c.x+40,sc.L_idle.c.y,(uint8_t*)cc,Green,Black);/加温次数标签sprintf(cc,%04d,st.heat);GUI_String(sc.L_heat.c.x+40,sc.L_heat.c.y,(uint8_t*)cc,Green,Black);/近期饮用时间标签sprintf(cc,%02d,st.drink);GUI_String(sc.L_drink.c.x+40,sc.L_drink.c.y,(uint8_t*)cc,Green,Black);/工作状态标签sprintf(cc,%04d,IO.Out_work);GUI_String(sc.L_work.c.x+40,sc.L_work.c.y,(uint8_t*)cc,Green,Black);/温度标签sprintf(cc,%02d,IO.In_temp);GUI_String(sc.L_temp.c.x+40,sc.L_temp.c.y,(uint8_t*)cc,Green,Black);/健康指示标签if(st.health=4)st.health=0;sprintf(cc,%s,instructst.health);GUI_String(sc.L_health.c.x+80,sc.L_health.c.y,(uint8_t*)cc,Green,Black);/-显示指示条LCD_BarIndicate2(b_days,s

温馨提示

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

评论

0/150

提交评论