나의 여행과 일상 일기장

(8) 캡스톤디자인 8강_부저 모듈과 QRcode 인식 본문

일상일기

(8) 캡스톤디자인 8강_부저 모듈과 QRcode 인식

똥글똥글 2022. 4. 26. 20:28
반응형

1. 부저 구현하기

- 조도센서를 인식하여 파이카메라로 촬영할 때 부저가 소리를 내며 운전자에게 사진이 찍힌다는 것을 알려준다.

- 라즈베리파이 GPIO를 파이썬코드에서 import 해주고 자동차가 출입했을 때 부저를 setmode(), setup()으로 활성화하고 output()해주면 부저가 울린다. 파이카메라로 촬영하는 과정이 이어지고 cleanup()을 이용해서 부저를 꺼준다.

http://blog.naver.com/PostView.nhn?blogId=pk3152&logNo=221368477491&redirect=Dlog&widgetTypeCall=true&directAccess=false 블로그참고

 

 1) 라즈베리파이 GPIO 회로도

- 위의 라즈베리파이의 GPIO핀 중에서 GPIO26번과 GND를 사용하여 부저와 직접 연결했다.

 2) serialard.py 코드(부저 모듈 추가)

import serial
import sys
from picamera import PiCamera
from time import sleep
import RPi.GPIO as GPIO
import time

def sensor():
    FromArduino = serial.Serial("/dev/ttyACM0" , 9600)   #통신포트 open
    FromArduino.flushInput()
    GPIO.cleanup() # cleanup all GPIO 
    while True:
        light = int(FromArduino.readline())
        
        if light < 160:      #자동차가 출입했을 때
            print("자동차가 출입했습니다")
            
            GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme
            GPIO.setup(26, GPIO.OUT) # output rf
            GPIO.output(26, GPIO.HIGH)
            
            camera = PiCamera()
            camera.start_preview()
            sleep(3)
            camera.rotation = 180      #180도 회전
            sleep(3)
            camera.capture("/home/pi/CarLicensePlate/test_img/pic.jpg")   #사진 저장 경로
            camera.stop_preview()
            camera.close()
            
            GPIO.cleanup() # cleanup all GPIO 
            sleep(1)
            import serialmicro
            serialmicro.micro()    #초음파로 인식 시작
            sys.exit(1)
        else:                #아무것도 없을 때
            print("현재 아무것도 들어오지 않았습니다")
            sleep(1)
            continue
        
sensor()

<<<조도센서에 인식하여 사진을 찍을 때 부저소리를 내어 사진이 찍히는지 알려준다.>>>

 

2. QR코드를 이용해서 P or D구현 -> QRcode모듈 구현완료

QR코드 추가에 따라서 번호판 인식 프로세스가 전반적으로 순서가 바뀜

<<<<<<<<<<<<<<<<<프로세스 정리>>>>>>>>>>>>>>>

 1) 조도센서로 자동차의 진입을 인식(+진입하면 부저울리고 파이카메라로 번호판을 촬영)

 2) 번호판인식프로세스(번호판인식후에 데이터베이스에 데이터 넣기)

 3) 초음파센서로 주차완료인식(+주차중에 LED켜지고 파이카메라로 QRcode를 촬영)

 4) QRcode인식 프로세스(QRcode인식후에 데이터베이스에 데이터 넣기)

 5) QRCode인식프로세스가 끝나면 다시 조도센서인식으로 넘어감

--> 각각 코드 구현 완료

3. 코드 구현

 1) serialard.py ver6

import serial
import sys
from picamera import PiCamera
from time import sleep
import RPi.GPIO as GPIO
import time

def sensor():
    FromArduino = serial.Serial("/dev/ttyACM0" , 9600)   #통신포트 open
    FromArduino.flushInput()
    GPIO.cleanup() # cleanup all GPIO 
    while True:
        light = int(FromArduino.readline())
        
        if light < 160:      #자동차가 출입했을 때
            print("자동차가 출입했습니다")
            
            GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme
            GPIO.setup(26, GPIO.OUT) # output rf
            GPIO.output(26, GPIO.HIGH)
            
            camera = PiCamera()
            camera.start_preview()
            camera.rotation = 180      #180도 회전
            sleep(1)    #번호판사진을 찍는데 걸리는 시간
            camera.capture("/home/pi/CarLicensePlate/test_img/pic.jpg")   #사진 저장 경로
            camera.stop_preview()
            camera.close()
            
            GPIO.cleanup() # 부저 끄기
            
            sleep(1)
            print("번호판 인식으로 넘어갑니다")
            import imgprocess2    #조도센서인식후 바로 번호판인식
            imgprocess2.computervision()
            
            sys.exit(1)
        else:                #아무것도 없을 때
            print("현재 아무것도 들어오지 않았습니다")
            sleep(1)
            continue
        
