这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 毕业设计专区 » 利用GSM模块的电梯自动控制系统

共3条 1/1 1 跳转至

利用GSM模块的电梯自动控制系统

专家
2013-01-14 13:55:24     打赏

作者:北华航天工业学院电子工程系 胡月 荔智强 杜永博
指导教师:崔瑞雪 王晓

  作品简介

  随着社会的不断发展,楼房越来越高,而电梯则成了高层楼房的必须设备。电梯从手柄开关操纵电梯、按钮控制电梯发展到了现在的群控电梯,为高层运输做出了不可磨灭的贡献。单片机在电梯升降控制上的应用主要体现在它的逻辑开关控制功能。由于单片机具有逻辑运算,计数和定时以及数据输入输出的功能,在电梯升降过程中,各种逻辑开关控制与单片机很好的结合,很好的实现了对升降的控制。
  我们设计的电梯控制系统,硬件部分主要由单片机最小系统模块、电梯电路模块、电动机驱动模块、报警模块等4部分组成。该系统采用单片机(STC15F2K60S2)作为控制核心,使用按键按下与否而引起的电平的改变,作为用户请求信息发送到单片机,单片机控制电动机转动,单片机根据楼层检测结果控制电机停在目标楼层。楼层检测使用光电传感器,电动机控制部分采用步进电动机。
  软件部分使用C语言编程,利用中断方式来检测用户请求的按键信息,根据电梯运行到相应楼层时,光电传感器产生电平变化,送到单片机计数来确定楼层数,并送到数码管进行显示。报警模块分为两部分:楼内报警和远程报警。当人被困在电梯内时,首先可以按下报警器按钮,此时报警器会发出警报信号。另外,受困人也可以按下远程报警按钮,此时控制系统会向电梯管理员发送短信及拨通电梯管理员电话,使受困人第一时间得到救助。我们的硬件设计简单可靠,结合软件,基本实现了电梯运行的模拟。
  下面是我们设计的电梯控制系统说明指导:    

   使用步骤如下:
  (1)进入电梯后,按下电梯层数控制按钮,选择楼层;
  (2)按下电梯启动按钮,电梯会带你到达指定的位置;
  (3)如果你遇到被困电梯等紧急情况,那么长按楼内报警按钮,楼内的安检人员听到警报就会赶来救助。如果报警器没有响或者安检人员没有及时赶到,那么你可以长按远程报警按钮,此时控制系统会向电梯管理员发送短信及拨通电梯管理员电话,使您第一时间得到救助。

  平台选型说明

  单片机开发板(以STC15F2K61S2芯片为控制核心)

  设计说明

  一 原理图  

 

  二 设计方案  

   三 设计原理

  1. 用单片机定时器中断控制数码管1,2动态扫描显示,数码管1显示用户选择的楼层数,数码管2显示当前的楼层数。
  2. K1控制数码管1选择楼层的第一位(楼层的十位),当K1按下,使设定的初值为0的数自动加1。K2控制楼层的个位,原理同K1。
  3.K3按下,数码管1要和数码管2作数值的比较(即减法运算,判断结果和0的大小)选择步进电机正转或者反转的子程序,步进电机启动,电梯上下移动。
  4.步进电机转动时,RPR220传感器通过扇叶输出跳变脉冲,发送到单片机,执行中断。
  5.正转时,数码管2数值(即当前的楼层数)随步进电机正转增加,直到数码管1显示的数值(即用户设定的楼层)。反转则相反。
  6.当长按K4按键,单片机控制继电器,继电器常开触点闭合,控制音响,实现报警。
  7.当长按K5按键,单片机通过max232将TTL电平转化为232电平,232电平进入gsm模块,再通过max232转化为TTL电平,TTL电平数据(即AT指令数据)传送给TC35模块。TC35模块接收AT指令,作出相应的动作(即先发送短信,延时一段时间后,向指定号码拨打电话。)

  四 源程序
  #include
  #include
  #define uint unsigned int
  #define uchar unsigned char


  /***********************************************************
  gsm模块定义部分
  ***********************************************************/
  #define MAXCHAR 81
  uchar aa[MAXCHAR];
  code uchar ATE0[]="ATE0\r\n";
  code uchar CREG_CMD[]="AT+CREG?\r\n"; //检测手机的联网状态
  code uchar SMS_send[]="AT+CMGS=25\r\n";
  code uchar ATCN[]="AT+CNMI=2,1\r\n";
  code uchar CMGF[]="AT+CMGF=0\r\n";
  code uchar CMGR[12]="AT+CMGR=1\r\n";
  code uchar CMGD[12]="AT+CMGD=1\r\n";
  code uchar PHONE[]="ATD15903269939;\r\n";
  uchar code Sms2_Pdu[]="0011000d91685109239639F90008a90a67094EBA56F0753568AF";
  uchar a,j=0,flag=0;


  /***********************************************************
  数码显示和电机转动定义部分
  ***********************************************************/
  uchar code DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/**********P0,段显示,0*************/
  uchar code DIS_BIT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*********P3,位显
,0*****************/
  uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0xf9}; /*********电机正转****************/
  uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0xf1}; /*********电机反转****************/




关键词: 利用     模块     电梯     自动     控制系统     控制     单片机         

专家
2013-01-14 13:58:12     打赏
2楼
  /***********************************************************
  按键功能部分
  ***********************************************************/
  sbit k5=P1^4;/*********按键选择的十位****************/
  sbit k6=P1^5;/*********按键选择的个位****************/
  sbit k7=P1^6;/*********电机转动****************/
  sbit k4=P2^4;/*********led灯显示按键按下****************/
  sbit bj=P0^7;/*********继电器报警按键****************/
  sbit mm=P2^1;/*********继电器连接mcu口****************/
  sbit kk=P1^7;/*********按键选择gsm使用****************/
  uchar a=0,b=0,c,d=0,e=0 ;
  uchar temp=0;
  void run();


  /***********************************************************
  延时程序
  ***********************************************************/
  void delay(uint k)
  {uint data i,j;
  for(i=0;i
  {for(j=0;j<120;j++)
  {;}}}
  void delayB(uchar x) //x*0.14MS
  {uchar i;
  while(x--)
  {for (i=0; i<13; i++){ }}}
  void delay(uint ms)// 延时子程序
  {uchar i;
  while(ms--)
  {for(i=0;i<120;i++);}}


  /***********************************************************
  函数名称:Print_Char
  函数功能:发送单个字符
  入口参数:ch 出口参数:无
  ***********************************************************/
  Print_Char(uchar ch)//发送单个字符
  {
  SBUF=ch; //送入缓冲区
  while(TI!=1); //等待发送完毕
  TI=0; //软件清零
  }


  /***********************************************************
  函数名称:Print_Str
  函数功能:发送字符串
  入口参数:*str 出口参数:无
  ***********************************************************/
  Print_Str(uchar *str)//发送字符串
  {
  while(*str!='\0')
  {
  Print_Char(*str);
  delay(2);
  str++;}}


  /***********************************************************
  函数名称:Ini_UART
  函数功能:串口初始化、定时器初始化
  入口参数:无 出口参数:无
  ***********************************************************/
  Ini_UART(void)//串口初始化、定时器初始化
  {
  SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
  //UART为模式1,8位数据,允许接收
  TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
  //定时器1为模式2,8位自动重装
  PCON |= 0x80 ; //SMOD=1;
  TH1 = 0xFA ; //Baud:19200 fosc="11".0592MHz
  TL1=0xFA;
  IE |= 0x90 ; //Enable Serial Interrupt
  TR1 = 1 ; // timer 1 run
  TI=1;
  ES=1;
  }
  void clearBuff(void)
  {
  for(j=0;j
  {
  aa[j]=0x00;
  }
  j=0;
  }
  void led(int i)
  {
  P0 |= i;
  delay(20);
  P0 &= ~i;
  delay(20);
  P0 |= i;
  delay(20);
  P0 &= ~i;
  }
  void AT(void)
  {
  while(1)
  {
  Print_Str(ATE0);
  delay(50);
  Print_Str(ATCN);
  delay(50);
  Print_Str(CMGF);
  delay(100);
  clearBuff();
  Print_Str(CREG_CMD);
  delay(50);
  if(((aa[9]=='0')&&(aa[11]=='1'))||((aa[9]=='0')&&(aa[11]=='5')))
  {
  clearBuff();
  led(0x02);
  break;
  }
  else
  {
  clearBuff();
  led(0x01);
  delay(50);
  }}}

  /***********************************************************
  主函数
  ***********************************************************/
  void main(void)
  { /***********定时器0初始化************************/
  TMOD=0x01;
  TH0=(65536-1)/256;
  TL0=(65536-1)%256;
  ET0=1;
  EA=1;
  TR0=1;
  /***********外中断1初始化************************/
  EX0=1;
  IT0=1;
  /***********无限扫描按键************************/
  while(1)
  { if(bj==0)
  {delay(7295); if(bj==0) mm=0; delay(77295); mm=1; }
  if(k5==0)
  {delay(295); if(k5==0){ k4=1;delay(350); k4=0;if(a>8) a=0;else a++;} }
  if(k6==0)
  {delay(295); if(k6==0){ k4=1;delay(350); k4=0; if(b>8) b=0;else b++;} }
  if(k7==0) { k4=1;delay(350); k4=0; run(); }
  if(kk==0) {delay(200);if(kk==0){
  j=0;Ini_UART();AT();delay(10);
  Print_Str(SMS_send);
  delay(200);
  led(0x04);
  Print_Str(Sms2_Pdu);
  delay(100);
  led(0x08);
  Print_Char(0x1A);
  while(1); }
  }

  /***********************************************************
  定时器0应用,显示模块
  ***********************************************************/
  void display() interrupt 1
  {P0=DIS_SEG7[a] ;
  P3= DIS_BIT[0] ;
  delay(25);
  P0=DIS_SEG7[b] ;
  P3= DIS_BIT[1] ;
  delay(25);
  P0=DIS_SEG7[d] ;
  P3= DIS_BIT[4] ;
  delay(25);
  P0=DIS_SEG7[e] ;
  P3= DIS_BIT[5] ;
  TH0=(65536-7000)/256;
  TL0=(65536-7000)%256;
  TR0=1;
  }

  /***********************************************************
  步进电机正转的小程序块
  ***********************************************************/
  void motor_ffw1()
  {uchar i;uint j;
  for (j=0; j<8; j++) //转1*n圈
  { for (i=0; i<8; i++) //一个周期转45度
  {P1 = FFW[i];delay(15);}}}

  /***********************************************************
  步进电机反转的小程序块
  ***********************************************************/
  void motor_ffw2()
  {uchar i;uint j;
  for (j=0; j<8; j++) //转1*n圈
  { for (i=0; i<8; i++) //一个周期转45度
  {P1 =REV[i];delay(15);}}}

 

  /***********************************************************
  启动电机转动模块
  ***********************************************************/
  void run()
  {uchar c,r,m,n;
  TR0=1;
  c=10*a+b; m=c-temp;n=temp-c;
  if (c>temp){
  for(r=0;r<(m*8);r++)
  {motor_ffw1(); } } //电机正转
  if(c
  { motor_ffw2(); }}}

  /***********************************************************
  外中断1应用,电机转动模块
  ***********************************************************/
  void maichong() interrupt 0
  {if((10*a+b)>temp) temp++;
  if((10*a+b)
  d=temp/10;
  e=temp%10;
  }

  /***********************************************************
  串口中断1应用
  ***********************************************************/
  void ser() interrupt 4
  {if(RI==1)
  {aa[j]=SBUF;//命令存到命令数组
  RI=0; //软件清除接收中断
  j++;}}

  作品特色

  1. 随着楼房的不断升高,电梯成为楼房必不可少的一部分。
  2. 由于单片机具有逻辑运算,计数和定时以及数据输入输出的功能,在电梯升降过程中,各种逻辑开关控制与单片机很好的结合,很好的实现了对升降的控制。
  3. 当今很多开发人员使用单片机通过rs232串口与GSM模块通信,使用标准的at命令来控制GSM模块实现各种无线通信功能,例如发短信,打电话,gprs拨号上网等,同时,GSM模块的引用又补充了电梯中的信号屏蔽的缺失,保证了乘梯人员的安全。

系统演示视频:http://v.eepw.com.cn/video/play/id/2381


专家
2013-01-14 14:45:33     打赏
3楼
那得先保证电梯有后备电池!!

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]