「BXY」掌控板 高中信息技术教程—智能门禁系统
本帖最后由 EVE 于 2021-8-2 15:55 编辑一、实践情境
住在一些老旧小区时,每次出门,我们都得随身携带一长串钥匙,这为我们的生活带来了许多不便。为此,在这节课上,我们将设计一个智能门禁系统,能够免去带钥匙的烦恼并能记录人员进出门时间。
## 二、实践目标
本实践项目运用掌控板作为智能终端,借助NFC近场通讯模块和来设计一个智能门禁系统,继而结合舵机实现门的开关并记录人员进出门时间。
## 三、知识目标
1. 认识NFC近场通讯模块、舵机;
2. 理解NFC近场通讯模块和舵机的使用和接线方法,能根据连线图进行实物连接;
3. 掌握以micro:bit为智能终端,通过BXY软件编写代码读取 RFID 卡 ID 信息的方法;
## 四、实践准备
### 硬件清单
| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627889919661-image003.png)|![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627889930122-image005.png)|![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627889941660-image007.png)| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627889950860-image009.png)| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627889959500-image011.png)|
| --- | --- | --- | --- | --- |
|[ 掌控板](https://www.dfrobot.com.cn/goods-1902.html)x2|(https://www.dfrobot.com.cn/goods-1966.html)x1 | (https://www.dfrobot.com.cn/goods-2029.html) x1|(https://www.dfrobot.com.cn/goods-1174.html) x1| (https://www.dfrobot.com.cn/goods-2843.html)x1|
---
### 软件使用:(https://bxy.dfrobot.com.cn/)、(https://mindplus.dfrobot.com.cn/SIoT)
#### 知识链接
- 无线射频技术
> **简介**:无线射频识别(Radio Frequency Identification,RFID),常称为感应式电子晶片或近接卡、感应卡、非接触卡、电子标签、电子条码等。其原理为由扫描器发射一特定频率之无线电波能量给接收器,用以驱动接收器电路将内部的代码送出,此时扫描器便接收此代码。
>
> 接收器的特殊在于免用电池、免接触、免刷卡故不怕脏污,且晶片密码为世界唯一无法复制,安全性高、长寿命。RFID的应用非常广泛,目前典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。
>
> 我们使用的门禁卡就是使用这个技术实现的。我们日常所接触的门禁卡里面有RFID芯片,含有RFID芯片的门禁卡时通过感应门禁阅读器,阅读器发射出来的无线波读取门禁卡的数据信息,RFID芯片会写入个人信息,从而阅读器可以感应到谁进出,是不是属于这个房子的主人,从而完成一系列的工作,RFID技术门禁卡更是住户的一个电子身份证,让用户身处RFID技术中而不知。
- 近场通信
> **简介**:近场通信(Near Field Communication,简称NFC),是一种新兴的技术,使用了NFC技术的设备(例如移动电话)可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID)及互连互通技术整合演变而来的,通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、电子票务、门禁、移动身份识别、防伪等应用。
>
> 现在很多手机中带有NFC功能,就可以使用手机模拟交通卡、门禁卡等等功能,这样我们甚至可以连卡都不用带了,只要带上手机就可以开门解锁了。
> ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627890011012-image013.png)
- NFC近场通讯模块
> **简介**:NFC近场通讯模块采用NXP PN532进口高集成NFC通信芯片,支持市面上常见的各类MIFARE Classic S50/S70系列(即M1卡)和NTAG21x系列等工作频率在13.56Mhz的NFC电子标签或卡片。采用Gravity标准的PH2.0-4P接口,除了让接线更方便,在保留UART的基础上额外复合了I2C,通过开关轻松切换两种不同的接口,使用更灵活。当使用UART串口时,可以利用市面上常见的USB to UART转换器和第三方上位机软件轻松读写操作各类NFC卡。当使用I2C接口时,则可用于Arduino、micro:bit、FireBeetle ESP32、FireBeetle ESP8266等各类3V3/5V主控系统。
## 五、实践过程
在本项目中,我们将利用NFC近场通讯模块和舵机,结合SIoT物联网平台,分步骤设计一个智能门禁系统。在系统中有两部分,一部分是SIot物联网平台,主要执行数据接收和发送的部分,另一部分主控板则需要执行检测和判断,并将数据发送给SIot平台,或接收SIot平台发来的指令执行对应的功能。
1. 检测RFID 卡 ID 信息
2. 控制舵机转动
3. 与物联网平台通信
---
### 任务1:检测RFID 卡 ID 信息
#### 1、硬件搭建
**STEP1**:将一块掌控板插入I/O扩展板,注意正反
**STEP2**:按下图通过连接线将NFC近场通讯模块与舵机接入扩展板。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627890030791-image016.png)
**STEP3**:通过USB连接线将掌控板接到计算机。
**STEP4**:将 NFC 近场通讯模块上的开关拨到 UART 一端。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627890042263-image018.png)
#### 2、软件编写
**STEP1**:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z7.1”。
**STEP2**:rfid_pn532程序烧录
在编写实验程序之前,我们需要先烧录rfid_pn532库程序至主控板中。程序见附录1。
**STEP3**:程序编写
```
# 功能:读取RFID卡ID信息
# 实验:
# 将RFID读卡器的TXD接在P15 RXD接在P16,运行此程序
# 将RFID卡放在读卡器上, 读到NFC卡, 蜂鸣器将响一下
# OLED屏幕上显示对应的信息
'''
注意: 要先烧录rfid_pn532.py文件
'''
from machine import UART
from mpython import *
import time
import music
from rfid_pn532 import RFID_PN532
u = UART(1, baudrate=115200, rx=Pin.P15, tx=Pin.P16, timeout=10)
pn = RFID_PN532(u)
oled.fill(0)
oled.DispChar("正在连接读卡器...",0,0)
oled.show()
pn.wakeup()
oled.DispChar("连接成功", 32,32)
oled.show()
oled.fill(0)
while True:
detected,id = pn.read_tag()
if detected:
oled.DispChar('探测到NFC卡',0,16)
music.play(music.BA_DING)
oled.DispChar(" id=%2x%2x%2x%2x"%(id,id,id,id),32,32)
else:
oled.DispChar('未检测到卡',0,16)
oled.show()
oled.fill(0)
time.sleep(1)
```
#### 3、运行调试
**STEP**1:点击“烧录”上传程序并运行
| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627890082370-image020.jpg)| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627890090433-image021.jpg)|
| --- | --- |
|读卡器没有检测到NFC卡片时,掌控板屏幕显示未检测到卡| 把NFC卡片放到读卡器上,蜂鸣器发出嘟的一声,掌控板屏幕显示NFC卡片的ID |
---
### 任务2:反馈控制
在上个任务中,我们已经实现了RFID 卡 ID 信息的检测,接下来,让我们自己尝试编写程序实现反馈控制,当检测信息正确时使舵机转动起来实现开门的效果。
---
### 任务3:与SIoT物联网平台通信
在实现控制门的开关后,让我们继续搭建SIoT物联网平台,完成智能门禁系统,实现与平台的通信,并以此记录人员进出门时间吧。
## 六、延伸拓展
1. 通过之前加密相关知识的学习,我们知道NFC近场通讯模块可以将数据读取与写入到空白的卡片中,让我们自己尝试往卡片中写入信息并读取吧!
2. NFC功能除了应用在门禁上,还有什么场景可以使用到它?
---
## 附录
### 附录1
```
import time
class RFID_PN532:
def __init__(self,uart,interval=200):
self.uart = uart
self.interval = interval
self.ack = bytearray(25)
self.id = bytearray(4)
def send_and_response(self,cmd):
self.uart.write(cmd)
time.sleep_ms(self.interval)
resp = self.uart.read()
return resp
def wakeup(self):
cmd= b'\x55\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x03\xfd\xd4\x14\x01\x17\x00'
respect = b'\x00\x00\xff\x00\xff\x00\x00\x00\xff\x02\xfe\xd5\x15\x16\x00'
while True:
r = self.send_and_response(cmd)
if r == respect:
break
time.sleep_ms(100)
def read_tag(self):
detected = False
new_card = False
cmd = b'\x00\x00\xFF\x04\xFC\xD4\x4A\x01\x00\xE1\x00'
time.sleep_ms(self.interval)
r = self.send_and_response(cmd)
if(len(r) == 6):
self.id=b'\x00\x00\x00\x00'
elif(len(r) == 25):
detected = True
if(self.is_new_card(r)):
self.id = r
new_card = True
return detected,self.id
def is_new_card(self, resp):
std_ack = b'\x00\x00\xFF\x00\xFF\x00\x00\x00\xFF\x0C\xF4\xD5\x4B\x01\x01\x00\x04\x08\x04'
if(self.id == resp):
return False
if(std_ack != resp):
return False
return True
``` 厉害,学习了:)! 这个图示接线有点问题,应该是接UART那一排。程序里面的引脚也需要改一下,不然连不上
页:
[1]