Skip to content

zmfpdl64/StudyCafe-AWS

Repository files navigation

STANDER

기술 스택

BackEnd

  • Jdk version: 11
  • Springboot version: '2.6.4'
  • Spring Data JPA : latest
  • MariaDB version: latest
  • Thymeleaf version: latest
  • Spring Security: version: 5

Iot

  • Python version : 3.7
  • PigPio
  • cv2

프로젝트명: STANDER

무인카페 시스템

무인카페 시스템 프로젝트를 진행하게 된 계기:

대학생이라 스터디 카페를 많이 이용하는데 이용하면서 불편한 점들이 있었다.

1. 퇴실할 때 사용자가 퇴실하기 버튼을 누르지 않는다면 시간을 날려버리는 경우가 존재합니다. 퇴실처리를 위하여 다시 카페를 가는 번거로움이 있습니다. 그래서 사용자가 사용을 다하고 퇴실을 눌러 퇴실을 할 수 있게 설계하였습니다.

2. 많은 스터디 카페가 자사 앱, 웹을 가지고 있지 않아 예약하는데 있어 번거로움이 존재합니다.

3. 앱, 웹을 같은 db를 연동하여 앱, 웹을 통합한 시스템을 구현하고 싶었습니다.





무인 카페 시스템 원리

피지컬 아키텍처

무인스터디카페_피지컬아키텍추

웹, 앱


  • 로그인
  • 회원가입
  • 예약하기
  • 결제하기
  • 마이페이지

IOT 파트 기능

  • 카메라 QR코드 인식 후 서버와 통신
  • Servo Motor Operate

image




무인 카페 시스템 메인 기능

1. 회원가입

join


2. 로그인

login_notime


3. 예약하기

preserve


예약 전 마이 페이지

GOMCAM 20220510_0154080891



예약 한 후 마이 페이지

GOMCAM 20220507_2058420860



6. 예외 처리

except_reserve

겪었던 문제점

Python의 싱글 스레드 처리

Python에서 QR코드를 읽고 문을 열어주는 기능을 구현했어야 했습니다. qr코드를 인식하고 subo moter가 동작하는 동안에는 카메라가 이미지를 읽어오지 못했습니다. 그래서 카메라를 읽어오고 subo motor가 동작할 때는 Thread를 생성해 동작하는 동안에도 프로그램이 멈추지 않게 문제를 해결했습니다.

코드보기/코드접기
  import cv2  #이미지 처리를 위한 모듈이다
  from urllib .request import urlopen  #서버와 통신하기 위한 라이브러리
  import pigpio  #서브모터를 동작시키기 위한 라이브러리
  from time import sleep  #시간 관리하는 라이브러리
  import time
  import threading   #쓰레드 라이브러리

  start = time .time ()
  end = time .time ()
  pi = pigpio .pi()
  #while True:
  pi .set_servo_pulsewidth(18 ,0 )  #18번 핀을 이용한다
  sleep (1 )
  # initalize the cam
  cap = cv2 .VideoCapture(0 )    #카메라 모듈을 실시간 스트림으로 동작시킨다.
  # initialize the cv2 QRCode detector
  detector = cv2 .QRCodeDetector() #이미지를 디코딩한다
  while True :
     start = time .time () 
     _, img = cap .read()   #이미지를 읽어들인다.
     # detect and decode
     data , bbox , _ = detector .detectAndDecode(img )  #qr코드의 스트링을 읽어들인다.
     # check if there is a QRCode in the image
     if data and ((start - end )//1 >5 ):        #5초 동안 실행하지 않고 data가 존재할 때 실행된다.
       end = time .time ()
       try :
         response = urlopen (data ).read().decode('utf-8') #qr스트링을 읽어서 url로 이동한다.
         if response == "ok":   #해당 url로 이동했을 때 ok 신호가 왔을 때 실행된다.
           t = threading .Thread (target =servo , args =(500 , 1500 ))   #쓰레드를 생성한다. 
           t .start ()                        #쓰레드를 실행한다.
           print (response )
         else :
           print ("QR코드가 없습니다")
       except :
         response = "fail"
         print ('예외 발생')

     def servo (low , high ):    #문이 열리는 동작을 한다.
       for i in range (500 , 1500 ):
         pi .set_servo_pulsewidth(18 , i )
         sleep (0.0005 )
       sleep (5 )
       for i in range (1500 , 500 , -1 ):
         pi .set_servo_pulsewidth(18 , i )
         sleep (0.0005 )

       #break
     # display the result
     cv2 .imshow("QRCODEscanner", img )   #화면에 카메라 영상이 출력된다.
     if cv2 .waitKey(1 ) == ord ("q"):  #q를 누르면 프로그램이 종료된다.
       break

  cap .release()  
  cv2 .destroyAllWindows() #화면을 종료시킨다.

About

무인 스터디 카페 시스템

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages