一种单片机和物联网平台的电子密码锁教程

基于STM32单片机和机智云物联网云平台设计了一种电子密码锁。该系统主要将开放的云平台和当下流行STM32单片机相结合实现本地和远端双重解密的功能,从而实现方便的本地解锁与灵活的远程解锁相结合,在本地解锁不及时或客观原因未能完成本地解锁的情况下利用开放的云平台远程解锁。

本地解锁通过本地密码的正确输入来实现,同时包含修改密码、错误报警等功能。远程解锁功能主要通过云平台和WiFi模块配合实现,WiFi模块将接收到的信息传输给单片机进行解码,解码正确将执行开锁功能,否则返回错误代码。该系统将云技术、手机通信技术等先进技术应用至密码锁中,可以起到提高密码锁的应用的能力。

当前的电子密码锁在居住环境安全领域有一定的先进性,且大多数电子密码锁会辅助本地报警等功能,有逐渐取代传统机械锁的趋势。但是当前的电子密码锁也存在着一下缺陷如灵活性不足。因此设计了一种单片机和物联网开发平台的电子密码锁设计。

1 系统组成及工作过程

该系统的硬件框图如图1所示。

该系统的核心器件为STM32单片机,采用的STM32F103C8T6是一款基于ARM Cortex-M 内核32位微控制器,程序存储器容量是64KB,需要电压2V~3.6V,属于低功耗单片机。该单片机在系统中的主要作用是核心控制,对本地输入的指令进行分析并处理,对处理结果作出响应。通信模块采用HLK-RM58S 5g双频WiFi模块,支持2.4GHz和5.8GHz双频频段通信,可以方便连入个人局域网。

云平台采用机智云Aiot开发平台,该平台具有开放的大量资源可利用。输入的矩阵键盘采用成熟的4乘4矩阵键盘。为保证该系统正常运行采用5V和3.3V双供电。当该电子密码锁系统检测到本地输入正确密码或通过WIFI通信模块接收到远端授权的指令后通过电机解锁。并通过提示、报警模块语音播报解码成功。当接收到3次密码错误信息通过本地提示、报警模块语音报警并向远端反馈错误信息。


 

2 电路实现
2.1 单片机介绍
该系统采用的STM32F103C8T6单片机属于嵌入式-微控制器,其总线宽度最高可达32-位,速度为72MHz,程序存储器类型为FLASH,RAM容量达到20K乘以8。加之目前的单片机模块已经微型化且价格较低,因此改款单片机从功能和性价比各方面考虑均是首选。

其主要功能是对远程通过通信模块发来的信息或本地矩阵键盘输入密码的信息进行正确性验证,若密码正确则执行解密开锁操作,若密码不正确则拒绝执行解密开锁操作,并记录输入错误的次数同时对比错误次数是否大于等于3,若条件满足则实施本地报警并通过通信模块将错误信息发送至指定手机。同时通过单片机内部程序实现修改密码、撤销密码、退格、报警等相关功能。

2.2 提示、报警模块

本地报警电路采用电磁式有源蜂鸣器,当触发报警后由单片机向蜂鸣器发送信号发出单音一长一短的交替报警声,目的是起到提示附近人员此处有异常,对非法操作人员起到警示和震慑作用。同时通信模块将信息发送至远端,用以提醒主人现在有人进行非法输入密码,便于主人及时作出相关应对措施,更好的起到安全保护的作用。

2.3 机智云平台

机智云是做物联网开发和云服务平台的一家企业,有着开放应用平台,可实现自助开发工具、后台支持服务、设备远程操控、数据存储及分析、软/硬件社交化等技术服务,该系统通过机智云将远端发送的信息接收进本系统,用单片机对接收的信息进行解码并识别。

因此机智云在该系统中的主要作用是远程信息交换,可以实现广域网范围的数据通信不局限于局域网。通过通信模块将该系统中的含错误次数、剩余次数以及目标掉线等相关信息存储在云端,并实时发送给客户端。客户端可以通过网络查看后台相关数据不会出现由于客户端网络问题而出现信息丢失。更适合本系统的灵活性的要求。

2.4 通信模块

通信模块采用的是Hi-Link品牌中的HLK-RM58S,其有效通信距离可达到100m,且支持2.4GHz和5.8GHz的双频通信,同时可支持蓝牙通信,同时具有一键配置网络的功能,通过一键配置功能可以方便连入个人局域网,个人局域网通过运营商提供的网络服务将该系统间接连入广域网,可以实现局域网和广域网的远程操作,不局限于仅局域网可用。使用方便灵活适用于本系统。

2.5 显示屏

本系统的显示屏采用市面上最普遍的LCD1602。该系统的显示屏主要用来显示输入的密码,因此选择了由字符型液晶显示屏、控制驱动主电路及其扩展驱动电路组成LCD1602模块。该模块正常工作所需**元件少让该系统电路更加简洁。

3 软件

软件主要检测现场键盘输入的密码是否正确,若正确直接开锁,若不正确,错误次数从0开始加”1”,当错误次数达到3次则启动本地报警模块发出警报声,同时通过通信模块与机智云向主人端发送报警信息。同时提供修改密码、撤销密码、退格等功能。

远程解锁通过云平台和WiFi模块配合实现,WiFi模块将接收到的信息传输给单片机进行解码,解码正确将执行开锁功能,否则返回错误代码,并记录错误次数当错误次数达到3次则启动本地报警模块发出警报声,同时通过通信模块与机智云向主人端反馈错误信息及错误次数、剩余次数等相关信息。流程图如2所示。

