智能快递柜资料_第1页
智能快递柜资料_第2页
智能快递柜资料_第3页
智能快递柜资料_第4页
智能快递柜资料_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、这一章讲了单片机在现在生活中的发张趋势和应用范围,并对本课题的背景及意义,阐述了其发展状况。简要说明了本文所介绍的内容。1.1 单片机的发展史单片单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早 是被用在工业控制领域。由于单片机在工业控制领域的广泛应用,为使更多的业内人士、学生、爱好者,产品开发人员掌握单片机这门技术,于是产生单片机开发板,比较有名的例如电子人DZR-01A单片机开发板。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小

2、,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别

3、是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利

4、条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。1.2 智能快递柜的发展趋势近年来,随着电子商务的迅猛发展,快递业务呈高速增长趋势,但快递末端“最后一公里”投递问题却成为快递发展的瓶颈。智能快递投递箱将快件暂时保存在投递箱内,并将投递信息通过短信等方式发送用户,为用户提供24小时自助取件服务,这种服务模式较好地满足了用户随时取件的需要,受到快递企业和用户的欢迎,为解决快件“最后一公里”问题提供了有效的解决方案。国家邮政局领导高度关注智能快递投递箱的发展,指示要尽快开展智能快递投递箱相关标准研究工作,以期在发展初期就对智能快递投递箱的使用与管理问题进行研究和规范,以推动这种服务模式规

5、范化、健康化发展。自2003年以来,随着电子商务的快速发展,物流面临着严峻的考验。众所周知,淘宝搞的双十一活动,掀起了一股网购大风。不仅如此,快递包裹也跟着席卷开来。各地的物流仓库都出现了快递包裹爆仓,出仓的速度远远跟不上进仓的速度。这种现象的出现与快递配送的“最后一公里”不无关系。各行各业试图解决这快递“最后一公里”的问题,包括增加配送人员,包裹代收,设立共同配送点等等,不过还是改变不了人等人的局面。最终,智能快递终端被引用进来。在国外,24小时自助快递站已经有10多年的发展历史,日本每栋楼宇都有一个标准的配置用来收发快递,操作十分简单,只有像信用卡等贵重或者重要物品一定要送达本人签字,德国

6、、俄罗斯、法国、爱沙尼亚等欧洲国都在使用。2012年2月至6月,DHL国际快递对瑞士3个不同地点的3台全天候自助包裹终端机进行了测试。第一台自助包裹终端机于2月安装在苏黎世的一家加油站,已经投入运营,另外两台将安装到瑞士西部地区。在国内,智能快递终端还处于刚刚起步状态。不少高新科技公司纷纷推出了各种快递终端。小部分地区已经出现了智能快递终端的身影,它们分布在大中专院校、企事业单位、社区、写字楼、工厂等地。给收件用户提供了一个自由便捷的快递服务。也许智能快递终端不能完美地解决物流的“最后一公里”,但是,可以肯定的是它将会给人们的生活带来极大的便利。1.3 设计研究的要求及能实现的主要内容智能快递

7、投递箱系统物联网这一核心技术,包括前台站点快件存取和后台中心数据处理两部分。物联网就是通过红外感应、蓝牙等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现对物品的智能化识别、定位、跟踪、监控和管理的一种网络。有了“物物相连”的网络后还需要依靠先进的信息处理技术。第2章 设计过程及方案2.1 设计方案系统采用STC89C52单片机板,使用红外线感应模块,按钮矩阵模块,蓝牙模块控制驱动器控制电机转动的不同角度,将齿轮和齿轮条与异步电机练接。就可以实现齿轮条的转动来控制机械臂的定位。我们在不同的三个按钮上设施了不同的使异步电机旋转的角度。有60度,120度,360度。

8、当操作不同的按钮时三个异步电机就会转动不同角度,机械臂移动到不同位置寻找物品。2.2 设计原理使用STC89C52单片机,在STC89C52单片机的P1.0-P1.3接步进电机一,P1.4-P1.7接步进电机二,在单片机P0.0-P0.3接步进电机三。在P2口接矩阵按键,在P3.2接红外遥控,在单片机的P3.1接蓝牙模块的RXD,在步进电机的P3.2口接TXD。其他引脚接VCC和GND。第3章 硬件电路设计3.1 最小系统设计 1)2)3)4)5)6) 在步进电机的P3.2口接TXD。其他引脚接VCC和GND3.2 重要元器件介绍3.2.1 单片机介绍单片机(Microcontrollers)

9、是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。该单片机具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,

10、CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。3.2.2 红外线介绍红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。发射机一般由指令键、调制电路、驱动电路、发射电路等几部分组成。当按下指令键或推动操作杆时,指令编码电路产生所需的指令编码信号,指令编码信号对载波进行调制,再由驱动电路进行功率放大后由发射电路向

