电子说
这篇文章来源于DevicePlus.com英语网站的翻译稿。
目的
本教程旨在展示何将RFID读卡器和执行器与Raspberry Pi集成在一起。基于本文讨论的基本原理,我们还会制造一个RFID狗门。
概述
在本教程中,我将介绍如何将RC522 RFID模块与Raspberry Pi基板集成在一起。我还将展示如何集成一个执行器(本例中是一个LED),来响应RFID模块的正确读取信息。该执行器可以是电磁锁、扬声器,甚至可以是记录数据的Web界面。我还会介绍如何利用此设计实现一个RFID狗门。
设备
表1:设备
物品 | 链接 |
---|---|
Raspberry Pi 3 | Raspberry Pi 链接 |
RC522 RFID 模块 | RFID 模块链接 |
HDMI 线 | HDMI 线链接 |
LED | Adafruit LED链接 |
鼠标 + 键盘 | 键盘/鼠标的Amazon链接 |
显示器/电视机 | 任何带有HDMI接口的电视机或显示器 |
跳线 | 跳线的Amazon链接 |
Micro USB 数据线 | Micro USB数据线的Amazon链接 |
面包板 | 面包板的Amazon链接 |
目录
1. 设计电路
2. 编写代码
a.启用 SPI
b.安装软件包
c.添加到 Read.py
3. 运行代码
a.获取 UID
b.运行最终脚本
4. 制作狗门的注意事项
5.其他设备选项
6.附录:Read.py
程序
1. 设计电路
我一直喜欢使用开源的原理图绘制和PCB布线软件Fritzing来制作接线图(图1:执行器为LED的电路原理图)。您可以通过以下链接(可选)下载Fritzing: https://fritzing.org/home/
第一张原理图是我正在制作的以LED作为执行器的电路。当RFID模块产生正确读取信号,LED会亮起。
第二个电路中的执行器是一个电磁锁。这个电路用于实现门锁和狗门设计。TIP120是一款达林顿功率晶体管阵列。它只允许Raspberry Pi控制电磁锁,电磁锁所需功率比Paspberry Pi的GPIO端口的输出还要大。
图1:执行器为LED的电路原理图
图2:执行器为电磁锁的电路原理图 RC522 RFID模块使用SPI(串行外围接口总线)连接到Raspberry Pi。SPI总线在嵌入式系统中应用相当普遍。读卡器应根据下表进行接线。
表2:RC522接线表
RC522 Pin | Raspberry Pi 引脚 | 导线颜色 |
---|---|---|
3.3V | 引脚 1 | 红 |
RST | 引脚 22 | 橙 |
GND | 引脚 6 | 黑 |
MISO | 引脚 21 | 白 |
MOSI | 引脚 19 | 灰 |
SCK | 引脚 23 | 绿 |
SDA | 引脚 24 | 蓝 |
我将执行器(一个LED)连接到了Raspberry Pi的引脚18。你也应该连接这个引脚。
2. 编写代码
a. 启用 SPI
第一步是在Raspberry Pi上启用SPI。为此,请打开命令行窗口并输入sudo raspi-config。系统会弹出Configuration Menu。选择菜单5“Interfacing Options”。现在选择“P4 SPI”。当系统问你是否要启用SPI接口时,选择“Yes”。配置菜单将显示“The SPI interface is enabled.”。要完成SPI的启用,请打开命令行终端并输入命令sudo reboot。Raspberry Pi会重启,从而完成SPI启用。
b. 安装软件包
我们要用的库是用Python 2编写的,不是Python 3。因此,第一步是安装Python 2.7。请输入sudo apt-get install python2.7-dev完成该操作。SPI PY库负责与RC522模块通信。我通过键入命令git clone https://github.com/lthiery/SPI-Py.git来克隆这个库。然后安装该库。首先,通过键入cd SPI-Py进入SPI-Py目录。然后键入sudo python setup.py install安装库。
c. 添加到 Read.py
Read.py脚本需要更改才能与RC522模块对话。编辑此脚本时,请滚动到脚本底部,然后加入注释“Authenticate”。本教程不涉及RFID的身份验证。确保在脚本头添加时间库。接下来找到标题为“#Configure LED Output Pin”的部分。这里是你配置执行器的地方。如果要将该设计应用于狗门,那么应将输出引脚配置到电磁锁。
接下来找到标题为“#Check to see if card UID read matches your card UID.”的部分。该If/Else语句检查读卡器从卡上读取的UID与您之前保存在脚本中的UID是否匹配,如果UID匹配,则执行器的输出为高。
3. 运行代码
a. 获取 UID
首次运行脚本时,您需要获取卡的UID。RFID卡的UID是与此卡相关联的唯一编号,类似于序列号。
要运行脚本,请将目录更改为保存脚本的目录。然后输入python Read.py,运行脚本。因为脚本读卡器UID,所以当你将卡放在读取器上时,它会拒绝访问。屏幕上会显示这张卡的UID。记下这个UID。编辑脚本,然后将脚本的UID更改为此值并保存。
图3:脚本运行,显示UID b. 运行最终脚本
输入python Read.py,再次运行脚本。现在,当你将卡放在读卡器上时,验证通过且LED会亮5秒钟。如果将你的设计应用于狗门,那么在验证通过后电磁锁会打开。
图4:等待读卡
图5:验证通过 4. 制作狗门的注意事项
如果要将该设计实现为一个狗门,那么你需要考虑其他一些设计技巧:
1. 添加第二个电磁锁,以保证两侧锁门。
2. 在门上添加一个霍尔效应(磁传感器)传感器和一块磁铁,以便让Raspberry Pi在锁门之前知道门已返回到关闭位置。
3. 如果你真的很有想法,那么可以围绕门设计较大的环形天线,代替在门上安装小型读卡器。你需要电磁线,而且需要将其焊接到读取模块上。这需要资深技巧,有关环形天线的信息请在这里阅读。
4. 如果你是资深程序员,那么可以阅读MFRC522 数据表,更改芯片组上的固件,更好地满足自己的应用要求。
5. 其他设备选项
a.门锁
b.安全锁
c.支付设备
d.运输跟踪/物流
e.零售/购物
6. 附录:Read.py
#!/usr/bin/env python # -*- coding: utf8 -*- import RPi.GPIO as GPIO import MFRC522 import signal import time continue_reading = True # Capture SIGINT for cleanup when the script is aborted def end_read(signal,frame): global continue_reading print ("Ctrl+C captured, ending read.") continue_reading = False GPIO.cleanup() # Hook the SIGINT signal.signal(signal.SIGINT, end_read) # Create an object of the class MFRC522 MIFAREReader = MFRC522.MFRC522() # Welcome message print ("Welcome to the MFRC522 data read example") print ("Press Ctrl-C to stop.") # This loop keeps checking for chips. If one is near it will get the UID and authenticate while continue_reading: # Scan for cards (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) # If a card is found if status == MIFAREReader.MI_OK: print ("Card detected") # Get the UID of the card (status,uid) = MIFAREReader.MFRC522_Anticoll() # If we have the UID, continue if status == MIFAREReader.MI_OK: # Print UID print ("Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])+','+str(uid[4])) # This is the default key for authentication key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF] # Select the scanned tag MIFAREReader.MFRC522_SelectTag(uid) #ENTER Your Card UID here my_uid = [61,84,4,114,31] #Configure LED Output Pin LED = 18 GPIO.setup(LED, GPIO.OUT) GPIO.output(LED, GPIO.LOW) #Check to see if card UID read matches your card UID if uid == my_uid: #Open the Doggy Door if matching UIDs print("Access Granted") GPIO.output(LED, GPIO.HIGH) #Turn on LED time.sleep(5) #Wait 5 Seconds GPIO.output(LED, GPIO.LOW) #Turn off LED else: #Don't open if UIDs don't match print("Access Denied, YOU SHALL NOT PASS!") ## # Authenticate ## status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid) ## ## # Check if authenticated ## if status == MIFAREReader.MI_OK: ## MIFAREReader.MFRC522_Read(8) ## MIFAREReader.MFRC522_StopCrypto1() ## else: ## print "Authentication error"
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !