极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 111474|回复: 56

门禁系统的设计与实现-2014.12.6更新

  [复制链接]
发表于 2014-7-5 15:05:23 | 显示全部楼层 |阅读模式
本帖最后由 Malc 于 2014-12-7 03:23 编辑

前段时间玩了一下门禁系统,现在整理整理资料,把东西发上来

设计要求:
基于单片机,具有通话、振铃、摘机、通话、开锁功能,还要有键盘和显示电路

设计思路:
1、系统用到AD、UART、PWM、SPI,考虑成品的体积,采用arduino nano
2、语音采样使用驻极体麦克风,经200倍前置放大,再进行8位AD采样,采样率8kHz,可达到电话音质,满足需求
3、门禁系统通信的特点是多对一,距离10~100m,通信速率要满足语音通信、控制信号传输,因此采用485通信,通信速率512Kbps
4、语音播放使用8位PWM,功放芯片采用常见的LM386
5、显示屏采用Nokia5110,SPI通信
6、键盘采用10位ADC键盘,16个按键
7、开锁电路使用继电器实现

硬件设计

1、Arduino Nano
主控直接采用arduino nano,由于485通信和下载程序共用0、1脚,因此要通过拨码开关切换0、1脚功能


2、电源电路
整个系统使用外部12v电源供电,用于驱动继电器和LM386,12v电源通过LM2940得到5v电源,Nokia5110显示屏需要3.3v供电,直接采用nano上的3.3v电源


3、ADC键盘电路
由于arduino接口较少,直接采用ADC键盘,一次挂载20个按键没有问题,每个分压电阻使用1kΩ,线性度非常不错。


4、485通信电路
使用了两片MAX485组成了全双工通信,实际测试,10m网线,2Mbps,完全不丢包,另外测试过2m,2Mbps的串口通信,也是完全不丢包


5、麦克风采样电路
语音采样,使用普通驻极体麦克风,经过LM358的200倍放大后,送入ADC


6、功放电路
功放直接采用常见的LM386典型电路,PWM信号经过积分电路,再送入LM386,为了提高音量,使用12v供电,实测效果不错,5v供电时,噪音非常大,稍微一大声就失真


8、开锁电路
开锁功能可以通过电磁锁实现,这里只用了继电器并留出了接线口,继电器电流也不小,保险起见使用了一个9014扩流,并反向并联一个二极管吸收反向电流


画好原理图之后就是排版画pcb了:

检查无误后开始做板子,既然要语音通信,那肯定是至少要做两个啦:




然后再焊接调试:


虽然做板前仔细检查了很多遍,但还是出了几个bug,还好是小问题,两根飞线解决

程序设计
整个系统包括了以下几个程序文件:
EG_V0_3: 主程序,包括了功能定义、ADC初始化、定时器初始化、键盘输入处理、显示界面、数据通信处理、中断采样
ADC_KEY:按键识别,主要是建立10位ADC值和每个按键的映射关系,参考了马潮老师的状态机程序
CRC8:CRC校验程序,为了保证通信的正确性,必须使用数据校验,crc8非常有效,不过实际测试,没有crc校验的情况下好像数据几乎没有传输错误??
Nokia5110:显示屏驱动程序,直接使用论坛里的代码,具体哪个帖子忘了。。
rs485:包括485初始化、定时器1初始化、485通信协议、通信处理等
ringtone:实现呼叫、接听、振铃功能

程序设计思路
本系统的核心就是语言采样播放+485通信协议,由于处理的数据量比较大,所以很多地方没有用到arduino提供的方法,比如analogread、analogwrite、serial等
语音采样与播放:
人说话的频率为300HZ~3KHZ,根据采样定理,采样频率应该大于6KHZ,在这里取7.8KHZ(atmega直接分频可得到),为了减少开发难度,没有使用音频压缩。Timer2开启溢出中断,中断频率7.8KHZ,语音采样、键盘值采样、PWM更新都放在这里,同时使用Timer2的OCR2B作为PWM输出。ADC工作在自动连续转换模式下,ADC工作频率为76.9KHZ,测试过更高的频率,200KHZ以上的采样速度,误差非常大,容易导致按键误判和语音噪音。

485通信:
采用了两片485芯片,一片工作在接收,一片工作在发送,语音采样的数据量为8bit*8KHZ=64Kbps,由于需要同时传输地址、语音数据、控制命令、校验码,一次传输数据量为3~6字节,因此波特率至少为192Kbps,保险起见,本系统采用了512KHZ。
由于需要传输多种数据,所以必须要使用一种通信协议,基于485的通信协议为:
1、主机以广播的方式向所有从机发送一个地址数据,寻找此地址的从机,该从机收到后发送应答命令,之后建立通信,从机与从机不能进行通信
2、从机不能主动发起对话,只能等待主机发送数据
3、一个帧结构如下:
  (1)[FUNCTION_VOICE,语音数据,CRC校验],3个字节
  (2)[FUNCTION_COMMAND,COMMAND_XXX,CRC校验],3~6个字节
           其中COMMAND_XXX包括开门、通话、地址校验等命令,具体请看代码