11、外发射经调制定的指令编码信号。3.2.3 蓝牙介绍蓝牙( Bluetooth®2.485GHz的ISM波段的UHF无线电波)。3.2.4 步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机是一种感

12、应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。3.2.5 步进电机驱动器步进电机驱动器是

13、一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速和定位的目的。3.2.6 矩阵按键在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明

14、显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。第4章 软件设计软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。软件程序: #include "reg51.h"#inclu

15、de <math.h>#define GPIO_KEY P2#define const_interrupt_time 792 /840us定时值sfr AUXR=0x8e; sbit IR_sr=P32; /外部中断口,数据接收口void delay();void KeyDown(void);void TrunLeftMotor1(unsigned long angle);void TrunRightMotor1(unsigned long angle);void TrunLeftMotor2(unsigned long angle);void TrunRightMotor2(un

16、signed long angle);void TrunLeftMotor3(unsigned long angle);void TrunRightMotor3(unsigned long angle);void initial();/初始化外围void Int0(); /外部中断函数void detector_IR();long unsigned int NumKey=0;unsigned char ucMotorStep=0; /被触发的电机动作编号 unsigned char ucdata; /从遥控器中接受的编码unsigned char busy=0;unsigned char d=

17、0;/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void) SCON=0X50; AUXR=0x00; TMOD=0X21; TL1=0XFd; TH1=0XFd; ES=1; EA=1; TR1=1; initial(); while(1) KeyDown(); detector_IR(); if(NumKey=1) TrunLeftMotor1(60*1);delay();TrunLeftMotor2(60*1);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(

18、360*1);delay();TrunRightMotor2(60*1);delay();TrunRightMotor1(60*1);NumKey=0; if(NumKey=2) TrunLeftMotor1(60*2);delay();TrunLeftMotor2(60*2);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();TrunRightMotor2(60*2);delay();TrunRightMotor1(60*2);NumKey=0; if(NumKey=3) TrunLeftMotor1(6

19、0*3);delay();TrunLeftMotor2(60*3);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();TrunRightMotor2(60*3);delay();TrunRightMotor1(60*3);NumKey=0; if(ucMotorStep=1) TrunLeftMotor1(60*1);delay();TrunLeftMotor2(60*1);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay(

20、);TrunRightMotor2(60*1);delay();TrunRightMotor1(60*1);ucdata=0x74; if(ucMotorStep=2) TrunLeftMotor1(60*2);delay();TrunLeftMotor2(60*2);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();TrunRightMotor2(60*2);delay();TrunRightMotor1(60*2);ucdata=0x74; if(ucMotorStep=3) TrunLeftMotor

21、1(60*3);delay();TrunLeftMotor2(60*3);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();TrunRightMotor2(60*3);delay();TrunRightMotor1(60*3);ucdata=0x74; if(d=1) TrunLeftMotor1(60*1);delay();TrunLeftMotor2(60*1);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();Tr

22、unRightMotor2(60*1);delay();TrunRightMotor1(60*1); d=0; if(d=2) TrunLeftMotor1(60*2);delay();TrunLeftMotor2(60*2);delay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();TrunRightMotor2(60*2);delay();TrunRightMotor1(60*2); d=0; if(d=3) TrunLeftMotor1(60*3);delay();TrunLeftMotor2(60*3);d

23、elay();TrunLeftMotor3(360*1);delay();TrunRightMotor3(360*1);delay();TrunRightMotor2(60*3);delay();TrunRightMotor1(60*3); d=0; void KeyDown(void)char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)/读取按键是否按下delay();if(GPIO_KEY!=0x0f)/再次检测键盘是否按下GPIO_KEY=0X7F;switch(GPIO_KEY)case(0X77):NumKey=0; break;case(0X7b):N

24、umKey=1; break;case(0X7d): NumKey=2; break;case(0X7e):NumKey=3; break;GPIO_KEY=0XBF;switch(GPIO_KEY)case(0Xb7):NumKey=4; break;case(0Xbb):NumKey=5; break;case(0Xbd): NumKey=6; break;case(0Xbe):NumKey=7; break;GPIO_KEY=0XDF;switch(GPIO_KEY)case(0Xd7):NumKey=8 ; break;case(0Xdb):NumKey=9 ; break;case(

25、0Xdd): NumKey=10; break; case(0Xde):NumKey=11; break; GPIO_KEY=0XEF;switch(GPIO_KEY)case(0XE7):NumKey=12; break;case(0XEb):NumKey=13; break;case(0XEd): NumKey=14; break; case(0XEe):NumKey=15; break;while(a<50)&&(GPIO_KEY!=0xf0) /检测按键松手检测 delay();a+;void delay()unsigned int i = 200;while(i

26、-);void TrunLeftMotor1(unsigned long angle)unsigned char tmp;unsigned char index = 0;unsigned long beats = 0;unsigned char code BeatCodeLeft8 = 0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06;beats = (angle*4076)/360;while(beats-)tmp = P1;tmp = tmp & 0xF0;tmp = tmp | BeatCodeLeftindex; P1 = tmp;i

