1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【毕业设计】 树莓派寝室宿舍门禁刷卡系统 - 物联网 单片机 嵌入式

【毕业设计】 树莓派寝室宿舍门禁刷卡系统 - 物联网 单片机 嵌入式

时间:2020-06-10 18:30:11

相关推荐

【毕业设计】 树莓派寝室宿舍门禁刷卡系统 - 物联网 单片机 嵌入式

文章目录

0 前言1 前言2 主要器件3 实物效果4 树莓派读取 RC522 RFID 标签5 mg90s 控制原理6 最后

0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩基于树莓派的寝室宿舍门禁刷卡系统

🥇学长这里给一个题目综合评分(每项满分5分)

难度系数:4分工作量:4分创新点:3分

🧿选题指导, 项目分享:

/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 前言

本来想弄个指纹开锁,没想到指纹模块略有点贵,只能退而求其次使用刷卡模块(有钱了一定上指纹模块)。

所以打算使用 RFID 或 NFC 模块读取校园卡进行开门,用上小米手环的NFC爽的一批!

2 主要器件

树莓派(型号什么的基本上没影响,9102年了,总不可能买2吧)ms90s 舵机(拉开门锁)RFID-RC522 模块(读卡)各种类型的杜邦线(连接引脚用)不定量的螺丝(固定模块于门上)

3 实物效果

4 树莓派读取 RC522 RFID 标签

简介

RC522 RFID 模块是一个简单的附加组件,我们可以连接到 Raspberry Pi 以读取 MIFARE 标签和卡片。这是一个很棒的功能,可以包含在安全系统或任何需要识别物体或人而无需按下按钮、操作开关或其他传感器的应用程序中。非接触式标签可以放在钥匙圈上,卡片可以很好地放在钱包里。

支持的协议

使用 RC522 芯片的模块应该支持所有使用以下标准的标签:

MIFARE 迷你MIFARE 1KMIFARE 4K,MIFARE 超轻MIFARE DESFire EV1MIFARE Plus 射频

可以购买额外的卡片和标签,但您应该确保它们支持其中一种标准。

这些 RFID 模块无法读取非接触式银行卡。他们可以从智能手机读取 ID,但 ID 每次都不同,因此在大多数情况下不是很有用。

硬件设置

使用 7 路母母跨接电缆将模块连接到 Pi。

接线细节如下表所示:

下载 RC522 Python 库

示例 Python 脚本

import timeimport RPi.GPIO as GPIOimport MFRC522# Create an object of the class MFRC522MIFAREReader = MFRC522.MFRC522()# Welcome messageprint("Looking for cards")print("Press Ctrl-C to stop.")# This loop checks for chips. If one is near it will get the UIDtry:while True:# Scan for cards(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)# Get the UID of the card(status,uid) = MIFAREReader.MFRC522_Anticoll()# If we have the UID, continueif status == MIFAREReader.MI_OK:# Print UIDprint("UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3]))time.sleep(2)except KeyboardInterrupt:GPIO.cleanup()

整合开门逻辑

先用 RC522 将相关卡的 ID 读入并存储。RC522 读取的卡片 ID 与存入的 ID 对比,符合则调用 open door 模块。open door 中对 mg90s 舵机进行控制,拉开门锁。

最终实现代码:

#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time: /8/6 16:19# @FileName : entrance_guard.py# @Author : jiayeimport osimport RPi.GPIO as GPIOimport SimpleMFRC522def opendoor():os.system("python /root/work_repository/RC522/open_door.py")if __name__ == '__main__':reader = SimpleMFRC522.SimpleMFRC522()while(True):try:print ("Ready to read card")id, text = reader.read()print("Card id: ", id)if (id == 357306137218):# Open the door# opendoor()opendoor()print ("Door is opened")print(text)finally:GPIO.cleanup()

5 mg90s 控制原理

mg90s 的控制信号为周期 20ms 的 PWM 信号,其脉冲宽度范围为 0.5ms - 2.5 ms ,对应的舵机控制角度为 0-180 度,对应的占空比为 2.5% - 12.5% 。

注:舵机任意角度与占空比都是一一对应的,只要给出的脉冲宽度不一致,则一定会变换角度

如脉冲宽度为1.5 ms 时,对应的角度则为 90 度,详见下图:

检测舵机是否能正常工作

运行如下代码:

#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time: /8/6 18:56# @FileName : open_door.py# @Author : jiayeimport RPi.GPIO as GPIOimport timeimport signalimport atexitif __name__ == '__main__':atexit.register(GPIO.cleanup)servopin = 21GPIO.setmode(GPIO.BCM)GPIO.setup(servopin, GPIO.OUT, initial=False)# 创建 PWM 实例# channel: servopin, frequency: 50HZp = GPIO.PWM(servopin, 50) # 更改频率,freq 为设置的新频率,单位为 Hz# p.ChangeFrequency(freq) # 启用 PWM# para: duty ratio(占空比),一个周期内,通电时间所占比例p.start(0)# time.sleep(2)for i in range(0, 181, 10):# 更改占空比p.ChangeDutyCycle(2.5 + 10 * i / 180) # 设置转动角度time.sleep(0.02) # 等该20ms周期结束p.ChangeDutyCycle(0) # 归零信号# time.sleep(2)print ("Opening door")time.sleep(1)for i in range(181, 0, -10):p.ChangeDutyCycle(2.5 + 10 * i / 180)time.sleep(0.02)p.ChangeDutyCycle(0)# time.sleep(0.2)

当舵机能够正常运行时说明之前的步骤正确,否则着重检查舵机有没有问题(如接线或舵机的触点没焊好,出现松动)

6 最后

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。