[17호]코일건을 탑재한 원격 조종 미니카
2012 DIY 프로젝트 작품 공모전코일건을 탑재한 원격 조종 미니카
글 | 정민우 ctrleee@naver.com |
심사평
간단한 구조와 구성으로 좋은 작품을 만들어 낸 경우이다. 짧은 듯 하지만 필요한 내용을 잘 다루고 있고 On Line 상에 전개과정이 모두 수록되어 있어서 쉽게 따라할 수 있으며, 제작 과정을 지켜볼 수 있다.
개발 동기 및 목적
인간에게 위험을 가하는 목표를 사전에 제거하기 위한 목적으로 개발한 원격조종 미니카입니다. 전자공학과 커리큘럼에서 배울 수 있는 모든 전공을 동원하여 시작한 캡스톤 디자인 프로젝트입니다. 전자공학과 커리큘럼 (논리회로, 회로이론, 통신이론, 전자기학, 전자회로, 임베디드H/W, 임베디드 S/W, 자동제어, DSP, 영상처리, 신호 및 시스템 등등)..
1. 영상처리 (추적 및 트래킹)
유저에게 피해를 줄 만한 위험물을 사전에 제거하기 위해서 가장 효율적이라 판단한 비전센서를 통해 위험물의 특징을 추출합니다. 정지된 상황에서의 영상처리가 아닌 동적으로 움직이는 차체에서 수행하는 실시간 영상처리인 만큼 성능을 위하여 PC와 Web-cam을 그리고 openCV를 이용하여 소스코드를 작성하였습니다.
실제 위험을 줄 만한 물체는 주변에서는 찾을 수 없기 때문에 마커 역시 임의로 만들었으며, 마커는 안드로이드 폰을 이용하였으며, App Inventor를 사용하여 간단하게 마커를 만들었습니다. 특정 문자 한글이나 영문, 단색 컬러의 화면을 이용하였습니다.
문자로 한글 혹은 영문을 트래킹하기 위해서 템플릿 매칭 알고리즘을 사용하였고, 단색 컬러화면을 검출하기 위해서 컬러 검출, 추가 특징검출, 마커 좌표검출, 잡음 개선을 통해 마커를 검출하였습니다.
1-1. 마커 색 검출
동영상보러가기 |
원격 조종인 만큼 원격지의 PC에서 위험물에 대한 정보를 보내면 차량의 PC에서 그 특징에 맞는 알고리즘을 수행합니다. 빨간 사각형을 선택하면. 우선 웹캠을 통해 얻은 영상에서 R, G, B의 값 중 G, B값 보다 R값이 훨씬 큰 경우를 선택하도록 소스코드를 작성합니다.
1-2. 마커 특징 검출
동영상보러가기 |
빨간색 뿐만 아니라 사각형이라는 특징을 추가로 (안드로이드 폰 액정이 사각형)하여 마커의 모서리를 판단해내게 됩니다. 이부분에서는 openCV를 설치하면 제공되는 예제 파일을 많이 참고하였습니다. 특정 크기 정도의 사각형만 잡히도록 레이블링을 하여 하나의 사각형을 검출해내게 됩니다. 이때 이전에 얻은 컬러와 대조하여 같은 위치가 아니라면 재수행을 하였습니다. 깔끔한 마커를 위해 팽창, 침식연산을 이용하여 마커를 제외한 잡음을 없애줍니다.
1-3. 마커의 위치 검출
동영상보러가기 |
레이블링 된 마커를 통해 마커의 꼭지점을 얻어 내게 되고, 영상에서의 좌표를 구해냅니다. 이때 마커가 영상 중앙으로부터 얼마나 떨어져 있는지, 그리고 마커의 꼭지점을 이용하여 마커로부터 카메라까지의 거리를 얻어낼 수 있습니다.
1-4. 시리얼 통신
동영상보러가기 |
영상처리를 통해 얻어낸 마커의 좌표를 PC의 USB단자를 이용하여 AVR(mega128)로 전송을 해줍니다. 이때 전송되는 데이터는 마커 중심의 x, y 좌표입니다.
1-5. 트래킹
Mega128은 UART, Fast PWM을 사용하여 서보모터 두개(Pitch : 끄덕끄덕, Yaw : 도리도리)를 구동합니다. 이때 PI제어를 이용하여, 빠른 시간에 목표를 찾지 못하더라도, 오차를 최소화하여 마커가 비젼센서의 영역에 들어오면 정조준 할 수 있도록 하였습니다. 아크릴 관에 레이저포인터를 비추어 카메라의 중심으로 코일건 영점을 잡아주었습니다.
동영상보러가기 |
빨간 사각형을 카메라가 실시간 트래킹하는 영상입니다. 안드로이드 폰에 빨간 화면을 띄워 놓은 상태이며, 웹캠이미지를 컴퓨터로 받아서 영상 처리 후 시리얼 통신으로 MCU에 전달을 해주며 MCU는 신호를 받아 타이머카운터를 이용하여 2축의 서보모터를 구동시켜 줍니다.
하나의 동영상은 원격지에서 보는 모니터이며, 하나는 아래에 작게 보이지만 서버 컴퓨터의 모니터로 볼 수 있습니다. 조명, 환경의 변화에 따라 검출이 되지 않는 것 보다 오검출하는 상황이 많았습니다.
1-6. 수동모드
“모범시민”이란 영화에서처럼 원격지에서 모니터링 해가면서 코일건을 사격할 수 있도록 자동 트래킹이 아닌 수동으로 버튼을 클릭해서 코일건을 원하는 곳으로 지향할 수 있도록 소스코드를 작성하였습니다.
1-7. 영상 전송
차량에 적재된 PC(Client)로부터 User’s PC(Server)로 영상을 전송하기 위해 유무선 공유기를 탑재하여 영상전송을 하였습니다. 영상압축을 하지 않았기에 데이터가 상당히 많아 1채널의 그레이 스케일로 영상을 UDP 방송하였습니다. 공유기의 비밀번호를 걸어 서버 PC만 제한적으로 볼 수 있도록 하였습니다.
2. 원격조종 (게이밍 휠)
게이밍 휠은 키보드나 마우스처럼 HID로 분류가 되어 Windows에서 장치로 인식이 됩니다. 따라서 MFC에서 클래스를 받아서 사용할 수가 있었습니다. 로지텍 윙맨 포스(약 10년전에 산 것..)을 컴퓨터에 연결하고 프로그래밍을 할 수 있는지 MFC로 동작시켜 보았습니다.
2-1. 게이밍 휠 테스트
MFC와 게이밍 핸들러가 잘 동작하는지 확인하기 위해 현재 핸들의 위치와 눌린 버튼, 그리고 현재 악셀, 브레이크의 Position을 출력해주도록 다이얼 로그를 만든 후 게이밍 휠을 연결하고 테스트해봅니다. 버튼은 추후에 미니카의 LED를 구동시켜 전조등 역할의 LED와 브레이크 LED, 그리고 코일건의 격발장치로 사용하게 따로 빼 두었습니다.
2-2. 게이밍 휠 데이터 전송
동영상보러가기 |
핸들러의 신호는 2바이트(0~65535)의 크기로 들어오지만 서보모터의 각도도 제한적이라 데이터를 모두 쓸 수 없기 때문에 컴퓨터에서 1바이트(0~255)의 크기로 변환을 시켜 영상 트래킹과 같은 방법의 시리얼 통신을 사용하였습니다. 또한, 미니카가 고속 BLDC모터이기 때문에 악셀 신호는 리미트 값을 주어 일정 속도 이상을 나오지 않게 하도록 프로그래밍 하였습니다.
미니카에 적재된 PC로부터 캠 영상을 유저의 PC에 전송하고 있습니다. 유저는 원격지에서 정면의 모니터를 보며 게이밍 핸들러와 악셀, 브레이크를 이용하여 미니카를 원격 조종하고 있습니다. 유저 PC로부터 미니카로 블루투스 신호를 받아와 MCU는 서보모터와 BLDC모터를 구동하게 됩니다. 또한 BLDC 모터가 모터드라이버를 통해 낼 수 있는 출력속도 중 5%만 사용 할 수 있게 리미트를 주었습니다. 캠의 영상은 전송 속도 때문에 그레이 영상으로 변환 후 전송 하였습니다.
3. 코일건
코일건은 다른 총에 비해 하드웨어를 만들기가 쉽고 간단하여 선택을 하게 되었습니다. 텅빈 관에 코일만 감아두어 솔레노이드를 만들어 순간적으로 전류를 흘리면 강력한 전자석이 완성됩니다. 이때 솔레노이드의 외부에서는 자기장이 거의 ‘0’이고, 내부에는 균일한 크기의 자기장이 형성됩니다. 솔레노이드를 통해 흐르는 전류의 크기가 클수록, 솔레노이드의 단위 길이당 감은 횟수가 많을 때 강력한 자기장을 내는 전자석을 만들 수 있습니다. 하지만 감은 횟수를 증가시키면 저항이 커지기 때문에 오히려 전류가 떨어지게 되어 적절하게 감는 것이 중요합니다.
속이 비어 관 앞에 높은 순도를 가진 쇠구슬을 두고 솔레노이드에 전류를 흘려주면 쇠구슬이 인력으로 인해 발사가 되게 됩니다.
3-1. 솔레노이드 및 승압회로 제작
일단 쇠구슬 크기를 염두하고 아크릴 관을 구하여 코일을 감습니다. 3가닥의 코일을 병렬로 묶어 저항성분을 낮추고 지름 1.5cm정도의 관에 3cm의 길이로 40턴 정도 감았습니다.
원격 조종 미니카인 만큼 교류 220V는 사용 할 수 없기에 14.4V의 Li-po 배터리를 이용하여 충전을 하게 회로를 만들었습니다. 가지고 있던 220V – 10V 트랜스를 반대로 사용하여 14.4V 입력으로 400V 가까이 뽑아낼 수 있도록 두고 MCU의 PWM을 사용하여 스위칭 후 브릿지 다이오드를 거쳐 정류하게끔 만들었습니다. PWM은 트랜스에 맞춰 60Hz, duty rate를 30퍼센트로 하였으며, ADC와 CLCD를 사용하여 전압을 보았으나 전압이 올라갈수록 오차가 심하게 나는 바람에 휴대용 멀티미터로 전압을 봐가며 충전하였습니다.
3-2. 커패시터 충/방전
커패시터는 400V 1000uF를 네개 병렬로 묶어 400V 4000uF로 사용하였습니다. 정류된 400V를 커패시터에 바로 연결하여 커패시터를 충전시킵니다. 충전이 될수록 고압이 되며, 용량도 크기 때문에 감전에 주의하였습니다. 커패시터는 200V까지는 금방 충전이 되나, 300V정도까지 충전하는데 3분 정도가 소요되었습니다. 쇠구슬은 커패시터에 충전된 전압의 제곱에 비례하게 되어 높은 전압일수록 강력하게 날라가게 됩니다. 하지만 용량이 클 경우 쇠구슬이 솔레노이드를 빠져나간 뒤에 다시 당기는 힘을 받을 수 있기 때문에 포토게이트와 같은 적외선 LED를 이용하여 솔레노이드의 끝에 쇠구슬이 닿으면 커패시터에 방전을 멈추도록 해주어야 합니다 커패시터 스위칭은 SCR의 게이트에 특정 전압, 전류의 펄스신호를 주면 턴온, 턴오프 할 수 있습니다.
3-3. 코일건 설치
카메라와 항상 붙어 움직여야 하기에 코일건의 아크릴 관 위에 카메라를 고정 시켰습니다.
동영상 보러가기 |
코일건 영상은 400V 4000uF 커패시터에 약 250V정도 충전을 한 뒤 SCR을 turn-on 시켜 순식간에 방전되게 하여 솔레노이드를 구동 시키면 바로 뒤에 달려있는 쇠구슬이 솔레노이드의 인력으로 인해 날아가게 됩니다. 주변의 행인 1, 2님이 존재하여 오토 타겟팅으로 격발하기엔 대단히 위험했기 때문에 수동으로 격발하는 동영상 입니다.
4. 미니카 적재
4-1. 블루투스
미니카의 PC에서 영상처리하여 타겟의 정보는 바로 옆에 있는 MCU로 주어야 하기 때문에 유선을 이용하여 데이터를 전송 하였습니다. 하지만 원격지의 PC에서 차량 제어를 위한 신호는 블루투스 모듈을 이용하여 받았습니다.
4-2. 배터리
14.4V 리튬이온 폴리머 배터리를 2개를 적재하여 하나는 PC전원 및 MCU, 유무선 공유기를 사용하였으며, 다른 하나의 배터리는 단지 차량만을 위해 사용하였습니다.
4-3. 기타
디버깅용 USB모니터, 코일건을 위한 커패시터, Web-cam, MCU( ATmega128 *2 ), PC, 유무선 공유기를 적재하였습니다.
5. 고찰 및 느낀 점
트래킹과 원격조종, 코일건 세가지가 모두 독립적으로 움직이기 때문에 주행 중에도 오토 타겟팅하여 쇠구슬을 발사할 수 있었지만 코일건의 파괴력이 상상 이상으로 너무 강하여 코일건은 애물단지가 되어버려 아쉬웠습니다. 차라리 코일건 대신 전동건이나 레이져 포인터로 조준과 사격을 했다면 하는 아쉬운 점이 있었습니다. 이번에 재미있는 프로젝트를 수행하면서 하드웨어나 소프트웨어를 디버깅 하는 기술을 나름대로 습득하였다고 생각하며, 특히 PC와 MCU사이의 통신을 배워 앞으로 다양하게 접목을 시킬 수 있게 되어 기쁘고, 더 다양한 센서들을 이용해서 이번 작품을 계속 발전시켜 나가고 싶습니다.
소모비용
컴퓨터(메인보드+HDD+모니터+파워) | 800,000 |
노트북 | 700,000 |
안드로이드폰 | 0 |
리튬폴리머 배터리 | 200,000 |
MS 웹캠 | 70,000 |
1:5 미니카 | 400,000 |
게이밍 헨들러 | 30,000 |
블루투스 – 2ea | 100,000 |
유무선 공유기 | 30,000 |
서보모터 – 2ea | 100,000 |
아크릴 관 | 1,200 |
코일 및 쇠구슬 – 1ea, 50ea | 20,000 |
커패시터 및 SCR – 4ea, 1ea | 30,000 |
ATmega128모듈 – 2ea | 50,000 |
총액 | 2,531,200 + a |
참고 웹 사이트
http://openctrl.tistory.com/category/OpenSTUDY/openProjects