sensor()

//조도센서로 자동차의 진입을 인식(+진입하면 부저울리고 파이카메라로 번호판을 촬영)하고 번호판인식프로세스(번호판인식후에 데이터베이스에 데이터 넣기) 진행

 

 2) imgprocess2.py ver6

def computervision():
    //
    //
    //
    #최종 번호판 추출 함수
    parking_classfication("/home/pi/CarLicensePlate/test_img/pic.jpg")  #인식을 하려는 사진 (경로 수정가능)
    os.remove("/home/pi/CarLicensePlate/test_img/pic.jpg")   #찍힌 사진 삭제
    
    sleep(3)
    import serialmicro    #번호판 인식후 QRcode를 인식하기 위해 초음파센서
    serialmicro.micro()    #초음파로 인식 시작
        
    sys.exit(1)  #메모리 과부하를 막기 위한 exit()
    
computervision()

//번호판 인식 과정 후 초음파로 차량이 들어오는지 인식 시작

 

 3) serialmicro.py ver6

import serial
import sys
from time import sleep
import os
import RPi.GPIO as GPIO
import time
from picamera import PiCamera

def micro():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(17, GPIO.OUT)
    while True:
        ser = serial.Serial('/dev/ttyUSB0',9600)   #while문이 계속 돌면서 통신포트 open
        microresult = int(ser.readline())
        
        GPIO.output(17, True)  #주차중인 경우 계속 LED가 깜박이도록한다. 
        time.sleep(0.1)
        GPIO.output(17, False)
        time.sleep(0.1)
        
        if microresult < 10:  #주차완료
            print("차가 주차완료했습니다 ")
            GPIO.output(17, False)
            
            camera = PiCamera()
            camera.start_preview()
            sleep(1)
            camera.rotation = 180      #180도 회전
            sleep(1)     #7초동안 QRcode 사진찍기
            camera.capture("/home/pi/qrcode/qrpic.jpg")   #qrcode사진 저장 경로
            camera.stop_preview()
            camera.close()
            
            print("QRcode 인식으로 넘어갑니다")
            import qrprocess       #사진찍고 QRcode 인식
            qrprocess.qr()
    
            sys.exit(1)    #이건 필수로 있어야 함
        elif microresult >= 10 and microresult < 90:   #주차중
            print("차가 주차중입니다")    
            continue
        else:                             #차가 다시 뒤로 나가면 조도센서로 처음부터 다시 인식
            print("차가 나갔습니다")
            GPIO.output(17, False)
            import serialard
            serialard.sensor()
            sys.exit(1)   #이것도 필수
            
micro()

// 차가 주차 완료라고 인식하면 QR코드 사진을 찍고 QR인식으로 넘어간다.

 

 4) qrprocess.py

def qr():
    import pymysql  #데이터베이스 import
    from datetime import datetime
    
    #라즈베리파이 local 데이터베이스 연결
    #conn = pymysql.connect(host = 'localhost', user='phpmyadmin', password='1234', db = 'testDB', charset='utf8') 
    
    #curs=conn.cursor() #데이터베이스 커서 생성
    
    stnowday = datetime.today().strftime("%Y%m%d")
    nowday = int(stnowday)
    print(type(nowday))
    print(nowday)    # YYYYmmddHHMMSS 형태의 시간 출력
    //
    //
    //
    for d in decoded:
        datas =d.data.decode('utf-8')
        data1=datas.split(' ')[0]
        data2=datas.split(' ')[1]  
        print(data1)
        print(data2)
        if(int(data2)>=nowday):
          print("유효한 코드입니다")
        else:
          print("만료된 코드입니다")

        if(data1=='P'):
          print("임산부")
        elif(data1=='D'):
          print("장애인")
        else:
          print("유효하지 않은 코드입니다")
          
      #sql = "UPDATE picam SET piImg = %s, piExtract=%s where id=8"      #id가 8인 위치에 데이터 수정
      #sql = "Insert into picam (piPlot, piPorD, piName,piImg,piExtract) VALUES(%s,%s,%s,%s,%s)"
      #sql = "UPDTAE picam SET piImg = %s, piExtract=%s where piName=%s and piPlot=%s"  #수정
          
      #curs.execute(sql, ('한성대학교 주차장','P','P1', empPicture, chars))  #sql실행
      #curs.execute(sql, (empPicture, chars))  #sql실행
      
      #conn.commit()

      #conn.close()
    
    import serialard    #다시 조도센서로 출입하는 차량을 인식하기 위한 import
    serialard.sensor()

qr()

//QR인식 후 다시 조도센서 인식으로 넘어감

반응형