商场客流量检测系统说明书

商场客流量检测系统说明书
商场客流量检测系统说明书

目录

附录C:程序清单 (22)

1绪论

1.1引言

现如今,随着科技的不断迅猛发展,使得电子技术、微型单片机技术的应用是空前的广泛,伴随着科学技术和生产的不断发展,需要对各种参数进行测量。客流量测量是其中重要的参数。目前绝大数商场都采用传统的进出口系统或者根本没有,并且关于顾客在某个季节对某些商品的喜好与需求没有一个科学合理的统计调查,造成一些商品销售库存、另一些商品销售短缺的尴尬局面,商场客源减少却没有及时了解,不利于商场的最佳运营。但如果专门安排人员去调研这方面,不仅浪费资源、影响耽误顾客购物,而且得出的结果不一定准确。鉴于此,设计一个自动检测商场进入顾客的总人数,现在还有多少人在商场内,对顾客进入商场购物表示欢迎的科学系统是很有利用价值的。

1.2设计内容及设计参数

本文设计的商场客流量自动检测系统主要是先通过光电传感器进行信号的采集,其中检测可以采用激光传感器。然后对采集的信号送到单片机进行处理,单片机通过程序在液晶显示屏上显示相应的人数,达到自动检测进出商场人数的效果。论文进行的主要工作:

1、主控制器选择;

2、光电传感器的选择;

3、按键系统的选择;

4、显示器的选择;

5、系统硬件电路设计;

6、系统主程序的设计;

7、系统子程序的设计;

8、系统的硬件和软件的调试。

1.3设计总体方案

本系统的总体设计方案如图1-1所示,系统以STC89C52RC单片机为主控器,通过对射型光电传感器对客流量进行检测,选用LCD1602液晶显示器作为人机交互界面,系统还包括晶振电路和复位电路,用以构成单片机的最小系统,同时电源模块给单片机和传感器提供5V供电。信号采集部分主要是通过光电传感器来实现。

而液晶显示模块则是通过对光电传感器采集到的信号进行相应的处理。如当有人进

出商场时会给单片机传送较低的电频,此时通过已经编好的程序,显示屏上的总人数会相应的加上一,剩余人数加一,如果有人出去的话,出去的人数减一,剩余人数也减一。

图1-1系统框图

2系统硬件设计

2.1系统硬件总体介绍

当今主流的工业型处理器为STC51、52系列以及更高级的32位单片机,52系列单片机以其简单的串口下载方式和价格低廉广受青睐。根据要求,本系统选取STC89C52系列单片机作为系统的主控芯片,其他硬件包括光电传感器、主控电路、驱动电路、输出控制器和显示器等。 2.1.1单片机最小系统

89C52系列单片机的最小系统包括:电源、复位电路和晶振电路,有了这些,52就有了工作的物理条件了。单片机最小系统如图2-1所示。

图2-1单片机最小系统

2.1.2晶振电路

89C 52系列单片机有两种时钟来源,分别为内部时钟方式和外部时钟方式。如图2-2所示。

2-2晶振电路

在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路

通常C1和C2一般取22pF 至30pF ;晶振的频率取值在

1.2MHz 至12MHz 之间。对于外接时钟电路,要求XTAL1接地,XTAL2脚接外部时钟;对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz 即可。晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。

对于内部时钟方式,其稳定性较外部时钟时钟方式好。通常内部时钟方式的晶振取11.0592MHz ,以便准确得到9600和19200波特率,用于串口通讯。本系统采用内部时钟方式。 2.1.3复位电路

51、52类单片机的复位电路有两种方式,即上电复位方式和按键复位方式。如图2-3所示。

STC89C52单片机

信号采集

按键模块

电源模块 液晶显示

图2-3复位电路

复位电路的作用是在上电或复位过程中,控制CPU 的复位状态:这段时间内让CPU 保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU 发出错误的指令、执行错误操作,也可以提高电磁兼容性能。

单片机在启动时都需要复位,以使CPU 及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST 引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST 引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU 就可以响应并将系统复位。

按键复位需要人为在复位输入端RST 上加入高电平。一般采用的办法是在RST 端和正电源VCC 之间接一个按钮。当人为按下按钮时,则VCC 的+5V 电平就会直接加到RST 端。手动按钮复位的电路如图2-3所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。上电复位电路如图2-3所示,只要在RST 复位输入引脚上接一电容至VCC 端,下接一个电阻到地即可。本系统采用按键复位方式。 2.1.4安普得光电传感器

