福州大学本科生科研训练计划立项项目SRTP中期检查情.docx
《福州大学本科生科研训练计划立项项目SRTP中期检查情.docx》由会员分享,可在线阅读,更多相关《福州大学本科生科研训练计划立项项目SRTP中期检查情.docx(13页珍藏版)》请在冰豆网上搜索。
福州大学本科生科研训练计划立项项目SRTP中期检查情
福州大学本科生科研训练计划立项项目中期检查情况表
(第18期)
项目号
18175
项目名称
基于多传感器的智能窗系统
项目负责人
肖咸文
所在学院
物理与信息工程学院
SRTP项目进展情况、主要工作内容
1、经过队员的不断讨论,我们得出了具体方案如下:
(1)智能-手动遥控模块
本次模块设计的主要任务是利用光敏晶体管感光和通过基于STC89C52单片机控制板自动打开窗户遥控窗户。
主要功能
1)控制窗户的开关。
2)具有防过度开关功能。
3)具有无线遥控功能。
4)能够指示运行状态。
本模块装置主要由单片机最小系统、无线发射、接收模块、按键部分、电机控制执行部分和限位开关组成。
设计思路本设计是基于单片机的遥控窗帘,采用8位的STC89C52单片机做控制器,程序采用C语言编程。
利用直流电机正反转,实现控制窗帘的开关。
无线遥控是由SC2262/SC2272编码解码芯片组成的无线发送接收模块,通过SC2272接收输出端D0、D1、D2、D3输出信号控制单片机,再利用单片机控制L298N来控制直流电机。
利用霍尔传感器来实现窗帘的防过卷。
系统框图
图
(1)系统框图
备注:
经过小组成员的共同努力,该模块已经系统的完成。
在制作过程中,小组成员分工明确,相互合作,完成了资料的查询,程序的撰写,元器件的采购;在调试过程中,实现了预期的控制窗户的开关和无线遥控等功能。
(2)烟雾排气模块
利用烟雾传感器收集周围空气烟雾信号,当传感器被触发后发出信号给单片机,单片机据此发送指令使电机带动风扇转动,排出烟雾。
此模块外围电路设计较简单,且程序设计也不复杂,较为适合在此处应用。
(3)防盗报警模块
发声芯片ISD1016A配合人使用并辅以外围电路。
红外传感器与发声芯片ISD1420配合使用并辅以外围电路。
语音录放电路的设计ISD1420是新型单片优质语音录放电路,电路内部由振荡器、语音存储单元、前置放大器、自动增益控制电路、抗干扰滤波器、输出放大器组成。
一个最小的录放系统仅由一个麦克风、一个喇叭、两个按钮、一个电源、少数电阻电容组成。
(4)晴雨开关窗模块
使用气敏传感器配合外围电路来检测空气中的含水量,当超过临界值时就向单片机发出信号。
单片机控制模块上电机的工作状态。
②利用E型交叉式雨水感应器,检测是否有雨水滴落从而控制电机转动实现窗户的开合。
2、目前取得的成果
由于ARM处理方面难度有点大,目前我们只较为系统的完成了智能-手动遥控模块,晴雨开关窗模块正在调试中,并且完成了烟雾排气模块的电路设计和程序的编写。
剩下的模块计划在暑期完成。
程序详见备注。
指导教师评语:
该项目目前进展顺利,所做的中期检查报告很好的反映了前期所做的工作,下一步需加快系统模型的测试。
指导教师签名:
曾益彬
日期:
2014.6.17
学院SRTP领导小组意见:
主管教学院长签名:
日期:
备注
(程序是检测部分和电机驱动部分的程序)
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitwind_sensor=P2^4;
sbitrain_sensor=P2^5;
sbitsmoke_LED=P2^6;
sbitIR_LED=P0^0;
sbitrain_LED=P0^1;
sbitbeep=P0^2;
sbitsmoke_sensor=P0^3;
sbitleft_limit=P0^4;
sbitright_limit=P0^5;
sbitIR_up=P0^6;
sbitIR_down=P0^7;
sbitopen_key=P3^7;
sbitclose_key=P3^6;
sbitstop_key=P3^5;
sbitENA=P1^1;
sbitENB=P1^0;
sbitIN1=P1^2;
sbitIN2=P1^3;
sbitIN3=P1^4;
sbitIN4=P1^5;
sbitIR_alarm=P2^0;
uintnum=0,num_IR=0,num_IR1=0,num_smoke=0,num_smoke1=0;
ucharflag_smoke_beep=0,flag_smoke_LED=0,flag_IR_LED=0,flag_stop=0;
voidport_init(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
}
voidtimer_init(void)
{
EA=1;
ET0=1;
ET1=1;
TR1=0;
TR0=0;
TMOD=0X11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
voiddelay(uchart)
{
uintx;
while(t--)
for(x=124;x>0;x--)
;
}
voidmotor_cor(void)//电机正转
{
IN1=1;
IN2=0;
}
voidmotor_rev(void)//电机反转
{
IN1=0;
IN2=1;
}
voidmotor_stop(void)
{
IN1=1;
IN2=1;
}
voidfan_start(void)//排风扇打开
{
IN3=0;
IN4=1;
}
voidfan_stop(void)//排风扇关闭
{
IN3=1;
IN4=1;
}
voidstop_window(void)
{
if(!
stop_key)
{
delay(5);
if(!
stop_key)
{
flag_stop=1;
while(!
stop_key);
motor_stop();
}
}
}
voidcheck(void)
{
if(!
open_key)//开窗
{
delay(5);
if(!
open_key)
{
while(!
open_key)
;
if(!
left_limit)
{}
else
{
motor_rev();
while(left_limit==1)
{
stop_window();
if(flag_stop==1)
break;
}
flag_stop=0;
motor_stop();
}
}
}
if(!
close_key)//关窗
{
delay(5);
if(!
close_key)
{
while(!
close_key);
if(!
right_limit)
{}
else
{
motor_cor();
while(right_limit==1)
{
stop_window();
if(flag_stop==1)
break;
}
flag_stop=0;
motor_stop();
}
}
}
/************雨检测****************/
if(!
rain_sensor)//关窗
{
delay(5);
if(!
rain_sensor)
{
rain_LED=0;
if(!
right_limit)
{
}
else
motor_cor();
while(right_limit==1);
motor_stop();
TR0=1;
}
}
else
{
rain_LED=1;
}
/************烟雾检测****************/
if(!
smoke_sensor)
{
delay(5);
if(!
smoke_sensor)//开窗
{
fan_start();
flag_smoke_LED=1;
TR1=1;
if(!
left_limit)
{
}
else
motor_rev();
while(!
smoke_sensor)
{
beep=~beep;
delay(10);//频率为100HZ
if(!
left_limit)
motor_stop();
}
fan_stop();
beep=1;
}
}
else
smoke_LED=1;
}
voidmain()
{
port_init();
timer_init();
while
(1)
{
check();
}
}
voidtimer0(void)interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(right_limit!
=0)
{
TR0=0;
num=0;
}
if(num==600)
{
TR0=0;
num=0;
if(!
right_limit&&(rain_sensor!
=0)&&(wind_sensor!
=0))
{
motor_rev();
while(left_limit==1);
motor_stop();
}
}
}
voidtimer1(void)interrupt3
{
if(flag_IR_LED==1)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num_IR++;
if(num_IR==1)
{
IR_LED=~IR_LED;
num_IR=0;
num_IR1++;
if(num_IR1==600)
{
flag_IR_LED=0;
num_IR1=0;
TR1=0;
}
}
}
if(flag_smoke_LED==1)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(smoke_sensor!
=0)
{
flag_smoke_LED=0;
TR1=0;
}
num_smoke++;
if(num_smoke==2)
{
smoke_LED=~smoke_LED;
num_smoke=0;
}
}
}