教室监控系统方案.doc
. . 电子工艺实训报告课题名称教室监控程序姓 名院系专 业指导教师目录1. 实训任务与容1.1实训任务1.2实训容2. 模块设计2.1人数检测设计2.1.1硬件电路设计2.1.2人数检测软件程序设计2.2状态显示的设计2.2.1状态显示硬件电路设计2.2.2状态显示软件程序设计2.3.温湿度检测设计2.3.1温湿度检测硬件电路设计2.3.2温湿度检测软件程序设计2.4.显示设计2.4.1显示硬件电路设计2.4.2显示设计软件程序设计3测试结果4心得体会11 / 251. 实训任务与容1.1实训任务基础部分容要求人员有无情况检测:有人情况下,教室电灯才能打开室人员检测:显示室人数(假设仅有1个门出入)发挥部分教室温湿度检测并显示教室状态检测:上课、会议、空闲等1.2实训容元件选取实验采用stc8952单片机。门口人数检测部分使用两个光电开关e3f-DC30C4。显示部分使用12864液晶显示屏。模式显示和照明部分采用led灯。温湿度检测采用了DHT11。实现思路通过两个光电开关的配合检测出教室的人数,由人数自动识别状态;通过DHT11模块检测温湿度;将人数和温湿度用12864液晶显示屏显示出来操作步骤设计电路图并领取元件对元件进行组装和焊接编写程序调试功能封装成品2. 模块设计2.1人数检测模块2.1.1硬件电路设计功能介绍光电开关原理:利用被检测物对光束的遮挡或反射,由同步回路选通电路,从而检测物体的有无。物体不限于金属,所有能反射光线的物体均可以被检测。光电开关将输入电流在发射器上转换为光信号射出,接收器再根据接收到的光线的强弱或有无对目标物体进行探测。安防系统中常见的光电开关烟雾报警器,工业中经常用它来计数机械臂的运动次数。参数1、 输出电流:交直流200mA 继电器触点输出电流为1A、3A2、应答频率:DC<2.5ms、AC<30ms3、工作环境:20+554、继电器输出:1224V、90250V5、标准检测物:透明或不透明实体E3F-DS30C4型光电开关,光电传感器原理E3F-DS30C4型光电传感器是利用光的各种性质,检测物体的有无与表面状态的变化等的一种传感器,E3F-DS30C4光电开关主要由发光的投光部和承受光线的爱光部构成,如果投向的光线因检测物体不同而被遮掩或者反射,到有受光的量将会发生变化,受光部将测出这种变化,并转换为电气信号,进行输出,大多使用可视光(主要为红色,也用绿色,蓝色来判断颜色)和红外光.2.1.2人数检测软件设计流程图光电开关1检测人数加减判断下一个下降沿出现的位置思路说明通过两个相邻的光电开关组成识别门,每当有人经过光电开关2的时候,触发下降沿,然后判别人的去向,即如果门二再次下降沿信号,则不会增加人数,如果门一下降沿信号,人数加一;当门一首先下降沿时,如果门一接着下降沿,则不会变,如果门二下降沿信号,人数减一。部分程序分析if (g2=0) Gf=1; delay1(500); if(g1=0) if(Gf=1) temp+;Gf=0; if(g2=0) Gf=0; 使用了变量GK使得每次只检测一个人,避免一人经过使人数一直上升的情况,逐层判断,使得思路更加清晰。2.2状态显示的设计2.2.1硬件电路设计电路图Led:它的基本结构是一块电致发光的半导体材料芯片,用银胶或白胶固化到支架上,然后用银线或金线连接芯片和电路板,然后四周用环氧树脂密封,起到保护部芯线的作用,最后安装外壳,所以 LED 灯的抗震性能好。运用领域涉与到手机、台灯、家电等日常家电和机械生产方面。2.2.2状态显示的软件设计流程图空闲状态人数temp0?>=35?会议状态上课状态设计思路:使用两个判断结构,以0,35为三个状态的分割点,自动检测状态.void mode() kx=1; hy=1; sk=1;if (temp=0)kx=0;else led=0; if(temp<=35) hy=0; else sk=0; 2.3温湿度检测设计2.3.1温湿度检测硬件设计原理图元件介绍:DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP存中,传感器部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最正确选择。产品为4针单排引脚封装,连接方便。详细参数参数条件MinTypMax单位湿度分辨率111%RH8Bit重复性±1%RH精度25±4%RH050±5%RH互换性可完全互换量程围03090%RH252090%RH502080%RH响应时间1/e(63%)25,1m/s 空气61015S迟滞±1%RH长期稳定性典型值±1%RH/yr温度分辨率111888Bit重复性±1精度±1±2量程围050响应时间1/e(63%)630S2.3.2温湿度检测软件设计一、DHT11数据格式(40bit) 数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据 +8bit校验说明:1)、其中温度湿度小数部分带扩展,目前读出数据为0;2)、校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。 二、时序编程微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右。DHT11的单总线编程相对于DS18B20的单总线编程简单很多,本文分析的DHT11编程所需要的条件是一个精度在+_5%的50us延时函数。2.4.显示设计2.4.1显示硬件电路设计原理图功能介绍视角6 点钟驱动方式1/64 DUTY 1/9 BIAS背光LED控制器KS0108或兼容IC数据总线8 位并口/6800方式温度特性工作温度:-20C - +70C储藏温度:-30C - +80C点阵格式128 x 64点尺寸0.39 x 0.55mm点中心距0.44 x 0.60mm视域62.0 x 44.0mm有效显示区域56.27 x 38.35mm外形尺寸78.0 x 70.0 x 12.5mm Max.净重65g2.4.2显示设计软件程序设计流程图:写指令数据到LCD写显示数据到LCD设定显示位置void lcd_init() delay1(100); write_(0x30);write_(0x02); write_(0x06);write_(0x0c); write_(0x01);write_(0x80); delay1(5);void lcd_pos(uchar x,uchar y)uchar pos;if(x=1)x=0x80;else if(x=2)x=0x90;else if(x=3)x=0x88;else x=0x98;write_(y|pos);3. 测试结果4. 心得体会一周的电子工艺实习就要完毕,它让我觉得这是一门非常有意思的课程,它能够把让我门把自己所学的用到实践上去,还能够充分的调动我们的积极性,通过自己的努力获取劳动成果,在此期间,以一个小白的姿态去做一个项目,什么都不懂,什么都要去问,去查。老师对我们要求也非常严格,讲课也非常详细,大大的减小了我们犯错误的几率。一、实习容回顾与收获:这次实习容十分丰富,从安全用电,焊接基本练习,造型设计,印制电路板,再到产品设计,通过这次实习不仅自己动手完成了有趣的产品,更过的是学到了很多东西。首先巩固了电子学理论,增强了识别电子元器件的能力,通过对元器件的测量,也增强了对万用表的使用能力。其次,培养了我们的动手能力,实践是检验真理的唯一标准,理论的东西只有通过实践环节的检验,才是真实的。通过做这个教室监控系统项目,我们明白了其工作原理、学会了焊接技术。还有此次实习还锻炼了我们解决问题的能力,在实习中我们遇到了各种各样的问题,通过此次实习我们懂得了面对一个问题,要不慌不忙,理清思路,寻找问题的根源,然后一步一步的解决问题。二、问题与心得实习中也遇到了一些问题:1电路板上的焊点有些不符合标准,尤其是导线焊接的不好,容易脱落;焊锡量要适中,过多的焊锡会造成焊锡的浪费,焊接时间的增加,不易察觉的短路。过少的话会造成焊点强度降低,虚焊。2当烙铁头氧化后会引起烙铁头不粘锡,严重的不能进行焊接。3注意安全问题。4在焊接芯片时最好使用托焊,因为芯片的焊点又小又密。5组装时由于东西都很小,我们必须小心不要丢失元件。6程序写出来之后无法实现功能,我们尝试改了好多次,依旧没方法,后来在其他同学和老师的帮助下一点一点的改进了电路连接和程序,从数码管到12864,虽然对他不了解,但是已经可以尝试着去使用了。在整个的实习中我学习了很多的东西,使我眼界打开,感受颇深。简单的焊接使我了解到人生学习的真谛,课程虽然完毕了,但学习还没完毕,我知道作为信息时代的大学生,作为国家重点培育的高科技人才,仅会操作鼠标是不够的,基本的动手能力是一切工作和创造的基础和必要条件。三、结语总之,这次实习给我带来了很大的收获,同时也给我带来了很大的快乐,再一次感学校给我们提供了一个学习锻炼的机会,和老师对我们的辛勤付出,这对我们以后的工作和学习都有很好的作用。附录一附录二 #include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int uchar temp=0; sbit sid=P36; sbit sclk=P37;sbit sk=P25;sbit hy=P26;sbit kx=P27; sbit led=P13;sbit gd1=P17;sbit gd2=P16; typedef unsigned char U8; typedef signed char S8; typedef unsigned int U16; typedef signed int S16; typedef unsigned long U32; typedef signed long S32; typedef float F32; typedef double F64; #define uchar unsigned char#define uint unsigned int#define Data_0_time 4sbit DATA = P24 ; U8 U8FLAG,k;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;U8 outdata5; U8 indata5;U8 count, count_r=0;uchar mun;uchar renshu1=""uchar renshu2=""unsigned char str1=""unsigned char str2=""unsigned char code lcd = "温湿度检测系统"unsigned char code lcd1 = " 湿度:"unsigned char code lcd2 = " 温度:" unsigned char code lcd3 = ""unsigned char code lcd4 = "%RH"U16 U16temp1,U16temp2;void Delay(U16 j) U8 i;for(;j>0;j-) for(i=0;i<27;i+);void Delay_10us(void)U8 i; i-; i-; i-; i-; i-; i-;/DHT11 void COM(void) U8 i; for(i=0;i<8;i+) U8FLAG=2; while(!DATA)&&U8FLAG+);Delay_10us(); Delay_10us();Delay_10us(); U8temp=0; if(DATA)U8temp=1; U8FLAG=2; while(DATA)&&U8FLAG+); if(U8FLAG=1)break; U8comdata<<=1; U8comdata|=U8temp; void RH(void) DATA=0; Delay(180); DATA=1; Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); DATA=1; if(!DATA) U8FLAG=2; while(!DATA)&&U8FLAG+); U8FLAG=2; while(DATA)&&U8FLAG+); COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DATA=1; /数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; str10=(char)(0x30+U8RH_data_H/10); str11=(char)(0x30+U8RH_data_H%10); str20=(char)(0x30+U8T_data_H/10); str21=(char)(0x30+U8T_data_H%10); void delay1(uint z) uchar x,y; for (x=z;x>0;x-) for (y=110;y>0;y-); void send(uchar byte) uchar i;for(i=0;i<8;i+) sid=byte&0x80; sclk=0; sclk=1;byte<<=1; void write_date(uchar date) uchar star_date,hdate,ldate;star_date=0xfa;hdate=date&0xf0;ldate=(date<<4)&0xf0;send(star_date);delay1(1);send(hdate);delay1(1);send(ldate);delay1(1); void write_(uchar ) uchar star_date,hdate,ldate;star_date=0xf8;hdate=&0xf0;ldate=(<<4)&0xf0;send(star_date);delay1(1);send(hdate);delay1(1);send(ldate);delay1(1); void lcd_dis_code(uint cmd_addr,uchar num,uchar dis) uint i; write_(cmd_addr);for(i=0;i<num;i+)write_date(disi);void lcd_init() delay1(100); write_(0x30);write_(0x02); write_(0x06);write_(0x0c); write_(0x01);write_(0x80); delay1(5);void lcd_pos(uchar x,uchar y)uchar pos;if(x=1)x=0x80;else if(x=2)x=0x90;else if(x=3)x=0x88;else x=0x98;write_(y|pos);void mode() kx=1; hy=1; sk=1;if (temp=0)kx=0;else led=0; if(temp<=35) hy=0; else sk=0; void gk()uchar a,b; while(gd1=0) delay1(400); if(gd2=0) delay1(200); temp+; renshu10=(char)(0x30+temp/10); renshu11=(char)(0x30+temp%10); write_(0x95); for(a=0;a<2;a+) write_date(renshu1a); while(gd2=0) delay1(400); if(gd1=0) delay1(200); temp-; renshu10=(char)(0x30+temp/10); renshu11=(char)(0x30+temp%10); write_(0x95); for(b=0;b<2;b+) write_date(renshu1b); void main()uchar k,j,b,a,i; uchar k1,i1; lcd_init(); while(1) gk();mode(); lcd_dis_code(0x80,16,lcd); lcd_dis_code(0x88,9,lcd1); lcd_dis_code(0x98,9,lcd2); lcd_dis_code(0x9e,5,lcd3); lcd_dis_code(0x8e,3,lcd4);RH(); write_(0x8b); for(k=0;k<2;k+) write_date(str1k); write_(0x9b); for(j=0;j<2;j+) write_date(str2j);Delay(2500);