商场客流量检测系统是以光电传感器来检测进出商场的客流数,采用光电检测具有非接触,精度高,反应快,形式灵活多样等优点,并且可以测出进出商场的人流量,从而得出商场中的剩余人数。

本系统采用的是安普得对射式光电传感器,相比于常用的槽型光电传感器,对射式光电传感器,该类光电传感器有安装简便,反应速度快,成本低等特点,并且有效的实现了对进出商场人数的信号采集,实物图如图2-4所示:

图2-4安普得光电传感器

图示左端为其接收端,右端为发射端。其中接收端的三根接线中,黑色为信号线并与单片机I/O口相连,连线图如图2-5所示,其作用是将激光采集的信息传送给单片机,棕色和蓝色皆为电源线,棕色接正级,蓝色接负级。发射端的两条线都是电源线,棕色接正级,蓝色接负级。并且入口光电激光传感器的信号线接单片机的P3.2接口,出口光电激光器的信号线接单片机的P3.3接口。

当有人进入商场时,激光器发射激光的光路被遮挡,激光传感器会在信号脚产生高电平,此时显示屏进行加一操作;当有人出商场时,显示屏会进行减一操作,并且通过算法算出商场中还剩余多少人。

2-5信号线与单片机接口

在将光电传感器与单片机接好后,将其固定在如图2-6所示的一个装置上,传感器的发射端与接收端对齐安装。安装后的光电传感器部分如图2-6所示。

接收器

接收器

激光发射器

激光发射器

激光传感器

的电源线

入口信号线

出口信号线

图2-6激光传感器安装图

光电传感器首先是将变化的被测量量转换成变化的光信号,然后借助光电元件进一步将光信号转换成高低电平信号。光电传感器是由光源,光学通路和光电元件三部分组成的,如图2-6所示,激光发射器发射光线,由接收器接受,当有物体遮住光线时,形成一个低电平信号,由I/O口将信号传给单片机,从而实现计数。

2.1.5显示电路

在常用的数码管、LCD1602、12864和各种型号的彩屏等显示器中。本系统采用LCD1602作为输入、输出的信号显示器以满足显示要求和精简性,LCD1602为字符型液晶显示屏有显示字母和数字方便,成本较低,控制简易等优点。其内部集成有显示芯片显示两行,可以识别英文字母、阿拉伯数字和日语假名。其实物如图2-7所示:

2-7LCD1602液晶显示屏

LCD1602的含义是指其点阵为12*2,以5*7可以显示两行,可显示字符数字等。其接口如图2-8所示,

LCD液晶

显示屏引脚

图2-8LCD1602接口

LCD1602有串行和并行两种方式,其中并行传输速度快,但接线多;串行传输接线少,但速度慢。由于本系统是在商场检测客流量,反应太慢会使得到的结果失去准确度,因此采用并行传输方式。并行传输方式接口如图2-8所示;LCD1602液晶显示器内部的控制器共有11条控制指令,如表2-1、2-2所示,其读写操作,屏幕和光标的操作,都是通过指令编程来实现的。

图2-9串口接线图

LCD1602引脚和指令功能如表2-1、2-2所示

符号名称功能

1 VSS 接地0V

(注:忙标志为"1"时,表明正在进行内部操作,此时不能输入指令或数据,要内部操作结束,即忙标志为“0”时。)

2.1.6下载电路

本系统的下载电路以USB转串口芯片CH340为核心,将USB转为串口,然后和单片机的RX、TX引脚进行串口通信,USB通过CH340转IrDA红外或者转打印口,在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口、或者将普通的串口设备直接升级到USB总线。通过USB下载电路将程序的HEX文件下载至单片机另外USB还为主控板提供工作所需5V电源其原理图如图2-10所示:

图2-10USB下载电路

2.1.7串口电路

本课题设计采用的是常用的串口通讯,协议转换芯片是采用MAX232A,MAX232A可以用作单片机和单片机之间、单片机和PC机串行口之间的符合RS-232串行接口电路,只要将待进行串行传输的设备的发送和接收端相应的接上,编程即可。在本文设计的系统中,串口主要起调试和烧录程序的作用,其接口原理图和实物图如图2-11、2-12所示

