专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用旧手机制作gsm远程报警器

作者:佚名   来源:本站原创   点击数:  更新时间:2013年11月11日   【字体:

    这想法最初是在09年诞生的,后来百度一下,发现已经有人比我更早地想到,而且已经研发出来,看见以后,我顿时失去了兴趣。直到前两个月,某位朋友被小偷光顾,损失惨重。此刻,我意识到防盗器的重要性,尤其年关将至,鼠辈横行的时段,所以又重新点燃了我创造的欲望。今晚,花了几个小时终于制作完成。以下有全套制作教程,包括电路图和代码,希望有动手能力的朋友也尝试一下。同时,由于本人能力有限,设计存在很多缺陷,希望有高人多多指点不足之处,谢谢。
    实现功能:当有人进入一定区域内,装置能自动拨打指定号码进行呼叫,当区域内的人持续不离开时,装置能连续呼叫3次,每次2分钟。例如:我外出时,假如有人进入了我的房间,装置就能自动拨打我的电话,我的电话就会响起,然后我就会采取相应的措施。
    成品图

    1. 原料清单:旧手机一台(能打电话就行),stc89c52单片机一块,5v继电器3个,1n4148二极管3个,1n4007二极管2个,9012三极管 3个 ,8050三极管1个,11.0592晶振1个,20p独石电容2个,104独石电容1个,电解电容1000uf、470uf、0.1uf各一个 10uf两个,LM317
三端稳压1个,200Ω、400Ω、1K电阻各一个。洞洞板一块,一个外壳(笔者的是路由器的外壳),一张0月租0低消的手机卡,热释红外感应模块一个。(成本100元以内)
 
        一台旧手机,外壳已经拆掉


一个路由器的外壳


一张0月租0低消的手机卡


热释红外传感器


电子元件若干,详见上面清单。


  电路图,单片机的P0口的前3个脚分别控制3个继电器,P1^4用来检测红外模块返回的信号。有的手机可用三极管代替继电器座开关,笔者手上的这台手机的按键设计有点怪,为了稳定起见,所以使用继电器。J1\J2\J3是手机的 按键。





这是LM317三端稳压电路,输出3.7v,用来给手机供电。手机长时间直接使用5v会烧坏。另外,要在手机正负极并联一个1000uf的电容。因为手机接受发射信号的时候电流峰值能达到2A


下面已经焊接完成,再把程序烧写到单片机中。(程序代码在最后)


再把它连接到手机的按键上。照片中手机按键上的三极管不是关键,可有可无,初衷是为了检车手机是否死机的。


在路由器的外壳是哪个打几个洞,安装铜柱。


铜柱螺丝若干


安装了铜柱的外壳


在路由器的盖子上挖一个洞,把红外传感器的透镜部分外露。然后用热熔胶粘牢。


大功告成


外表是一个路由器,实际上是一台防盗器,呵呵。下面附单片机程序:


笔者指定的电话号码已经保存在手机电话薄的第一个位置,
本例工程文件下载: http://www.51hei.com/f/gsdeng.rar
代码如下:
 #include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit D3 = P1^2;
sbit D4 = P1^3;
uchar callnum;
void delay(uint num)  //延时函数
{
 uint i,j;
 for(i=num;i>0;i--)
  for(j=110;j>0;j--);
}
void key1()  //按键1  手机的返回、电话薄键
{
 D1 = 0;       //按下
 delay(500); //按下中
 D1 = 1;       //松开
 delay(500); //不能直接按下一个键,所以唯有延时500毫秒
}
void key2()  //按键2  手机的挂机、关机、开机键
{
 D2 = 0;
 delay(500);
 D2 = 1;
 delay(500);
}
void key3()    //按键3  手机的接听键
{
 D3 = 0;
 delay(500);
 D3 = 1;
 delay(500);
}
void offon()   //开关机
{
 D2 = 0;
 delay(5000);//按住5秒开机键可开关机
 D2 = 1;
 delay(10000); //等待进入

}
void call()    //呼叫
{
 key1();    //重复几次按返回键和挂机键,让未接来电和短信等提示信息消失
 key2();
 key1();
 key2();
 key1();
 key2();
 delay(10000); //延时等待手机提示框消失
 key1();
 key2();
 key1();
 key2();
 delay(6000); //延时等待手机提示框消失
 key1();  //打开电话薄
 key3();  //按下呼叫键
}

 


void main()
{   

 

 callnum = 0;  //变量赋初值
 offon();
 call();  //响一下手机,提示已经进入监控状态
   delay(60000);  //延时4分钟,红外模块需要1分钟的预启动时间,人走后需要2分钟的冷却时间,为了宽松点,共4分钟
   delay(60000);
   delay(60000);   
   delay(60000);
   
 while(1)
 {
  if(D4 == 0)
  {
   call();
   delay(60000);//每次呼叫两分钟
   delay(60000);
   callnum++; //每呼叫一次,变量加一
  }
  if(callnum == 3)  
  {
   while(1); //连续呼叫3次后,就不再呼叫。
  }
 } 
}

关闭窗口

相关文章