4 系统工作原理

基于STM32单片机和机智云物联网平台设计了一种电子密码锁,可以实现方便的本地解锁与灵活的远程解锁相结合,配合通信模块、提示报警模块等既可以实现本地解锁与远程解锁相结合又可以实现防盗作用,若有客人来访还可以实现远程无人授权开锁,方便程度大大提升且防止了人为密码泄露。从而完成由于客观原因不能完成本地解锁的情况下的远程解锁功能。

该系统还可以进行修改密码、撤销密码、退格、错误报警等相关操作,但是必须是管理员身份或经管理员授权。通过通信模块在远端实现信息反馈包含错误次数、剩余次数以及目标掉线等相关信息。若将该系统应用至公众场合尤其是人流量大使用频繁的高校及中小学教室。当有课时可通过机智云平台或现场输入密码的方式实现立即解锁并将门锁状态返回至客户端,给授课教师和教室管理人员带来了很大的便利,也节省了人员的时间成本。

同时管理员可通过云平台的后台数据清楚的查看各个房间的具体使用情况,根据后台数据可以进行线上分析,便于优化教室使用和分配。

图2软件流程图

该系统将基于STM32单片机的电子密码锁和云平台的远程智能密码锁相结合。实现了方便与灵活的结合,同时根据该系统的特点可将其应用至中小学、高校的教室管理,也可将其应用至家庭和酒店管理系统,达到方便开锁且不泄露密码的目的。这样既减少了管理人员的工作量同时还可以通过后台数据优化房间分配。实现智能管理的目的。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个基本的电子密码锁的设计和实现思路: 1.硬件组成 - 51单片机 - LCD液晶屏 - 4x4矩阵键盘 - 蜂鸣器 - 电磁锁或舵机 2.电路设计 - 将LCD液晶屏、4x4矩阵键盘和蜂鸣器分别与51单片机连接 - 将电磁锁或舵机连接到单片机的IO口上 3.软件设计 - 初始化LCD液晶屏、4x4矩阵键盘和蜂鸣器 - 设定一个密码 - 等待用户输入密码 - 判断用户输入的密码是否正确 - 如果正确,则开启电磁锁或舵机,并提示用户开锁成功 - 如果错误,则提示用户密码错误,并等待用户重新输入 下面是一个基本的代码框架,供您参考: ```c #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit beep=P1^5; //定义蜂鸣器的IO口 sbit lock=P1^6; //定义电磁锁或舵机的IO口 uchar code pwd[4]={'1','2','3','4'}; //设置密码为1234 uchar key=0; //记录用户输入的按键 uchar cnt=0; //记录用户已经输入的密码长度 //函数声明 void init(); //初始化函数 uchar keyscan(); //按键扫描函数 void delay(uint time); //延时函数 void main() { init(); //初始化 while(1) { key=keyscan(); //扫描按键 if(key!=0) //如果有按键按下 { if(key=='*') //如果用户按下了“*”键 { cnt=0; //清空已经输入的密码长度 continue; //重新等待用户输入 } else if(key=='#') //如果用户按下了“#”键 { if(cnt!=4) //如果用户没有输入完整的密码 { beep=1; //发出警报 delay(500); //延时500ms beep=0; //关闭蜂鸣器 cnt=0; //清空已经输入的密码长度 continue; //重新等待用户输入 } else //如果用户输入了完整的密码 { if(pwd[0]==P1 && pwd[1]==P2 && pwd[2]==P3 && pwd[3]==P4) //判断密码是否正确 { lock=0; //开启电磁锁或舵机 delay(1000); //延时1s lock=1; //关闭电磁锁或舵机 cnt=0; //清空已经输入的密码长度 continue; //重新等待用户输入 } else //如果密码错误 { beep=1; //发出警报 delay(500); //延时500ms beep=0; //关闭蜂鸣器 cnt=0; //清空已经输入的密码长度 continue; //重新等待用户输入 } } } else //如果用户按下了数字键 { if(cnt<4) //如果用户还没输入完整的密码 { switch(cnt) //根据已经输入的密码长度,将按键存储到相应的变量中 { case 0: P1=key; break; case 1: P2=key; break; case 2: P3=key; break; case 3: P4=key; break; } cnt++; //已经输入的密码长度加1 } else //如果用户已经输入了完整的密码 { beep=1; //发出警报 delay(500); //延时500ms beep=0; //关闭蜂鸣器 cnt=0; //清空已经输入的密码长度 continue; //重新等待用户输入 } } } } } void init() { //初始化LCD液晶屏、4x4矩阵键盘和蜂鸣器 } uchar keyscan() { uchar keyvalue=0; //存储按键值 uchar i,j; P2=0xf0; //将行线置为高电平,列线置为低电平 if(P2!=0xf0) //如果有按键按下 { delay(10); //延时10ms,去抖动 if(P2!=0xf0) //再次判断是否有按键按下 { i=P2; //保存按键所在的行号 P2=0x0f; //将列线置为高电平,行线置为低电平 j=P2; //保存按键所在的列号 keyvalue=i+j; //将行列值相加,得到按键值 while(P2!=0x0f); //等待按键释放 } } return keyvalue; //返回按键值,如果没有按键按下则返回0 } void delay(uint time) { uint i,j; for(i=0;i<time;i++) for(j=0;j<120;j++); } ``` 以上代码仅供参考,您需要根据具体的硬件组成和功能需求进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值