为何要实施这个项目?
一般小区楼下,每幢都会有一个门禁系统,
可以使用钥匙打开门禁,
有的可以使用刷卡打开门禁,
有的可以使用密码打开门禁,
但是,长期下来,因为小区人多,锁的钥匙孔会被捅坏,物业修起来也很怠慢
使用密码按键解锁门禁,按键也会失灵
每家都会安装一个【楼宇对讲器】,用来与楼下人对话,或者可以从视频看出,是哪位亲朋,并且可以门禁解锁。
目标:
使用智能家居,嵌入楼宇对讲机,模拟开门按键,完成开门动作。
适用对象:
家里人多,拥有门禁的钥匙不够用的家庭
出入门禁不想带钥匙的人
大冬天,懒得拿冰冷的钥匙开门的人
物业门禁钥匙,密码不好使的人
使用方法:
1,给模块插入一张有来电显示功能的移动/联通SIM卡,上电初始化,一个短的嘀的一声提示,初始化完成。
2,在任何时候任何地点,手机呼叫SIM900A GSM通信模块的号码,门禁解锁。
【小区楼幢-门禁外观】钥匙+键盘+刷卡+摄像头
【小区楼幢-门禁外观】键盘+摄像头+刷卡
【小区楼幢-门禁外观】 钥匙
室内【楼宇对讲机】外观
室内【楼宇对讲机】内部图
室内【楼宇对讲机】结合单片机
【SIM900A模块】结合单片机
【单片机串口通信 波特率计算器】
Ver2.0版本程序
C51 SIM900A 判断来电身份,蜂鸣器响起 远程控制
工程名 :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 STC12C4052AD单片机晶振 11.0592MHz,12M不可以用
版本号:V1.0
手机呼叫SIM900A的号码,蜂鸣器亮500MS;
具体实现看程序,注释我写的非常详细了
/******************************
工程名 :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 51单片机晶振 11.0592MHz,12M不可以用
手机呼叫SIM900A的号码,LED亮500MS;
*******************************/
#include "string.h"
#include "STC12C2052AD.h"
#define cache_max 200 //串口接收缓存长度
xdata unsigned char uart_cache[cache_max]; // xdata 把变量存在flash中,而不存在RAM中
//code 定义的数据要放在ROM里面,写入后就不能再更改
bdata unsigned char Flag; //定时器标志位 bdata 把变量定义为可拆成8位寻址
sbit Timer_start =Flag^0; //延时计数功能开关
sbit RUNING = P3^7; //SIM900A运行指示灯,1秒闪烁一次
sbit unlock = P1^7; //解锁
unsigned char code *ring="CLIP"; //来电标记
unsigned char code *phone1="1336218****"; //管理员1的手机号
unsigned char code *phone2="1395804****"; //管理员2的手机号
unsigned char code *phone3="1776715****"; //管理员3的手机号
unsigned char Times=0; // 定时器中断次数累加
unsigned char First_Int = 0; // 串口数组字符索引
unsigned char delay=0; //中断定时器,实际数据delay*50次
void SendData(unsigned char dat){ // 发一个8位数据到串口SBUF
ES=0;
SBUF=dat;
while(TI!=1);
TI=0;
ES=1;
}
void SendString(unsigned char *s){ // 发多个8位数据到串口SBUF
while(*s)
SendData(*s++);
}
void SendLR(void) { // 发回车换行
SendString("\r\n");
}
void DELAY_MS (unsigned int a){ // 延时
unsigned int i;
while ( --a != 0 )
for (i=0;i<=600;i++);
}
void Uart1Init(void) { //9600bps@11.0592MHz
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T