图2-12串口电路

2.1.8开关电路

本课题的开关电路接口原理图如图2-13所示。其中开关16打开,LED开始工作;开关15打开,数码管开始工作;开关14打开,蜂鸣器开始工作;开关13打开,LCD1602液晶显示屏开始工作;开关12打开,12864液晶显示屏开始工作;开关11打开,6N317芯片开始工作;开关10打开,18B20温度传感器开始工作;开关9工作,开关开始工作。

图2-13开关电路

3系统软件设计

3.1程序设计使用工具

在将程序写好后,利用Kile软件对程序进行编译、编辑和调试。然后将程序下载到单片机中通过stc-isp软件(型号-15xx-v6.57)对单片机进行编程从而实现预期的各项功能。

3.2系统软件设计流程图

程序的主要功能是将采集来的信号进行处理,读出并处理光电传感器感应出的高低电平,再调用1602子程序在液晶显示屏上显示人流信息。其程序流程如图3-1所示:

4

误,优化程序结构,使系统达到期望的功能,进而固化软件,使其产品化。

4.1系统实物展示

将所有硬件模块的功能理解后,在Keil软件中编译程序无误后,接下来就要将程序下载到单片机中进行仿真调试,系统的实物如图4-1所示:

显示人

出口激

入口激

图4-1系统实物展示

4.2拓展程序

在将主板焊好后便要熟悉主板所有的电路,在此基础上又需要进行两个拓展程序,分别是按键点亮LED灯的个数,以及数码管动态显示。经实验得结果正确无误,其按键点亮灯的实验结果如图4-2所示。

图4-2LED灯实物展示

数码管的动态显示就是通过程序在数码管中显示出相应的字符或数字,这在我们的日常生活中很常见,比如商店门口就会用此显示很多信息。其实物图如4-3所示:

显示字

图4-3数码管动态显示实物

4.2系统的调试过程

4.2.1硬件电路调试

1、错线、开路、短路:由于设计错误和加工过程中的工艺性错误所造成的错线、开路、短路等故障。在焊接时,贴片电阻的焊接比较麻烦,并且焊接过后还要用万用表检测来检查短路,所以每次焊接都会很小心耗时保证正确,一旦中间某个焊接的环节出错后将会给后面的调试带来麻烦。

解决方法:画原理图时要仔细检查、校正,焊接时找准元器件,焊好电阻要用万用表检测,各个模块焊好也要逐一检测。

2、元器件损坏:对于不熟悉元器件的使用要求及调试过程中的操作不当致使器件损坏,比如焊接显示屏时会出现引脚短路致使显示屏无法显示。

解决方法:在设计过程中要明确各元器件的工作条件,严格按照制作要求进行操作,损坏的元器件要及时更换,以免损坏其他元件或影响电路功能的实现。

3、电源故障:设计中存在电源故障,即上电后将造成元器件损坏、无法正常供电,电路不能正常工作。电源的故障包括:电压值不符和设计要求,电源引出线和插座不对应,各档电源之间的短路,变压器功率不足,内阻大,负载能力差等。

解决方法:电源必须单独调试好以后才能加到系统的各个部件中。本设计中就出现电源故障经过一个稳压电路才使其正常工作。

4.2.2硬件调试方法

在样机加电之前,首先用万用表等工具,根据硬件电器原理图和装配图仔细检查样机线路的正确性,并核对元器件的型号、规格和安装是否符合要求。应特别注意电源的走线,防止电源之间的短路和极性错误,并重点检查扩展系统总线(地址总线、数据总线和控制总线)是否存在相互间的短路或与其它信号线的短路。第二步是加电后检查各个插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意单片机插座上的各点电位,若有高压,联机时将会损坏仿真器。第三步是在不加电情况下,除单片机以外,插上所有的元器件,最后用仿真适配器将样机的单片机插座和仿真器的仿真接口相连,为联机调试做准备。

利用Keil 软件对源程序编辑、编译和调试成功后,生成的.Hex.文件,编译过程如图4-4所示。

图4-4Keil 软件界面图

调试过程:

1) 首先接上USB ——RS232C 信号线,安装串口驱动程序; 2) 然后打开STC ——ISP 界面,进行软件调试;

