继《蓝牙4.0控制的控制门禁智能锁》之后,我们也开始尝试改造自己的门禁系统,没有使用高端大气上档次的Bluetooth4.0,而是使用常用的315M射频模块做无线遥控。
由于原来自带的门铃按钮饱受长期的蹂蹑,已经进入精神失常的地步,时不时的要误触发一下。为此我们将它一起升级了一下下。
首先使用常用的Arduino器材搭建一个原型,最后再换成小体积的Arduino。
原型的器材选择:
1.DFR0216 Arduino UNO 1个
2.TEL0075 RF shield 1个
3.DFR0219 IO传感器扩展板V6 1个
4.SEN0117 Speech Synthesizer Bee语音合成模块 1个
5.DFR0030 数字触摸开关Touch 1个
6.SEN0018 人体热释电红外传感器 1个
7.DFR0017 数字继电器模块 1个
8.DFR0029 数字大按钮模块 1个
9.FIT0355 315M遥控器 1个
10.塑料外壳 2个
11.3D打印月饼造型外壳 1个
所选的器件中,UNO作为主控;RF shield和315M遥控器是用于无线遥控;IO传感器扩展板V6是方便连接所有的传感器;Speech Synthesizer Bee是语音合成模块,主要用来播放门铃音乐和提示语音(经常有快递过来就直接摇门,门禁君怎么受得了,所以需要一个提示语音告知旁边是有个门铃的);数字触摸开关就是代替原有的门铃按键;人体热释电红外传感器是用来检测有人靠近后,就播放提示语音;数字继电器模块用来模拟门禁开关;数字大按钮模块用来模拟门的开关状态(门禁锁上面是有个常闭的继电器的,可以用来检测门的开关状态)。
原理也很简单,当有人靠近时,人体热释电红外传感器就会检测到然后控制语音合成模块播放提示语音,来访者根据提示语音去按门铃触摸开关,语音合成模块就会播放门铃音乐,当值班人员听到门铃响起时,就使用315M遥控器打开门禁锁同时语音合成模块播放“请进”语音,来访者就可以推开门进入。
下面上图说明安装过程:
先将RF shield插到Arduino UNO上,注意红色框位置,需要将RF shield地址码和315M遥控器地址设置一致;
然后把IO传感器扩展板V6插到RF shield上;
然后把Speech Synthesizer Bee语音合成模块插到IO传感器扩展板V6的XBEE插槽上;
最后把数字触摸开关插到数字口2;继电器模块插到数字口4;人体热释电红外传感器插到数字口5;大按钮模块插到数字口6;有人肯定想问数字口3怎么不用,其实数字口3已经被RF shield占用了(3,8,9,10,11)。
3D打印的一个盒子,用来安装数字触摸开关,怎么样,像个月饼吧?
最后将程序下载到UNO中,就可以模拟整个门禁的控制过程了。
当然,经过调试后,最后是要安装到门上面的,模拟的过程和真实过程还有所不同,程序代码有可能需要调整。
视频展示:
先发这么多,后面再补充详细改造过程图。
- #include "Syn6288.h"
- Syn6288 syn;
-
- uint8_t text0[]={0x5b,0x78,0x31,0x5d,0x73,0x6f,0x75,0x6e,0x64,0x6b};//Syn6288中播放音乐的指令
- uint8_t text1[]={0xc7,0xeb,0xbd,0xf8}; //请进
- uint8_t text2[]={0xbb,0xb6,0xd3,0xad,0xb9,0xe2,0xc1,0xd9}; //欢迎光临
- uint8_t text3[]={0xc0,0xb4,0xb7,0xc3,0xc7,0xeb,0xb0,0xb4,0xd3,0xd2,0xb2,0xe0,0xc3,0xc5,0xc1,0xe5}; //来访请按右侧门铃
-
- const int buttonPin = 2; //门铃触摸开关
- const int Realy = 4; //门禁控制开关
- const int PIRoutside = 5; //人体热释电红外传感器
- const int DoorState = 6; //门状态检测口
- const int D1 = 8; //RF数据接收端口
- const int D2 = 9;
- const int D3 = 10;
- const int D4 = 11;
-
- int buttonState = 0;
- int PIRoutsideState = 0;
- int PIRoutsideFlag = 0;
- unsigned char state = 0;
-
- void setup()
- {
- Serial.begin(9600); //打开串口,波特率9600
- pinMode(D1, INPUT);
- pinMode(D2, INPUT);
- pinMode(D3, INPUT);
- pinMode(D4, INPUT);
- pinMode(buttonPin, INPUT);
- pinMode(PIRoutside, INPUT);
- pinMode(DoorState, INPUT);
- pinMode(Realy, OUTPUT);
- attachInterrupt(1,blink,RISING); //打开中断1,即数字口3
-
- syn.command_volume(14); //设置语音合成模块音量为最大
- digitalWrite(Realy, LOW); //门禁关
- }
-
- void loop()
- {
- if(digitalRead(DoorState)) //检测门的状态,为关闭,门禁控制开始工作,否则不工作
- {
- if(state!=0) //判断是否有无线遥控指令
- {
- state=0;
- if(PIRoutsideFlag == 1) //有人进来播放“请进”,有人出去不播放
- {
- syn.play(text1,sizeof(text1),0);//播放“请进”语音,选择背景音乐1
- }
- digitalWrite(Realy, LOW); //门禁关
- delay(8000);
- PIRoutsideFlag = 0;
- }
-
- buttonState = digitalRead(buttonPin); //读取门铃触摸开关 状态
- PIRoutsideState = digitalRead(PIRoutside); //读取人体热释电红外传感器 状态
- if (buttonState == LOW && PIRoutsideState == HIGH && PIRoutsideFlag == 0) //有人靠近
- {
- PIRoutsideFlag = 1; //有人进来置标志
- syn.play(text2,sizeof(text2),0); //播放“欢迎光临”,选择背景音乐1
- delay(500);
- syn.play(text3,sizeof(text3),0); //播放“来访请按右侧门铃”,选择背景音乐1
- delay(2000);
- }
- else if (buttonState == HIGH ) //有人按下门铃
- {
- syn.play(text0,sizeof(text0),0);//播放门铃音乐,选择背景音乐1
- delay(300);
- }
- }
- else
- {
- state=0;
- digitalWrite(Realy, LOW); //门禁关
- }
- }
-
- void blink() //中断函数
- {
- state++; //有无线遥控指令
- if(digitalRead(D1)==1&&digitalRead(D2)==1&&digitalRead(D3)==1&&digitalRead(D4)==0)//判断遥控器的数据
- {
- digitalWrite(Realy, HIGH); //门禁开
- }
- }
复制代码
|