2023. 7. 20. 20:39ㆍ프로젝트 로그/테스트x솔루션 JIG 개발기
앞에서 이야기 했듯이 레이저 각인된 QR 코드 인식률을 높이기 위해서는 조명 제어가 필요 했다.
다양한 테스트를 진행한 결과, 카메라 렌즈가 있는 부분과 JIG 장치의 좌,우 부분 이렇게 세 군데에 조명을 장착하고 이를 순차적으로 ON/OFF 하면서 플래시 역할을 하니 레이저 각인 QR 코드의 인식률이 많이 좋아졌다.
위와 같이 조명 제어를 JIG S/W가 하도록 하기 위한 회로 구성과 S/W를 정리 한다.
( 현재는 POC 단계로 릴레이 모듈과 브레드 보드를 사용했지만, 추후 보드로 제작할 예정이다. )
회로 구성
4채널 릴레이 모듈
12V로 동작하는 조명의 스위치 역할을 하기 위해 릴레이 모듈을 사용했다.
릴레이 모듈은 아래 그림과 같이 1채널 당 NO(Normally Open), COM(공통단자), NC(Normally Close), SIG(제어 신호) 핀들이 있다.
각 핀들에 대한 특징은 아래와 같다.
- NO(Normally Open)
- 평상시에는 COM단자와 연결이 끊어져 있고, 릴레이에 전류가 흐르면 연결됨
- SIG(제어 신호)를 이용하여 릴레이에 전류 제어 함
- NC(Normally Close)
- 평상시에는 COM단자와 연결되어 있고, 릴레이에 전류가 흐르면 끊어짐
- SIG(제어 신호)를 이용하여 릴레이에 전류 제어 함
- SIG(제어신호)
- MCU의 GPIO를 SIG핀과 연결하여, 릴레이에 전류 제어 ( On/Off 개념 )
조명을 연결한 회로 구성
조명을 순차로 제어 하기 위해 아래 그림과 같은 배선으로 LED와 컨트롤러를 연결한다.
조명 제어를 위해 12V의 외부 전원을 연결하고 GND를 조명에 VCC를 릴레이 모듈의 COM 단자에 연결하였다.
그리고 조명의 VCC를 릴레이 모듈의 NC(Normally Close) or NO(Normally Open) 단자에 연결하고, MCU 혹은 SBC(Single Board Computer)의 VCC, GND, GPIO를 연결하여 릴레이의 채넏들을 제어 함으로써 조명을 On/Off 한다.
실물 사진
JIG 장치에 장착한 조명
JIG 장치에 조명을 장착한 사진이다. 조명을 한개만 장착했을 때는 빛에 의한 사각과 빛이 아크릴에 반사되어 QR 코드가 카메라에 안 보이는 현상이 있었다. 이를 해결하기 위해 조명을 3개를 장착하여 On/Off 하도록 하였고, 아크릴에 반사되는 빛을 줄이기 위해, 아크릴에 검은색 시트지를 붙여서 실험 하였다.
릴레이 모듈 & 컨트롤러
아래 사진과 같이 POC( Proof of Concept)을 위해 4채널 릴레이 모듈을 사용하였고 컨트롤러로는 오렌지보드 5를 사용 하였다.
코드
오렌지파이 보드 기반에서 LED를 0.15초 간격으로 On/Off 하기 위한 코드 이다.
LED#1 ON, LED#2 OFF, LED#3 OFF -> LED#1 OFF, LED#2 ON, LED#3 OFF -> LED#1 OFF, LED#2 OFF, LED#3 ON을 0.15초 간격으로 반복 한다.
import threading
import os
import time
class LedControlGpioManager(threading.Thread):
LED1_NUM = 0
LED2_NUM = 1
LED3_NUM = 2
LED_TURN_ON = 0
LED_TURN_OFF = 1
def __init__(self):
threading.Thread.__init__(self, name="LED Control GPIO")
self.isRun = False
self.isPause = False
stream = os.popen('gpio mode 0 out')
stream = os.popen('gpio write 0 1')
stream = os.popen('gpio mode 1 out')
stream = os.popen('gpio write 1 1')
stream = os.popen('gpio mode 2 out')
stream = os.popen('gpio write 2 1')
def turnOnLed(self, index=1):
if index == 1:
steram = os.popen('gpio write 0 0')
steram = os.popen('gpio write 1 1')
steram = os.popen('gpio write 2 1')
elif index == 2:
steram = os.popen('gpio write 0 1')
steram = os.popen('gpio write 1 0')
steram = os.popen('gpio write 2 1')
elif index == 3:
steram = os.popen('gpio write 0 1')
steram = os.popen('gpio write 1 1')
steram = os.popen('gpio write 2 0')
else:
pass
def stop(self):
self.isRun = False
def getIsRun(self):
return self.isRun
def setPause(self):
self.isPause = True
stream = os.popen('gpio write 0 1')
stream = os.popen('gpio write 1 1')
stream = os.popen('gpio write 2 1')
def setResume(self):
self.isPause = False
def run(self):
self.isRun = True
self.setPause()
index = 1
while True:
time.sleep(0.15)
if self.isRun == False:
break
if self.isPause == True:
index = 1
continue
self.turnOnLed(index = index)
index = index + 1
if index > 3:
index = 1
구매 링크
https://www.eleparts.co.kr/goods/view?no=3082047
https://www.devicemart.co.kr/goods/view?no=1328588
https://www.devicemart.co.kr/goods/view?no=1327287
'프로젝트 로그 > 테스트x솔루션 JIG 개발기' 카테고리의 다른 글
orangepi에서 root 권한으로 실행하는 명령을 비밀번호 없이 수행되도록 설정하기 (0) | 2024.01.03 |
---|---|
[testXJIG QR 코드 인식 고도화 #3-3] 구현 부분 (0) | 2023.07.21 |
[testXJIG QR 코드 인식 고도화 #3-1] QR 코드 인식을 위한 S/W 로직 (0) | 2023.07.18 |
[testXJIG QR 코드 인식 고도화 #2-4] IDS 카메라 기반 QT 프로그램 죽는 문제 해결 (0) | 2023.07.17 |
[testXJIG QR 코드 인식 고도화 #2-3] uEye XC(U3-36L0XC) 카메라 환경 구축 (0) | 2023.07.14 |