车辆出入自动管理系统设计方案.docx_第1页
车辆出入自动管理系统设计方案.docx_第2页
车辆出入自动管理系统设计方案.docx_第3页
车辆出入自动管理系统设计方案.docx_第4页
车辆出入自动管理系统设计方案.docx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

stc 杯 单 片 机 系 统 设 计 大 赛车辆出入自动管理系统参赛人: 作品简介开发背景现代社会中,感应门的应用已经十分广泛,在人来人往的各大银行中使用最多,我们所设计的一个题目就是由感应门拓展而来。经常有新闻报道某些学校由于车辆出入没有严格管理导致学生受伤,某些企业也因此造成不小的损失,因此,我们将在传统的大门上进行改进,让希望进入的车辆进入,而不能识别的车辆只允许停在门外,由此产生了我们的设计题目:车辆出入自动控制系统。结构说明它是由四块模块组成:两块均含stc系列单片机的开发板,一对无线接收装置,一块步进电机,一对红外对管。功能与使用说明每个司机将配备一个无线发送端的遥控开关,只需在靠近大门时按下开关,接收模块将接收到发送端发送的信号,它将信息输送给单片机进行匹配,如果匹配成功,单片机将控制步进电机带动栏杆运转,开启大门,这样车辆便可进入。当车辆的车身挡住红外对管的时候,系统将进入等待车辆完全通过的状态,直到车辆完全通过红外对管时,红外对管将返还信息给单片机,再由单片机控制步进电机拖动栏杆,使大门关闭。这样便实现了车辆出入的自动化管理。视频中我们只演示了进入的状态,后期我们将红外对管安装的位置与大门的位置为统一垂直方向,这样车辆出去也就一样的了。作品特色我们所设计的项目主要用于像学校、私企等通常只希望本校或本企业的车辆进入,而外来车辆一般只允许停在门外,这样便于管理且安全。我们有一个数据库,记录每辆车的号码信息,所以只有当车辆信息与数据库里的信息匹配时才允许其进入。据我们所做的市场调查,现在的车辆出入要么是人工遥控,要么是打卡,而我们这样一款系统完全实现了自动化,节省了人力、财力。我们后期工作是进一步完善这款系统各模块的耦合性,提高各部分的功能和外形塑造,还可将射频rfid技术运用在这款系统上,这样不仅实现了自动化,还可以清楚地知道每辆车的信息,确保了车辆的管理和安全。图片设计说明设计方案车辆的信息匹配(由无线收发模块连接,数据库在单片机存储器里)(匹配成功)开启大门(信息匹配成功后由单片机控制步进电机拖动栏杆运动)车辆是否完全进入(由一对红外对管检测车身是否完全通过)?(完全通过)关闭大门(红外对管将所测的信息结果返还给单片机,由单片机控制步进电机带动栏杆运动)实现功能设计原理开发板:我们采用的stc公司的iap15f2k61s2型号单片机来实现在p2.1口接入了光电开关的信号输入端,p1.3口到p1.7口接入了步进电机的驱动uln2003通过这个驱动节步进电机。达到控制通过单片机控制电机运转的目的。nrf2401无线收发模块:该模块中包含了2个模块,2个模块的结构完全相同,只是他们所选择的工作模式不同,一个是接收模式,一个是发送模式。其接线方式和单片机的连线完全相同,完全由程序来控制其是否工作。这个无线模块分为4个模式:发送模式,接收模式,空闲模式,关机模式。我们的程序中规定了每打开一次电源,就发送一次数据。等待第二个司机打开电源发送数据。而且每接收一次就进行数据匹配,如果匹配成功单片机就驱动步进电机带动栏杆打开大门。步进电机:主要用于控制栏杆转动角度,项目中,我们通过程序设置为90度。当无线接收模块接收到信号时,程序中标志位置1,调用开门函数,电机正转90度,大门打开,当光电开关检测到车辆完全通过时,调用关门函数,电机反转90度,大门关闭。其中p1.3接j17的d端、p1.4接j17的c端、p1.5接j17的b端、p1.6接j17的a端。步进电机接右 uln2003 的右下角的排针。步进电机的红线对应 vcc。 接线图驱动方式选择光电开关:对射式光电开关包含在结构上相互分离且光轴相对放置的发射器和接收器,发射器发出的光线直接进入接收器。当被检测物体经过发射器和接收器之间且阻断光线时,光电开关就产生了开关信号。当检测物体是不透明时,对射式光电开关是最可靠的检测模式。工作原理原理图nrf:步进电机:程序如下:接收程序:#include #include typedef unsigned char uchar;typedef unsigned char uint; uchar code f_rotation8=0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48; uchar code b_rotation8=0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08; void delay1(unsigned int i)uchar x,j;for(j=0;ji;j+)for(x=0;x=148;x+);void opendoor() uchar i; uchar k=128;while(k-)for(i=0;i8;i+) p1 = f_rotationi; delay1(1); void closedoor() uchar i; uchar k=128;while(k-)for(i=0;i8;i+) p1 = b_rotationi; /逆时针转动 delay1(1); sbit miso=p22;sbit mosi=p32;sbitsck =p26;sbitce =p25;sbitcsn=p27;sbitirq=p23;sbitkey=p21;uchar txbuf32=0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,;uchar seg10=0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; #define tx_adr_width 5 / 5 uints tx address width#define rx_adr_width 5 / 5 uints rx address width#define tx_pload_width 32 / 20 uints tx payload#define rx_pload_width 32 / 20 uints tx payloaduint const tx_addresstx_adr_width= 0x34,0x43,0x10,0x10,0x01;/本地地址uint const rx_addressrx_adr_width= 0x34,0x43,0x10,0x10,0x01;/接收地址#define read_reg 0x00 / 读寄存器指令#define write_reg 0x20 / 写寄存器指令#define rd_rx_pload 0x61 #define wr_tx_pload 0xa0 #define flush_tx 0xe1 #define flush_rx 0xe2 #define reuse_tx_pl 0xe3 #define nop 0xff #define config 0x00 #define en_aa 0x01 #define en_rxaddr 0x02 #define setup_aw 0x03 #define setup_retr 0x04 #define rf_ch 0x05 #define rf_setup 0x06 #define status 0x07 #define observe_tx 0x08 #define cd 0x09 #define rx_addr_p0 0x0a #define rx_addr_p1 0x0b #define rx_addr_p2 0x0c #define rx_addr_p3 0x0d #define rx_addr_p4 0x0e #define rx_addr_p5 0x0f #define tx_addr 0x10 #define rx_pw_p0 0x11 #define rx_pw_p1 0x12 #define rx_pw_p2 0x13 #define rx_pw_p3 0x14 #define rx_pw_p4 0x15 #define rx_pw_p5 0x16 #define fifo_status 0x17 void delay(unsigned int s);void inerdelay_us(unsigned char n);void init_nrf24l01(void);uint spi_rw(uint uchar);uchar spi_read(uchar reg);void setrx_mode(void);uint spi_rw_reg(uchar reg, uchar value);uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars);uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars);unsigned char nrf24l01_rxpacket(unsigned char* rx_buf);void nrf24l01_txpacket(unsigned char * tx_buf);void delay(unsigned int s)unsigned int i;for(i=0; is; i+);for(i=0; i0;n-)_nop_();void init_nrf24l01(void) inerdelay_us(100); ce=0; csn=1; sck=0; spi_write_buf(write_reg + tx_addr, tx_address, tx_adr_width); / 写本地地址spi_write_buf(write_reg + rx_addr_p0, rx_address, rx_adr_width); / 写接收端地址spi_rw_reg(write_reg + en_aa, 0x01); spi_rw_reg(write_reg + en_rxaddr, 0x01); spi_rw_reg(write_reg + rf_ch, 0); spi_rw_reg(write_reg + rx_pw_p0, rx_pload_width);spi_rw_reg(write_reg + rf_setup, 0x07); spi_rw_reg(write_reg + config, 0x0f); uint spi_rw(uint uchar)uint bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) mosi = (uchar & 0x80); uchar = (uchar 1); sck = 1; uchar |= miso; sck = 0; return(uchar); uchar spi_read(uchar reg)uchar reg_val;csn = 0; spi_rw(reg); reg_val = spi_rw(0); csn = 1; return(reg_val); uint spi_rw_reg(uchar reg, uchar value)uint status;csn = 0; spi_rw(value); csn = 1; return(status); uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars)uint status,uchar_ctr;csn = 0; status = spi_rw(reg); for(uchar_ctr=0;uchar_ctruchars;uchar_ctr+)pbufuchar_ctr = spi_rw(0); csn = 1; return(status); uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars)uint status,uchar_ctr;csn = 0; /spi使能 status = spi_rw(reg); for(uchar_ctr=0; uchar_ctruchars; uchar_ctr+) csn = 1; /关闭spireturn(status); / /*功能:数据接收配置 void setrx_mode(void)ce=0;ce = 1; inerdelay_us(130);/*功能:数据读取后放如rx_buf接收缓冲区中unsigned char nrf24l01_rxpacket(unsigned char* rx_buf) unsigned char revale=0;sta=spi_read(status);/ 读取状态寄存其来判断数据接收状况if(rx_dr)/ 判断是否接收到数据 ce = 0; /spi使能spi_read_buf(rd_rx_pload,rx_buf,tx_pload_width);/ read receive payload from rx_fifo bufferrevale =1;/读取数据完成标志spi_rw_reg(write_reg+status,sta); /接收到数据后rx_dr,tx_ds,max_pt都置高为1,通过写1来清楚中断标志return revale;/*功能:发送 tx_buf中数据void nrf24l01_txpacket(unsigned char * tx_buf)ce=0;/standby i模式spi_write_buf(write_reg + rx_addr_p0, tx_address, tx_adr_width); / 装载接收端地址spi_write_buf(wr_tx_pload, tx_buf, tx_pload_width); / 装载数据spi_rw_reg(write_reg + config, 0x0e); / irq收发完成中断响应,16位crc,主发送ce=1; /置高ce,激发数据发送inerdelay_us(10);void startuart( void ) /波特率4800 scon = 0x50; tmod = 0x20; th1 = 0xfa; tl1 = 0xfa; pcon = 0x00; tr1 = 1;void r_s_byte(uchar r_byte) sbuf = r_byte; while( ti = 0 );/查询法 ti = 0; void main(void) uchar fb_flag=0;uchar i,temp=0;uchar rxbuf32; init_nrf24l01() ;startuart();delay(6000); while(1)setrx_mode(); if(nrf24l01_rxpacket(rxbuf) spi_rw_reg(write_reg + config, 0x0d); if(rxbuf0=txbuf0&rxbuf1=txbuf1&rxbuf2=txbuf2) fb_flag=1; while(fb_flag=0) ; while(fb_flag=1)opendoor(); fb_flag=0;while(key!=0); if (key=0) while(key!=1);delay1(2000); closedoor(); spi_rw_reg(write_reg + config, 0x0f); delay(200000); for(i=0;i32;i+) rxbufi=0;发送程序:#include #include typedef unsigned char uchar;typedef unsigned char uint;sbit miso=p22;sbit mosi=p32;sbitsck =p26;sbitce =p25;sbitcsn=p27;sbitirq=p23;#define tx_adr_width 5 / 5 uints tx address width#define rx_adr_width 5 / 5 uints rx address width#define tx_pload_width 32 / 20 uints tx payload#define rx_pload_width 32 / 20 uints tx payloaduint const tx_addresstx_adr_width= 0x34,0x43,0x10,0x10,0x01;/本地地址uint const rx_addressrx_adr_width= 0x34,0x43,0x10,0x10,0x01;/接收地址#define read_reg 0x00 / 读寄存器指令#define write_reg 0x20 / 写寄存器指令#define rd_rx_pload 0x61 #define wr_tx_pload 0xa0 #define flush_tx 0xe1 #define flush_rx 0xe2 #define reuse_tx_pl 0xe3 #define nop 0xff #define config 0x00 #define en_aa 0x01 #define en_rxaddr 0x02 #define setup_aw 0x03 #define setup_retr 0x04 #define rf_ch 0x05 #define rf_setup 0x06 #define status 0x07 #define observe_tx 0x08 #define cd 0x09 #define rx_addr_p0 0x0a #define rx_addr_p1 0x0b #define rx_addr_p2 0x0c #define rx_addr_p3 0x0d #define rx_addr_p4 0x0e #define rx_addr_p5 0x0f #define tx_addr 0x10 #define rx_pw_p0 0x11#define rx_pw_p1 0x12 #define rx_pw_p2 0x13 #define rx_pw_p3 0x14 #define rx_pw_p4 0x15 #define rx_pw_p5 0x16 #define fifo_status 0x17 void delay1(unsigned int i);void delay(unsigned int s);void inerdelay_us(unsigned char n);void init_nrf24l01(void);uint spi_rw(uint uchar);uchar spi_read(uchar reg);void setrx_mode(void);uint spi_rw_reg(uchar reg, uchar value);uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars);uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars);unsigned char nrf24l01_rxpacket(unsigned char* rx_buf);void nrf24l01_txpacket(unsigned char * tx_buf);void delay1(unsigned int i)uchar x,j;for(j=0;ji;j+)for(x=0;x=148;x+);void delay(unsigned int s)unsigned int i;for(i=0; is; i+);for(i=0; i0;n-)_nop_();void init_nrf24l01(void) inerdelay_us(100); ce=0; / chip enable csn=1; / spi disable sck=0; / spi clock line init highspi_write_buf(write_reg + tx_addr, tx_address, tx_adr_width); / 写本地地址spi_write_buf(write_reg + rx_addr_p0, rx_address, rx_adr_width); / 写接收端地址spi_rw_reg(write_reg + en_aa, 0x01); spi_rw_reg(write_reg + en_rxaddr, 0x01); spi_rw_reg(write_reg + rf_ch, 0); spi_rw_reg(write_reg + rx_pw_p0, rx_pload_width); spi_rw_reg(write_reg + rf_setup, 0x07); spi_rw_reg(write_reg + config, 0x0e); uint spi_rw(uint uchar)uint bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) mosi = (uchar & 0x80); uchar = (uchar 1); sck = 1; uchar |= miso; sck = 0; return(uchar); / return read uchar uchar spi_read(uchar reg)uchar reg_val;csn = 0; spi_rw(reg); reg_val = spi_rw(0); csn = 1; return(reg_val); uint spi_rw_reg(uchar reg, uchar value)uint status;csn = 0; status = spi_rw(reg); spi_rw(value); csn = 1; return(status); uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars)uint status,uchar_ctr;csn = 0; status = spi_rw(reg); for(uchar_ctr=0;uchar_ctruchars;uchar_ctr+)pbufuchar_ctr = spi_rw(0); / csn = 1; return(

温馨提示

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

评论

0/150

提交评论