1、项目名称: 基于单片机的变色发光淋浴喷头 基于单片机的变色发光淋浴喷头摘要:本项目利用三基色叠加变色原理,通过51单片机控制PWM调光电路形成不同光色和光强的组合,利用DS18B20传感器实时采集温度控制发光LED的多彩变色。根据光色改变来实时监控环境变化,并创造性的将LED灯与淋浴喷头相结合,通过光与水的自然相溶性,最终达到了淋浴喷头智能、时序变光的效果。关键词: LED;51单片机;DS18B20;PWM调光Luminous shower nozzle based on SCM Xiaomin Abstract: The project will be used three primary
2、 color principle of superposition, through the SCM to control the PWM dimming circuit which can form the combination of different colors and intensity of light, realize the color changing of the LED which can monitor environmental change timely according to the color changing under the control of ti
3、ming temperature, then combine this LED lamp with the shower nozzle creatively,and eventually reach the effect of intelligent, timing light changing of shower nozzle through the solubility of light and the natural water.Keywords: LED;51SCM;DS18B20;PWM circuit 1 引言当前社会是一个高速发展的社会,技术更可谓是日新月异。现在浴缸所使用的喷头
4、一般仅有喷水的功能,随着人们生活水平的提高,人们对浴室的要求也越来越高,所以我们运用单片机技术实现实时温度的采集与发光LED点阵的调压来实现灯光的变色,并将此LED灯与淋浴喷头相结合,营造出光、水的和谐效果,让沐浴者能享受到发光淋浴喷头带来的淋浴美感。这种变色发光淋浴喷头克服现有技术的不足,提供一种使用安全、方便、美观的发光淋浴喷头,该淋浴喷头巧妙地采用了新型的照明技术,解决了水电分离和照明效果问题,大大提高了装置的安全性和可用性。2 2.1装置系统整体的设计本设计的整体思路是:(一)温度和时间控制方面:利用温度传感器DS18B20检测喷头出水温度并通过A/D转换将温度反馈信号送给单片机AT8
5、9C52进行处理,在数码管上显示当前环境温度值,并将检测到的温度信号与预设报警设定值进行比较来控制LED的变化,同时通过单片机的定时功能设定最大洗澡时间上限来控制灯的颜色变化。图2-1系统构成框图(二)LED变色方面:通过51单片机编程来控制PWM调光电路形成不同光色和光强的组合,根据光叠加原理从而达到不同颜色的灯变化出不同亮度的效果。能够变色的LED正是利用红、绿、蓝三基色原理,通过控制红、绿、蓝三种颜色的灰度来混合出需要的颜色,为了达到这个目的可以在灯里再加一块集成电路,通过上述脉宽调制的方式来精确的控制红绿蓝三种颜色的灰度等级,进而实现光色丰富多彩的动态变化效果。 2.2 方案论证2.2
6、.1温度传感器的选择在本设计中,温度传感器的选择有一下两种方案:方案一:使用数字式的DS18B20集成温度传感器作为温度检测的核心元件,由其检测并直接输出数字信号给单片机进行处理。方案二:使用热敏电阻作为检测温度的核心元件,并通过运算放大器放大,由于热敏电阻会随温度变化而变化,进而产生输出电压变化的微弱电压变化信号,再经模数转换芯片ADC0809将微弱电压变化信号转化为数字信号输入单片机处理。对于方案二,采用热敏电阻作为温度检测元件,有价格便宜,元件容易购的优点,但是热敏电阻对温度的细微变化不太敏感,在信号采集、放大以及转换的过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其自
7、身对温度的变化存在较大的误差,虽然可以通过一定电路来修正,但这个不仅将使电路变得更加复杂,而且在人体所处环境温度变化过程中难以检测到小的温度变化。故该方案不适合本系统。对于方案一,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外界放大转换等电路的误差因数,温度误差变的很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转化成数字量直接输出,简化了系统程序的设计,又由于该温度传感器采用先进的单总线技术,与单片机的接口变的非常简洁,抗干扰能力强,因此该方案适用于本系统。2.2.2控制器核心的选择在本设计中采用压AT89C52单片机
8、作为控制核心,通过软件编程的方法进行温度检测和判断,并在其I/O口输出控制信号。AT89C52单片机工作电低,性能高,片内含8k字节的只读程序存储器ROM和256字节的随机数据存储器RAM,它兼容标准的MCS-51指令系统,单片机价格便宜,适合本设计系统。2.2.3变色方案的选择 本设计开始选择比较简单的“流水灯”式变色方案,但后来调试发现灯光变化较为单调,灯光突变明显,而且不够灵活,后来通过查阅资料加入了PWM脉宽调制的方式来调节LED,发现通过控制每个LED灯管接通电源的时间不仅可以调节灯的颜色,而且可以调节灯的亮度变化,为我们颜色的多样选择提供了很大的便利,能够较好的达到我们预期的效果,
9、适合本设计系统。3 3.1温度采集电路设计温度传感是由DALLAS(达拉斯公司)生产的可以把温度信号直接转换成串行数据信号供单片机使用,而且硬件开销很低,抗干扰能力强,精度高。DS18B20信息仅需要单总线通信,使用非常方便。DS18B20其管脚有三个端,其中DQ为数字信号端,GND为电源地,VDD为电源输入端。对DS18B20进行读写编程时,必须保证读写时的时序,否则将无法读取温度结果。主机控制DS18B20完成温度转换必须经过3个步骤:每一次读写前都要对DS18B20进行复位,复位完成后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定操作,温度采集电路如下所示:图3
10、-1温度采集电路3.2 LED变色电路设计LED(LightEmittingDiode),即发光二极管。是一种半导体固体发光器件。它是利用固体半导体芯片作为发光材料。当两端加上正向电压,半导体中的少数截流子和多数截流子发生复合,放出过剩的能量而引起光子发射,直接发出红、橙、黄、绿、青、蓝、紫、白色的光。脉冲宽度调制(PWM),简称脉宽调制, 是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。我们的电路正是通
11、过对单片机编写相应的程序来控制PWM调光电路,进而控制每个LED灯管接通电源的时间来调节灯的颜色形成不同光色和光强的组合,根据三基色原理达到不同颜色的灯变化出不同亮度的效果。LED变色电路如下所示: 图3-2-1 配色方案 图3-2-2 LED变色控制电路3.3 启动与晶振电路设计启动按键可以为整个系统提供启动开关,按下启动按键时,RST端产生高电平,使单片机启动。启动后,其片内各寄存器状态改变,片内RAM内容不变。晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,以便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。晶振通常与锁相环电路
12、配合使用,以提供系统所需的时钟频率。3.4 电路总图电路总图如下所示,主要包括电源接口电路、温度采集电路、LED变色PWM电路、系统启动与晶振电路、彩灯接口电路等。 图3-4 系统电路总图4 4.1 系统工作总流程系统运行的总流程如下图所示。系统上电后自动复位开始初始化系统各个模块。温度传感器开始测温,数码管显示测试数据,单片机开始根据温度参数处理,并控制报警或PWM调光电路,产生不同的控制信号,使LED灯变化出不同的光色。 图4-1 软件总流程图4.2 DS18B20测温程序在进行硬件设计时了解到。DS18B20是单总线器件所以对操作时序控制要求较严格。所以DS18B20驱动的编写应严格按时
13、序来写。首先我们必须对DS18B20芯片进行复位如图16所示,为DS18B20的复位操作。图4-2-1 DS18B20复位时序图根据上面时序图可知:复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当DS18B20接到此复位信号后则会在1560uS后回发一个芯片的存在脉冲。存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个60240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。所以能编写出DS18B20如下测温程序流程图如下: 图4-2-2DS18B20测温流
14、程图4.3 PWM调光程序本系统主控采用的是AT89S52,由于没有带PWM功能,只能通过软件编程模拟产生PWM。本系统使用了单片机T0计时器中断的方式长生PWM。PWM调光程序流程图如下: 图4-3 调光流程图4.4 报警控制程序 根据设计要求。系统检测到DS18B20温度高于40度时系统需要报警提示,即让LED灯变为红色。否则电路继续正常工作。 报警控制程序如下:图4-4报警流程图5 5.1 按键显示部分的调试 起初根据设计编写的系统程序:程序的按键接口采用P3口,经过编译没有出错,但在仿真调试时,数码管显示的只是乱码,没有正确的显示温度,按键功能也不灵的,当按键按下时,显示并不变化。经过
15、查找分析,发现按键扫描程序没有按键消抖部分,按键在按下与松手时,都会有一定程序的抖动,从而可能使单片机做出错误的判断,导致按键条件预设温度时失灵,甚至根本不工作。因此必须在按键扫描程序中加入消抖部分,即在按键按下与松手时加入延时判断,以检测按键是否真的按下或已完全松手。在按键加入了消抖程序,数码管能够正常的显示,按键也能正常的工作,达到了较好的效果。 5.2 传感器DS18B20温度采集部分调试由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的方便,体积小、低功耗、高精度为控制电机的精度和稳定提供了可能。软件设计采用了P2.7口为数字温度输入口,但是需要对输入的
16、数字信号进行处理后才能显示,从而多了温度转换程序。通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。在温度转换程序中,为了能够正确的检测到并显示温控的小数位,程序中把检测到的温度与10 相乘后,再按一个三位的整数来处理。如果把39.7变成397来处理,这样为程序的编写带来了方便。6总结本次设计的系统从硬件设计和软件编写到Altium Designer Winter 09的仿真,再到用单片机开发板的调试,直到最后的电路板焊接,每一个过程都使用到大学里学到的知识,整个过程把大学里的知识系统的串在了一起。本系统以单片机为控制核心,以家用淋浴喷头为装置环境
17、,通过温度传感器DS18B20来检测环境温度,实现了根据环境温度变化调节LED的颜色,在一定范围内能实现喷头的发光变色效果,基本完成了基于单片机的变色发光淋浴喷头的设计。参考文献: 李学龙.使用单片机控制的智能遥控风扇J.电子电路制作,2003,9:13-15. 郭天祥.新概念51单片机C语言教程M.电子工业出版社,2009:34-36.胡全.51单片机的数码管动态显示技术J.信息技术,2009,13:25-26. 王会明.智能电风扇控制器的研制J.电子与自动化,1998,5(4):25-26. 孙号.Proteus软件在设计电子电路中的应用J.仪表技术,2009,8:74-75.当方微型计算
18、机控制技术M中国水利水电出版社,2001,6:56-58.胡汉才单片机原理及其借口技术M清华大学出版社,1996.3:78-80.赵新民智能仪器设计基础M哈尔滨工业大学出版社,1999.4:38-41.潘新,民王,燕芳微型计算机控制技术M电子工业出版社,2003:72-74.方佩敏.LED变色灯的剖析 M. 电子世界.2006年第11期:11-13闫朝华,潘灯海.半导体制冷应用在电冰箱上的研究J.家电科技.2002(12): 64-66.汪守栋.一种基于AT89C2051单片机的温控变色灯J.科技信息.2010(33):45-47附录:系统程序#include#define uchar uns
19、igned char#define uint unsigned intuchar code table2=0xfb,0xef,0xab,0xbb,0xaf,0xbf,0xeb; / 红 绿 淡白 紫 淡清 蓝 黄uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;sbit K1=P34; / 开启sbit DS=P22;
20、 /define interfacesbit dula=P26;int temp; sbit wela=P27;uchar num=0,num1=0,flag=0,flag1;uint CYCLE=600,PWM_LOW=0,temp;/定义周期并赋值void delay(uint count) /delay uint i; while(count) i=200; while(i0) i-; count-; void Delay_1ms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=122;j0;j-);void Delay1(uint t) while(-t
21、);void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i0)i-; DS=1; i=4; while(i0)i-;bit tmpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat);uchar tmpread(void) /read a byte date uchar i,j,dat; dat=0;
22、for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 DS=0; i+;i+; DS=1; i=8;while(i0)i-; else DS=0; /write 0 i=8;while(i0)i-; DS=1; i+;i+; void tmpchange(void
23、) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus tmpwritebyte(0x44); / initiates a single temperature conversionuint tmp() /get the temperature float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); tem
24、p=b; temp=8; /two byte compose a int variable temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp;void display1(uint temp)/显示程序 uchar A1,A2,A2t,A3; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=tableA1;/显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0=tab
25、le1A2;/显示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=tableA3;/显示个位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1);void key()if(K1=0) Delay_1ms(5);if(K1=0) flag=1; elseflag=0;void display1()TR0=1; P2=0xff; Delay1(6000); /特意加延时,可以看到熄灭的过程 for(PWM_LOW=1;PWM_LOW0;PWM_LOW-) /与逐渐变亮相
26、反的过程 P2=table2num1; Delay1(PWM_LOW); P2=0xff; Delay1(CYCLE-PWM_LOW); void main()TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;P3=0xff;uchar a; do tmpchange(); for(a=10;a0;a-) display(tmp(); if(temp=370) /当温度超过37度,led显示为红色。P2=0xfe;else key(); if(flag=1) while(flag=1) P2=0xff;display1(); while(1);void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;num+;if(num=20)num=0;num1+;if(num1=7)num1=0;