27、ndex+;index = index & 0x07;delay();void TrunRightMotor1(unsigned long angle)unsigned char tmp;unsigned char index = 0;unsigned long beats = 0;unsigned char code BeatCodeRight8 = 0x06, 0x07, 0x03, 0x0B, 0x09, 0x0D, 0x0C, 0x0E;beats = (angle*4076)/360;while(beats-)tmp = P1;tmp = tmp & 0xF0;tmp

28、 = tmp | BeatCodeRightindex; P1 = tmp;index+;index = index & 0x07;delay();void TrunLeftMotor2(unsigned long angle)unsigned char tmp;unsigned char index = 0;unsigned long beats = 0;unsigned char code BeatCode8 = 0xE0, 0xC0, 0xD0, 0x90, 0xB0, 0x30, 0x70, 0x60;beats = (angle*4076)/360;while(beats-)

29、tmp = P1;tmp = tmp & 0x0F;tmp = tmp | BeatCodeindex; P1 = tmp;index+;index = index & 0x07;delay();void TrunRightMotor2(unsigned long angle)unsigned char tmp;unsigned char index = 0;unsigned long beats = 0;unsigned char code BeatCode8 = 0x60, 0x70, 0x30, 0xB0, 0x90, 0xD0, 0xC0, 0xE0;beats = (

30、angle*4076)/360;while(beats-)tmp = P1;tmp = tmp & 0x0F;tmp = tmp | BeatCodeindex; P1 = tmp;index+;index = index & 0x07;delay();void TrunLeftMotor3(unsigned long angle)unsigned char tmp;unsigned char index = 0;unsigned long beats = 0;unsigned char code BeatCodeLeft8 = 0x0E, 0x0C, 0x0D, 0x09,

31、0x0B, 0x03, 0x07, 0x06;beats = (angle*4076)/360;while(beats-)tmp = P0;tmp = tmp & 0xF0;tmp = tmp | BeatCodeLeftindex; P0 = tmp;index+;index = index & 0x07;delay();void TrunRightMotor3(unsigned long angle)unsigned char tmp;unsigned char index = 0;unsigned long beats = 0;unsigned char code Bea

32、tCodeRight8 = 0x06, 0x07, 0x03, 0x0B, 0x09, 0x0D, 0x0C, 0x0E;beats = (angle*4076)/360;while(beats-)tmp = P0;tmp = tmp & 0xF0;tmp = tmp | BeatCodeRightindex; P0 = tmp;index+;index = index & 0x07;delay();void Int0() interrupt 0 unsigned char i,j; EX0=0; / 关闭外部中断0 i=10; while(i-) TH0=(65535-con

33、st_interrupt_time)/256; TL0=(65535-const_interrupt_time)%256; TR0=1; while(!TF0); TF0=0; TR0=0; while(IR_sr) EX0=1; return; /每840us检测一次P3.2口是否出现高电平,共检测10次,出现高电平则重新进入中断 while(!IR_sr);/ 等待低电平过去 j=5; while(j-) TH0=(65535-const_interrupt_time)/256; TL0=(65535-const_interrupt_time)%256; TR0=1; while(!TF0

34、); TF0=0; TR0=0; while(!IR_sr) EX0=1; return; /每840us检测一次P3.2口是否出现低电平,共检测5次,出现低电平则重新进入中断 while(IR_sr); / 等待高电平过去 for(i=0;i<4;i+) for(j=0;j<8;j+) while(!IR_sr);/ 等待低电平过去 TH0=(65535-const_interrupt_time)/256; TL0=(65535-const_interrupt_time)%256; TR0=1; while(!TF0); TF0=0; TR0=0; /延时840us if(IR_

35、sr) /判断是否是高电平 ucdata|=0x80; /最高位置“1” while(IR_sr); / 等待高电平过去 ucdata>>=1; /如果是低电平则右移一位 EX0=1; / 开中断 return;void initial() /初始化外围 ET0=1; /允许定时中断 IT0=1; /下降沿触发 EX0=1; /允许外部中断 EA=1; /开总中断void detector_IR() if(ucdata=0x79) ucMotorStep=1; /按下1 else if(ucdata=0x73) ucMotorStep=2; /按下2 else if(ucdata=0x50) ucMotorStep=3; /按下3 else if(ucdata=0x7b) ucMotorStep=4; /按下4 else if(ucdata=0x71) ucMotorStep=5; /按下5 else if(ucdata=0x52) ucMotorStep=6; /按下6 else if(ucdata=0x5E) ucMotorStep=7; /按下7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论