아두이노 등으로 전자장치를 제작하다 보면 전원이 필수인데, 간단한 경우 USB 충전용 아답터등으로 가능하지만 모터나 디스플레이 등 장치를 추가로 장착하기 위해서는 별도의 SMPS(Switched-Mode Power Supply) 등 전원공급장치를 따로 부착해야 하는데 이 SMPS가 가격이 만만치 않고 통상 한가지 전압만 출력되기 때문에 두가지 전압이 필요할 때에는 전압조절모듈을 추가로 설치해서 사용해야 한다. 여기에서는 폐기되는 PC에서 적출한 ATX파워를 활용하는 방법을 소개한다.
즉, 모든 PC에는 기본적으로 ATX(Advanced Technology Extended) 파워서플라이라는 전원공급장치가 내장되어 있는데, PC가 노후화 되어 폐기하는 경우에도 이 ATX파워는 멀쩡한 경우가 많기 떄문에 이를 따로 뗴어내어 다른 용도의 전원공급장치로 활용할 수 있다.
2. ATX파워서 활용시 장점
- 기본적으로 12V, 5V, 3,3V 세가지 전압을 동시에 출력하므로 원하는 전압의 전원을 임의로 선택하여 사용할 수 있다.
- 원래 PC를 통째로 구동시키기 위한 것이므로 용량이 충분하다( 통상 500W ~ 1000W )
- 전원 ON/OFF 스위치 기능이 내장되어 있어 편리하게 활용할 수 있다.
3. ATX 파워서플라이 구성
ATX란 PC용 메인보드의 표준규격 사이즈를 이야기하는 것이고, ATX파워서플라이란 ATX 사이즈 PC에 표준규격 크기로 장착되어 표준규격 전압을 공급하기 위한 전원공급장치 모듈을 지칭하는 것이다. 따라서 일정한 크기와 PC에서 필용한 케이브들과 커넥터들이 표준방식으로 구성된 형태로 판매된다.
4. 활용방법
물론 기존 커넥터를 그대로 사용하는 것이 가장 안전하고 이상적인 방법이지만 , 통상 아두이노 메이킹 프로젝트에서는 PC 처럼 복잡하고 많은 종류의 전원이 필요하지 않기 때문에 필요한 부분만 활용하면 된다. 즉 ATX 파워서플라이에서 나오는 수많은 케이블과 커넥터를 잘라버리고 원하는 부분의 케이블만을 활용할 수 있다.
1) 사용할 전원 선별 : 케이블 컬러별로 흐르는 전압은 다음과 같이 각기 다르므로 필요한 전압에 따라 사용할 케이블을 선택하여 별도의 전원 DC잭에 연결한다. (붉은색에 원하는 전압의 +케이블 ,검정색끼리 연결)
- 노란색 : +12 V
- 빨간색 : +5 V
- 오렌지색 : +3.3 V
- 검정색 : 접지(-) 공통
2) 전원스위치
처음에는 뗴어낸 ATX파워서플라이에 220V 전원을 공급해도 냉각팬이 돌지도 않고 DC전원 출력선에 전압이 출력되지도 않는데 스위치 역활을 하는 녹색선이 연결되어 있지 않아서 이다. 즉, 케이블 뭉치에서 녹색케이블이 검정색 케이블에 연결되면 전원스위치 ON으로 동작한다.
따라서 220V전원이 연결될 떄 자동으로 ON되게 하여면 이 두선( 녹색선과 임의의 검은색선 )을 연결 시켜 놓으면 되고, 별도의 전원스위치로 활용하려면 이 두선 사이에 스위치를 연결하면 된다.
3) 마무리
사용할 전원선과 스위치용 케이블을 제외한 나머지 케이블들은 따로 몪어 놓거나 잘라 버리면 되는데, 이떄 케이블 내선들이 노출되어 서로 접촉되지 않도록 주의한다. 그리소 연결된 전원 DC잭들의 전압이 다를 경우 다음과 같이 라벨을 붙혀 놓아야 혼동되지 않는다.
4) 주의사항 : ATX케이블을 자르거나 연결하는 등의 작업을 할 때에는 반드시 220V전원을 끊어 놓은 상태에서 작업을 해야한다. 전원이 공급되는 상태에서 케이블을 만지다가 쇼트라도 발생되면 ATX파워가 통쨰로 망가지게 될 수가 있다.
주의사항 팁 : 쇼트나 과전류 등으로 ATX파워서플라이가 먹통이 되는 경우에도 잠시 ( 10~30분정도 ) 전원을 끊어 놓았다가 다시 연결하면 정상 작동하는 경우가 있지만 영영 다시 켜지지 않는 경우도 있음.
Fritzing은 아마추어 또는 비전문가를 위한 전자회로 설계도구로서, 아두이노 기반으로 손쉽게 회로를 설계하고 PCB레이아웃까지 제작할 수 있는 오픈소스기반의 프로젝트이다. 전문적인 전자회로 설계도구와는 다르게 브레드보드 그림위에 아두이노 보드를 배치하고 여러가지 센서나 부품들을 마우스 조작으로 연결시켜 가며 회로를 구성하는 간단하고 직관적인 방법으로 회로를 설계하지만 최종적으로 PCB LAYOUT까지 설계하여 PCB를 주문 제작할 수 있다.
Fritzing 유료화
원래 Fritzing은 대학교에서 제작되어 소스가 공개되어 무료로 배포되는 프로그램이었는데, 언젠가 부터 유료화 ( 명목은 8유로 또는 25유로 기부인데 기부해야만 다운로드 가능 )되어 버려 무료인줄 알고 다운로드 받으려 간 사람을 당황하게 만들고 있다.
Fritzing 무료 사용방법
그러나 여전히 오픈소스 프로젝트임을 강조하며 무료로 설치하는 방법을 자세히 안내하고 있다.
다음과 같은 도구를 이용하여 Friting 오픈소스를 Build하는 방법을 소개하고 있는데 상당히 복잡하지만 흥미있는 사람은 직접 Build하여 사용할 수 있다.
git
Qt(5.9.6버전)
Microsoft Visual Studio2017(Qt Add-in필요)
cmake(의존성관련빌드용)
의존성:Boost, libgit2
간편한 방법
기부하기도 싫고 복잡한 Build과정도 싫은 경우에는 과거에 무료로 배포하던 설치 파일을 다운로드 할 수 있는 곳도 많이 있으므로 찾아서 사용하면 된다.
젯슨 나노 등 Jetson 시리즈는 USB방식의 카메라 이외에도 MIPI-CSI (Mobile Industry Processor Interface - Camera Serial Interface)방식의 고속 카메라연결장치가 내장되어 있는데 이는 라즈베리파이 방식과 동일한 방식이다. 따라서 라즈베리파이용 카메라를 젯슨 나노에 연결해서 사용할 수 있다. 단 라즈베리파이 카메라 Ver 1.X는 안되고 IMX219칩을 사용한 Ver 2 만 사용 가능하고 사용방법도 다르다.
2. 카메라 연결
다음과 같이 라즈베리파이 카메라 V2 카메라를 Jetson Nano 카메라 슬롯에 연결한다.
주의사항 : Jetson Nano의 카메라 슬롯은 매우 약하게 제작되어 있어,
조금만 힘을 주어도 연결부위가 부러져 버려 난감해 지니 조심조심 해야 한다.
3. 젯슨나노에서의 CSI 카메라의 사용
젯슨나노에서의 CSI 카메라의 사용을 위한 기본 프로그램은 nvarguscamerasrc라는 프로그램인데 이를 GStreamer 방식으로 pipeline을 생성하여 사용하거나 nvgstcapture라는 유틸리티 프로그램을 사용하여 작동시키는 방법을 사용한다. GStreamer pipeline방식은 주로 프로그램에서 카메라를 제어할 때 사용하고, nvgstcapture유틸리티프로그램은 키보드 명령어로 카메라를 제어 하면서 촬영하고자 할 때 사용한다.
4. Gstreamer를 이용한 방식
1) 단순 Preview : 터미널 창에서 다음 명령어로 Gstreamer pipeline을 구성하면 촬영 Preview를 볼 수 있다.
$ gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink
2) 촬영 OPtion의 지정 : Option을 지정하면서 촬영하려면 다음과 같이 복잡한 명령어 pipeline을 구성해야 한다.
. 'video/x-raw,width=960, height=616' : preview 하거나 저장할 영상의 size
3) 프로그램에서의 사용
프로그램에서 CSI 카메라를 GSteamer방식으로 사용하는 방법들은 위 사이트에 접속해서 찾아볼 수 있는데, python 프로그램으로 카메라를 구동하는 sample은 다음과 같다.
# MIT License
# Copyright (c) 2019 JetsonHacks
# See license
# Using a CSI camera (such as the Raspberry Pi Version 2) connected to a
# NVIDIA Jetson Nano Developer Kit using OpenCV
# Drivers for the camera and OpenCV are included in the base image
import cv2
# gstreamer_pipeline returns a GStreamer pipeline for capturing from the CSI camera
# Defaults to 1280x720 @ 60fps
# Flip the image by setting the flip_method (most common values: 0 and 2)
# display_width and display_height determine the size of the window on the screen
def gstreamer_pipeline(
capture_width=1280,
capture_height=720,
display_width=1280,
display_height=720,
framerate=60,
flip_method=0,
):
return (
"nvarguscamerasrc ! "
"video/x-raw(memory:NVMM), "
"width=(int)%d, height=(int)%d, "
"format=(string)NV12, framerate=(fraction)%d/1 ! "
"nvvidconv flip-method=%d ! "
"video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
"videoconvert ! "
"video/x-raw, format=(string)BGR ! appsink"
% (
capture_width,
capture_height,
framerate,
flip_method,
display_width,
display_height,
)
)
def show_camera():
# To flip the image, modify the flip_method parameter (0 and 2 are the most common)
print(gstreamer_pipeline(flip_method=0))
cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
if cap.isOpened():
window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)
# Window
while cv2.getWindowProperty("CSI Camera", 0) >= 0:
ret_val, img = cap.read()
cv2.imshow("CSI Camera", img)
# This also acts as
keyCode = cv2.waitKey(30) & 0xFF
# Stop the program on the ESC key
if keyCode == 27:
break
cap.release()
cv2.destroyAllWindows()
else:
print("Unable to open camera")
if __name__ == "__main__":
show_camera()