EVE 发表于 2021-8-2 15:42:29

「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
```

20870886 发表于 2021-10-2 15:00:55

厉害,学习了:)!

无机范 发表于 2022-1-20 00:37:11

这个图示接线有点问题,应该是接UART那一排。程序里面的引脚也需要改一下,不然连不上
页: [1]
查看完整版本: 「BXY」掌控板 高中信息技术教程—智能门禁系统