3) 打开软件先进行下面准备工作1:选择自己的CPU 型号STC89C52RC2:选择自己的端口:根据之前安装的串口驱动程序,右键——我的电脑——属性——硬件——COM 查看自己的输出端口号3:选择波特率、最高、最低; 4) 打开程序文件;

5) 程序编译后生成的.Hex 文件; 6) 下载程序至单片机,调试; 7) 重复2和5。

注意:在调试程序时,要把拨码开关拨到相对应的ON 状态。下载调试界面如图4-5所示。

图4-5下载界面

4.3系统调试结果

将正确的COM 口用STC ——ISP 将.Hex 文件烧录到单片机中,将激光传感器的信号接口与单片机的I/O 连接起来。打开电源,拨开按键开关的1602按键,接通液晶显示屏,这样当入口激光被遮挡,显示屏上显示加一,同理出口被遮住减一。测试结果显示,本系统实现了预期功能。系统最终调试结果如图4-6所示。

图4-6系统最终调试结果

5总结

弹指一瞬,三个星期的课程设计飞快的进入尾声,这段时间所设计的商场客流量检测系统以51单片机为核心,配合光电传感器很好的解决了商场由于不能准确估计顾客人数而引发的一系列问题,并且对网吧,宾馆等公共场所同样适用,具有

入口人数

出口人数

剩余人数

很好的应用前景。

这三个星期来的学习让我颇有感触,科学正在飞速的发展,我们在努力提升自己理论知识的同时对自己的实践动手能力也要有质的提高,尤其是在专业课这方面,知道很重要,做出来更重要。本次设计主要包括硬件电路板设计和软件编程。软件设计包括单片机语言设计控制系统并仿真、实现。硬件设计包括绘制电路原理图、插件焊接、再做硬件测试。通过这些都使我对采用单片机设计方法有了更深的理解和掌握,同时也让我把所学的知识广泛的应用到实际中。此外由于时间和试验条件的限制,本论文在许多方面做得还不够完善,由于时间仓促,本论文中还存在以下问题有待解决:

1.输入信号采集部分,应选用更灵敏,更适合于实际应用的激光传感器,如光幕传感器。

2.本系统的控制器采用8位51单片机,其接口有限,速度较慢,为了方便扩展其他功能,需要更换性能更好、速度更快的处理器,如STM32或MSP430等低功耗单片机。

3.输出驱动部分,在本系统中以实验仿真为目的,主要讲述52系列单片机在测控系统中的应用。而在实际工业中因为一些电力设备均采用大电压交流供电,所以在输出控制继电器部分还需增添一级继电器,以承受更大的电流,驱动大功率设备。

4.本系统没有全面的考虑两个人并排进出商场时的综合情况。

谢辞

通过这次课程设计,让我们复习了很多学过的旧知识,同时锻炼了自己的动手能力和查阅资料能力,尤其是解决在实际中解决排查问题的能力。更重要的是通过这设计,让我们深刻体会到了团队合作的重要性!在此我要感谢同组的张静同学所给与的巨大帮助,让我从一开是的手足无措到后面的游刃有余综合来看,本次课程设计包括硬件和软件部分,是综合多学科知识的平台,对于我们专业课的学习和知识面的扩展有极大的帮助,也符合了对于复合型人才的培养目标。在设计过程中,使我对单片机有了更为深刻的理解,也让我很好的将课本知识应用于实际,不在将学和用分开。

虽然时间很短,但我确收获了浓浓的喜悦,收获了同学们热心的帮助,收获了

书本上重要的知识,我的指导老师穆老师的耐心教导与技术支持,给我的启迪很大。这次的设计对我的人生有很大促进,让我养成了认真思考、仔细探索的学习习惯。参考文献

[1]P.Scherzal,实用电子元器件与电路基础[M].北京:电子工业出版社,2009.

[2]郭天祥.51单片机C语言教程[M].北京:电子工业出版社,2008.

[3]杨欣.电子设计从零开始[M].北京:清华大学出版社,2009.

[4]彭伟.单片机C语言程序设计100[M].北京:电子工业出版社,2009.

[5]李学礼.基于Protues的8051单片机实例教程[M].北京:电子工业出版社,2009.

[6]陈海宴.51单片机原理及应用[M].北京航空航天大学出版社,2010.

