【2020】非接触式门禁

2020-02-098368
AI 快速预览详细 收起
本文介绍了使用掌控板设计制作的《非接触式门禁》作品。通过超声波传感器实现开关门,适用于公厕、更衣室等公共场合,减少病毒传播风险。硬件清单包括掌控板、90g舵机、HC-SR04超声波测距模块等。最终效果是实现非接触式开关门,提高公共卫生安全。
【2020】非接触式门禁图1


一、项目背景
  前段时间,看到一则关于在门把上发现新冠病毒的新闻,于是便想到能否在一些经常需要开关门的公共场合采用非接触式的门禁,例如,在使用频繁的公厕、更衣室等,于是便利用手头上的掌控板设计制作一个《非接触式门禁》的作品。

【2020】非接触式门禁图3【2020】非接触式门禁图4


二、工作方式

  非接触式门禁,通过传感器的遥感来实现开关门。与普通的门相比,它少了门把,同事也少了新冠病毒通过门把的传播途径。特别适合在公共场合的使用,如:公厕门或仅供单人使用的房间的门禁(试衣间,单人更衣室等……)。

  通过显示屏和指示灯来提示室内是否有人在使用,一目了然,让您快速找到位置。

【2020】非接触式门禁图5

三、工作流程

  1.门虚掩,显示屏显示“无人”,指示灯亮绿灯。
  2.当室外超声波测距遥感到人手靠近,门打开;
  3.人进去之后,用手靠近室内超声测距,则门关闭,上锁,指示灯亮红灯;
  此时,室外外超声测距传感器不起作用。
  4.当人要出去的时候,再次用手靠近内超声测距,开锁,门自动打开,
  5.人离,门自动关闭,显示屏显示无人,指示灯亮红灯。

  为此,设置了两个标识——outdorlock,分别标识门外感应和门锁。以下为真值表:

状态
outdor
lock
触发事件
初始状态
0
0
门关,亮绿灯
室外超声 有感应
0
0
开门
室内超声感应 第1
1
0
关门,上锁,亮红灯
室内超声感应 第2
1
1
解锁,开门,亮绿灯
复位
0
0
门关,亮绿灯


  程序设计参考以上真值表


三、实验器材:



元器件
数量
作用
掌控板
1
主控器,显示屏
90g舵机
2
开关门,门锁控制
HC-SR04超声波测距
2
内外各一,开关门感应
杜邦线
若干

其他

结构搭建


  就地取材吧,家里就这些设备了,原本打算再加一个人体感应来控制人走之后关门的,手头没有了,只能放弃了……


四、参考接线图


【2020】非接触式门禁图2


五、自定义图片

  由于掌控的显示屏不能调整字体的大小,所以,利用图片来生成大字体,通过画图制作了两张图片“有人”“无人”,像素大小为:120*60(开始是128*64,生成导入之后居然出错了,缩小一点就正常了),没安装pbm转换工具,就在找了个在线转换的,也顺便推荐给大家。网址:https://convertio.co/zh/image-converter/
【2020】非接触式门禁图6【2020】非接触式门禁图7
在线生成名字为onoffpbm文件之后,将其上传到mPythonX的文件系统中,操作如下:
【2020】非接触式门禁图13

六、参考代码

【2020】非接触式门禁图8
【2020】非接触式门禁图9


源代码:
from mpython import *
import time
from hcsr04 import HCSR04
from servo import Servo

hc1 = HCSR04(trigger_pin=Pin.P15, echo_pin=Pin.P16)
hc2 = HCSR04(trigger_pin=Pin.P14, echo_pin=Pin.P13)
servo_0 = Servo(0, min_us=750, max_us=2250, actuation_range=180)
servo_1 = Servo(1, min_us=750, max_us=2250, actuation_range=180)
image_picture = Image()

#有人提示
def human_in():
    global outdor, lock, OutSide, InSide, i
    oled.fill(0)
    oled.blit(image_picture.load("face/on.pbm", 0), 0, 0)
    oled.show()
    rgb.fill((int(255), int(0), int(0)))
    rgb.write()
    time.sleep_ms(1)
#无人提示
def human_out():
    global outdor, lock, OutSide, InSide, i
    oled.fill(0)
    oled.blit(image_picture.load("face/off.pbm", 0), 0, 0)
    oled.show()
    rgb.fill((int(51), int(255), int(51)))
    rgb.write()
    time.sleep_ms(1)
#开门
def opend():
    global outdor, lock, OutSide, InSide, i
    for i in range(20, 121, 5):
        servo_0.write_angle(i)
        time.sleep_ms(50)
#关门
def closed():
    global outdor, lock, OutSide, InSide, i
    for i in range(120, 19, -5):
        servo_0.write_angle(i)
        time.sleep_ms(50)
#上锁
def lockd():
    global outdor, lock, OutSide, InSide, i
    for i in range(10, 176, 5):
        servo_1.write_angle(i)
        time.sleep_ms(50)
#解锁
def unlockd():
    global outdor, lock, OutSide, InSide, i
    for i in range(175, 9, -5):
        servo_1.write_angle(i)
        time.sleep_ms(50)

#初始状态设置
outdor = 0
lock = 0
servo_0.write_angle(10)
servo_1.write_angle(10)
human_out()

while True:
    OutSide = hc1.distance_mm()
    InSide = hc2.distance_mm()
    time.sleep_ms(10)
#外超声传感器被感应,开门   
    if outdor == 0 and OutSide < 50 and OutSide > 10:
        OutSide = 0    #初始化OutSide,防误判,下同
        InSide = 0     #初始化InSide,防误判,下同
        outdor = 1
        opend()
        time.sleep(1)
        print(''.join([str(x) for x in [InSide, OutSide, lock, outdor]]))

#内超声传感器第一次被感应,关门,上锁,亮红灯        
    if outdor == 1 and lock == 0 and InSide < 50 and InSide > 10:
        OutSide = 0
        InSide = 0
        lock = 1
        human_in()
        closed()
        time.sleep(0.5)
        lockd()
        time.sleep(1)
        print(''.join([str(x) for x in [InSide, OutSide, lock, outdor]]))

#内超声传感器第二次被感应,解锁,开门,亮绿灯        
    if outdor == 1 and lock == 1 and InSide < 50 and InSide > 10:
        OutSide = 0
        InSide = 0
        lock = 0
        outdor = 0
        unlockd()
        time.sleep(0.5)
        opend()
        time.sleep(11)
        closed()
        human_out()
        print(''.join([str(x) for x in [InSide, OutSide, lock, outdor]]))



七、作品外观结构



【2020】非接触式门禁图12
【2020】非接触式门禁图11
【2020】非接触式门禁图10


八、演示视频。

my_code.zip

6.64 KB, 下载次数: 4172

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
kylinpoet
kylinpoet
多谢分享,学习了。
且歌且行
且歌且行
这个项目看过好几次了,这回留个爪印,以示膜拜!
DFrJ5KYVQaH
DFrJ5KYVQaH
想法很好,值得推扩
- 没有更多了 -