《2022年基于51单片机与若干传感器的智能开关窗系统_课程设计报告.docx》由会员分享,可在线阅读,更多相关《2022年基于51单片机与若干传感器的智能开关窗系统_课程设计报告.docx(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源传感器试验导论课程设计报告基于 51 单片机与如干传感器地智能开关窗系统基于单片机与如干传感器地智能开关窗系统引言近年来,随着物联网技术地快速进展,智能家居成为家庭信息化和社会信息化发 展地重要组成部分,智能家居又称智能住宅,当家庭智能网关将家庭中各种各样地家 电设备通过家庭总线技术连接在一起时,就构成了功能强大、高度智能化地现代智能 家居系统 . 智能家居强调人地主观能动性,重视人与居住环境地和谐,能够随心所欲地掌握居住环境 .时间飞逝,日夜如梭 .智能家居系统在经受了早期纷乱地概念纷争之后,目前已经逐步进入理性时代.如今地智能家居市场已经不再是海尔、微软等专业家电掌握和 IT
2、厂家地天下,越来越多地楼宇对讲厂商开头涉及并深化到智能家居行业,欢迎下载精品学习资源温 度 检 测 电 路光 照 检 测 电 路采 集 信 息单片机掌握电路电机驱动电路步 进 电 机 带动 窗 户 工 作雨 水 检 测 电 路猛烈地冲击着楼宇对讲市场格局,从而使得市场竞争更加猛烈.尽管如此,用户地需求才是第一位地,所以各厂家地产品研发主要以市场需求为导向.由于我国房地产行业地快速进展,也带动了我国门窗幕墙行业地快速进展,随着消费者生活水平地提高,智能化地产品如雨后春笋,正逐步进展和壮大.而我们地智能窗户就是在这样地环境下应运而生地,因此具有宽阔地市场空间和应用前景.第一章 总体设计方案本次设计
3、以 51 单片机作为微掌握器,使用DS18B2 温度传感器、光敏电阻、雨水传感器采集窗户内外地温度、光照、是否下雨等信息,进而使用ULN2003 达林顿陈设驱动四相五线步进电机带动窗户地打开与关闭.系统设计主要分为以下几个部分:单片机和掌握电路、温度检测电路、光照检测电路、雨水检测电路、电机驱动电路.整个系统地系统框图如下:我们本次课程设计目标是当温度在20 到 30 度之间、光照充分且无雨地情形下, 窗户关闭,液晶显示 OFF;三个条件有一个不满意就窗户打开,液晶显示ON.其次章 硬件原理与介绍本人在这次课设中负责步进电机驱动及掌握模块地电路设计与相关程序地编写以欢迎下载精品学习资源及 LC
4、D1602 液晶地程序掌握,因此本部分将着重介绍步进电机模块与LCD1602 液晶地相关硬件原理 .一、 28BYJ-48 步进电机2.1.1 步进电机地工作原理步进电机是一种将电脉冲转化为角位移地执行机构.通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定地方向转动一个固定地角度(及步进角) .可以通过掌握脉冲个来掌握角位移量,从而达到精确定位地目地;同时可以通过掌握脉冲频率来掌握电机转动地速度和加速度,从而达到调速地目地.本次设计是采纳步进电机 28BYJ48 型四相八拍电机,电压为 DC5VDC12V.当对步进电机施加一系列连续不断地掌握脉冲时,它可以连续不断地转动 .
5、每一个脉冲信号对应步进电机地某一相或两相绕组地通电状态转变一次,也就对应转子转过肯定地角度(一个步距角) .当通电状态地转变完成一个循环时,转子转过一个齿距 .四相步进电机可以在不同地通电方式下运行,常见地通电方式有单(单相绕组通电)四拍(A-B- C-D-A. ),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-. ),八拍( A-AB-B-BC-C- CD-D-DA-A. ).四相步进电机原理图欢迎下载精品学习资源其相序安排表如下:2.1.2 步进电机 24BYJ48地相关电气参数1. 额定电压: 12VDC 另有电压: 5V 、6V、 24V2. 相数: 43. 减速比: 1/64
6、 另有减速比: 1/16 、1/324. 步距角: 5.625 /645. 驱动方式: 4 相 8 拍6. 直流电阻: 200 7%25 按客户要求而定: 80 、130 欧姆 7. 空载牵入频率: 600Hz8. 空载牵出频率: 1000Hz9. 牵入转矩: 34.3mN.m120Hz10. 自定位转矩: 34.3mN.m11. 绝缘电阻: 10M 500V12. 绝缘介电强度: 600VAC/1mA/1S13. 绝缘等级: A14. 温升: 50K120Hz欢迎下载精品学习资源15. 噪音: 40dB120Hz16. 重量:大约 40g17. 未注公差按: GB1804-m18. 转向:
7、CCW2.1.3 步进电机地基本术语2.1.3.1 相数产生不同对极 N、S 磁场地激磁线圈对数,常用m 表示.2.1.3.2 拍数完成一个磁场周期性变化所需脉冲数或导电状态用n 表示,或指电机转过一个齿距角所需脉冲数,比如说本次设计中使用地24BYJ48 有单(单相绕组通电)四拍(A- B-C-D-A. ),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-. ),八拍( A-AB-B-BC- C-CD-D-DA-A. )2.1.3.3 步距角对应一个脉冲信号,电机转子转过地角位移用表示 . =360度(转子齿数 J* 运行拍数),以常规二相,转子齿为50 齿电机为例 .四拍运行时步距角
8、为 =360度/(50*4 ) =1.8 度(俗称整步),八拍运行时步距角为 =360度/ (50*8 ) =0.9 度(俗称半步) .2.1.3.4 信号安排四相步进电机依据其通电方式地不同,可以分为单四拍,双四拍和双八拍三种工作方式 .单四拍与双四拍地步距角相等,均为11.25 度,而八拍地步距角就是单四拍与双四拍地一半, 5.625 度. 单(单相绕组通电)四拍( A-B-C-D-A. ),双(双相绕组通电)四拍( AB-BC-CD-DA-AB-. ),八拍( A-AB-B-BC-C-CD-D-DA-A. ). 这里选取地是单双八拍地工作方式 .欢迎下载精品学习资源由于步进电机地驱动电流
9、较大,单片机不能直接驱动,一般都是使用ULN2003 达林顿阵列驱动,当然,使用下拉电阻或三极管也是可以驱动地,只不过成效不是那么好,产生地扭力比较小 .二、 ULN2003达林顿陈设芯片步进电机地驱动采纳 ULN2003芯片.ULN2003是高耐压、大电流达林顿陈设,由七个硅NPN达林顿管组成.ULN2003 地每一对达林顿都串联一个 2.7K 地基极电阻 ,在 5V 地工作电压下它能与 TTL 和 CMOS电路直接相连,可以直接处理原先需要标准规律缓冲器来处理地数据 .ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承担 50V 地电压,输出仍可以在高负载电流
10、并行运行. 采纳 DIP- 16 或者 SOP-16塑料封装 .其引脚及内部原理图如下:本设计中试验 1、2、3、4 脚做输入端, 16、15、14、13 做相对应地输出端,起到放大地作用,以驱动电机 .ULN2003地典型应用电路如下图:欢迎下载精品学习资源三、LCD1602液晶1602 液晶也叫 1602 字符型液晶它是一种特地用来显示字母、数字、符号等地点阵型液晶模块它有如干个 5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符 . 目前市面上字符液晶绝大多数是基于HD44780液晶芯片地,掌握原理是完全相同地,因此基于HD44780写地掌握程序可以很便利地应 用
11、于市面上大部分地字符型液晶 .其各引脚功能见下图:其典型接口电路如下图:欢迎下载精品学习资源其基本操作时序为:读状态输入: RS=L,RW=,HE=H输出: DB0 DB7=状态字写指令输入: RS=L,RW=,L E=下降沿脉冲, DB0DB7=指令码输出:无读数据输入: RS=H,RW=,H E=H输出: DB0 DB7=数据写数据输入: RS=H,欢迎下载精品学习资源RW=,LE=下降沿脉冲, DB0DB7=数据输出:无第三章 各模块硬件设计欢迎下载精品学习资源本人在这次课设中负责步进电机驱动及掌握模块地电路设计与相关程序地编写以及 LCD1602 液晶地程序掌握,因此本部分将介绍步进电
12、机模块与LCD1602 液晶地电路设计 .一、步进电机驱动及接口电路本电路模块用于单片机对步进电机地掌握及使用ULN2003 芯片对步进电机进行驱动 .原理图如下:欢迎下载精品学习资源由于所选 24BYJ48 步进电机为四相步进电机,故只需4 个单片机 IO 口掌握,此处使用单片机地IO 口 P1.0-P1.3 ,使用 ULN2003 地引脚 1-4 做输入, 16-13 引脚做输出口 .二、按键电路(用于扩展功能)本次设计为了便于今后功能扩展使用了8 个按键 .原理图如下:这次课设中我们使用了两个按键,分别用于掌握电机点动正转、点动反欢迎下载精品学习资源转.三、 1602 液晶接口电路160
13、2 液晶接口电路原理图如下:本电路用于连接1602 液晶, P2.0 P2.2 分别接 RS、RW、EN, P0 口接数据指令输入口, 10K 欧可调电阻用于调剂液晶地对比度第四章 程序设计本人在这次课设中负责步进电机驱动及掌握模块地电路设计与相关程序地编写以及LCD1602 液晶地程序掌握,因此本部分将介绍步进电机地编程掌握方法与LCD1602 液晶地编程掌握 .一、总体程序流程图主程序欢迎下载精品学习资源读取温度并显示窗户开关状态欢迎下载精品学习资源判定是否有雨、阴天、超限关窗不操作判定是否有雨、阴天、超限开窗欢迎下载精品学习资源我们地主程序设计目标是当温度在20 到 30 度之间、光照充
14、分且无雨地情形下,窗户关闭,液晶显示OFF;三个条件有一个不满意就窗户打开,液晶显示ON.二、步进电机地编程掌握方法掌握步进电机地关键是利用掌握脉冲地快慢、次序、个数来调剂电机转速、正反转、转动角度等状态 .步进电机 28BYJ48 型四相八拍电机,电压为 DC5VDC12V. 当对步进电机施加一系列连续不断地掌握脉冲时,它可以连续不断地转动 . 每一个脉冲信号对应步进电机地某一相或两相绕组地通电状态转变一次,也就对应转子转过肯定地角度(一个步距角) . 当通电状态地转变完成一个循环时,转子转过一个齿距.四相步进电机可以在不同地通电方式下运行,常见地通电方式有单(单相绕组通电)四拍( A-B-
15、C-D-A. ),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-. ),八拍( A-AB-B-BC-C-CD-D-DA-A. ) .这里我们采纳地通电方式是四相单双八拍,各相电平与十六进制相序对应如下表所示:橙黄粉蓝十六制( P1 口)欢迎下载精品学习资源10000xf811000xfc01000xf401100xf600100xf200110xf300010xf110010xf9所以可以定义旋转相序uchar code FFW8=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9; / 正转相序编码表uchar code REV8=0xf9,0xf8,0
16、xfc,0xf4,0xf6,0xf2,0xf3,0xf1;/ 反转相序编码表下面这段程序是我们程序中地步进电机掌握部分,它可以实现掌握电机地正转或反转 45 度,以此代表窗户打开或关闭.ifz1flag=0/ 电机反转,窗户打开for ;num20 ;num2-ifv0 ;num2-欢迎下载精品学习资源ifv8P1 = FFWv ;v+ ;ifv=8 v=0;delaynms15 ;num2=512;/ 转 45 度state=1 ;z2flag=1 ;电机转一圈即360 度需要 64*64=4096个脉冲,所以要想电机转45 度,需要4096/8=512个脉冲,这里用 num2=512来掌握
17、电机转45 度.三、 LCD1602 液晶地编程掌握显示流程图如图3.4 所示,流程图分析如下:第一对1602 显示屏进行初始化(初始化大约连续10ms ),然后检查忙信号,如BF=0 ,就获得显示RAM 地址,写入相应地数据显示 . 如 BF=1 ,就代表模块正在进行内部操作,不接受任何外部指令和数据,直到BF=0 为止 .欢迎下载精品学习资源LCD 显示程序流程图LCD1602基本操作时序为:读状态输入: RS=L,RW=,H E=H输出: DB0DB7=状态字写指令输入: RS=L,RW=,L E=下降沿脉冲, DB0DB7=指令码输出:无读数据输入:RS=H,RW=,H E=H输出:
18、DB0 DB7=数据写数据输入: RS=H,欢迎下载精品学习资源RW=,LE=下降沿脉冲, DB0 DB7=数据输出:无第五章 心得体会欢迎下载精品学习资源为其近半个学期地传感器课程设计终止了,在这期间我收成了很多,感到很有意义 .这次课设我主要负责地是步进电机模块地电路设计及软件编程,另外我仍学习了 LCD1602液晶显示地编程掌握方法 .早在大二自学单片机时我就留意到步进电机这种器件,但当时只是略作明白,没有学习它地原理与编程掌握,这次借课程设计地机会,我得以对步进电机进行了较为深化地明白和学习 .在课设地前期我通过查阅了很多资料,学习了步进电机地工作原理. 之后我开头考虑整体硬件电路地设
19、计,显示、驱动电路地设计,最终挑选使用 28BYJ48型步进电机、 ULN2003驱动芯片、 1602 液晶显示 . 在这之后我开头考虑要实现地电机功能,在完成了原理图与PCB图绘制、电路元件焊接后,我开头着手进行程序设计 . 我与我们组负责传感器和单片机电路部分地同学反复争论,对程序不断修改、调试,最终,完成了预想地目标.我认为智能开关窗系统这个课题,既包含多种传感器能够充分地检验我们这学期传感器课程地学习成果,又非常具有应用价值.通过这次课设我得以学习到了步进电机地工作原理与编程掌握方法,以 及光敏、雨水、温度等几种传感器地使用方法. 另外,在这次课设过程中涉及地 LCD1602掌握等内容
20、也对我很有帮忙 . 通过本次课设我对 51 单片机地编程掌握、定时器中断等学问也得到了充分地复习巩固.总之,这次课设让我受益匪浅,感谢杨老师一学期来传感器课程地尽心教诲,这对我们地课设得以顺当完成很有帮忙.附件一、 电路原理图最小系统与步进电机模块欢迎下载精品学习资源光敏电阻模块二、 电路 PCB图欢迎下载精品学习资源三、 电路实物图总体电路(全部器件):步进电机板:欢迎下载精品学习资源四、 源程序#include/包含单片机寄存器地头文件#include /包含 _nop_ 函数定义地头文件#define uchar unsigned char #define uint unsigned i
21、ntuchar code digit10=0123456789;/ 定义字符数组显示数字uchar code Str=state:; / 说明显示地是温度uchar code Error=Error.Check.;/ 说明没有检测到 DS18B20 uchar code Temp=Temp: ;/说明显示地是温度uchar code Cent=Cent;/温度单位uchar code winon=ON ;欢迎下载精品学习资源uchar code winoff=OFF;uchar code FFW8=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9; / 正转相序编
22、码表uchar code REV8=0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1;/ 反转相序编码表uchar z1flag=1;uchar z2flag=1;uchar state=1;/ 窗户开uchartempl=20 ;uchartemph=30 ;/uintnum1=2;uintnum2=512;sbit yu = P35;sbit light=P36;/*以下是对液晶模块地操作程序*/sbit RS=P20 ; / 寄存器挑选位,将 RS 位定义为 P2.0 引脚sbit RW=P21 ; / 读写挑选位,将 RW 位定义为 P2.1 引脚sbit
23、 E=P22 ; / 使能信号位,将 E 位定义为 P2.2 引脚欢迎下载精品学习资源sbit BF=P07;/劳碌标志位,将 BF 位定义为 P0.7 引脚/*函数功能:延时1ms3j+2*i=333+2 10=1010 微秒,可以认为是 1 毫秒*/ void delay1msunsigned char i,j;fori=0 ; i4 ; i+ forj=0;j33 ; j+;/*函数功能:延时如干毫秒入口参数: n*/ void delaynmsunsigned char nunsigned char i;fori=0 ;in ;i+ delay1ms ;/*函数功能:判定液晶模块地劳碌
24、状态返回值: result.result=1,劳碌; result=0 ,不忙欢迎下载精品学习资源*/ bit lcd_busyvoidbit result;RS=0 ;/依据规定, RS 为低电平, RW 为高电平常,可以读状态RW=1 ;E=1 ;/E=1,才答应读写_nop_;/ 空操作_nop_;_nop_;_nop_;/ 空操作四个机器周期,给硬件反应时间result=BF; / 将劳碌标志电平赋给 result E=0 ;/将 E 复原低电平return result;/*函数功能:将模式设置指令或显示地址写入液晶模块入口参数: dictate*/ void lcd_wcmd un
25、signed char dictatewhilelcd_busy=1; / 假如忙就等待RS=0 ;/依据规定, RS 和 R/W 同时为低电平常,可以写入指令欢迎下载精品学习资源RW=0 ;E=0 ;/E置低电平 依据表 8-6 ,写指令时, E 为高脉冲,/就是让 E 从 0 到 1 发生正跳变,所以应先置 0_nop_ ;_nop_ ;/空操作两个机器周期,给硬件反应时间P0=dictate ;/将数据送入 P0 口,即写入指令或地址_nop_ ;_nop_ ;_nop_ ;_nop_ ;/空操作四个机器周期,给硬件反应时间E=1 ;/E置高电平_nop_ ;_nop_ ;_nop_ ;
26、_nop_ ;/空操作四个机器周期,给硬件反应时间E=0 ;/当 E 由高电平跳变成低电平常,液晶模块开头执行命令/*函数功能:指定字符显示地实际地址入口参数: x欢迎下载精品学习资源*/ void lcd_posunsigned char xlcd_wcmdx|0x80; / 显示位置地确定方法规定为80H+ 地址码 x/*函数功能:将数据 字符地标准 ASCII 码 写入液晶模块入口参数: y 为字符常量 */ void lcd_wdatunsigned char ywhilelcd_busy=1;RS=1 ;/RS为高电平, RW 为低电平常,可以写入数据RW=0 ;E=0 ;/E置低电
27、平 依据表 8-6 ,写指令时, E 为高脉冲,/就是让 E 从 0 到 1 发生正跳变,所以应先置 0 P0=y ;/将数据送入 P0 口,即将数据写入液晶模块_nop_ ;_nop_ ;_nop_ ;_nop_;/空操作四个机器周期,给硬件反应时间E=1 ;/E置高电平_nop_ ;欢迎下载精品学习资源_nop_ ;_nop_ ;_nop_ ;/空操作四个机器周期,给硬件反应时间E=0 ;/当 E 由高电平跳变成低电平常,液晶模块开头执行命令/*函数功能:对 LCD 地显示模式进行初始化设置*/ void lcd_initvoiddelaynms15;/延时 15ms ,首次写指令时应给
28、LCD 一段较长地反应时间lcd_wcmd0x38;/ 显示模式设置: 16 2 显示, 57 点阵, 8 位数据接口delaynms5 ;/延时 5ms,给硬件一点反应时间lcd_wcmd0x38;delaynms5 ;/延时 5ms,给硬件一点反应时间lcd_wcmd0x38;/ 连续三次,确保初始化胜利delaynms5 ;/延时 5ms,给硬件一点反应时间lcd_wcmd0x0c;/ 显示模式设置:显示开,无光标,光标不闪耀delaynms5 ;/延时 5ms,给硬件一点反应时间lcd_wcmd0x06;/ 显示模式设置:光标右移,字符不移delaynms5 ;/延时 5ms,给硬件一
29、点反应时间欢迎下载精品学习资源lcd_wcmd0x01;/ 清屏幕指令,将以前地显示内容清除delaynms5 ;/延时 5ms,给硬件一点反应时间/*以下是 DS18B20 地操作程序*/sbit DQ=P33;unsigned char time; / 设置全局变量,特地用于严格延时/*函数功能:将 DS18B20 传感器初始化,读取应答信号出口参数: flag*/ bit Init_DS18B20voidbit flag ;/储存 DS18B20 是否存在地标志, flag=0 ,表示存在; flag=1 ,表示不存在DQ = 1 ;/先将数据线拉高fortime=0; time2 ;
30、time+ /略微延时约 6 微秒;DQ = 0 ;/再将数据线从高拉低,要求保持480960us fortime=0; time200 ;time+ /略微延时约 600 微秒欢迎下载精品学习资源;/以向 DS18B20 发出一连续 480960us地低电平复位脉冲DQ = 1 ;/释放数据线(将数据线拉高)fortime=0;time10 ;time+; / 延时约 30us(释放总线后需等待1560us让 DS18B20 输出存在脉冲) flag=DQ ;/让单片机检测是否输出了存在脉冲(DQ=0 表示存在) fortime=0; time200 ;time+ /延时足够长时间,等待存在
31、脉冲输出完毕;return flag; / 返回检测胜利标志/*函数功能:从 DS18B20 读取一个字节数据出口参数: dat*/ unsigned char ReadOneCharvoidunsigned char i=0;unsigned char dat; / 储存读出地一个字节数据for i=0 ; i=1;_nop_ ;/ 等待一个机器周期DQ = 1 ;/ 将数据线 人为拉高 ,为单片机检测DS18B20 地输出电平作准备fortime=0;time2 ;time+;/延时约 6us ,使主机在 15us 内采样ifDQ=1dat|=0x80; / 假如读到地数据是 1,就将 1
32、 存入 dat elsedat|=0x00;/ 假如读到地数据是 0,就将 0 存入 dat/ 将单片机检测到地电平信号DQ 存入 ri fortime=0;time8 ;time+;/延时 3us, 两个读时序之间必需有大于1us 地复原期returndat;/ 返回读出地十进制数据/*函数功能:向 DS18B20 写入一个字节数据入口参数: dat*/ void WriteOneCharunsigned char dat欢迎下载精品学习资源unsigned char i=0;for i=0 ; i8 ; i+DQ =1 ;/先将数据线拉高_nop_ ;/ 等待一个机器周期DQ=0 ;/将数
33、据线从高拉低时即启动写时序DQ=dat&0x01; / 利用与运算取出要写地某位二进制数据,/并将其送到数据线上等待DS18B20 采样fortime=0; time10 ;time+;/ 延时约 30us ,DS18B20 在拉低后地约 1560us期间从数据线上采样DQ=1 ;/释放数据线fortime=0;time=1;/将 dat 中地各二进制位数据右移1 位fortime=0;time4 ;time+; / 稍作延时 ,给硬件一点反应时间/returndat;/*以下是与温度有关地显示设置欢迎下载精品学习资源*/*函数功能:显示没有检测到DS18B20*/ void display_errorvoidunsigned char i;lcd_pos0x00; / 写