IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【毕业设计】 树莓派寝室宿舍门禁刷卡系统 - 物联网 单片机 嵌入式 -> 正文阅读

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


0 前言

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

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

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

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

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

🧿 选题指导, 项目分享:

https://gitee.com/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 1K
  • MIFARE 4K,
  • MIFARE 超轻
  • MIFARE DESFire EV1
  • MIFARE Plus 射频

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

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

硬件设置
在这里插入图片描述
使用 7 路母母跨接电缆将模块连接到 Pi。
在这里插入图片描述
接线细节如下表所示:
在这里插入图片描述

下载 RC522 Python 库

示例 Python 脚本

import time
import RPi.GPIO as GPIO
import MFRC522
 
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
 
# Welcome message
print("Looking for cards")
print("Press Ctrl-C to stop.")
 
# This loop checks for chips. If one is near it will get the UID
try:
   
  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, continue
    if status == MIFAREReader.MI_OK:
 
      # Print UID
      print("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     : 2019/8/6 16:19
# @FileName : entrance_guard.py
# @Author   : jiaye

import os

import RPi.GPIO as GPIO
import SimpleMFRC522

def 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     : 2019/8/6 18:56
# @FileName : open_door.py
# @Author   : jiaye

import RPi.GPIO as GPIO
import time
import signal
import atexit

if __name__ == '__main__':
    atexit.register(GPIO.cleanup)
    servopin = 21
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(servopin, GPIO.OUT, initial=False)

    # 创建 PWM 实例
    # channel: servopin, frequency: 50HZ
    p = 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 最后

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:33:13  更:2022-09-13 11:34:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:23:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码