1.功能介绍
智能台灯可分成自动和手动两种模式。在自动模式下,台灯能根据环境光的亮暗与人是否被台灯所检测到(人是否在)来自动开启台灯。当人被微机检测到,环境光又达到某个程度的时候(可以设定与调节),台灯就会开启。如果环境光没有达到这个程度,台灯不会开启。当人没有被微机检测到,无论多暗,台灯也不会开。 手动模式是为了不习惯使用自动模式的人或是台灯中的微机出故障等紧急情况时用的。在手动模式下,智能台灯和普通台灯是一样使用的。
主要功能 :
(1)亮度不够且有人靠近时台灯自动亮;
(2)靠的太近会提醒坐姿不正(蜂鸣器)
(3)附近无人时台灯自动熄灭(30秒) 时间可调
(4)根据环境亮度调节等亮度
(5)可手动调节台灯亮度
(6)设定学习时间
2.硬件设计
(1)总体硬件设计
整体硬件电路是以AT89C52单片机为控制核心,主要由热释电红外传感器,光敏电阻信号处理电路,提醒电路,灯光控制电路,故障报警电路等组成。单片机可将热释电红外传感器检测到的人体辐射红外信号及光强信号的模拟量转换成数字量。
(2)LED驱动电路
LED驱动电路采用3路串联、每路4颗的LED灯,使用三极管S8050来控制LED灯的亮灭。在软件上采用PWM控制方式,以此达到控制LED灯的亮度。
(3)光敏感应电路
对于台灯亮度的感应采用了光敏电阻,利用光敏电阻的阻值随着亮度的改变而改变,电阻值的改变会改变光敏电阻上的电压值。这时,通过AD转换器采集电压,转换成相应的光强数据传输给单片机。
(4)人体感应电路
人体感应电路采用了HC-SR501基于红外线技术的数字传感器。当传感器感应到人体时,传感器IO引脚输出高电平;当无人体时,传感器输出低电平。
(5)红外接近传感器
红外接近传感器采用了E18- D80NK数字型传感器,检测到目标是低电平输出,正常状态是高电平输出;此传感器的功能为检测用户是否坐于台灯前。
3.软件设计
(1)数码管驱动程序
- #define DUAN P0 //数码管段位
- sbit W0=P2^7; //数码管位端
- sbit W1=P2^6;
- sbit W2=P2^5;
- sbit W3=P2^4;
- /**********************************************************************
- * 名称 : display();
- * 功能 : 数码管显示
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void display()
- {
- if(flag_set==0) //正常模式下
- {
- DUAN=tab[min/10]; //送入段码,秒数高位
- W0=0; //打开位地址
- delay(1); //小延时
- W0=1; //关闭位地址
- DUAN=tab_dian[min%10]; //送入段码,秒数低位
- W1=0;
- delay(1);
- W1=1;
- DUAN=tab[sec/10]; //送入段码,分钟数高位
- W2=0;
- delay(1);
- W2=1;
- DUAN=tab[sec%10]; //送入段码,分钟数高位
- W3=0;
- delay(1);
- W3=1;
- }
- else if(flag_set==1) //设置模式下闪烁相应位
- {
- if(ss==1) //闪烁标志 ss=1 正常显示
- {
- DUAN=~tab[min/10];
- W0=0;
- delay(1);
- W0=1;
- DUAN=~tab_dian[min%10];
- W1=0;
- delay(1);
- W1=1;
- }
- else //闪烁标志 ss=0 熄灭相应位 达到闪烁效果 ss在定时器里500ms取反一次
- {
- DUAN=~tab[10]; //
- W0=0;
- delay(1);
- W0=1;
- DUAN=~tab_dian[10];
- W1=0;
- delay(1);
- W1=1;
- }
- DUAN=~tab[sec/10];
- W2=0;
- delay(1);
- W2=1;
- DUAN=~tab[sec%10];
- W3=0;
- delay(1);
- W3=1;
- }
- else
- {
- DUAN=~tab[min/10];
- W0=0;
- delay(1);
- W0=1;
- DUAN=~tab_dian[min%10];
- W1=0;
- delay(1);
- W1=1;
- if(ss==1)
- {
- DUAN=~tab[sec/10];
- W2=0;
- delay(1);
- W2=1;
- DUAN=~tab[sec%10];
- W3=0;
- delay(1);
- W3=1;
- }
- else
- {
- DUAN=~tab[10];
- W2=0;
- delay(1);
- W2=1;
- DUAN=~tab[10];
- W3=0;
- delay(1);
- W3=1;
- }
- }
- }
复制代码
(2)按键驱动程序
(3)ADC控制程序
- #define Data_ADC0809 P1
- //ADC0809 控制引脚定义
- sbit ST=P3^1;
- sbit EOC=P3^2;
- sbit OE=P3^3;
- extern uchar ADC0809(); //函数声明
- /**********************************************************************
- * 名称 : ADC0809();
- * 功能 : ADC0809把模拟量转化为八位数字量
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- uchar ADC0809()
- {
- uchar temp_=0x00;
- OE=0; //初始化高阻态 转化初始化 低电平,禁止输出允许
- ST=0;
- ST=1; //上升沿 清零
- ST=0; //下降沿 开始转换
- while(EOC==0); //外部中断 等待AD转换结束 EOC为1时AD转换结束跳出
- OE=1; //高电平,输出允许
- temp_=Data_ADC0809; //读取转换的AD值
- OE=0; //低电平,禁止输出允许
- return temp_; //返回ADC读取值
- }
复制代码
(4)LED亮度控制程序
(5)主函数
- /**********************************************************************
- * 名称 : main();
- * 功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void main()
- {
- init(); //调用初始化函数
- flag_auto=1; //初始化手动模式
- rsd=0; //热释电引脚置低(有信号时时高电平)
- delay(500); //延时500ms后开机
- while(1) //大循环
- {
- KEY(); //调用按键函数
- display(); //调用显示函数
- }
- }
复制代码 源码+AD电路图资料51hei下载地址:
智能台灯.rar
(244.17 KB, 下载次数: 529)
|