每发完一帧必须空闲一段时间,作为一个帧的结束标志,因此采用Timer1作为定时器,每接收到一个字符就重新计时,如果计时超过设定的空闲时间,则认为当前已接收到一帧,立即对该帧进行处理。需要注意的是,单片机需要一定的时间进行协议的解析和数据处理,如果空闲时间太短,则当期帧数据还没处理完就来了下一帧数据,肯定会出现混乱,如果空闲时间太长,又会降低通信速率,因此需要取一个合适的空闲值,经过测试,协议解析的时间为72us,因此数据接收+空闲时间应该大于72us,才能保证通信正常。
CRC校验资料:
循环冗余校验(CRC)算法入门引导http://blog.csdn.net/liyuanbhu/article/details/7882789
最通俗的CRC校验原理剖析http://winda.blog.51cto.com/55153/1063951
CRC8校验分析http://blog.csdn.net/ydk03526203300/article/details/6425491

ADC键盘:
10位ad对16个按键进行采样,因此电压与每个按键具有线性比例关系,1024/(16+1)=60.2,实际值是59,再通过映射关系将0-1024值转换成按键值,公式:
key=key_table[(16-(val)/59)/4][(16-(val)/59)%4];
16个按键中,y代表yes,n代表n
a-d代表四个功能:通话,开门,设定地址,预留


结果
经过不断的测试与完善,在12v供电情况下,语音通信清晰,声音洪亮,基本无噪音,可改变从机地址,范围为001~999,其他功能也基本实现了,如开门、交互界面等等

电路、代码、资料,打包:


2014.10.31更新
原附件缺少部分代码,现已补全并更新:




2014.12.6更新
在运行以上程序之前,最好运行485测试程序,以确保485通信正常,测试方法:主从机烧入测试程序,同时按下reset,之后测试程序会发送10万个数据并显示接收到的数据,观察运行结果是否正确。测试代码如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-7-5 16:21:08 | 显示全部楼层
板凳了。。。。
回复 支持 反对

使用道具 举报

发表于 2014-7-5 21:03:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-7-5 22:04:30 | 显示全部楼层
大神!@!@膜拜中


回复 支持 反对

使用道具 举报

发表于 2014-7-5 23:47:59 | 显示全部楼层
太厉害了!!
回复 支持 反对

使用道具 举报

发表于 2014-7-6 13:33:29 | 显示全部楼层
喇叭孔是怎么开出来的呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-6 14:03:17 | 显示全部楼层
xiaoliumonitor 发表于 2014-7-6 13:33
喇叭孔是怎么开出来的呢?

板子是雕刻机一次性加工出来的
回复 支持 反对

使用道具 举报

发表于 2014-7-6 22:01:58 | 显示全部楼层
谢谢  以后的设计肯定会参考到您的这篇文章
板A加上摄像头 板B加上大点显示屏  可以可视对讲门禁了
图像处理估计nano吃不消,485也扛不住了。
回复 支持 反对

使用道具 举报

发表于 2014-7-7 15:53:19 | 显示全部楼层
太厉害了,顶一个
回复 支持 反对

使用道具 举报

发表于 2014-7-8 17:19:48 | 显示全部楼层
厉害,顶顶顶顶
回复 支持 反对

使用道具 举报

发表于 2014-7-28 09:04:11 | 显示全部楼层
楼主做东西一直很精致啊。PCB是用的热转印的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 13:50:54 | 显示全部楼层
Puppey 发表于 2014-7-28 09:04
楼主做东西一直很精致啊。PCB是用的热转印的吗?

雕刻机雕的
回复 支持 反对

使用道具 举报

发表于 2014-7-28 14:08:40 | 显示全部楼层
雕刻机多少米,什么型号啊,求链接
回复 支持 反对

使用道具 举报

发表于 2014-7-28 15:26:09 | 显示全部楼层
赞,才看到这个帖子,我把485部分挖了。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 17:29:36 | 显示全部楼层
白菜虫虫 发表于 2014-7-28 14:08
雕刻机多少米,什么型号啊,求链接


自己diy的雕刻机,凑合用
淘宝搜一下雕刻机吧,3k、4k的都能用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 02:30 , Processed in 0.061857 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表