摘
着生活水科技水断提高现家电器款式功等方面日益求精着动化智化环保化性化等方发展电器断显露出足处电风扇作家电器种样存类似问题
现电风扇现状:部分手动调速手动开启关闭风扇加定时器功单
存隐患足:说常常离开忘记关闭电风扇浪费电说容易引发火灾长时间工作容易损坏电器说前半夜温度高电风扇调风速较高半夜气温降风速会着气温变化容易着凉
会产生隐患根原:缺乏环境检测
果电风扇具环境进行检测功拍手开启关闭风扇房间里面没时动关闭电风扇温度降时动减风速甚关闭风扇样避免述足次设计围绕三点现电风扇进行改进
1总体方案设计功描述
设计AT89C51单片机控制中心通提取热释电红外传感器感应体红外线信息温度传感器DS18B20温度周围发出声音部定时器设定时间长短控制电风扇开关转速变化
功描述:电风扇工作四种状态:红外扫描声控状态温控转速状态动停止状态普通风扇状态
(1)红外扫描声控状态红外扫描时输出高电继电器吸合时拍手启动风扇接着次拍手关闭风扇实现需通接触实物开关实施风扇控制功语音控制电风扇技术目前较前语音识控制技术家电方面应电风扇种较普家电语音识技术相结合实现语音控制种功残疾特意义方便残疾语音识技术应家电方面例:语音控制遥控器语音控制电冰箱语音控制车等等目前应语音控制更发展前景
(2)温控转速状态根室温度动调节风扇转速温度降低转速降低甚关闭风扇样防止昼夜温差感
(3)动停止状态离开房间忘记关闭风扇时风扇延时段时间够动关闭进实现走风扇关节约电功
(4)普通风扇状态想开启声控红外扫描时关掉实现普通风扇功具定时倒计时功显示前温度湿度
2方案较证
21 温度传感器选择
设计中温度传感器选择两种方案:
方案:采热敏电阻作检测温度核心元件通运算放器放热敏电阻会温度变化变化进产生输出电压变化微弱电压变化信号模数转换芯片ADC0809微弱电压变化信号转化数字信号输入单片机处理
方案二:采数字式集成温度传感器DS18B20作温度检测核心元件检测直接输出数字温度信号单片机进行处理
方案采热敏电阻作温度检测元件价格便宜元件易购优点热敏电阻温度细微变化太敏感信号采集放转换程中会产生失真误差热敏电阻RT关系非线性身电阻温度变化存较误差然通定电路修正仅电路变更加复杂体处环境温度变化程中难检测温度变化该方案适合系统
方案二数字式集成温度传感器DS18B20高度集成化降低外接放转化等电路误差数温度误差变检测温度原理热敏电阻检测原理着质温度分辨力极高温度值器件部转化成数字量直接输出简化系统程序设计该温度传感器采先进单总线技术单片机接口变非常简洁抗干扰力强该方案适系统
22 控制核心选择
设计中采STC89C52单片机作控制核心通软件编程方法进行温度检测判断IO口输出控制信号STC89C52单片机工作电压低性高片含8k字节读程序存储器ROM256字节机数存储器RAM兼容标准MCS51指令系统单片价格贵适合设计系统
133 温度显示器件选择
方案:应动态扫描方式采LED阴极数码显示温度
方案二:采LCD液晶显示屏显示温度
方案该方案成低显示温度明确醒目黑暗空间清楚见功耗极低足方采动态扫描显示方式LED数码逐点亮会产生闪烁眼视觉暂留时间20MS数码扫描周期时间时眼会感觉闪烁描频率设置采该方案
方案二液晶显示屏具显示字符优美仅显示数字显示字符甚图形LED数码法拟美观实原考虑系统采方案
3功模块硬件简介实现
31热释电红外传感器模块
311热释电红外线传感器原理简介
体辐射红外线中心波长 9~10um探测元件波长灵敏度 02~20um 范围稳定变传感器顶端开设装滤光镜片窗口滤光片通光波长范围 7~10um正适合体红外辐射探测波长红外线滤光片予吸收样便形成种专门作探测体辐射红外线传感器
实质热释电传感器温度敏感传感器陶瓷氧化物压电晶体元件组成元件两表面做成电极图2示环境温度ΔT变化时热释电效应两电极会产生电荷ΔQ两电极间产生微弱电压ΔV
312热释电红外线传感器应
热释电红外线传感器三端口图22示:接电源接信号端口进入检测区域时信号端口便产生电跳变维持数秒钟利跳变判断否检测区域
S
图22
32温度传感器
321温度传感器DS18B20简介
新型数字温度传感器DS18B20具体积更精度更高适电压更宽采线总线实际应中取良测温效果
DS18B20特性:
(1)独特单线接口方式DS18B20微处理器连接时仅需条口线实现微处理器DS18B20双通讯
(2)测温温范围-55℃~+125℃
(3)高分辨率00625℃
322 DS18B20般操作程
(1)初始化
(2)跳ROM(命令:CCH)
(3)温度变换(命令:44H)
(4)读暂存存储器(命令:BEH)
注:次读取温度面四程
323 DS18B20温度存储方式温度计算
DS18B2012位存储温度高位符号位图温度存储方式:
2^3
2^2
2^1
2^0
2^1
2^2
2^3
2^4
LSBYTE
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
S
S
S
S
S
2^6
2^5
2^4
MSBYTE
Bit15
Bit14
Bit13
Bit12
Bit11
Bit10
Bit9
Bit8
表21 DS18B20温度存储址分配
12位转化12位数存储DS18B20两8特RAM中二进制中前面5位符号位果测温度05位0测数值00625实际温度果温度05位1测数值需取反加100625实际温度
33数码
331阴极八段数码简介
阴极八段数码八段发光二极封装起二极阴极连起原理图图示公端接低电八端口高电点亮相应二极低电相反
34继电器控制电路
341继电器简介
继电器种电子控制器件具控制系统(称输入回路)控制系统(称输出回路)通常应动控制电路中实际较电流控制较电流种动开关电路中起着动调节安全保护转换电路等作
重指标:
1额定工作电压:正常工作时线圈需电压
2直流电阻:继电器中线圈直流电阻
3吸合电流:继电器够产生吸合动作电流
4释放电流:继电器产生释放动作电流
5触点切换电压电流:继电器允许加载电压电流
342继电器驱动电路设计工作原理简介
采晶闸电流控制电流电路控制电路较复杂采继电器控制电路较简单具电气隔离作然响应速度没晶闸快低频情况采继电器控制电路较方便电路图示:
图28
电路工作原理简介:控制端口低电时三极导通继电器吸合常闭触电断开常开触点闭合控制端口高电时三极关断继电器线圈通二极放电断开常闭常开触电复位
4软件设计实现
41整体设计思路介绍
软件设计整体思路:程序部分进行初始化温度读取外部中断0进行红外线感应延时时间重新加载定时器0进行键盘扫描相关操作定时器1进行显示温控速度相关需延时(倒计时等等)操作显示方面进行改善显示值变化进行重新刷新否刷新样提高效率终显示效果(会出现该亮部分亮现象)
42部分流程图:
421程序流程图
程序开始
初始化部资源
读取正确温度
选择速度
启动时间温度显示
拉高五键
启动定时器
读取温度
图 31
422外部中断流程图
外部中断开始
退出外部中断
红外线感应延
时重新初始化
图 32
423定时器0中断流程图
定时器0开始
退出定时器
定时器重新
初始化
键盘消抖
定时状态
N
定时状态
键盘操作
手动状态
键盘操作
动状态
键盘操作
停止状态
键盘操作
Y
Y
Y
Y
手动状态
N
动状态
N
停止状态
图 33
424定时器1中断流程图
定时器1开始
退出定时器
定时器1重新初始化
键盘消抖
定时状态
手动状态
动状态
停止状态
N
N
N
显示时间
果定时时间温度交显示没显示温度
Y
Y
Y
Y
果定时定时倒计时计时结束关闭电风扇
进入定时状态动超定时间动退回手动状态
果定时时间温度交显示没显示温度
显示时间
图 34
结束语
该智风扇够实现红外扫描声控相结合控制风扇开启关闭功红外扫描时输出高电继电器吸合时拍手启动风扇接着次拍手关闭风扇实现需通接触实物开关实施风扇控制功离开房间忘记关闭风扇时风扇延时段时间够动关闭进实现走风扇关节约电功想开启声控红外扫描时关掉实现普通风扇功具定时倒计时功显示前温度湿度
设计现代社会生活生产带诸便利提高生活质量生产效率时节约电生活忙碌夏天结束天工作回家便感受夏日家里凉爽 物美价廉重:电风扇风更温更加适合老童体质较弱二电风扇价格优势价格便宜相省电安装非常简单市场士称家电风扇没着空调普淡出市场两年反出现市场销售复苏态势说智风扇着应前景
附录:程序清单
***********************************************************************
touwenjianh
***********************************************************************
typedef unsigned char byte
typedef unsigned int word
脚配置
ds18b20部分
sbit DQ P3^4
显示部分
sbit DBP2^0
sbit CPP2^1
发光显示部分
sbit LED_dingshiP0^0
sbit LED_shoudong P0^1
sbit LED_zidongP0^2
sbit LED_kuai P0^3
sbit LED_zhong P0^4
sbit LED_man P0^5
键盘定义部分
#define wujian 0x3f
sbit KEY1P1^0 状态转换 启动
sbit KEY2P1^1 +10 1
sbit KEY3P1^2 10 2
sbit KEY4P1^3 3
sbit KEY5P1^4 0 确定
继电器控制部分
sbit JDQ1P2^4 0表示开通1表示关断
sbit JDQ2P2^5
sbit JDQ3P2^6
蜂鸣器部分
sbit callP2^7 低电鸣
***********************************************************************
ds18b20c
***********************************************************************
#include
#includetouwenjianh
*****************************************************
延时子程序
*****************************************************
extern void delay(word useconds)
{
for(useconds>0useconds)
}
*****************************************************
复位子程序
******************************************************
static byte ow_reset(void)
{
byte presence
EA0
DQ 0 pull DQ line low
delay(45) leave it low for 480us 551us
DQ 1 allow line to return high
delay(4) wait for presence 61us
presence DQ get presence signal
delay(40) wait for end of timeslot 491us
EA1
return(presence) presence signal returned
} 0presence 1 no part
*******************************************************
1wire 总线读取字节子程序
********************************************************
static byte read_byte(void)
{
byte i
byte value 0
EA0
for (i8i>0i)
{
value>>1
DQ 0 pull DQ low to start timeslot
DQ 1 then return high
{unsigned char i
for(i0i<2i++)}11us
if(DQ)value|0x80
delay(6) wait for rest of timeslot
}
EA1
return(value)
}
********************************************************
1WIRE 总线写字节
*********************************************************
static void write_byte(char val)
{
byte i
EA0
for (i8 i>0 i) writes byte one bit at a time
{
DQ 0 pull DQ low to start timeslot
DQ0
DQ val&0x01 6US
delay(5) hold value for remainder of timeslot 74us
DQ 1
valval>>1
}
EA1
delay(5)
}
*******************************************************
读取温度
*******************************************************
word Read_Temperature(void)
{
union{
byte c[2]
word x
}temp
ow_reset()
write_byte(0xCC) Skip ROM
write_byte(0xBE) Read Scratch Pad
tempc[1]read_byte()
tempc[0]read_byte()
ow_reset()
write_byte(0xCC) Skip ROM
write_byte(0x44) Start Conversion
return tempx
}
***************************************************************
求解温度
***************************************************************
extern byte Real_Tem(void)
{
word wen
wenRead_Temperature()
return((wen>>4)&0x00ff)
}
***********************************************************************
Mainc
***********************************************************************
#include
#includetouwenjianh
数区
#define time_default 41
byte dingshi_timetime_default存放定时时间''''''
bit flag_dingshi0 0表示没定时
word dingshi_jishu310001000*601分钟
bit flag_dingshi_delay01表示
byte dingshi_delay100
#define hwx_delay_const 3 体感应延时时间
byte hwx_delayhwx_delay_const保存红外线触发延长时间
word hwx_jishu10
byte wendu0存放温度值''''''
#define low_wen 18
#define mid_wen 20
#define hig_wen 24
#define vhi_wen 28
byte time_stor100 存储观时间触发显示
byte wendu_storlow_wen存储观温度触发显示
enum station0{zidongdingshishoudongweak}state
函数说明区
extern byte Real_Tem(void )
extern void delay(word useconds)
void mingjiao(void)
void display(byte inputbit kkl)
void auto_speed(void)
void weak_default(void)
*******************************************************************
程序
*******************************************************************
void main()
{
定时器0键盘扫描
TMOD0x01|TMOD定时器01方式
TH00xd8TL00xf0 定时器0初始化10ms扫描次
定时器1显示
TMOD0x10|TMOD定时器11方式
TH10x15TL10xA0 定时器1初始化60ms中断次
外部中断
TCONTCON|0x01外部中断0降触发
开启部分
IP0X01 两定时器等优先级
IE0x8b 开启定时器01外部中断0中断
while(Real_Tem()85)
auto_speed()
LED_zidong0 刚开始动方式
P1P1|0X7C 拉高五键盘
wendu_stor100 两值启动显示
time_stor100 两值启动显示
TR01 开启定时器0
TR11
while(1)
{
wenduReal_Tem()
}
}
***********************************************************************************
定时器0中断服务子程序
功:进行键盘处理
说明:键盘输入P10P14
***********************************************************************************
void time0(void) interrupt 1
{
byte jianpan
TH00xd8TL00xf0
jianpan P1 & wujian
if(jianpan wujian) 果键盘值提取键盘值
{
delay(500)延时消抖
jianpan P1 & wujian
if(jianpanwujian)goto time_out
switch(state)
{
case dingshi if(KEY10)状态转换时做相应处理
{
stateshoudong
LED_shoudong0
flag_dingshi_delay0dingshi_delay100
time_stor100wendu_stor100触发
mingjiao()
while(KEY10)
}
else if(KEY20)加分
{
if(dingshi_time<90)
{dingshi_time+10}
dingshi_delay100
mingjiao()
while(KEY20)
}
else if(KEY30)减分
{
if(dingshi_time>10)
{dingshi_time10}
dingshi_delay100
mingjiao()
while(KEY30)
}
else if(KEY40)定时否
{
flag_dingshi~flag_dingshi
if(flag_dingshi1){LED_dingshi0}
else {LED_dingshi1dingshi_jishu31000}
dingshi_delay100
mingjiao()
while(KEY40)
}
else if(KEY50)
{
weak_default()
mingjiao()
while(KEY50)
}
break
case shoudongif(KEY10) 状态转换时做相应处理
{
statezidong
auto_speed()
LED_shoudong1LED_zidong0
mingjiao()
while(KEY10)
}
else if(KEY20)快1
{
JDQ21JDQ31JDQ10关断
LED_zhongLED_man1LED_kuai0
mingjiao()
while(KEY20)
}
else if(KEY30)中2
{
JDQ11JDQ31JDQ20关断
LED_kuaiLED_man1LED_zhong0
mingjiao()
while(KEY30)
}
else if(KEY40)慢3
{
JDQ11JDQ21JDQ30关断
LED_zhongLED_kuai1LED_man0
mingjiao()
while(KEY40)
}
else if(KEY50)停4
{
weak_default()
mingjiao()
while(KEY50)
}
break
case zidong if(KEY10) 状态转换时做相应处理
{
statedingshi
LED_zidong1
flag_dingshi_delay1dingshi_delay100开始延时
time_stor100
mingjiao()
while(KEY10)
}
else if(KEY20)快1
{
JDQ21JDQ31JDQ10关断
LED_zhongLED_man1LED_kuai0
stateshoudong
LED_zidong1LED_shoudong0
mingjiao()
while(KEY20)
}
else if(KEY30)中2
{
JDQ11JDQ31JDQ20关断
LED_kuaiLED_man1LED_zhong0
stateshoudong
LED_zidong1LED_shoudong0
mingjiao()
while(KEY30)
}
else if(KEY40)慢3
{
JDQ11JDQ21JDQ30关断
LED_zhongLED_kuai1LED_man0
stateshoudong
LED_zidong1LED_shoudong0
mingjiao()
while(KEY40)
}
else if(KEY50)停4
{
weak_default()
mingjiao()
while(KEY50)
}
break
case weak
if(KEY10)
{
statezidongLED_zidong0
wendu_stor100两值
time_stor100两值
auto_speed()
mingjiao()
while(KEY10)
}
break
}
}
time_out
}
*************************************************************************************
定时器1中断服务子程序
功 定时 0060s
*************************************************************************************
void timer1(void) interrupt 3
{
TH10x15TL10xa0
红外线记时
EX00
if(hwx_jishu1<999){ hwx_jishu1++ }
else
{
hwx_jishu10 hwx_delay
if(hwx_delay0){ weak_default()}
}
EX01
1分钟定时
if(flag_dingshi1)
{
if(dingshi_jishu3>0){dingshi_jishu3}
else
{ dingshi_jishu31000
if(dingshi_time>1){dingshi_time}
else{weak_default()}
}
}
5秒延时
if(flag_dingshi_delay1)
{
if(dingshi_delay>1)dingshi_delay
else
{
stateshoudongflag_dingshi_delay0dingshi_delay100
LED_shoudong0
time_stor100wendu_stor100
mingjiao()
}
}
显示温控
switch(state)
{
case dingshi定时时候显示时间
if(time_stordingshi_time){display(dingshi_time1)time_stordingshi_time}
break
case shoudong
case zidong 否定时交显示温度时间没显示温度
if(flag_dingshi0)
{
static byte jiaoti_jishu20
static bit flag_jiaoti0
if(jiaoti_jishu2<49){jiaoti_jishu2++}
else {flag_jiaoti~flag_jiaotijiaoti_jishu20}
if(flag_jiaoti0)
{
if(time_stordingshi_time)
{display(dingshi_time1)time_stordingshi_timewendu_stor100}显示时间
}
else
{
if(wendu_storwendu)
{display(wendu0)wendu_storwendutime_stor100}显示温度
}
}
else
{
if(wendu_storwendu){display(wendu0)wendu_storwendu} 显示温度
}
温度控制速度
if(statezidong)
{
switch(wendu)
{
case low_wen
JDQ11JDQ21JDQ31
LED_zhongLED_manLED_kuai1ting zhi
break
case mid_wen
JDQ11JDQ21JDQ30
LED_zhongLED_kuai1LED_man0man
break
case hig_wen
JDQ11JDQ31JDQ20
LED_kuaiLED_man1LED_zhong0zhong
break
case vhi_wen
JDQ21JDQ31JDQ10
LED_zhongLED_man1LED_kuai0kuai
}
}
break
case weak 关闭状态显示温度
if(wendu_storwendu){display(wendu0)wendu_storwendu}
break
}
}
*************************************************************************************
外部中断0服务子程序
功:体红外线感应中断
*************************************************************************************
void int0(void) interrupt 0
{
hwx_delayhwx_delay_consthwx_jishu10
}
**************************************************************************************
数码显示子程序
功:数送数码显示
**************************************************************************************
byte code shumaguan[]{0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf60x000x020X00}
void display(byte inputbit kkl)
{
byte ij
byte k
byte shuzhu[4]
shuzhu[1]input10
shuzhu[0]input10
for(i0i<4i++)
{
if(i<2)
{ kshumaguan[ shuzhu[i]]
if(kkl0&&i0){k++}
}
else k0
for(j0j<8j++)
{
CP0
P1(P1&0XFE)|(k&0X01)
k>>1
CP1
}
}
}
**************************************************************************************
蜂鸣器鸣子程序
功:负责鸣
**************************************************************************************
void mingjiao(void)
{
byte i
for(i0i<35i++)
{call0delay(20)call1delay(20)}
}
***********************************************************************************
功:动控制时转速初始化
***********************************************************************************
void auto_speed(void)
{
if(wendu>vhi_wen){JDQ21JDQ31JDQ10 LED_zhongLED_man1LED_kuai0}kuai
else if(wendu>hig_wen){JDQ11JDQ31JDQ20 LED_kuaiLED_man1LED_zhong0}zhong
else if(wendu>mid_wen){JDQ21JDQ11JDQ30 LED_zhongLED_kuai1LED_man0}man
else {JDQ21JDQ31JDQ11 LED_zhongLED_manLED_kuai1}ting
}
************************************************************************************
功:进入睡眠状态前准备
************************************************************************************
void weak_default(void)
{
flag_dingshi0 清楚定时标志
dingshi_timetime_default
dingshi_jishu31000
flag_dingshi_delay0
dingshi_delay100
stateweak 进入睡眠状态
JDQ11JDQ21JDQ31 关闭继电器
LED_shoudongLED_zidongLED_dingshi1
LED_kuaiLED_zhongLED_man1
wendu_stor100
time_stor100
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档