임베디드

[라즈베리파이] 출입 인증 시스템 제작

히똔 2022. 4. 28. 16:13
728x90
반응형

개요

1. 초음파 센서로 접근을 확인하여 가까이 왔을 때 초록색 LED가 켜지고, RFID 를 사용할 수 있다.
2. 출입 인증 성공시, 서보모터로 문이 열리고 부저를 통해 출근 환영 음악이 나온다. 그후 문이 닫힌다.
3. 출입 실패시, 부저에서 간단한 경고음과 빨간색 LED가 켜지고, 3회 연속 실패시, 응급 경고음이 길게 울린다. 이때, 출입 성공을 한번 하면 실패 횟수가 초기화 된다.
4. FND로 출입한 사람 수를 출력해준다.

 

회로구성

준비물 : 라즈베리파이, 초음파센서, FND 7-Segment, RFID, 빨간색과 초록색 LED, Buzzer, 서보모터

 

코드

from gpiozero import DistanceSensor,LED,AngularServo,TonalBuzzer
from mfrc522 import SimpleMFRC522
from gpiozero.tones import Tone
from time import sleep

red = LED(2)
green = LED(3)

buzzer= TonalBuzzer(4)

trig = 20
echo =21
sensor = DistanceSensor(echo,trig)

a=LED(5)
b=LED(6)
c=LED(13)
d=LED(19)
e=LED(26)
f=LED(7)
g=LED(1)
dp=LED(12)

num=[
    [a,b,c,d,e,f],
    [b,c],
    [a,b,g,e,d],
    [a,b,g,c,d],
    [f,g,b,c],
    [a,f,g,c,d],
    [a,f,g,e,c,d],
    [f,a,b,c],
    [a,b,c,d,e,f,g],
    [a,b,c,d,f,g]
    ]

def show(n):
    global num
    for m in num[8]:m.off()
    for m in num[n]:m.on()


lst = [391, 391, 440, 440, 391, 391, 329]
t = [0.5, 0.5, 0.5,0.5,0.5,0.5,1]


red.off()
green.off()

cnt=0
failCnt=0

def success():
    global cnt, failCnt
   #servo
    servo = AngularServo(14,min_angle=0, max_angle=90)
    servo.angle=0
    sleep(1)
   
    #sing
    for i in range(len(lst)):
        buzzer.play(lst[i])
        sleep(t[i])
    buzzer.stop()
    
    
    servo.angle=90
    sleep(1)
    
   #fnd cnt++
    cnt+=1
    failCnt=0


def fail() :
    global failCnt
    failCnt+=1
    
    red.on()
    green.off()
    
    if failCnt >= 3 :
        #warning sing
        for i in range(4):
            buzzer.play(440)
            sleep(0.5)
            buzzer.play(391)
            sleep(0.5)
        buzzer.stop()
    
    buzzer.play(440)
    sleep(0.5)
    buzzer.stop()
    


#tag 208836238120
card = 772754376848

disFlag=0

while True:
    red.off()
    green.off()
    show(cnt)
    dis = sensor.distance
    print(dis)
    if dis < 0.1 : disFlag =1
    else : disFlag = 0
    if disFlag == 1 :
        #near
        red.off()
        green.on()
        
        print("Hold a tag near the reader")
        id = SimpleMFRC522().read()[0]
        print(id)
        sleep(0.3)
        
        if id == card : success()
        else : fail()

 

결과 영상

 

728x90
반응형