基于51单片机的光电式计数报警器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
传感器 E18-D80NK-N 这是一种集发射与接收于一体的光电传Leabharlann Baidu器,发射光经过调制后发出,接
收头对反射光进行解调输出,接收到反射光是输出低电平。有效的避免了可见光的干扰。透 镜的使用,也使得这款传感器最远可以检测 80 厘米距离的问题(由于红外光的特性,不同 颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。E18-D80NK-N 是数字式传感器,只有加一个上拉电阻就可以直接与单片机的 I/O 口连接。
dispram[3]++; //数码管第 4 位自加 1 flag = 1; long_alarm = 1; } 外部中断处理将数码管值加 1,实现计数功 能。将延时去抖标志置 1,将 long_alarm 置 1 以在报警模式下触发报警器。由于信号变 化的瞬态不稳定性,需采用延时去抖,实现 很简单:
基于光电式传感器的广泛应用背景,我们组设计了一个光电式计数报警器,采用 51 单 片机微控器,具有计数和报警的双重功能。其报警功能可用在家庭,宿舍,仓库等地方的防盗 报警,也可以用于生产中的安全报警。考虑到某些场合的应用,比如一些商场等营业场所的 门控,我们还增设了显示模块,使得在计数和报警时 Lcd 屏幕显示不同的内容,更是增强了 交互性。
sbit beep = P1^4;
//蜂鸣器引脚
sbit sensor = P3^2; //传感器信号输入引脚
unsigned char long_alarm; //蜂鸣器长报警使能
P3.2(INT0)为外部中断引脚,接光电传感 器,外部中断 0 为下降沿触发,当检测到光 时,由高电平变为低电平,正好是一个负跳 变,则触发外部中断,转入中断服务程序: void int0()interrupt 0 {
技术方案
此部分包括顶层模块设计,电路原理图,程序框图和关键代码分析
顶层模块设计
光电式计数报警器 的主要功能是计数和 报警,因此顶层模块中 主要包括传感部分,显 示部分和报警部分,其 核心是单片机。顶层 模块设计如右图:
顶层模块
电路设计
顶层模块设计好后根据相应的功能选择合适的器件,查阅其技术资料,进行电路设计, 电路图如下。电路中设计了两种传感器:对射式激光传感器和反射式红外传感器,它们传入 的信号通过开关 S1 选择,与单片机的 P3.2 口相连,作为外部中断的信号源。单片机初始化 后引脚都是高电平,单片机的 P1.0 口通过拨码开关与地相连,开关 S2 关时,P1.0 引脚与地 相连,电平变低,则开启报警模式,同时 LED3 点亮显示处于报警状态。蜂鸣器与单片机的 P1.4 引脚相连,由单片机控制输出一定频率的脉冲信号驱动蜂鸣器发出报警声音。对于对射 式激光传感器,只画了接收部分(使用一个光电三极管代替),当有光照射时,NPN 型三极 管导通,U3A 的 1 端电平由高电平变为低电平,经迟滞反相器 U3 后输出规则的高电平信号。 U4 是与非门,1 端接高电平,这里当非门使用,使迟滞反相器 U3 输出端 2 的高电平变为低 电平。反射式光电传感器的原理与对射式的相同,由于采用集成的数字式传感器,输出的是 数字信号,因此无需施密特迟滞反相器进行鉴幅,当接收到光照时,输出低电平,其特性也 对射式的一致。两种传感器旁边都接有 LED 发光二极管以显示传感器的状态,当接收到光照 时,LED 发光,表示低电平输入。单片机的复用 P0 口通过数据总线与数码管和 Lcd 的数据引 脚相连,单片机通过驱动程序控制数码管的动态数字显示和 Lcd 的字符显示。
实现与测评
51 单片机开发板 光电式计数报警器的主体是单片机开发板,开发板上有一片 SST89E58 的 51 单片机芯片,外 部设备有 4 位八段共阴极数码管和 16x2Lcd 显示屏(最多可显示 32 个字符,但不能显示汉 字),开发板上还有一个蜂鸣器和三个轻触开关和一个复位按钮。开发板上有一个 7805 稳压 芯片,可通过电脑 usb 供电或使用移动电源提供 5V 电压供电。开发板上还有串口与 usb 转 换芯片,通过 usb 线与电脑连接,烧录 Keil 编译产生的 Hex 文件,就可以让单片机实现程序 的功能。SST89E58 是 8 位 Flash Flex51 系列单片机具有 1024 字节 RAM 和最高达 72K 的 Super Flash,有 3 个 16 位定时/计数器,有 2 个外部中断源,完全可以实现设计程序中的功能。
为了方面程序调试,还在 Proteus 中搭建开发板电路进行单片机的仿真,电路中以 INT0 拨动开关代替光电传感器,仿真时收摁一下便输入一个脉冲模拟传感器的输入。实际仿真过 程中除了数码管有位段显示不全的问题外,其它功能均正常。通过下图也可以看到单片机内 部的电路结构。
Proteus 单片机仿真电路
间内测定挡光的次数,便可以测移动平均速度(要知道挡块的长度)或振动频率。 3. 修改程序,将触发光电传感器计数的时刻记录并存储下来,使可以通过开发板上的按键
查看,这样不仅知道计数值,还可以知道是什么时候计的数,这在某些场合很有用。
4. 使两个光电传感器同时工作,使用两个外部中断,便可以判断计数时通过的方向,可在 程序中设计不同的处理,如模拟商场的进门“欢迎光临”和出门的“欢迎再来”。还可 以实现一个方向加计数,一个方向减计数,也可以实现单向报警,可拓宽计数器报警器 的使用场合。
if(flag) {
EX0 = 0; //禁止外部中断 delay(50);
flag = 0; EX0 = 1; //开放外部中断 } 只要关外部中断并延迟一段时间,等待信号 稳定再开中断即可。 报警时蜂鸣器响应,两脚的电平信号周 期性反转,便可发出一定频率的声音,其函 数很简单只要通过两层循环来实现,改变循 环步长便可以改变声音频率。 void alarm(unsigned char k) { unsigned char j; unsigned char d; for(j = 0; j < k; j++) { beep = ~beep; for(d = 50; d > 0; d--); } }
下面是主程序的截图
主程序在初始化后进入一个死循环,不断地进行数码管进位显示处理,如果传感器未检测到 光(sensor=1),则进行时钟处理只显示时间。如果传感器检测到光(~sensor=1),如报警是 关的状态,则显示“Welcome to”,一段时间后自动消失。如报警是开的状态,则显示“Not allow entry”,并使蜂鸣器发声报警。注意到由于开发板上 Lcd 和数码管共用 P0 口,所有当 执行 PutStr()函数写入 Lcd 显示内容是应该使控制数码管动态显示的定时器 1 中断暂时关闭 (ET1=0),待 Lcd 显示内容写完后,再开启定时器 1 中断(ET1=1)。在蜂鸣器报警时应关闭 外部中断避免在报警时计数器误计数。警报解除后需要将 long_alarm 置 0,同时开外部中断。
5. ……
参考资料与附件
参考资料: 《SST 单片机实践教程(第六版)》华中科技大学电子电工科技创新中心 组编
附件包括: Keil 工程文件(含代码)和Proteus 仿真工程文件
电路原理图
程序设计
根据设置的功能设计出如下的程序流程框图:
程序流程图
程序中设置了三个全局变量 sensor(传感器状态变量),disable_alarm(蜂鸣器使能开关)
和 long_alarm(报警标志变量),以控制各个模块的运行。其定义如下:
sbit DISABLE_ALARM = P1^0; //定义蜂鸣器所接引脚 P1.4
由台灯座上的按钮开关控制亮灭。
实物图
实物图与组件
功能测评
报警开关未打开时 传感器未检测到信号时,数码管值不变,Lcd 只显示时间. 传感器检测到挡光一次,数码管计数值加 1; Lcd 显示”Welcome to”和时间.延迟一段时间后,”Welcome to”消失,只显示时间 报警开关打开时 传感器检测到挡光,触发报警,蜂鸣器发出报警声音,Lcd 显示”Not allow entry”。报警器会一直 响而不能自动关闭,必须拨动拨码开关关闭报警开关才能关报警器。报警触发后,光传感器 检测到挡光时,数码管计数值并不增加。 从测试的结果来看,此装置实现了预定的功能。实测中,反射式 E18-D80NK-N 光传感器的 探测距离大约是 50cm,由于传感器发出的是调制光,因此不会受到环境中光线的干扰.对射式 激光传感器测试距离大约有三米,三米以上未经测试,理论上只要激光的聚焦性能够好,距离 可以无限,这就是采用激光传感器的原因.激光器发出的是非调制的波长 650nm 红光,传感器 ST188 会受到环境中的强光干扰。
改进与功能扩充
做这个设计时,预设的基本功能是计数,报警和时间字符显示。同时还想到了其它一些功能, 只要在程序中做少许的修改均可实现。由于时间紧迫来不及做,现将其列出来: 1. 实现计满一定的数触发报警或控制开关,可以应用与自动生产和入场容纳人数的控制。 2. 修改计时程序,跑秒表,可以测定传感器低电平的时间,即挡光的时间。或在一定的时
如今光电式传感器作为非接触式传感器具有灵敏度高,抗干扰能力强(调制光)和响应速 度快的优点,应用十分广泛。生活中反射式红外光电传感器用于自动控制的场合很多,比如 洗手间的感应水龙头及厕所的自动冲马桶,银行和电梯的感应自动门。工业生产中光电传感 器也有很广泛的应用,生产流水线上常用光电计数器对产品进行计数,用光电计数器配合码 盘对电机进行测速。智能车比赛中使用光电传感器在赛道上巡线实现对车子方向的控制。
基于 51 单片机的光电式计数报警器
概述与应用背景
光电式传感器是将光信号转化为电信号的一种传感器,它的理论基础是光电效应。这类 效应大致可分为三类。第一类是外光电效应,即在光照射下,能使电子逸出物体表面。利用 这种效应所做成的器件有真空光电管、光电倍增管等。第二类是内光电效应,即在光线照射 下,能使物质的电阻率改变,这类器件包括各类半导体光敏电阻。第三类是光生电势效应, 即在光线作用下,物体内产生电动势的现象,此电动势称为光生电动势,这类器件包括光电 池、光电晶体管等。光电传感器都是利用光电元件受光照后,电特性发生变化。
E18-D80NK-N光电 传感器
电气特性:
红色:VCC;黑色:GND; 黄色:OUT 工作电压:5VDC 工作电流:10-15mA 驱动电流:100mA 感应距离:3-80CM
传感器图片(右上是反射式红外光电传感器) 激光器 激光器的激光头是 5V 供电 650nm 红光激光头,安装在一个改装的 led 台灯上,台灯的金属 软管可以任意弯曲,使激光头能够朝任何方向发射激光。激光器使用 6V 铅酸电池供电,并
ST188 是由高发射功率红外光电二极管和高灵敏度可调光电晶体管组成的光电传感器, 有一个反射头和一个接收头,该传感器原用在智能车上,做这个设计的时候,拆下了智能车 的传感器电路板,只使用其中的接收管用于本装置中的对射式激光探测器。该探测器是模拟 传感器,输出电压会随光强变化,因此使用了一个施密特迟滞反向器对输出信号进行鉴别。 实践发现,不使用施密特迟滞反向器时输出的高电平大约只有 3V,低于 3.5V,不在单片机 的高电平范围内,而加了施密特迟滞反向器,单片机能正确分辨器高低电平,但是这样使得 挡光时输出的是高电平,为了与 E18-D80NK-N 的特性一致而兼容一个程序,在施密特迟滞 反向器后再接一个 74HS00 与非门(当非门使用),使得两个传感器的输出特性一致。
收头对反射光进行解调输出,接收到反射光是输出低电平。有效的避免了可见光的干扰。透 镜的使用,也使得这款传感器最远可以检测 80 厘米距离的问题(由于红外光的特性,不同 颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。E18-D80NK-N 是数字式传感器,只有加一个上拉电阻就可以直接与单片机的 I/O 口连接。
dispram[3]++; //数码管第 4 位自加 1 flag = 1; long_alarm = 1; } 外部中断处理将数码管值加 1,实现计数功 能。将延时去抖标志置 1,将 long_alarm 置 1 以在报警模式下触发报警器。由于信号变 化的瞬态不稳定性,需采用延时去抖,实现 很简单:
基于光电式传感器的广泛应用背景,我们组设计了一个光电式计数报警器,采用 51 单 片机微控器,具有计数和报警的双重功能。其报警功能可用在家庭,宿舍,仓库等地方的防盗 报警,也可以用于生产中的安全报警。考虑到某些场合的应用,比如一些商场等营业场所的 门控,我们还增设了显示模块,使得在计数和报警时 Lcd 屏幕显示不同的内容,更是增强了 交互性。
sbit beep = P1^4;
//蜂鸣器引脚
sbit sensor = P3^2; //传感器信号输入引脚
unsigned char long_alarm; //蜂鸣器长报警使能
P3.2(INT0)为外部中断引脚,接光电传感 器,外部中断 0 为下降沿触发,当检测到光 时,由高电平变为低电平,正好是一个负跳 变,则触发外部中断,转入中断服务程序: void int0()interrupt 0 {
技术方案
此部分包括顶层模块设计,电路原理图,程序框图和关键代码分析
顶层模块设计
光电式计数报警器 的主要功能是计数和 报警,因此顶层模块中 主要包括传感部分,显 示部分和报警部分,其 核心是单片机。顶层 模块设计如右图:
顶层模块
电路设计
顶层模块设计好后根据相应的功能选择合适的器件,查阅其技术资料,进行电路设计, 电路图如下。电路中设计了两种传感器:对射式激光传感器和反射式红外传感器,它们传入 的信号通过开关 S1 选择,与单片机的 P3.2 口相连,作为外部中断的信号源。单片机初始化 后引脚都是高电平,单片机的 P1.0 口通过拨码开关与地相连,开关 S2 关时,P1.0 引脚与地 相连,电平变低,则开启报警模式,同时 LED3 点亮显示处于报警状态。蜂鸣器与单片机的 P1.4 引脚相连,由单片机控制输出一定频率的脉冲信号驱动蜂鸣器发出报警声音。对于对射 式激光传感器,只画了接收部分(使用一个光电三极管代替),当有光照射时,NPN 型三极 管导通,U3A 的 1 端电平由高电平变为低电平,经迟滞反相器 U3 后输出规则的高电平信号。 U4 是与非门,1 端接高电平,这里当非门使用,使迟滞反相器 U3 输出端 2 的高电平变为低 电平。反射式光电传感器的原理与对射式的相同,由于采用集成的数字式传感器,输出的是 数字信号,因此无需施密特迟滞反相器进行鉴幅,当接收到光照时,输出低电平,其特性也 对射式的一致。两种传感器旁边都接有 LED 发光二极管以显示传感器的状态,当接收到光照 时,LED 发光,表示低电平输入。单片机的复用 P0 口通过数据总线与数码管和 Lcd 的数据引 脚相连,单片机通过驱动程序控制数码管的动态数字显示和 Lcd 的字符显示。
实现与测评
51 单片机开发板 光电式计数报警器的主体是单片机开发板,开发板上有一片 SST89E58 的 51 单片机芯片,外 部设备有 4 位八段共阴极数码管和 16x2Lcd 显示屏(最多可显示 32 个字符,但不能显示汉 字),开发板上还有一个蜂鸣器和三个轻触开关和一个复位按钮。开发板上有一个 7805 稳压 芯片,可通过电脑 usb 供电或使用移动电源提供 5V 电压供电。开发板上还有串口与 usb 转 换芯片,通过 usb 线与电脑连接,烧录 Keil 编译产生的 Hex 文件,就可以让单片机实现程序 的功能。SST89E58 是 8 位 Flash Flex51 系列单片机具有 1024 字节 RAM 和最高达 72K 的 Super Flash,有 3 个 16 位定时/计数器,有 2 个外部中断源,完全可以实现设计程序中的功能。
为了方面程序调试,还在 Proteus 中搭建开发板电路进行单片机的仿真,电路中以 INT0 拨动开关代替光电传感器,仿真时收摁一下便输入一个脉冲模拟传感器的输入。实际仿真过 程中除了数码管有位段显示不全的问题外,其它功能均正常。通过下图也可以看到单片机内 部的电路结构。
Proteus 单片机仿真电路
间内测定挡光的次数,便可以测移动平均速度(要知道挡块的长度)或振动频率。 3. 修改程序,将触发光电传感器计数的时刻记录并存储下来,使可以通过开发板上的按键
查看,这样不仅知道计数值,还可以知道是什么时候计的数,这在某些场合很有用。
4. 使两个光电传感器同时工作,使用两个外部中断,便可以判断计数时通过的方向,可在 程序中设计不同的处理,如模拟商场的进门“欢迎光临”和出门的“欢迎再来”。还可 以实现一个方向加计数,一个方向减计数,也可以实现单向报警,可拓宽计数器报警器 的使用场合。
if(flag) {
EX0 = 0; //禁止外部中断 delay(50);
flag = 0; EX0 = 1; //开放外部中断 } 只要关外部中断并延迟一段时间,等待信号 稳定再开中断即可。 报警时蜂鸣器响应,两脚的电平信号周 期性反转,便可发出一定频率的声音,其函 数很简单只要通过两层循环来实现,改变循 环步长便可以改变声音频率。 void alarm(unsigned char k) { unsigned char j; unsigned char d; for(j = 0; j < k; j++) { beep = ~beep; for(d = 50; d > 0; d--); } }
下面是主程序的截图
主程序在初始化后进入一个死循环,不断地进行数码管进位显示处理,如果传感器未检测到 光(sensor=1),则进行时钟处理只显示时间。如果传感器检测到光(~sensor=1),如报警是 关的状态,则显示“Welcome to”,一段时间后自动消失。如报警是开的状态,则显示“Not allow entry”,并使蜂鸣器发声报警。注意到由于开发板上 Lcd 和数码管共用 P0 口,所有当 执行 PutStr()函数写入 Lcd 显示内容是应该使控制数码管动态显示的定时器 1 中断暂时关闭 (ET1=0),待 Lcd 显示内容写完后,再开启定时器 1 中断(ET1=1)。在蜂鸣器报警时应关闭 外部中断避免在报警时计数器误计数。警报解除后需要将 long_alarm 置 0,同时开外部中断。
5. ……
参考资料与附件
参考资料: 《SST 单片机实践教程(第六版)》华中科技大学电子电工科技创新中心 组编
附件包括: Keil 工程文件(含代码)和Proteus 仿真工程文件
电路原理图
程序设计
根据设置的功能设计出如下的程序流程框图:
程序流程图
程序中设置了三个全局变量 sensor(传感器状态变量),disable_alarm(蜂鸣器使能开关)
和 long_alarm(报警标志变量),以控制各个模块的运行。其定义如下:
sbit DISABLE_ALARM = P1^0; //定义蜂鸣器所接引脚 P1.4
由台灯座上的按钮开关控制亮灭。
实物图
实物图与组件
功能测评
报警开关未打开时 传感器未检测到信号时,数码管值不变,Lcd 只显示时间. 传感器检测到挡光一次,数码管计数值加 1; Lcd 显示”Welcome to”和时间.延迟一段时间后,”Welcome to”消失,只显示时间 报警开关打开时 传感器检测到挡光,触发报警,蜂鸣器发出报警声音,Lcd 显示”Not allow entry”。报警器会一直 响而不能自动关闭,必须拨动拨码开关关闭报警开关才能关报警器。报警触发后,光传感器 检测到挡光时,数码管计数值并不增加。 从测试的结果来看,此装置实现了预定的功能。实测中,反射式 E18-D80NK-N 光传感器的 探测距离大约是 50cm,由于传感器发出的是调制光,因此不会受到环境中光线的干扰.对射式 激光传感器测试距离大约有三米,三米以上未经测试,理论上只要激光的聚焦性能够好,距离 可以无限,这就是采用激光传感器的原因.激光器发出的是非调制的波长 650nm 红光,传感器 ST188 会受到环境中的强光干扰。
改进与功能扩充
做这个设计时,预设的基本功能是计数,报警和时间字符显示。同时还想到了其它一些功能, 只要在程序中做少许的修改均可实现。由于时间紧迫来不及做,现将其列出来: 1. 实现计满一定的数触发报警或控制开关,可以应用与自动生产和入场容纳人数的控制。 2. 修改计时程序,跑秒表,可以测定传感器低电平的时间,即挡光的时间。或在一定的时
如今光电式传感器作为非接触式传感器具有灵敏度高,抗干扰能力强(调制光)和响应速 度快的优点,应用十分广泛。生活中反射式红外光电传感器用于自动控制的场合很多,比如 洗手间的感应水龙头及厕所的自动冲马桶,银行和电梯的感应自动门。工业生产中光电传感 器也有很广泛的应用,生产流水线上常用光电计数器对产品进行计数,用光电计数器配合码 盘对电机进行测速。智能车比赛中使用光电传感器在赛道上巡线实现对车子方向的控制。
基于 51 单片机的光电式计数报警器
概述与应用背景
光电式传感器是将光信号转化为电信号的一种传感器,它的理论基础是光电效应。这类 效应大致可分为三类。第一类是外光电效应,即在光照射下,能使电子逸出物体表面。利用 这种效应所做成的器件有真空光电管、光电倍增管等。第二类是内光电效应,即在光线照射 下,能使物质的电阻率改变,这类器件包括各类半导体光敏电阻。第三类是光生电势效应, 即在光线作用下,物体内产生电动势的现象,此电动势称为光生电动势,这类器件包括光电 池、光电晶体管等。光电传感器都是利用光电元件受光照后,电特性发生变化。
E18-D80NK-N光电 传感器
电气特性:
红色:VCC;黑色:GND; 黄色:OUT 工作电压:5VDC 工作电流:10-15mA 驱动电流:100mA 感应距离:3-80CM
传感器图片(右上是反射式红外光电传感器) 激光器 激光器的激光头是 5V 供电 650nm 红光激光头,安装在一个改装的 led 台灯上,台灯的金属 软管可以任意弯曲,使激光头能够朝任何方向发射激光。激光器使用 6V 铅酸电池供电,并
ST188 是由高发射功率红外光电二极管和高灵敏度可调光电晶体管组成的光电传感器, 有一个反射头和一个接收头,该传感器原用在智能车上,做这个设计的时候,拆下了智能车 的传感器电路板,只使用其中的接收管用于本装置中的对射式激光探测器。该探测器是模拟 传感器,输出电压会随光强变化,因此使用了一个施密特迟滞反向器对输出信号进行鉴别。 实践发现,不使用施密特迟滞反向器时输出的高电平大约只有 3V,低于 3.5V,不在单片机 的高电平范围内,而加了施密特迟滞反向器,单片机能正确分辨器高低电平,但是这样使得 挡光时输出的是高电平,为了与 E18-D80NK-N 的特性一致而兼容一个程序,在施密特迟滞 反向器后再接一个 74HS00 与非门(当非门使用),使得两个传感器的输出特性一致。