[7]LogicalCircuitsAnalysis&Design[J],PrenticeHall,2003`(6):40-94

[8]李军,基于MCS-51单片机的航空转速表检测仪[J],仪表技术与传感器,2008(6):29-30

[9]丁夕兰,加强单片机技术实践教学的方法[J],职业教育研究,2005(9):136-137

[10]吴怀超,浅析MCS-51单片机的教学方法[J],科技创新导报,2010(33):176~177 附录A:电路板原理图

附录B:电路板PCB图

附录C:程序清单

#include

#include

typedefunsignedcharBYTE;

typedefunsignedintWORD;

typedefbitBOOL;

sbitrs =P2^0;

sbitrw=P2^1;

sbitep=P2^2;

sbitin=P3^2; //进口商场检测

sbitout=P3^3; //出口激光检测

BYTEcodedis1[]={"IN:"};

BYTEcodedis2[]={"OUT:"};

BYTEcodedis3[]={"COUNT:"};

WORDnum,num2,num3;

delay(BYTEms)

{ //延时子程序BYTEi;

while(ms--)

{

for(i=0;i<250;i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

BOOLlcd_bz()

{ //测试LCD忙碌状态BOOLresult;

rs=0;

rw=1;

_nop_();

_nop_();

_nop_();

result=(BOOL)(P1&0x80);//置数据存储器地址ep=0;

returnresult;

}

lcd_wcmd(BYTEcmd)

{ //写入指令数据到LCD while(lcd_bz());

rs=0;

rw=0;

ep=0;

_nop_();

_nop_();

P1=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1; //产生下降沿

_nop_();

_nop_();

ep=0;

}

voidlcd_pos(BYTEpos)

{ //设定显示位置

lcd_wcmd(pos|0x80);

}

voidlcd_wdat(BYTEdat)

{ //写入字符显示数据到LCD while(lcd_bz());

rs=1;

rw=0;

ep=0;

P1=dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1; //产生下降沿

_nop_();

_nop_();

ep=0;

}

voidxianshi() //数字的转换和显示

{

BYTEqian,bai,shi,ge;

qian=num/1000;

bai=num%1000/100;

shi=num%100/10;

ge=num%10;

lcd_pos(0x03);

lcd_wdat(qian+0x30); //数字和ASCII码之间的转换lcd_wdat(bai+0x30);

lcd_wdat(shi+0x30);

lcd_wdat(ge+0x30);

}

voidxianshi2() //数字的转换和显示

{

BYTEqi,ba,sh,g;

qi=num2/1000;

ba=num2%1000/100;

g=num2%10;

lcd_pos(0x0c);

lcd_wdat(qi+0x30);

lcd_wdat(ba+0x30);

lcd_wdat(sh+0x30);

lcd_wdat(g+0x30);

}

voidxianshi3() //数字的转换和显示{

BYTEqiann,baii,shii,gee;

qiann=num3/1000;

baii=num3%1000/100;

shii=num3%100/10;

gee=num3%10;

lcd_pos(0x49);

lcd_wdat(qiann+0x30);

lcd_wdat(baii+0x30);

lcd_wdat(shii+0x30);

lcd_wdat(gee+0x30);

}

lcd_init()

{ //LCD初始化设定

delay(1);

lcd_wcmd(0x0c); //开显示

delay(1);

lcd_wcmd(0x06); //地址加1

delay(1);

lcd_wcmd(0x01); //清除LCD的显示内容

delay(1);

}

voidmain()

{

BYTEi;

lcd_init(); //初始化LCD

delay(10);

lcd_pos(0x00); //设置显示位置为第一行的字符i=0;

while(dis1[i]!='\0') //显示进入商场的人数

{

lcd_wdat(dis1[i]);

i++;

}

lcd_pos(0x08); //设置显示位置为第一行的字符

i=0;

{

lcd_wdat(dis2[i]); //显示从商场出来的人数

i++;

}

lcd_pos(0x43); //设置显示位置为第二行的字符i=0;

while(dis3[i]!='\0')

{

lcd_wdat(dis3[i]); //显示商场中剩余的人数

i++;

}

while(1)

{

xianshi();

xianshi2();

xianshi3();

if(in==0) //按键扫描

{

delay(10);

if(in==0)

{

while(!in);

{

num=0;

}

else

num++;

}

}

if(out==0)

{

delay(10);

if(out==0)

{

while(!out);

if(num2==10000)

{

num2=0;

}

else

num2++;

}

}

num3=num-num2;

相关主题
相关文档
最新文档