<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NTREXGO - 디바이스마트, 엔티렉스 컨텐츠 통합 사이트 &#187; 강좌</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/%ea%b0%95%ec%a2%8c/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ntrexgo.com</link>
	<description>엔티렉스, 디바이스마트 컨텐츠 통합 사이트</description>
	<lastBuildDate>Thu, 03 Mar 2022 06:47:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>[29호] 너무 쉬운 아두이노 DIY &#8211; ① 3색 신호등 만들기</title>
		<link>http://www.ntrexgo.com/archives/28246</link>
		<comments>http://www.ntrexgo.com/archives/28246#comments</comments>
		<pubDate>Tue, 10 Mar 2015 06:59:21 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[devicemart]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[jcnet]]></category>
		<category><![CDATA[ntrex]]></category>
		<category><![CDATA[강의]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[만들기]]></category>
		<category><![CDATA[아두이노]]></category>
		<category><![CDATA[엔티렉스]]></category>
		<category><![CDATA[제이씨넷]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=28246</guid>
		<description><![CDATA[[너무 쉬운 아두이노 DIY(Do It Yourself)]
제이씨넷 신상석 연구소장님의 친절하고 꼼꼼한 강의!
아두이노를 가지고 이것 저것 만들어봅시다.^^
출발!!]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호등MA.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28289" alt="29 아두이노 신호등MA" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호등MA.jpg" width="620" height="246" /></a></p>
<p><strong>           글 ㅣ 신상석 ssshin@jcnet.co.kr</strong></p>
<p>&nbsp;</p>
<table class="aligncenter" style="width: 600px;" cellpadding="10" align="center">
<tbody>
<tr>
<td style="border: 1px solid #000000; background-color: #e6e6fa;" valign="middle">  여러분, 안녕하세요. 앞으로 1년에 걸쳐(6번 정도) [너무 쉬운 아두이노 DIY(Do It Yourself)] 강의를 진행할 강사 신상석입니다.<br />
제 소개 간단히 드립니다.<br />
· 서울대 제어계측공학과(학사) →, KAIST 전산과(석사) → KAIST 전산과(박사 수료)<br />
· ETRI 책임연구원 → 해동정보통신 연구소장 → 욱성전자 연구소장 → (현재) 제이씨넷 연구소장, 상명대학교 컴퓨터시스템공학과 겸임교수, 임베디드홀릭 카페(http://cafe.naver.com/lazydigital) 부매니저, 아두이노 / AVR 강사<br />
· 자격증 : 전자계산기 기술사<br />
· 취미 : 영화보기, 바둑두기, 책읽기, 글쓰기(?), 여행하기, 이야기하기<br />
· 연락처 : ssshin@jcnet.co.kr, 있는그대(cafe.naver.com/lazydigital)&nbsp;</p>
<p>이 강의는 아두이노를 가지고 간단하게 생활에 필요한 용품을 만들어 보는 강의입니다. 뚝딱뚝딱 뭔가 자신만의 DIY 용품을 만들어 보는 쏠쏠한 재미가 있는 강의라고나 할까요? 이미 주변에 아두이노와 관련한 많은 책이 출간되었고 카페나 블로그를 통하여 강의가 진행된 경우도 꽤나 많이 있는데도 불구하고, 이 지면을 통하여 강의를 개설한 이유는 다음과 같습니다.</p>
<p>1. 아두이노의 초보자들을 위한 쉽고 재미있는 강의가 거의 없는 것 같아, 가능하면 초등학생(?)까지도 함께 해 볼 수 있는 그런 강의를 한 번 해보고 싶어서…<br />
2. 아두이노를 가지고 뭔가 조금은 다른, 자신만의 창의적인(?) DIY를 할 수 있는 자리를 만들어주고 싶어서…<br />
3. 디바이스마트매거진은 임베디드와 관련된 독자들이 많고, 발행 부수도 많아, 저와 제가 속한 회사(제이씨넷) 그리고 임베디드홀릭 카페의 홍보에 도움이 될 것 같아서…</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/아두이노-계획표.png" rel="lightbox[28246]"><img class="alignright size-medium wp-image-28247" alt="아두이노 계획표" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/아두이노-계획표-300x133.png" width="300" height="133" /></a><span style="font-size: 11px; line-height: 19px;">  현재 구상하고 있는 회차별 내용을 간략하게 정리해 보면 다음과 같습니다. (변경될 수 있습니다.)  앞으로 즐겁고 알찬 강의가 될 수 있도록 최선을 다할 것을 약속 드리며, 이 강의를 보는 독자들도 메일이나 카페를  통하여 Q&amp;A(Question &amp; Answer)나 피드백을 주셔서, 함께 정감을 나눌 수 있는 계기가 되기를 기대해 봅니다.</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><span style="font-size: large;"><span style="background-color: #808000;"><strong><span style="color: #ffffff;">  </span></strong><strong><span style="color: #ffffff;">■</span></strong></span><span style="background-color: #808000;"><strong><span style="color: #ffffff;"><a href="http://www.devicemart.co.kr/34404" target="_blank"> 아두이노</a>가 뭔가요?   </span></strong></span></span></p>
<p dir="ltr">   자, 그럼 시작해 보겠습니다. 요렇게 생긴 물건을 보신 적이 있나요?</p>
<p style="text-align: left;"><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-00.jpg" rel="lightbox[28246]"><img class="size-large wp-image-28259 aligncenter" alt="29 아두이노 신호기 00" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-00-620x348.jpg" width="620" height="348" /></a>   예. 요 물건의 이름이 아두이노인데요, 조금 더 정확하게 이야기하면 아두이노 UNO R3입니다. 파란색 플라스틱처럼 보이는 PCB(Printed Circuit Board) 판에 조그만 컴퓨터에 해당하는 마이크로콘트롤러(마이크로프로세서) 칩(IC, Integrated Circuit)이 장착되어 있어서 이것으로 계산 등 여러가지 일을 처리합니다. 전기는 +5V를 공급해주어야 하는데 이것은 USB 커넥터에 USB 케이블을 연결하여 공급합니다. 아두이노는 또한 입출력커넥터를 가지고 있는데, 여기에 전선을 꼽아서 LED(Light Emitted Diode, 발광다이오드)도 연결하여 불도 켰다 껐다 하고, 버저나 모터 등 여러 가지 다른 전자 부품도 연결하여 소리도 내고 움직이게 할 수도 있습니다.</p>
<p dir="ltr">   참, 아두이노(arduino)라는 이름은 이탈리아어로 ‘친한 친구’라는 뜻이라네요, 이 아두이노를 처음 고안해 낸 사람들이 이탈리아 사람들이어서 이름도 이탈리아어인데, 발음하기 편하고 입에 짝 달라붙는 정겨운 이름인 것 같습니다.</p>
<p style="text-align: left;">
<p dir="ltr"><span style="font-size: large;"><strong><span style="color: #ffffff; background-color: #808000;">  ■ <a href="http://www.devicemart.co.kr/goods/view.php?seq=34404" target="_blank">아두이노</a>로 뭘 할 수 있나요?   </span></strong></span></p>
<p dir="ltr">   이 아두이노로 뭘 할 수 있을까요? 앞으로 하나씩 DIY(Do It Yourself)로 만들어보겠지만, 아두이노로는 전등도 켤 수 있고, 음악도 연주할 수 있고, 장난감 로봇도 조정할 수 있고, 이것 저것 아주 많은 것을 할 수 있습니다. 유튜브(http://www.youtube.com)에서 볼 수 있는 실례를 몇 개만 소개해 보겠습니다. 가능하면 여러분이 직접 방문하여 동영상을 보면 더욱 좋겠네요.</p>
<p style="text-align: center;"><iframe width="425" height="350" src="http://www.youtube.com/embed/mXMIdq6ouG0" frameborder="0"></iframe></p>
<p style="text-align: center;"><strong>아두이노로 만든 종이 피아노</strong></p>
<p style="text-align: center;"><iframe width="425" height="350" src="http://www.youtube.com/embed/-oJytWP6pU4" frameborder="0"></iframe></p>
<p style="text-align: center;"><strong>아두이노 UNO를 활용해서 만든 초음파 레이더</strong></p>
<p style="text-align: center;"><iframe width="425" height="350" src="http://www.youtube.com/embed/VNRX5Xkz_00" frameborder="0"></iframe></p>
<p style="text-align: center;"><strong>WALL-E  로봇 아두이노</strong></p>
<p style="text-align: center;">
<p>   예로 든 것이 조금은 복잡한 것일 수 있겠지만, 작은 것부터 하나씩 공부하다 보면 나중에는 여러분도 위와 같은 작품을 DIY로 만들 수 있답니다! 자신감을 가지세요!</p>
<p dir="ltr">
<p dir="ltr">
<p dir="ltr"><strong><span style="color: #ffffff; font-size: large; background-color: #808000;">  ■ 그러면 준비를 해 봅시다!   </span></strong></p>
<p dir="ltr">   아두이노를 이용하여 뭔가를 만들어 보려면, 일단 약간의 준비가 필요합니다. 꼭 필요한 것 먼저 확인해 봅시다.</p>
<p>&nbsp;</p>
<p dir="ltr">1.  아두이노 보드 : 오리지널 보드는 물론 OK이구요. 값이 싼 중국산 호환 보드나 블루투스 통신이나 모터 드라이버 등의 기능을 추가로 내장한 아두이노 보드도 OK</p>
<p dir="ltr">* 아두이노 오리지널 보드: <a href="http://www.devicemart.co.kr/34404" target="_blank">http://www.devicemart.co.kr/34404</a></p>
<p dir="ltr">* 아두이노 호환 보드 (예 : 뉴티씨 제품) : <a href="http://www.devicemart.co.kr/1137923" target="_blank">http://www.devicemart.co.kr/1137923</a></p>
<p dir="ltr">* 아두이노 호환 부가 기능 내장 보드 (예 : 제이씨넷 제품) : <a href="http://www.devicemart.co.kr/1137972" target="_blank">http://www.devicemart.co.kr/1137972</a></p>
<p>&nbsp;</p>
<p dir="ltr">2. PC 또는 노트북 (아무거나 OK)</p>
<p dir="ltr">
<p dir="ltr">3. 아두이노와 PC(노트북)을 연결할 USB 케이블 (한쪽은 USB-A 타입, 다른 한쪽은 USB-B 타입의 케이블, 보통 아두이노 구입시 함께 제공됨)</p>
<p>&nbsp;</p>
<p dir="ltr">4. 아두이노 프로그램 (이것의 이름도 아두이노입니다.)</p>
<p dir="ltr">4번은 소프트웨어이므로 인터넷에서 설치프로그램을 찾아 이를 PC에 설치하여야 합니다. 스마트폰으로 뭔가 재미있는 것을 하려면 앱을 설치해야 하는 것과 마찬가지지요.</p>
<p dir="ltr">
<p dir="ltr">설치 순서는 다음과 같습니다.</p>
<p> 1. 아두이노 공식 홈페이지(http://arduino.cc) 방문</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-04.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28263" alt="29 아두이노 신호기 04" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-04-620x368.jpg" width="620" height="368" /></a></p>
<p>&nbsp;</p>
<p dir="ltr">2. 위쪽 메뉴 [Download]를 누르고 → 나타나는 창의 조금 아래 부분에 [Arduino 1.0.6]을 찾아 클릭 → [Windows Installer]를 클릭하면, [arduino-1.0.6-windows.exe]가 다운로드 됨</p>
<p>&nbsp;</p>
<p dir="ltr">3. 다운받은 arduino-1.0.6-windows.exe 파일 실행</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-05.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28264" alt="29 아두이노 신호기 05" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-05.jpg" width="480" height="275" /></a></p>
<p style="text-align: center;"><strong>[실행] 클릭</strong></p>
<p><img class="aligncenter size-large wp-image-28265" alt="29 아두이노 신호기 06" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-06.jpg" width="426" height="291" /></p>
<p style="text-align: center;"><strong>[I Agree] 클릭</strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-07.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28266" alt="29 아두이노 신호기 07" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-07.jpg" width="426" height="291" /></a></p>
<p style="text-align: center;"><strong>[Next] 클릭</strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-08.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28267" alt="29 아두이노 신호기 08" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-08.jpg" width="426" height="291" /></a></p>
<p style="text-align: center;"> <strong>[Install] 클릭</strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-09.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28268" alt="29 아두이노 신호기 09" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-09.jpg" width="426" height="291" /></a></p>
<p style="text-align: center;"><strong> 기다립니다.</strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-10.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28269" alt="29 아두이노 신호기 10" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-10.jpg" width="508" height="239" /></a></p>
<p style="text-align: center;"><strong> [V]표시를 클릭하고 [설치]클릭</strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-11.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28270" alt="29 아두이노 신호기 11" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-11.jpg" width="426" height="291" /></a></p>
<p style="text-align: center;"><strong> 설치완료 후 [Close] 클릭</strong></p>
<p>4. PC 바탕화면에  <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-12.jpg" rel="lightbox[28246]"><img class=" wp-image-28271 alignnone" alt="29 아두이노 신호기 12" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-12.jpg" width="31" height="36" /></a>  이런 아이콘이 생겼으면 설치가 잘 된 것입니다.</p>
<p>그러면, 내친김에 얼른 실행시켜 볼까요?</p>
<p dir="ltr">
<p dir="ltr">1. 아두이노와 PC를 USB 케이블로 연결</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-26.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28285" alt="29 아두이노 신호기 26" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-26-620x348.jpg" width="620" height="348" /></a></p>
<p dir="ltr">2. 전원 LED에 녹색으로 불이 들어오면 일단 OK!!! 구요.</p>
<p>PC 화면에서 <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-12.jpg" rel="lightbox[28246]"><img alt="29 아두이노 신호기 12" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-12.jpg" width="31" height="36" /></a> 아이콘 클릭하여 아래와 같은 화면이 나타나면 설치도 일단 OK!!! 네요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-13.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28272" alt="29 아두이노 신호기 13" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-13.jpg" width="500" height="600" /></a></p>
<p>내 아두이노가 준비되었고 나와 아두이노와 이야기를 나눌 아두이노 앱(App. 응용프로그램)이 준비되었으니 가장 기본적인 주거환경은 만들어진 것이네요.</p>
<p dir="ltr">
<p dir="ltr">
<p dir="ltr"><span style="font-size: large;"><strong><span style="color: #ffffff; background-color: #808000;">  ■ 프로그램을 짜서 실행시켜 보기   </span></strong></span></p>
<p dir="ltr">   잠시 쉬었으니까, 이제 첫번째 DIY 프로젝트로 빨강-노랑-녹색 불이 반짝 반짝 켜졌다 꺼지는 3색 신호등을 한 번 만들어 보겠습니다.</p>
<p dir="ltr">   걸음마도 못하는 아기가 뭐 벌써 만드냐구요? 뭐, 일단 목표를 세우고 만들어가는 과정에서 필요한 것은 차근차근 하나씩 배우고 익히면 되겠지요. 힘들면 쉬었다 가고, 재미있는 것이 나오면 조금 놀다 가고&#8230;</p>
<p dir="ltr">   “배우고 익힌다!”는 구절은 제가 아주 좋아하는 구절인데요. 논어의 가장 첫번째 장에 이런 구절이 있습니다. “學而時習之 不易說乎” (학이시습지 불역열호) &#8211; 배우고 때로 익히면 또한 기쁘지 아니한가! 나머지 2개도 멋있습니다. “有朋自遠方來 不亦樂乎” (유붕자원방래 불역낙호) &#8211; 벗이 있어 멀리서 찾아오면 또한 즐겁지 아니한가! “人不知而不溫 不易君子乎” (인불지이불온 불역군자호) 사람들이 알아주지 않는다 하여도 성내지 않으면 또한 군자(멋진 사람)가 아닌가! 옆 길로 잠시 샜는데&#8230;다시 원래 길로 돌아 갑니다.</p>
<p dir="ltr">   앞에서 아두이노는 마이크로콘트롤러가 들어있는 간단한 컴퓨터라고 이야기했습니다. 좀 더 쉽게 이해하기 위하여 아두이노를 그냥 “잘 훈련된 훈련견”이라고 생각하면 이해하기 쉬울 것 같습니다. 명령을 내리면 훈련견이 명령에 알맞은 동작을 취하듯, 아두이노에게 해야 할 명령을 내리면 아두이노가 실행하게 되는 것이지요. 여기서 명령이라는 것이 바로 프로그램인데, 훈련견이 정해진 명령어에만 반응하는 것처럼, 아두이노도 정해진 형식을 갖춘 정해진 명령어만 알아듣습니다.</p>
<p dir="ltr">   오우~ 그럼 명령어의 종류를 알아서 필요한 명령만 죽 연결해서 명령을 내리면 되겠네요.</p>
<p dir="ltr">   짝~짝~짝~</p>
<p dir="ltr">   예. 맞습니다. 너무 잘 하는데요?</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-14.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28273" alt="29 아두이노 신호기 14" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-14-620x402.jpg" width="620" height="402" /></a></p>
<p>&nbsp;</p>
<p dir="ltr">   그러면, 어떤 명령어가 있을까요? 마음이 급하니까 일단 제일 쉬운 명령어 두 세 개만 배워서 명령을 내려봅시다. 아래와 같이 진행해 볼까요?</p>
<p>&nbsp;</p>
<p dir="ltr">1. 아두이노와 PC를 USB 케이블로 연결</p>
<p dir="ltr">
<p dir="ltr">2. PC에서 아두이노(앱, 엄밀하게는 IDE(Integrated Development Environment, 통합개발환경)) 실행</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-15.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28274" alt="29 아두이노 신호기 15" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-15.jpg" width="500" height="600" /></a></p>
<p>&nbsp;</p>
<p>3. 메뉴에서 [도구] -&gt; [보드] -&gt;[Arduino Uno] 선택</p>
<p dir="ltr">(아두이노는 사실 우노(UNO)뿐만 아니라 NANO, MEGA, MINI 등 다양한 종류가 있으나 UNO가 가장 많이 사용되고 있음)</p>
<p dir="ltr">
<p dir="ltr">4. 메뉴에서 [도구] -&gt; [시리얼포트] -&gt; [COMx] 선택 (단, x는 [시작] -&gt; [제어판] -&gt; [장치관리자] -&gt; [포트] -&gt; [Arduino Uno(COMx)]로 보이는 상태에서 x에 대응되는 숫자임) (아두이노는 USB로 연결되기 때문에 PC 입장에서는 USB 장치이므로 USB 드라이버가 필요하며 이 드라이버는 아두이노 프로그램 설치시 이미 함께 설치되었음. 만약 설치되지 않았다면 수동으로 설치하여야 함)</p>
<p>&nbsp;</p>
<p>5. 흰색 창에 아래와 같은 프로그램을 입력</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-16.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28275" alt="29 아두이노 신호기 16" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-16.jpg" width="500" height="600" /></a></p>
<p>&nbsp;</p>
<p>6. 상단 메뉴에서 <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-17.jpg" rel="lightbox[28246]"><img class=" wp-image-28276 alignnone" alt="29 아두이노 신호기 17" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-17.jpg" width="29" height="25" /></a> 생긴 아이콘을 찾아 클릭하면 아래쪽에 “스케치 컴파일” ▶ “업로딩” ▶ “업로딩 완료”로 제목이 나타나며 진행이 되고, 아래쪽 검정색 창에는 진행되는 내용이 스크롤되면서 디스플레이되며, 최종적으로는 아래의 형태가 나타납니다.(최종적으로 제목으로 “업로드 완료”가 나타나고 메시지 내용으로 “avrdude done. Thank you.”,가 나타나면 성공입니다.)</p>
<p>(<a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-17.jpg" rel="lightbox[28246]"><img alt="29 아두이노 신호기 17" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-17.jpg" width="29" height="25" /></a> 아이콘은 컴파일 및 업로드를 수행하라는 아이콘이며, 컴파일은 C, C++ 언어와 같은 프로그램언어를 마이크로콘트롤러가 직접 알아먹을 수 있는 좀 더 직접적인 기계어로 바꾸어주는 작업을 말하며, 업로드는 컴파일의 결과로 생긴 기계어를 마이크로콘트롤러에게 전달하여 이를 마이크로콘트롤러 내부에 실행할 수 있는 형태로 저장하는 작업을 말함.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-18.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28277" alt="29 아두이노 신호기 18" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-18.jpg" width="500" height="600" /></a></p>
<p>&nbsp;</p>
<p dir="ltr">7. 위와 같은 형태가 나오지 않고 “컴파일 에러”가 나오면 입력한 프로그램의 형식이 잘못된 것이고, 메시지 출력 부분에서 “Retry timeout ERROR” 등이 나타나면 USB 연결선이 잘못되었거나, 아두이노가 고장 난 경우 등등입니다. 만약, 정상적으로 업로드되지 않았다면 그 원인을 찾아내어 이를 해결한 후 다시 실행하여야 합니다.</p>
<p>&nbsp;</p>
<p dir="ltr"><span style="color: #ff0000;"><strong>   [ setup() 과 loop() ]</strong></span></p>
<p>&nbsp;</p>
<p dir="ltr">   아두이노에서 프로그램을 작성하는 것을 스케치(sketch)라고 합니다. 아두이노는 예술가와 같은 비전공자도 쉽게 사용할 수 있도록 간단한 인터페이스를 제공하는데, 원하는 것을 쉽게 쓱쓱 그려낸다는 의미를 담아 스케치라고 하였다네요.</p>
<p dir="ltr">   아두이노 프로그램의 기반은 C++이라는 컴퓨터 프로그래밍 언어(C++ 언어는 C언어에 기반을 둔 목적기반 언어)이며, 이 언어로 올바르게 작성된 프로그램만 아두이노가 명령어로 받아들이고 실행하게 됩니다. 그러므로, 아두이노에게 일을 시켜려면 이 언어에 대한 기본 형식과 구조 등에 대한 내용을 알아야만 합니다. 전체적인 내용을 모두 배우려면 시간이 많이 걸릴 수 있으므로, 우리는 DIY 작품을 만드는데 꼭 필요한 부분만 필요할 때마다 배우고 익히도록 해보지요. (다만, 이 강좌가 C 및 C++ 언어에 대한 강좌는 아니기 때문에, C 및 C++에 대하여는 최소한의 기초적인 내용은 알고 있다고 가정하고, 진행합니다.)</p>
<p dir="ltr">   일단, 위에서 작성한 프로그램을 보겠습니다.</p>
<p dir="ltr">   아두이노의 프로그램은 크게 두 부분으로 나누어집니다. 하나는 setup() 이라는 부분이고, 다른 하나는 loop()라는 부분입니다. 원래 C 프로그램은 main()이라는 함수의 형태를 취하도록 되어 있고, 이 main() 함수 내에서 필요한 명령을 순차적으로 작성하여 실행하게 되어 있습니다.</p>
<p dir="ltr">   아두이노 개발환경(IDE)은 사용자가 쉽게 프로그램할 수 있도록 항상 main() 프로그램을 공짜로 넣어주도록 되어있고, 이 main() 프로그램 안에서 첫번째로 setup()이라는 함수를 실행하고, 두번째로 loop()라는 프로그램을 반복적으로 실행하도록 이미 만들어져 있다고만 알아두면 되겠습니다.</p>
<p dir="ltr">   이렇게 실행이 되겠네요.</p>
<p>&nbsp;</p>
<p dir="ltr">   <strong><span style="color: #ff0000;">setup()</span></strong></p>
<p dir="ltr"><strong><span style="color: #ff0000;">   loop()</span></strong></p>
<p dir="ltr"><strong><span style="color: #ff0000;">   loop()</span></strong></p>
<p dir="ltr"><strong><span style="color: #ff0000;">   …</span></strong></p>
<p dir="ltr"><strong><span style="color: #ff0000;">   Loop()</span></strong></p>
<p dir="ltr"><strong><span style="color: #ff0000;">   …</span></strong></p>
<p dir="ltr"><strong><span style="color: #ff0000;">   … (무한 실행)</span></strong></p>
<p>&nbsp;</p>
<p dir="ltr">   우리가 작성한 setup() 함수와 loop() 함수는 중괄호로 둘러싸인 부분의 내용이 하나도 없으므로, 이 프로그램은 아무 것도 안하고 그냥 다시 원위치로 돌아가는 프로그램이 되겠습니다. 하지만 우리는 이 프로그램이 잘 컴파일되고, 잘 업로드 되었다는 사실만으로도 이제부터 우리가 원하는 진짜 프로그램을 작성할 수 있는 준비를 끝낸 것이 됩니다.</p>
<p dir="ltr">
<p dir="ltr">
<p dir="ltr"><span style="font-size: large; background-color: #808000;"><strong><span style="color: #ffffff;">  ■<a href="http://www.devicemart.co.kr/goods/view.php?seq=34404" target="_blank"> 아두이노</a>에 LED 연결하기   </span></strong></span></p>
<p dir="ltr">   신호등을 만들어서 이것을 아두이노에 연결해서 불을 켜고 끄려면, 일단 아두이노가 이 신호등에 전기를 넣었다 끊었다 할 수 있어야 할 것 같은데… 이것은 어떻게 할 수 있을까요?</p>
<p dir="ltr">   보통 집에서 사용하는 전등이나 전열기 등은 콘센트를 꼽으면 전기가 통하고 뽑으면 전기가 끊어집니다. 또는 전등과 같이 미리 전원은 연결해 놓고 중간에 스위치를 넣어서 이것을 ON/OFF 위치로 이동하여서 껐다 켰다 할 수도 있겠지요.</p>
<p dir="ltr">   아두이노도 이러한 기능을 하는 전기선을 가지고 있는데 이러한 선이 바로 입출력 핀(커넥터)입니다. 전기를 공급하였다가 끊었다가 할 수 있는 선이지요. 아두이노는 프로그램에 의하여 각각의 입출력 전압을 ON(5V, High) 상태로 만들거나, OFF(0V(GND), Low) 상태로 만들 수 있는 능력이 있답니다. 이런 핀들이 아래와 같이 커넥터로 나와 있는데. 아두이노 UNO의 경우는 총 20개나 되지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-19.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28278" alt="29 아두이노 신호기 19" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-19-620x425.jpg" width="620" height="425" /></a></p>
<p dir="ltr">   물론, 집에 있는 콘센트는 220V의 교류(AC : Alternating Current) 전원이고, 아두이노의 입출력핀은 5V의 직류(DC : Direct Current)를 제공하는 점이 다르지만, 전기를 공급한다는 점에서는 비슷하답니다. 음, 그렇다면, 형광등이나 전등처럼 빛을 발산하는 것으로 5V의 전원으로 동작하는 부품을 찾아 이것을 연결하면 될 것 같은데, 이 부품은 뭘까요? 뭐, 모두 다 잘 아시리라 생각하는데… 이것이 바로 LED(Light Emitting Diode)랍니다. 요렇게 생겼지요. (심볼은 오른쪽 그림)</p>
<p dir="ltr"> <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/아두이노1-자료.png" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28297" alt="아두이노1 자료" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/아두이노1-자료.png" width="440" height="133" /></a></p>
<p dir="ltr">   2개의 다리를 가지고 있고, 색깔은 빨강, 파랑, 노랑, 녹색, 흰색이 있답니다. 크기는 지름이 3mm나 5mm 인 것이 보통이고, 형태는 둥근 것이 보통이나 사각형 형태도 있지요.</p>
<p dir="ltr">   LED를 그대로 번역해보면, Light(빛) + Emitting(발산) + Diode(다이오드)가 되어서 보통 ‘발광다이오드’라고 칭하는데, 다이오드여서 한쪽 방향으로만 전기가 통합니다. 즉, 순방향으로 전압을 가하면 전류가 잘 흘러서 불이 켜지고, 역방향으로 전압을 가하면 전류가 흐르지 않아 불이 꺼지게 되는 것이지요.</p>
<p dir="ltr">   가정용 전구와 LED의 연결을 비교해 보면 아래와 같습니다. (LED는 보통 200오옴 ~ 1K 오옴의 저항을 직렬로 연결해 주어야 하며, 이 저항이 전류의 양을 조절하여 빛의 밝기를 조절할 수 있게 해줍니다. 저항 없이 직접 연결하면 빛은 엄청 밝지만 수명은 매우 짧아지므로 주의 요망!)</p>
<p dir="ltr">   또한, 교류 전원은 방향이 없어서 콘센트를 아무쪽 방향으로 꽂아도 되지만, LED의 연결은 방향이 있어서 그림에서와 같이 입출력핀에서 순방향이 되도록(LED는 다리의 길이가 긴 쪽이 ‘+’ 임!) +5V 전원 ▶ 저항 ▶ LED ▶ GND로 연결하여야 합니다.</p>
<p> <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-21.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28280" alt="29 아두이노 신호기 21" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-21-620x417.jpg" width="620" height="417" /></a></p>
<p dir="ltr">   이제 실전 DIY로 넘어가기 전에 잠깐 또 쉬겠습니다.</p>
<p dir="ltr">   10분간 휴식! 기지개도 좀 펴시고, 간단한 스트레칭도 해 봅시다. 헛! 둘! 헛! 둘!</p>
<p dir="ltr">
<p dir="ltr">
<p dir="ltr"><strong><span style="color: #ffffff; font-size: large; background-color: #808000;">  ■ LED 1개 켜기 / 끄기   </span></strong></p>
<p dir="ltr">   자, 드디어 실전 DIY 시간입니다. 3개의 LED 켜기에 앞서 먼저 1개의 빨강 LED를 다뤄보지요. “뱁새가 황새 따라가다가는 가랑이가 찢어진다”는 속담과 “천리길도 한걸음부터”라는 속담을 새기면서 말이죠.</p>
<p>&nbsp;</p>
<p dir="ltr"><span style="font-size: medium;"><strong>[실행 순서]</strong></span></p>
<p dir="ltr">1. 아두이노를 준비하고, 브레드보드와 부품, 케이블을 이용하여 다음과 같이 연결. 즉, LED를 ‘2’ 핀(앞으로는 ‘D2’라고 이름하겠습니다. 여기서 ‘D’는 Digital의 의미)에 연결 (LED는 일반 5mm(또는 3mm) 빨강 LED, 저항은 200~1K 오옴)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-22.jpg" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28281" alt="29 아두이노 신호기 22" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-22.jpg" width="351" height="344" /></a></p>
<p>&nbsp;</p>
<p dir="ltr">2. USB 케이블로 아두이노와 PC 연결</p>
<p>&nbsp;</p>
<p dir="ltr">3. 메뉴에서 [도구] ▶ [보드] ▶ [Arduino Uno] 선택 (처음 한번 세팅되면 다음부터는 생략!)</p>
<p>&nbsp;</p>
<p dir="ltr">4. 메뉴에서 [도구] ▶ [시리얼포트] ▶ [COMx] 선택 (단, x는 [시작] ▶ [제어판] ▶ [장치관리자] ▶ [포트] ▶ [Arduino Uno(COMx)]로 보이는 상태에서 x에 대항되는 숫자)</p>
<p>&nbsp;</p>
<p dir="ltr">5. 아래의 스케치 프로그램 입력</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="border: 1px solid #000000;" valign="middle">
<p dir="ltr">void setup()</p>
<p dir="ltr">{</p>
<p dir="ltr">   pinMode(2, OUTPUT);                           // 2번핀을 출력으로 선언</p>
<p dir="ltr">}</p>
<p dir="ltr">void loop()</p>
<p dir="ltr">{</p>
<p dir="ltr">   digitalWrite(2, HIGH);                         // 2번핀에 High(1)를 출력</p>
<p dir="ltr">}</p>
</td>
</tr>
</tbody>
</table>
<p dir="ltr">   setup() 함수는 한번만 실행이 되고 loop() 함수는 무한 반복으로 실행된다고 하였으니 실제 실행되는 내용은 아래와 같이 되겠네요.</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="border: 1px solid #000000;" valign="middle">
<p dir="ltr">        pinMode(2, OUTPUT);</p>
<p dir="ltr">        digitalWrite(2, HIGH);</p>
<p dir="ltr">        digitalWrite(2, HIGH);</p>
<p dir="ltr">        …</p>
<p dir="ltr">        digitalWrite(2, HIGH);</p>
<p dir="ltr">        …</p>
</td>
</tr>
</tbody>
</table>
<p dir="ltr">   아두이노는 상당히 많은 라이브러리 함수를 제공하는데요. 이것 때문에 우리는 아두이노의 내부를 알 필요 없이, 그냥 아두이노가 제공하는 함수를 불러다 쓰면 되기 때문에 매우 편리합니다. pinMode() 함수와 digitalWrite() 함수도 아두이노가 제공하는 라이브러리입니다.</p>
<p dir="ltr">   그러면 이 라이브러리는 어떻게 동작하는 좀 더 자세히 알아보겠습니다.</p>
<p style="text-align: left;">   pinMode() 함수는 아두이노의 입출력핀을 입력으로 사용할 것이냐, 출력으로 사용할 것이냐를 정해주는 함수입니다. 어떤 핀? 입력?/출력? 을 결정해 주어야 하니까 2개의 값이 필요하겠네요. 즉, 어떤 핀?에 해당되는 값을 pin이라는 변수로, 입력?/출력?에 해당되는 값을 mode 형태로 전달하면 되므로 다음과 같은 형태가 됩니다.</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="border: 1px solid #000000;" valign="middle">
<p dir="ltr">pinMode(pin, mode)</p>
<p dir="ltr">pin : 입출력핀 번호에 해당하는 숫자</p>
<p dir="ltr">mode : 이 핀을 입력으로 사용하는 경우는 “INPUT”, 출력으로 사용하는 경우는 “OUTPUT” (INPUT이나 OUTPUT은 상수값인데요. 이것도 이미 아두이노에서 정해준 값이므로 그냥 이렇게 사용하면 됩니다.)</p>
</td>
</tr>
</tbody>
</table>
<p dir="ltr">   우리는 LED를 D2핀에 연결하였고, 이 핀은 아두이노 입장에서 출력이므로 pinMode(2, OUTPUT)으로 프로그램합니다.</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="border: 1px solid #000000;" valign="middle">
<p dir="ltr">digitalWrite(pin, value)</p>
<p dir="ltr">pin : 입출력핀 번호에 해당하는 숫자</p>
<p>value : 이 핀을 HIGH 상태로 만들려면 “HIGH”, LOW 상태로 만들려면 “LOW”</td>
</tr>
</tbody>
</table>
<p dir="ltr">   digitalWrite() 함수는 아두이노의 입출력핀에 출력으로 어떤 값을 내보낼 것인가, 즉, HIGH(ON, +5V) 또는 LOW(OFF, 0V)를 정해주는 함수입니다. 이 함수도 어떤 핀?을 HIGH?/LOW?로 만들 것인지를 결정해야 하므로 2개의 변수값이 필요하므로 digitalWrite(pin, value) 형태가 되겠습니다.</p>
<p dir="ltr">   이제 2개 함수를 종합적으로 이해해본다면, 위 프로그램은 D2핀을 출력으로 하고, 이 D2핀을 HIGH로 출력하는 것을 무한히 반복하는, 즉 LED가 항상 켜지는 프로그램이 되겠습니다!</p>
<p dir="ltr">   정말 그런지 얼른 실행해 봅시다.</p>
<p style="text-align: left;">
<p dir="ltr">6. 상단 메뉴에서 생긴 아이콘을 찾아 클릭하고 아래쪽에 “스케치 컴파일” ▶ “업로딩” ▶ “업로딩 완료” 및 “avrdude done. Thank you.”, 메시지가 나타나는지 확인!</p>
<p style="text-align: left;">
<p dir="ltr">7. 에러가 없는 경우 빨강색 LED가 켜지는지 확인!</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-23.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28282" alt="29 아두이노 신호기 23" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-23-620x348.jpg" width="620" height="348" /></a></p>
<p>&nbsp;</p>
<p dir="ltr">   켜졌다면 와우! 3번째 “축하축하”입니다. 이제 8부 능선에 도착했네요.</p>
<p dir="ltr">   정상이 코 앞에 다달았습니다. 여기서 다시 충분한 휴식을 취한 후에 정상 공격에 나서겠습니다. 10분간 또 휴식~~~ 그리고 막간을 이용해서 아래의 간단 과제 실행 실시! 윽!</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="background-color: #9acd32;" valign="middle">
<p dir="ltr"><strong>[과제-3색신호등-1]</strong></p>
<p dir="ltr"><strong>위의 LED를 끄는 스케치 프로그램을 작성하고 실행하여 실제로 꺼보세요!</strong></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left;">
<p dir="ltr">
<p dir="ltr"><strong><span style="color: #ffffff; font-size: large; background-color: #808000;">  ■ 3색 신호등 연결하기    </span></strong></p>
<p dir="ltr">   “시작이 반이다”라는 속담이 있는데 정말 시작이 반인 것 같다는 생각을 가끔 합니다. 실행하려면 미리 준비하여야 하는 것도 있고, 일단 시작하면 특별한 일이 없는 한 계속 가야 하는 것이어서 마음 먹는 것, 실행하는 것 자체가 반은 진행된 것이라는 느낌이지요.</p>
<p dir="ltr">   조금 전 첫 DIY로 빨강 LED 하나 달랑 켜는 것을 해 보았습니다. (참, LED 끄는 과제는 내드렸는데 다들 해보셨죠? 너무 너무 쉬었겠지만&#8230;) 어느새 우리는 간단한 중간 목표를 한 개 달성했습니다. 시작했다 싶었는데 벌써 결과가 나온 것이지요. LED를 한 개 켜보았으니, 3개(3색 신호등), 100개(전광판)도 켜고 끌 수 있고, LED가 아닌 것(버저, 모터 등)도 얼마든지 연결하면 동작시킬 수 있다는 가능성을 연 것입니다. 정말 “시작이 반이지요?” 또, 옆으로 샜는데… 다시 원위치로 돌아가, 정상 공격에 나서겠습니다.</p>
<p dir="ltr">   빨강색 LED 1개를 연결하는 것을 방금 배웠으니, LED 3개 연결하는 것도 이것을 그대로 응용하면 될 것 같습니다. LED 1개를 아두이노 입출력 포트 1개에 연결한 방법과 똑같이 LED 3개를 각각 다른 포트에 연결하면 되겠네요. 오~ 너무 쉽다.</p>
<p dir="ltr">   음. 그런데 어떤 핀에다 연결할까요? 입출력핀이 20개나 있으니까 아무데나 연결해도 괜찮긴 하지만, 기왕이면 순서대로 연결하도록 하지요. 이번에는 D4-빨강, D3-노랑, D2-녹색 LED를 연결하는 회로를 꾸며봅시다. 혼자서도 할 수 있겠지요? 이번 DIY가 3색 신호등이니까 당연히 LED는 빨강-노랑-녹색 순으로 브레드보드에 그럴듯하게 꽂아야 합니다. 자, 그럼 아래 그림 보기 전에 각자 회로 꾸미기 시작~~~~ 누가 누가 예쁘게 꾸미나~~~ (5분 줍니다.) (참, 브레드보드 내의 핀 연결은 어떻게 되는지 모두 알지요? 혹시 모르면 다음 그림 참조)</p>
<p style="text-align: left;">
<p dir="ltr"><span style="color: #0000ff;">(1분)</span></p>
<p dir="ltr"><span style="color: #0000ff;">(2분)</span></p>
<p dir="ltr"><span style="color: #0000ff;">(3분)</span></p>
<p dir="ltr"><span style="color: #0000ff;">(4분)</span></p>
<p dir="ltr"><span style="color: #0000ff;">(5분)</span></p>
<p dir="ltr"><span style="color: #0000ff;">…</span></p>
<p style="text-align: left;">
<p dir="ltr">   저는 요렇게 만들어 보았습니다. 실제로 장착할 때는 선 길이와 부품 모양이 달라서 요것과는 조금 다르게 보이겠지만요. 예쁜가요?</p>
<p> <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-28.jpg" rel="lightbox[28246]"><img class="aligncenter size-large wp-image-28287" alt="29 아두이노 신호기 28" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/29-아두이노-신호기-28-620x502.jpg" width="620" height="502" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ffffff; font-size: large; background-color: #808000;"><strong>  ■ 3색 신호등 알고리즘    </strong></span></p>
<p dir="ltr">   이제 연결은 끝났으니 프로그램을 작성하여 실행할 차례네요.</p>
<p dir="ltr">   그런데, 프로그램을 작성할 때는 항상 주어진 문제를 어떤 식으로 풀어갈 것인지를 먼저 생각하여야 합니다. 그냥 무작정 프로그램을 작성할 수도 없을뿐더러 별 생각없이 생각나는대로 아무렇게나 프로그램을 작성하다 보면 효율성도 떨어지고 해결책을 찾는 것도 뒤죽박죽이 되어 쉽지 않은 경우가 대부분이지요.</p>
<p dir="ltr">   그러면 어떻게 해야 할까요?</p>
<p dir="ltr">   “어떤 문제를 해결하기 위해 명확히 정의된 유한 개의 규칙과 절차의 모임”을 알고리즘(algorithm)이라고 하는데, 우리는 어떤 문제를 해결하려고 할 때 이러한 알고리즘을 먼저 작성한 후 이를 프로그램으로 바꾸는 방법을 사용하도록 하겠습니다. 뭐, 똑 떨어지게 꼭 이렇게 해야 한다는 법도 없고 실제로 일을 하다 보면 그렇게 되지도 않지만, 가능한(조금 부족하거나 모호한 경우가 있더라도) 알고리즘을 작성한 후에 프로그램을 하도록 하는 것이 정상적인 방법입니다. 완벽하지는 않더라도 어느 정도는 방향을 잡고 가야 한다는 이야기입니다.</p>
<p dir="ltr">  알고리즘을 기술하는 방식은 크게 아래와 같이 3가지가 있습니다.</p>
<p dir="ltr">1. 자연어를 이용하는 방법 : 말(글)로 자연스럽게 기술</p>
<p dir="ltr">2. 순서도(flow chart)를 이용하는 방법 : 미리 의미가 정해진 도형과 선을 이용하여 기술</p>
<p dir="ltr">3. 유사 코드(psudo code)를 이용하는 방법 : 프로그램 언어와 비슷하지만 문법에는 크게 얽매이지 않게 어느 정도 자유롭게 기술하는 방법</p>
<p dir="ltr">   저는 위 3가지를 혼합하여 이해하기 쉽게 표현하는 형태를 취하도록 하겠습니다.</p>
<p dir="ltr">   참, 알고리즘을 기술하려면, 이것에 앞서 일단 해결하고자 하는 목표(요구사항)를 정확하게 규정할 필요가 있습니다. 즉, 제작하려고 하는 것이 무엇인지? 기능이 무엇인지? 어떻게 동작하여야 하는지? 등이 명확하게 기술되어 있어야 실제로 구현을 어디까지 해야 하는지가 명확하게 되기 때문입니다. 보통 이것을 규격(스펙, SPEC, Specification)이라고 하는데, 우리의 목표인 3색 신호등 DIY를 위하여 기능적인 부분만 규격을 작성해 보기로 하지요.</p>
<p>&nbsp;</p>
<p dir="ltr"><span style="font-size: medium;"><strong>[3색 신호등 기능 규격]</strong></span></p>
<p>1. 처음 전원이 들어오면 빨강 LED에 불이 켜진다.</p>
<p dir="ltr">2. 불이 들어오는 순서는 빨강 → 노랑 → 녹색 → 빨강 → 노랑 → … 으로 무한 반복된다.</p>
<p dir="ltr">3. 불은 어떤 한 순간 1개만 켜져 있어야 한다.</p>
<p dir="ltr">4. 한 개의 불은 3초 동안 켜진 상태를 유지한다.</p>
<p dir="ltr">   위 기능을 만족하기 위한 프로그램을 작성하기 위하여 먼저 알고리즘을 기술해 봅시다.</p>
<p dir="ltr">   순서도 비슷하게 기술해 보면 다음과 같은 형태가 될 것 같네요.</p>
<p> <a href="http://www.ntrexgo.com/wp-content/uploads/2015/07/Cap-2015-07-16-15-59-13-417.png" rel="lightbox[28246]"><img class="aligncenter size-full wp-image-28288" alt="Cap 2015-07-16 15-59-13-417" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/Cap-2015-07-16-15-59-13-417.png" width="430" height="273" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p dir="ltr"><span style="color: #ffffff; font-size: large; background-color: #808000;"><strong>  ■ 3색 신호등 코딩(cording)하기    </strong></span></p>
<p dir="ltr">   프로그램을 작성하는 것을 보통 코딩(cording)한다고 합니다. 위의 알고리즘을 보면서 순서대로 알맞은 코딩을 하면 되겠네요. 우리는 이미 배워서 알고 있는 것은 그 방법을 사용하여 코딩하면 되고, 잘 모르는 것은 새로운 코딩 방법을 배워야 합니다. 새로운 코딩은 기존에 배웠던 것을 응용하거나 조합하여 만들어 내는 방법도 있지만, 일단 아두이노에서는 혹시 우리가 원하는 기능을 라이이브러리로 이미 만들어 놓았는지, 아니면 다른 몇 개의 기존 라이브러리를 응용하거나 조합하여 구현할 수 있는지를 확인해 보는 것이 중요합니다. (남들이 애써서 다 만들어 놓은 것을 내가 낑낑대면서 또 만들 필요가 없으니까요. “고맙습니다” 하면서 낼름 갔다 쓰는게 장땡!이고, 사실 아두이노는 이것이 가장 큰 장점 중의 하나입니다.) 하나씩 체크해 볼까요?</p>
<p dir="ltr">   LED를 켜고 끄는 것은 조금 전에 배웠으므로 그것을 이용하면 되고, 일정 시간(초) 동안 기다리는 기능이 있는데, 이것을 해결해 줄 수 있는 아두이노 라이브러리(들)이 있는지를 잘 찾아 봐야겠습니다.</p>
<p dir="ltr">   다행히, delay( )라는 함수가 있네요. 그럼 형태와 기능이 어떤지 살펴볼까요.</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="border: 1px solid #000000;">
<p dir="ltr">void delay(unsigned long ms)</p>
<p dir="ltr">                  // 1/1000초(millisec) 단위로 시간을 지연하는 함수</p>
<p dir="ltr">                  // “void”는 함수 실행 종료 후 리턴값(출력값)이 없음을 의미</p>
<p dir="ltr">                  // “unsigned long ms”는 함수 입력값은 ms이고</p>
<p dir="ltr">                  // 타입은 unsigned long임을 나타냄 (4바이트 크기, 최대 40억 정도까지 표현 가능)</p>
</td>
</tr>
</tbody>
</table>
<p dir="ltr">   예를 들어 “delay(500);” 을 코딩하면 500ms = 0.5초가 지연되는(흘러가는) 것이 되겠습니다. Good~~~ 그렇다면, 이제 모든 부분이 해결되었으니까 여러분이 직접 코딩해 보겠습니다. 10분 기다리면 되겠지요? 참, 앞에서도 그랬지만 같이 해보기 전에 무조건 자신이 먼저 시도해 보는 것이 바람직합니다. (이래야 실력이 쑥쑥 늡니다.). 잘 안되면 그 때 아래에 제시한 내용을 보고 이해한 후, 다시 처음부터 혼자 힘으로 한 번 더 코딩해서 똑같은 결과를 얻어야만 자기 것이 되지요. 꼭~꼭~꼭~ 그렇게 해보세요!! 10분 기다립니다. 저도 하러 갑니다.</p>
<p dir="ltr">   모두(?) 잘(?) 되었죠? YES or NOT? 다음을 보시지요.</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="border: 1px solid #000000;">
<p dir="ltr">#define RED_LED 4           // “#define A B”은 이후 프로그램에서 A가 나오면 B로 치환</p>
<p dir="ltr">#define YELLOW_LED 3      // 프로그램에서 직접 숫자를 써도 되지만 이렇게 해놓으면</p>
<p dir="ltr">#define GREEN_LED 2        // 번호가 아닌 Label로 의미가 전달되므로 더 쉬움</p>
<p dir="ltr">void setup()                     // 초기에 한 번만 실행</p>
<p dir="ltr">{</p>
<p dir="ltr"> pinMode(RED_LED, OUTPUT);                     // 4번핀은 출력</p>
<p dir="ltr"> pinMode(YELLOW_LED, OUTPUT);                // 3번핀도 출력</p>
<p dir="ltr"> pinMode(GREEN_LED, OUTPUT);                  // 2번핀도 출력</p>
<p dir="ltr"> digitalWrite(RED_LED, HIGH);                     // 빨강 LED ON</p>
<p dir="ltr">}</p>
<p dir="ltr">void loop()                       // 무한 반복 루프</p>
<p dir="ltr">{</p>
<p dir="ltr"> delay(3000);                                            // 3초 대기</p>
<p dir="ltr"> digitalWrite(RED_LED, LOW);  digitalWrite(YELLOW_LED, HIGH);</p>
<p dir="ltr">                                                              // 빨강 LED OFF, 노랑 LED ON</p>
<p dir="ltr">  delay(3000);</p>
<p dir="ltr"> digitalWrite(YELLOW_LED, LOW);  digitalWrite(GREEN_LED, HIGH);</p>
<p dir="ltr">                                                              // 노랑 LED OFF, 녹색 LED ON</p>
<p dir="ltr">  delay(3000);</p>
<p dir="ltr"> digitalWrite(GREEN_LED, LOW);  digitalWrite(RED_LED, HIGH);</p>
<p dir="ltr">                                                               // 녹색 LED ON, 빨강 LED ON</p>
<p dir="ltr">}</p>
</td>
</tr>
</tbody>
</table>
<p dir="ltr">   이제 아두이노 연결하고 스케치 프로그램 입력하고 실행하는 것은 다 아시니까 실행해 봅시다. 다들 잘 동작하나요?</p>
<p style="text-align: center;"><iframe width="425" height="350" src="http://www.youtube.com/embed/JVNDQeTjNb0" frameborder="0"></iframe></p>
<p>   이 동영상처럼 3초마다 돌아가면서 빨강-노랑-녹색 LED가 잘 켜지면 되겠습니다. 성공입니다! 자축의 박수~ 짝! 짝! 짝!</p>
<p dir="ltr">   여러분, 오늘 모두모두 너무너무 수고하셨고 자랑스럽습니다.</p>
<p dir="ltr">   첫번째 단추를 잘 끼웠으니 여러분은 벌써 목표의 반은 이루신 것이지요.</p>
<p dir="ltr">   다음 시간에는 3색 LED를 가지고 “카멜레온 반지 만들기 DIY”에 도전해 보기로 하고, 오늘은 기쁜마음으로 여기에서 강의를 마치겠습니다.</p>
<p dir="ltr">   아래 과제는 시간 나실 때 해보시고, 다음 강의에서 건강한 얼굴로 뵙겠습니다. 모두모두 안녕~!</p>
<p dir="ltr">   감사합니다.</p>
<p dir="ltr">
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="background-color: #9acd32;" valign="middle">
<p dir="ltr"><strong>[과제-3색신호등-2]</strong></p>
<p dir="ltr"><strong>LED 불의 움직임이 0.5초 간격으로 (녹색 → 노랑 → 빨강 → 녹색 → …)이 무한 반복되는 프로그램을 작성해 보세요.</strong></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table style="width: 600px;" border="0" cellpadding="10">
<tbody>
<tr>
<td style="background-color: #9acd32;" valign="middle">
<p dir="ltr"><strong>[과제-3색신호등-3]</strong></p>
<p><strong>LED가 1초 간격으로 (빨강-노랑 → 빨강-녹색 → 녹색-노랑 → 빨강-노랑-녹색 → 모두 꺼짐 → …)이 무한 반복되는 프로그램을 작성해 보세요.</strong></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="text-align: center;"><span style="font-size: medium;"><strong> </strong></span></p>
<p style="text-align: center;">
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/28246/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[13호]스테레오 영상을 처리하는데 있어 발생하는 이슈</title>
		<link>http://www.ntrexgo.com/archives/2280</link>
		<comments>http://www.ntrexgo.com/archives/2280#comments</comments>
		<pubDate>Mon, 25 Jun 2012 10:40:23 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[13호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[스페셜]]></category>
		<category><![CDATA[위드로봇]]></category>
		<category><![CDATA[컬럼]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=2280</guid>
		<description><![CDATA[디바이스마트 매거진 13호 &#124; "같은 물체에 대해 서로 다른 장소에서 촬영한 여러 이미지에서 물체의 3차원 정보를 계산하는 학문 분야"가 바로 스테레오 비전입니다. 각각은 다시 여러 제한 조건들에 따라 카메라 캘리브레이션이 되어 있는지 아닌지(calibrated or uncalibrated), 카메라를 하나를 사용하고 이를 움직여가며 촬영하는 방식인지, 아니면 여러 대의 카메라를 사용하는 것인지(isolated camera or video sequence), 이미지가 단순히 두 장인지 아니면 수 십, 수 백장을 처리하는 시스템인지에 따라 다양한 연구가 진행됩니다. 하지만 좁은 의미에서는 서로 다른 장소에서 촬영한 두 장의 이미지에서 거리 정보를 추출해 내는 분야로 이해되기도 합니다.]]></description>
				<content:encoded><![CDATA[<table width="620">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths.jpg" rel="lightbox[2280]"><img class=" wp-image-2293 alignleft" alt="13SCwiths" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths-300x171.jpg" width="240" height="137" /></a></p>
<h3>스테레오 영상을 처리하는데 있어</h3>
<h3>발생하는 이슈</h3>
<p style="text-align: right">글 | 위드로봇(주) 김도윤</p>
<p><span style="color: #008000"><strong>■ 스테레오 비전이란?</strong></span></p>
<p>영화관에서 3D나 4D라는 표현이 자주 쓰이게 되면서 입체감 있는 영상에 대한 이해는 예전보다는 훨씬 쉬워졌습니다. 일반 카메라로 찍은 사진은 3차원(3D) 물체의 반사광을 2차원(2D) 필름 또는 2차원 센서에 투영(projection) 시킨 것이기에 3차원 정보 중 카메라에서부터 물체까지의 거리 정보는 사라지게 됩니다. 즉 3D가 2D로 바뀌게 되고 이러한 과정을 projection 이라고 하는 것이죠. 따라서 한 장의 사진으로는 이러한 거리 정보는 알아낼 수가 없습니다. 이건 간단한 실험으로도 확인해 볼 수 있습니다. 공을 던졌다 잡을 때 한 쪽 눈을 감고 던졌다 잡으려고 해 보면 공과 거리감이 사라져 잡기가 매우 어렵다는 것을 경험할 수 있습니다.</p>
<p>사라진 거리 정보를 복원하기 위해서는 또 다른 위치에서 찍은 다른 사진이 필요하게 되죠. 이 때문에 사람의 눈도 두 개가 있어 같은 물체를 서로 다른 장소(양쪽 각각의 눈 위치)에서 보고 그 영상의 차이를 이용해 거리를 복원하고 있습니다. 따라서 영상을 통해 거리 정보를 파악하고 카메라는 한 대가 아닌 두 대 이상이 되어야만 합니다. 이처럼 &#8220;같은 물체에 대해 서로 다른 장소에서 촬영한 여러 이미지에서 물체의 3차원 정보를 계산하는 학문 분야&#8221;가 바로 스테레오 비전입니다. 각각은 다시 여러 제한 조건들에 따라 카메라 캘리브레이션이 되어 있는지 아닌지(calibrated or uncalibrated), 카메라를 하나를 사용하고 이를 움직여가며 촬영하는 방식인지, 아니면 여러 대의 카메라를 사용하는 것인지(isolated camera or video sequence), 이미지가 단순히 두 장인지 아니면 수 십, 수 백장을 처리하는 시스템인지에 따라 다양한 연구가 진행됩니다. 하지만 좁은 의미에서는 서로 다른 장소에서 촬영한 두 장의 이미지에서 거리 정보를 추출해 내는 분야로 이해되기도 합니다.</p>
<p><strong><span style="color: #008000">■ 거리 정보란?</span></strong></p>
<table>
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths9.jpg" rel="lightbox[2280]"><img class="alignnone size-medium wp-image-2289" alt="13SCwiths9" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths9-300x219.jpg" width="300" height="219" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths10.jpg" rel="lightbox[2280]"><img class="alignnone size-medium wp-image-2290" alt="13SCwiths10" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths10-300x220.jpg" width="300" height="220" /></a></td>
</tr>
</tbody>
</table>
<p>위 사진은 특정 건물을 위치를 조금 달리해서 찍은 두 장의 사진입니다. 얼핏 보면 같아 보이지만 자세히 보면 조금 틀리다는 것을 알 수 있습니다. 가까이 있는 좌측 건물 지붕에 비해 뒤에 있는 더 멀리있는 나무의 위치는 두 장의 이미지에서는 확연히 차이가 나는 부분입니다. 이처럼 동일한 물체에 대한 두 장의 사진 사이에서 나타나는 차이점을 이용하면 이미지 중에서 어느 부분이 카메라를 기준으로 더 가까운지를 알아낼 수 있습니다. 이를 이미지나 거리값으로 계산한 결과를 거리 정보라고 합니다. 2차원 이미지 형태로 나타내는 것이 직관적으로 파악되기에 위 그림에 대한 거리 정보는 아래 그림처럼 가까운 곳은 밝은 색으로 먼 곳은 어두운 색으로 표시하는 것이 일반적입니다. 자세히 보시면, 건물 앞에 있는 도로는 카메라 기준으로 가깝기에 밝은 색으로 표시되어 있고, 건물은 뒤쪽으로 갈수록 어두운 색으로 표시된 것을 확인할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths8.jpg" rel="lightbox[2280]"><img class="size-medium wp-image-2288 aligncenter" alt="13SCwiths8" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths8-300x219.jpg" width="300" height="219" /></a></p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ 거리 정보와 디스패리티(Disparity)의 관계</span></strong></p>
<p>앞서 살펴본 바와 같이 거리 정보를 파악하기 위해서는 양쪽 이미지 사이에 대응되는 점이 얼마나 차이가 나야 하는지를 파악했어야 했습니다. 이를 그림으로 그려보면 아래 그림처럼 3차원 공간 상의 한 점은 왼쪽, 오른쪽 눈에 각각 투영이 되는데 그 점의 거리에 따라 위치가 서로 다르게 됩니다. 가까이에 있는 물체는 그 차이가 크고, 멀리 있는 물체는 그 차이가 적게 되죠.</p>
<table align="center">
<tbody>
<tr>
<td style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths7.jpg" rel="lightbox[2280]"><img class="alignnone  wp-image-2287" alt="13SCwiths7" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths7.jpg" width="190" height="233" /></a></td>
<td style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths6.jpg" rel="lightbox[2280]"><img class="alignnone  wp-image-2286" alt="13SCwiths6" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths6-300x272.jpg" width="240" height="218" /></a></td>
</tr>
</tbody>
</table>
<p>극단적으로 매우 멀리에 있는 물체는 차이가 나지 않게 됩니다. 이처럼 왼쪽 영상의 한 점의 위치에 비해 오른쪽 영상의 대응점 위치의 차이를 디스패리티(disparity)라 부르며, 그 관계식은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths5.jpg" rel="lightbox[2280]"><img class="size-full wp-image-2285 aligncenter" alt="13SCwiths5" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths5.jpg" width="225" height="58" /></a></p>
<p>풀어서 설명해 보면 &#8216;왼쪽 영상 한 점의 위치에서 대응되는 오른쪽 영상 한 점의 위치 차이는 그 점의 3차원 공간 상의 거리 z에 반비례하며, 촛점 거리 f와 두 영상을 촬영할 때 거리차 B(베이스라인)에 비례한다&#8217; 입니다. 예를 들어볼까요. 스테레오 카메라로 어떤 물체를 촬영해 보면, 가까이에 있는 물체는 왼쪽 영상과 오른쪽 영상에 그 차이가 두드러지게 나타나고, 멀리 있는 물체는 차이가 상대적으로 작게 나타나게 됩니다. 왼쪽 카메라와 오른쪽 카메라의 거리가 멀면 디스패리티가 크게 나타나기에 거리 정보를 보다 정밀하게 파악할 수 있습니다. 따라서 특정 스테레오 카메라로 거리 정보를 추출했는데 해상도가 불만족스럽고 더 높은 정밀도가 필요하다면 카메라와 카메라 사이를 넓히는 것도 한 가지 해결 방법이 됩니다. 또 다른 방법으로는 카메라 렌즈를 촛점 거리가 긴 모델로 바꾸는 것도 한 가지 방법이 되겠죠. 대신 베이스라인이 길어지거나 촛점 거리가 긴 모델로 바꾸면 한 번에 거리 정보를 계산할 수 있는 3차원 공간 상의 영역은 줄어들게 됩니다. 따라서 스테레오 비전을 연구하는 사람은 베이스라인이나 렌즈의 촛점 거리를 바꾸어 가며 자신의 실험에 가장 적절한 범위를 찾아야 할 필요가 있습니다.</p>
<p><strong><span style="color: #008000">■ 문제는 매칭(matching)이야!</span></strong></p>
<p>지금까지 진행한 내용을 정리해볼까요? 한 대의 카메라로 찍은 한 장의 영상으로는 거리 정보를 알 수가 없었습니다. 그래서 두 대의 카메라(stereo camera)로 찍은 두 장의 영상에서 거리 정보를 추출해야하고, 거리 정보는 두 영상에서 대응되는 점의 위치가 서로 다르게 나타나며(disparity) 그 정도는 거리에 반비례해서 나타났었습니다. 디스패리티를 계산하면 거리 정보는 나오는 셈인데, 그럼 왼쪽 이미지의 한 점이 오른쪽 이미지 상 어디에 존재하는지를 찾아야 합니다. 이를 스테레오 비전에서는 매칭(matching) 또는 코레스펀던스(correspondence)라고 부릅니다. 얼핏 생각하면 매칭은 간단해 보이지만, 640&#215;480 해상도를 가지는 VGA급 영상에서 예를 들어보면 다음과 같이 어마어마한 연산량을 필요로 합니다.</p>
<p>(1) 왼쪽 이미지에서 한 점을 선택합니다.</p>
<p>(2) 이 이미지와 같은 점은 오른쪽 이미지에서 640 x 480 loop를 돌려 찾습니다.</p>
<p>(3) 다시 왼쪽 이미지에서 또 한 점을 선택하고 (2)를 반복합니다. 이러한 반복은 640&#215;480번 반복됩니다.</p>
<p>어떻습니까? VGA급 영상은 최근 수M ~ 수 십M급 카메라에 비하면 매우 열악한 낮은 해상도임에도 불구하고, 매칭하는데 (640&#215;480)x(640&#215;480) 루프를 반복해야만 합니다. 당연히 시간이 많이 소요되고 실시간으로 계산이 안되게 됩니다. 또한 왼쪽 영상과 오른쪽 영상의 매칭을 하기 위해서는 한 점의 정보만으로는 부족한 경우가 태반이기에 매칭을 할 때는 일정 블록(block)을 이용하게 되며, 이 또한 연산 시간을 더욱 늘리게 됩니다.</p>
<p>따라서 스테레오 비전 분야의 연구 중에서 가장 중요한 부분은 바로 매칭 부분이며, 역설적이게도 많은 연구자들이 연구를 진행하고 있지만 아직까지 상업적으로 사용하기에는 많은 부분이 부족하기도 합니다.</p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ 매칭 시간을 줄여주는 에피폴라 제한조건 (epipolar constraint)</span></strong></p>
<p><span style="font-size: 11px;line-height: 19px">VGA급 해상도의 영상에서 거리를 추출하는데 1~2분씩 소요된다면 멈춰있는 물체의 경우에는 상관이 없을 수도 있지만 움직이는 로봇이라던지 자동차라면 전혀 사용할 수 없게 됩니다. 위 매칭 문제를 잘 살펴보면 왼쪽 영상에서 한 점에 대응되는 점을 찾기 위해 오른쪽 영상을 모두 뒤지고 있는 것을 발견할 수 있습니다. 물론 오른쪽 영상에 어디에 있는지는 미리 알 수 없기에 뒤져야 하는 것은 맞는데, 오른쪽 영상을 모두 뒤질 필요가 있을까요? 영상을 촬영할 때 카메라가 어떻게 배치되어 있는지 정보를 사전에 알 수 있다면 위 질문에 대한 답을 할 수가 있습니다. 이러한 내용이 담겨져 있는 수학적 정리가 에피폴라 제한조건입니다. 따라서 스테레오 매칭 문제에서 연산 속도를 증가시키기 위해서는 에피폴라 제한조건을 이해해서 이를 적용해야 하며, 이를 적용하면 2D 공간를 뒤져야 하는 일에서 1D 공간을 뒤지는 문제로 바꿀 수 있습니다. 에피폴라 제한조건은 Project Space에서 수학적으로 유도하면 깔끔하게 나오는 수식입니다만, 본고에서는 수식을 사용하지 않고 그림을 통해 물리적 의미를 전달해 보도록 하겠습니다.</span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths4.jpg" rel="lightbox[2280]"><img class="size-medium wp-image-2297 aligncenter" alt="13SCwiths4" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths4-300x125.jpg" width="300" height="125" /></a></p>
<p>자, 위 그림을 찬찬히 잘 살펴보겠습니다. 3차원 공간 상에 X라는 점이 있습니다. 이 점은 왼쪽 카메라에서는 렌즈 촛점 O와 연결하는 레이(ray)상에 놓이게 되므로 x로 투영됩니다. 위 그림에서 x를 확인하셨나요? 자, 그럼 이 부분이 매우 중요한데요, 이미지 상에서 본 x라는 점은 3차원 공간 상에 위치한 X이기도 하지만 xX 선분 상에 있는 어떠한 점도 영상에서는 x로 보이게 됩니다. 이게 앞서 설명한 &#8220;투영(projection)이 되기 때문에 영상에서 거리 정보는 없어진다&#8221;와 일맥상통한 부분이죠. 따라서 영상에서 x라는 점은 3차원 공간 상에서는 xX 라인에 있는 어떠한 점도 x가 될 수 있기에, x에 대응되는 오른쪽 카메라에서의 후보군은 선분으로 나타나게 됩니다. 이 때 이 선분들이 하나로 만나는 점이 생기는데요, 그 점은 재미있게도 왼쪽 카메라와 오른쪽 카메라의 중심(OO&#8217;)을 서로 연결한 직선이 이미지를 관통하는 점 e와 e&#8217; 으로 나타납니다. 이 때 파악된 e를 에피폴(epipole)이라고 부르고 에피폴을 지나는 후보군 선분을 에피폴라 라인(epipolar line)이라고 부릅니다. 그리고 이러한 일련의 조건들을 에피폴라 제한조건이라고 합니다. 이 부분은 매우 중요하니 설명과 그림을 보면서 충분히 숙지하시기 바랍니다.</p>
<p>우리가 매칭에 활용한 부분은 에피폴라 라인입니다. 다시 거슬러올라가 볼까요? (a)거리 정보를 알기 위해서는 디스패리티 파악이 필요했습니다. (b)디스패리티를 알기 위해서는 매칭을 해야 하는데, 매칭은 영상 전체를 모두 뒤져야 하기 때문에 매우 연산량이 많았습니다. (c)그런데 앞서 본 바에 의하면 왼쪽 영상에서 한 점은 3차원 공간 상에서 후보군이 한 직선으로 나타나고 이는 오른쪽 카메라에서 특정한 라인으로 표시가 되는데, 그 라인은 항상 에피폴을 지나갔었습니다. (d)에피폴은 카메라 배치에 따라 정해지는 것이므로 미리 알 수가 있으니 이를 이용하면 오른쪽 영상 전체를 뒤질 필요없이 에피폴라 라인만 뒤지면 됩니다. (e) 그럼 이제 에피폴을 어떻게 찾아내는가 문제로 바뀝니다.</p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ 스테레오 카메라 캘리브레이션</span></strong></p>
<p><span style="font-size: 11px;line-height: 19px">에피폴은 각각의 카메라 중심을 연결한 선이기에 카메라 중심을 정확하게 알아야 할 필요가 있습니다. 이는 다시 카메라 캘리브레이션으로 해결하는 문제로 바뀝니다. 카메라 캘리브레이션은 그 자체만으로도 또 하나의 중요한 학문 분야여서 원론부터 설명하면 매우 길어집니다. 본고는 스테레오 카메라에서 발생하는 문제에만 관심을 집중해 보겠습니다. 다행히도 스테레오 카메라의 캘리브레이션을 위한 기법들은 오픈 소스로 많이 공개되어 있으며, 라이브러리로도 공급이 됩니다. 대표적으로 유명한 라이브러리는 OpenCV이며, 이 안에는 Jang이 만든 캘리브레이션 기법이 구현되어 있습니다. 미리 준비된 체크 무늬 PDF 문서를 프린터로 출력하여 카메라 앞에서 이 출력 문서를 움직여가며 촬영한 이미지를 캘리브레이션 프로그램에 넣어주면 스테레오 카메라 캘리브레이션 결과값인 펀더맨털 행렬(Fundamental matrix)를 결과값으로 반환합니다. 이 값을 이용하면 2D 공간을 모두 뒤지던 매칭 문제를 1D 공간 문제로 바꿀 수 있으며, 이 또한 OpenCV에 이러한 기법으로 구현된 함수와 예제 코드가 있습니다.</span></p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ 에피폴라 라인을 일치시키는 렉티피케이션(rectification)</span></strong></p>
<p><span style="font-size: 11px;line-height: 19px">스테레오 카메라 캘리브레이션이 완료되면 에피폴의 위치를 알 수 있고 왼쪽 카메라 한 점에 대응되는 오른쪽 카메라 영상의 에피폴라 라인을 알 수 있습니다. 일반적인 스테레오 카메라에서는 아래 그림처럼 에피폴라 라인이 사선으로 나타나게 됩니다. 이제 이 에피폴라 라인만 뒤지면 매칭 문제는 해결할 수 있는데, 문제는 이 라인을 뒤지는 것도 일입니다. X 축으로 평행한 평행선이 아니기에 일일히 다음 점의 위치를 찾아 이미지 값을 확인해야 하는 식으로 프로그래밍이 됩니다.</span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths3.jpg" rel="lightbox[2280]"><img class="size-full wp-image-2296 aligncenter" alt="13SCwiths3" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths3.jpg" width="300" height="127" /></a><br />
이 문제를 좀 더 단순화하기 위해 에피폴라 라인을 평행하도록 이미지를 변환하는 과정을 이미지 렉티피케이션(image rectification)이라고 합니다. 위 이미지에서 캘리브레이션된 데이터를 이용해 렉티피케이션한 결과는 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths2.jpg" rel="lightbox[2280]"><img class="size-medium wp-image-2295 aligncenter" alt="13SCwiths2" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths2-300x128.jpg" width="300" height="128" /></a></p>
<p>이렇게 변환해 놓으면, 왼쪽 영상의 한 점은 오른쪽에서 한 줄만 처음에서부터 끝까지 쭉 찾으면 되기에 프로그램 코드가 무척 간결해 집니다. 물론 이렇게 렉티피케이션하는데 시간은 추가로 소요되지만 매칭에 줄어드는 시간까지 함께 생각해 보면 렉티피케이션을 수행하는 쪽이 더 빠르기에 스테레오 매칭에 있어서 렉티피케이션은 필요한 과정으로 인식되고 있습니다. 스테레오 카메라에 따라서 이러한 렉티피케이션까지 수행한 결과를 출력하는 스테레오 카메라도 있습니다. 이러한 카메라를 사용하면 프로그램에서는 알고리즘에 사용할 수 있는 시간이 더 많이 확보되기에 고급 알고리즘을 구현하는데 부담을 덜 수 있다는 장점이 생기죠.</p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ 이슈 정리</span></strong></p>
<p><span style="font-size: 11px;line-height: 19px">스테레오 영상을 처리하는데 발생하는 이슈들을 시간 순으로 열거해 보았고 각각은 어떻게 해결해야 하는지를 설명했습니다. 간략히 표로 정리하면 다음과 같습니다.</span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths12.jpg" rel="lightbox[2280]"><img class="alignnone size-medium wp-image-2292" alt="13SCwiths12" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths12-300x249.jpg" width="300" height="249" /></a></p>
<p><strong><span style="color: #008000">■ 스테레오 카메라 OjOcamStereo-VGA30</span></strong></p>
<p>&nbsp;</p>
<p>위에 언급했듯이 영상으로 3차원 정보를 찾아내는 문제는 많은 응용 분야가 있기에 위드로봇 연구소에서는 스테레오 영상에 관련된 많은 용역을 수행했었습니다. 일부는 스테레오 카메라를 만드는 일도 있었고, 일부는 스테레오 카메라는 기존 상용품을 사용하되 처리 알고리즘을 개발하는 업무이기도 했습니다. 후자의 경우 대표적인 상용품이 몇 가지 있는데 무척 고가(5백만원 ~ 수 천만원)에 판매되고 있습니다. 위드로봇 연구소에서도 연구에 활용하기 위해 구매하여 사용하고 있습니다만 매우 비싸기에 여러 명이 돌려가며 사용하고 있는 형국입니다. 그래서 스테레오 카메라 제작 및 영상 처리 알고리즘 기술은 확보되었기에 위드로봇 연구소 내부에서 쓸 목적으로 처음에는 제작이 시작되었습니다. 그 덕분에 케이스나 외관은 상대적으로 덜 신경쓴 티가 납니다. 내부에서 이런저런 용도로 쓰고 있던 중 한 번 보신 분들이 구매하고 싶다는 의견을 주셔서 디바이스마트를 통해 판매까지 이어지게 되었습니다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths1.jpg" rel="lightbox[2280]"><img class=" wp-image-2294 aligncenter" alt="13SCwiths1" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths1-257x300.jpg" width="206" height="240" /></a></p>
<p>내부 센서는 CMOS 1.3M급을 사용했으며, 전송은 640&#215;480 해상도로 왼쪽, 오른쪽 각각 30 프레임씩 동기가 맞은 영상이 USB 2.0 포트를 통해 전달됩니다. 베이스라인은 물리적인 배치는 116mm이며, 제품마다 부착할 때 조금씩 편차는 발생하게 됩니다. 이는 캘리브레이션을 통해 보상할 수 있습니다. 보드는 밑 부분에 일반 카메라 삼각대를 부착할 수 있는 기구물이 있어 이를 부착하면 삼각대에 바로 연결할 수 있습니다. 삼각대가 아닌 다른 곳에 장착을 하는 용도로는 보드 네 귀퉁이에 M3 홀이 뚫려 있으므로 이를 활용하시면 됩니다.</p>
<p>USB 포트에 연결하고 설치 프로그램을 설치하면, 바로 화면에 영상이 나옵니다. 렌즈는 M12 렌즈를 사용하며 촛점거리가 서로 다른 세 종류의 렌즈를 기본 제공하여 필요에 따라 선택할 수 있도록 하였습니다. 지원하는 OS는 Windows XP/Vista, win7 32bit/64bit를 지원하며, OpenCV와 연결하는 예제 코드도 제공하여 빠르게 원하시는 결과를 볼 수 있도록 하였습니다. 각각의 카메라는 노출 시간, 화이트 밸런스를 설정할 수 있으며, 그 결과들은 아래 링크에서 동영상으로 확인해 보실 수 있습니다.</p>
<p><a href="http://withrobot.com/category/Camera">http://withrobot.com/category/Camera</a></p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ OjOcam Roadmap</span></strong></p>
<p>위드로봇(주)에서는 고성능, 고해상도 스테레오 카메라와 다채널 카메라를 지속적으로 출시할 예정입니다. 현재는 VGA급 해상도를 30프레임으로 전송하고 있습니다만, VGA급 해상도에 글로벌 셧터를 내장하고, 60프레임의 속도로 USB 3.0 인터페이스를 갖춘 OjOcamStereo-VGA60이 개발되고 있으며, 속도보다는 해상도에 중점을 둔 OjOcamStereo-QXGA15도 개발 중입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths11.jpg" rel="lightbox[2280]"><img class="alignnone size-medium wp-image-2291" alt="13SCwiths11" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/13SCwiths11-300x158.jpg" width="300" height="158" /></a></p>
<p><strong style="font-size: 11px;line-height: 19px"><span style="color: #008000">■ 무료 강좌 공지</span></strong></p>
<p>원래는 글을 통해 스테레오 이미지 처리의 기초를 잘 풀어보려고 했으나 역시나 지면을 통해 지식을 전달하는 데에 한계를 느낍니다. 직접 만지면서 영상을 보면서 작업하면 금방 이해될 것을 글로 설명하려다보니 비효율적이라는 생각이 드네요. 8월 11일 토요일 오전 10시 ~ 12시, 8월 18일 토요일 오전 10시 ~ 12시에 위드로봇(주)에서 디바이스마트 협조를 받아 OjOcamStereo-VGA30을 이용한 스테레오 영상 처리에 대한 세미나와 실습을 진행합니다. 노트북을 지참하고 오시는 분들은 OjOcamStereo-VGA30을 직접 연결하여 영상을 확인해 보실 수 있으며, 캘리브레이션 및 거리 영상을 추출하는 코드를 직접 돌려보며 스테레오 영상 처리 분야에서 이슈가 되는 부분을 직접 경험하실 수 있을 것입니다. 공간은 한정되어 있어 10명만 참석하실 수 있는데, 참석을 요청하시는 분이 많으시면 추후 추가 세미나 일정을 잡도록 하겠습니다.</p>
<p>&nbsp;</p>
<p>&nbsp;</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/2280/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[9호]TMS320F28x 플래시 프로그래밍 실습 강좌 교육현장에서의 동행취재</title>
		<link>http://www.ntrexgo.com/archives/6967</link>
		<comments>http://www.ntrexgo.com/archives/6967#comments</comments>
		<pubDate>Fri, 29 Jul 2011 01:51:45 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[핫 뉴스]]></category>
		<category><![CDATA[9호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[싱크웍스]]></category>
		<category><![CDATA[프로그래밍]]></category>
		<category><![CDATA[플래시]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=6967</guid>
		<description><![CDATA[디바이스마트 매거진 8호 &#124; TMS320F28x의 플래시 메모리 개요와 플래시 메모리의 구조, 프로그램을 플래시에서 동작시키는 방법 설명을 하고 플래시에서 프로그램을 동작시키기 위한 실습시간을 가졌다. ]]></description>
				<content:encoded><![CDATA[<h2><span style="color: #003366"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn002.jpg" rel="lightbox[6967]"><img class=" wp-image-8000 alignleft" alt="08hotsyn002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn002-300x225.jpg" width="240" height="180" /></a><strong>TMS320F28x </strong></span></h2>
<h2><strong><span style="color: #003366">플래시 프로그래밍</span></strong></h2>
<h2><strong><span style="color: #003366">실습 강좌 교육현장에서의 </span></strong></h2>
<h2><strong><span style="color: #003366">동행취재</span></strong></h2>
<p>&nbsp;</p>
<p style="text-align: right">글 | 김지혜 기자  sophia@ntrex.co.kr</p>
<p> 2011년 5월 28일 화창한 초여름 날씨에 한남대학교 공과대학 강의실에선 싱크웍스에서 준비한 TMS320F28x 플래시 프로그래밍 실습 강좌 교육이 한창이었다.</p>
<p>오후 1시 반부터 시작된 강의는 강의준비를 위해 시작 두 시간 전부터 준비를 해야 했다. 강의에 대한 강사 분의 열의와 포항, 전주, 평택에서 한달음에 달려온 교육참가자들의 열기로 강의실을 가득 채웠다. 우선, TMS320F28x 프로세서를 사용하기 위한 28x 프로세서 소개와 28x 개발환경 안내 등의 설명으로 오리엔테이션을 시작하였다. 간단한 휴식시간을 가진 후, 본격적인 강의가 시작되었다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn002.jpg" rel="lightbox[6967]"><img class="alignnone  wp-image-8000" alt="08hotsyn002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn002-300x225.jpg" width="210" height="158" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn001.jpg" rel="lightbox[6967]"><img class="alignnone  wp-image-7998" alt="08hotsyn001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn001-300x225.jpg" width="210" height="158" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn003.jpg" rel="lightbox[6967]"><img class="alignnone  wp-image-7997" alt="08hotsyn003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/08hotsyn003-300x225.jpg" width="210" height="158" /></a></td>
</tr>
<tr>
<td style="text-align: center">28x 프로세서를 소개하고 있다</td>
<td style="text-align: center">강의 집중하는 교육 참가자들</td>
<td style="text-align: center">강의 실습에 쓰인 플레시 메모리</td>
</tr>
</tbody>
</table>
<p>TMS320F28x의 플래시 메모리 개요와 플래시 메모리의 구조, 프로그램을 플래시에서 동작시키는 방법 설명을 하고 플래시에서 프로그램을 동작시키기 위한 실습을 시작하였다.<br />
실습 교육 후, TMS320F28x의 플래시 메모리 최적 사용법에 대한 플래시의 Wait-state와 Pipeline 설정 방법과 특정 함수를 RAM으로 옮겨 실행하는 방법, 프로그램 전체를 RAM에서 실행하는 방법, 플래시에서 프로그램 고속 동작 시키기에 대한 실습을 하며 강의를 이어나갔다.</p>
<p><span style="font-size: 13px;line-height: 19px">휴식시간 싱크웍스에서 준비한 키트와 모듈 등을 볼 수 있는 시간을 가지며, 제품에 대한 참가자들의 문의에 대한 싱크웍스 관계자의 답변 및 제품소개가 있었다.</span></p>
<p>4시간여의 강의가 끝나고, 문의점에 대한 질의 응답시간을 가졌는데, 이때에도 강의에 대한 관심과 열의만큼이나 다양한 질문들이 많았으며, 친절한 답변 및 설명이 이어졌다.</p>
<p>교육에 참가한 참가자들에겐 TMS320F28x 플래시 프로그래밍에 대해 자세히 알 수 있는 계기가 되어 좋은 교육의 기회가 됐다는 소감과, 앞으로도 이런 유익한 교육들이 수도권 이외의 지방에서도 자주 마련됐으면 하는 바램과 함께 짧지만 알찬 교육을 정리하고 마무리를 지었다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/6967/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[7호]위드로봇 무료강좌 기술자료 &#8211; 3차</title>
		<link>http://www.ntrexgo.com/archives/7742</link>
		<comments>http://www.ntrexgo.com/archives/7742#comments</comments>
		<pubDate>Wed, 25 May 2011 07:11:38 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[7호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[스테레오]]></category>
		<category><![CDATA[영상]]></category>
		<category><![CDATA[자료]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=7742</guid>
		<description><![CDATA[디바이스마트 매거진 7호 &#124; 본고에서는 3차원 정보를 영상 정보를 통해 추출하기 위한 방법을 소개한다.]]></description>
				<content:encoded><![CDATA[<h3><span style="color: #333333"><a href="http://www.ntrexgo.com/wp-content/uploads/2011/05/07scwith3030.jpg" rel="lightbox[7742]"><img class=" wp-image-7778 alignleft" alt="07scwith3030" src="http://www.ntrexgo.com/wp-content/uploads/2011/05/07scwith3030-300x225.jpg" width="210" height="158" /></a>3차 릴레이 무료강좌 기술자료</span></h3>
<h2><span style="color: #006b00">스테레오 영상 및 3D Vision 기술</span></h2>
<p>&nbsp;</p>
<p>글 | 위드로봇(주) 김도윤대표</p>
<p>&nbsp;</p>
<p>위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 3차 교육이 2010년 12월 18일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다. 영상 처리 시스템에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다.</p>
<p><span style="color: #008000"><strong>사람 눈이 2개인 이유</strong></span><br />
지난 달(2011년 3월호)에는 “영상 처리 시스템 소개”라는 제목으로 영상 처리 시스템에 대한 개요를 설명했다. 이 때 우리가 얻는 영상이란 “3차원 공간 상에 존재하는 물체들이 광원의 빛 입자를 반사하는 파장을 렌즈로 모아 2D 평면에 투영(projection)한 것” 이라 정의했다. 이 때 3차원 정보를 2차원 평면에 투영하기 때문에 거리(또는 깊이)에 대한 정보는 사라지게 된다. 즉, 2D 이미지 한 장 만으로는 어떤 물체가 원래 작아서 작게 보이는 것인지, 아니면 멀리 있는 물체를 찍어서 작게 보이는 것인지 알 수 없다는 것이다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3001.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7744" alt="07scwith3001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3001-620x217.jpg" width="496" height="174" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 1. 2D 평면으로 투영되면 같은 ray상에 있는 물체는 같은 크기로 보인다.</td>
</tr>
</tbody>
</table>
<p>따라서 생명체들은 최소 두 개의 영상을 이용해 한 개의 눈으로 얻을 때 사라지는 거리의 정보를 다시 복원해 낸다. 이 때 재미있는 점은 두 눈이 바라보는 영역이 서로 많이 겹칠수록 거리를 정밀하게 알 수 있는 반면 한 번에 볼 수 있는 영역은 줄어들고, 반대로 서로 겹치지 않도록 하면 한 번에 많은 영역을 볼 수 있지만 거리 계산은 정확하지가 않다는 점이다. 이와 같은 특징은 동물의 진화에도 적용되었다. 육식 동물들은 눈이 앞쪽으로 달려있어 가능한 먹잇감과 나와의 거리를 정확하게 계산할 수 있도록 진화되었고, 초식 동물은 머리의 양 옆으로 붙어 거리 계산보다는 사방 팔방 중에 어디에 포식자가 있는지 방향을 판단하여 반대 방향으로 도망가기 쉽도록 진화되었다는 점은 재미있는 부분이다. 이와 같은 차이도 3D 비전 기술을 이해하면 쉽게 설명된다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3002.jpg" rel="lightbox[7742]"><img class="wp-image-7745 aligncenter" alt="07scwith3002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3002-173x300.jpg" width="138" height="240" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3003.jpg" rel="lightbox[7742]"><img class="wp-image-7746 aligncenter" alt="07scwith3003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3003-208x300.jpg" width="166" height="240" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 2. 초식 동물과 육식동물의 눈의 방향 비교</td>
</tr>
</tbody>
</table>
<p>본고에서는 3차원 정보를 영상 정보를 통해 추출하기 위한 방법을 소개한다. 지난 달 원고에서도 밝혔듯이 이 부분은 꽤나 복잡한 수학과 개념의 이해를 필요로 한다. 특히 우리가 이 때까지 배워왔던 기하학은 유클리드 기하학인데, 카메라 이미지에서 발생하는 기하학 문제는 프로젝티브 스페이스(projective space) 상에서 발생하는 기하학 문제이다. 따라서 직관적으로 이해하기 어려우며 수학의 벡터 스페이스 개념을 빌어야 온전히 이해가 가능하다. 대학원에서는 통상적으로 두 학기간의 과목을 통해 해당 개념을 학습하는 분량이기에 잡지의 한정된 분량에서 3D 기술을 모두 소개한다는 것은 무리이다. 따라서 최대한 개념과 그림을 위주로 3D 영상 처리 분야를 소개해 보려고 한다.</p>
<p><strong><span style="color: #008000">3D 정보를 얻기 위한 방법</span></strong><br />
두 대의 카메라로부터 3D 정보를 얻기 위한 연구는 미국 CMU, MIT 및 영국 Cambridge University를 필두로 유수 대학 및 연구소에서 50년 넘게 연구가 진행되고 있다. 가장 일반적인 방법, 즉 교과서에 나오는 방법은 1987년도 MIT의 O.Fangers의 연구로 현재 전형적인 3D 스테레오 비전 기술에 해당한다. 이전에는 계산량의 문제로 실시간 처리가 어려워 실제 사용이 불가했으나 최근 프로세서 성능의 개선으로 2000년대 들어 실시간 동작이 가능해 지고 있다. 이로 인해 보안 시스템, 무인 자동차, 군사용 로봇 등에서 많은 연구가 진행되고 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3004.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7747" alt="07scwith3004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3004-620x434.jpg" width="434" height="304" /></a></td>
</tr>
<tr>
<td>그림 3. 전형적인 3D 스테레오 비전의 3D 좌표값을 계산하기 위한 수식</td>
</tr>
</tbody>
</table>
<p>3D 스테레오 비전 기술은 두 개의 카메라를 이용하여 각 영상의 차이(disparity)를 이용하여 2D 영상에서 사라진 거리 정보를 복원해 내는 기술이다. 즉, 두 카메라로부터 멀리 떨어진 물체는 각각의 카메라에 입력된 위치의 차이가 그다지 나지 않게 된다. 반면 두 카메라로부터 가까운 물체는 각각의 카메라에 입력된 위치의 차이가 크다. 이러한 차이를 디스패리티(disparity)라고 하며 디스패리티를 구하면 거리 정보를 복원할 수 있게된다.<br />
그런데 여기서 문제점이 왼쪽 영상의 한 점이 오른쪽 영상의 어디에 대응되는가를 알아야 디스패리티를 구할 수 있다. 이렇게 왼쪽, 오른쪽 영상의 일치점을 찾는 과정을 매칭(matching)이라고 한다. 통상적으로 한 점만으로는 서로 비교가 어렵기 때문에 대응점 주변의 정보를 하나의 블록으로 이용하여 찾는 것이 일반적이며, 이를 블록 매칭이라 부른다.<br />
매칭을 위해 한 블록을 다른 쪽 영상에서 처음부터 끝까지 모두 뒤지는 것은 불합리해 보이니 카메라간의 기하학적인 구조 정보를 이용하여 최소한 어느 근방에 있을 것 같다라는 정보를 이용하여 탐색 위치를 줄여주는 과정을 영상 교정(image rectification)이라고 한다.<br />
영상 교정이라는 표현보다는 이미지 렉티피케이션이라는 표현이 더 일반적으로 많이 쓰인다. Rectification을 위해서는 두 대의 카메라 사이의 배치 형태를 정확하게 알고 있어야만 한다. 이를 카메라 외부 파라미터(camera extrinsic parameter)라고 한다.<br />
마지막으로 앞서 디스패리티를 구하면 거리 정보를 알 수 있다고 했는데 이는 상대적인 정보까지만 알아낸 것이다. 영상 처리 분야에서는 이를 up to scale까지 찾아냈다고 표현하는데, 우리가 사용하는 단위, 즉 metrical information을 알고 싶다면, 좀 더 쉽게 설명하면 몇 cm 떨어져 있는지 알고 싶다면 카메라 내부 파라미터(camera intrinsic parameter)를 찾아내야 한다.<br />
이처럼 카메라 내부, 외부 파라미터를 찾아내는 과정을 카메라 캘리브레이션(camera calibration)이라고 한다. 꽤나 복잡하게 많이 파고 내려갔는데, 다시 한 번 정리해보자.</p>
<p>한 장의 영상만으로는 3D 정보를 얻을 수가 없으며 서로 다른 위치에서 촬영한 최소 두 장의 영상이 필요하다. 이 두 장의 영상에서 disparity를 계산하면 위치를 파악할 수 있는데, disparity를 구하려면 image matching을 풀어야 한다. 그냥 image matching을 하면 너무나 많은 시간이 걸리기에 image rectification을 수행하는데, 이를 위해서는 camera calibration이 필요하다. 따라서 3D 영상 처리의 순서는 역순으로 (1) 카메라 캘리브레이션을 수행한 뒤, (2) image rectification을 수행하고, (3) image matching을 통해 disparity를 구한 뒤, (4) camera intrinsic parameter값을 이용하여 유클리디안 공간 상의 3차원 좌표를 계산하는 순서로 이뤄진다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3005.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7748" alt="07scwith3005" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3005-620x293.jpg" width="397" height="187" /></a></td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3006.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7749" alt="07scwith3006" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3006-620x554.jpg" width="397" height="354" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 5. image rectification 과정</td>
</tr>
</tbody>
</table>
<p>그림 5에서 왼쪽과 오른쪽의 매칭이 되는 부분은 2D 공간에서 1D 직선으로 일치시키는 과정으로 매칭 시간을 줄여준다.<br />
이 위 한 문단이 영상 처리 대학원에서 약 반학기 동안 이뤄지는 내용이다. 3D 영상 처리를 하겠다면 필수적으로 알고 있어야 한다. 다행스러운 부분은 필자가 공부하던 1990년대까지만해도 위 모든 문제를 각자가 알아서 다 해결해야만 했다. 따라서 어느 한 부분에서 막혀서 진도가 나가지 않으면 고급 알고리즘의 구현은 고사하고, 3D 좌표값도 한 번 계산하지 못하고 시간만 버리는 경우도 많았다. 2000년대 접어들어 MATLAB에서 다양한 이미지 관련 Toolbox가 나오고, OpenCV라는 걸출한 오픈 소스 영상 처리 알고리즘이 공개되면서 위 내용을 모두 알지 못해도 3D 좌표값을 구할 수 있게 되었다. 하지만 그 근본 원리를 알고 라이브러리를 쓰는 개발자와 뭔지도 모르고, 그 결과값만을 받아 쓰기에 급급한 개발자 사이에는 새로운 문제를 접할 때 개발 속도에 차이가 나기 마련이다. 3D 영상 처리에 관심 있는 독자들은 별도의 책들을 통해 앞에서 소개한 각각의 기술들을 숙지하면 연구에 많은 도움을 받을 수 있을 것이다.</p>
<p>3D 스테레오 비전을 연구하는 사람들이 흔히 사용하는 시스템은 캐나다 Point Grey사의 Bumblebee 스테레오 카메라이다. CCD 센서 두 개를 내장하고 있으며, 320×240 크기의 영상을 동기화 맞춰 1394 Firewire 인터페이스로 출력하는 시스템으로 2000년대 초반에는 이 시스템이 3D 스테레오 영상을 얻는 방법으로 유일했었다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3007.jpg" rel="lightbox[7742]"><img class="wp-image-7750 aligncenter" alt="07scwith3007" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3007-300x98.jpg" width="240" height="78" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3008.jpg" rel="lightbox[7742]"><img class="wp-image-7751 aligncenter" alt="07scwith3008" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3008-300x225.jpg" width="240" height="180" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 6. Point Grey사의 Bumblebee(좌)와 이 카메라에서 출력되는 3D 이미지(우)</td>
</tr>
</tbody>
</table>
<p>그림6에서 2D이미지로 표시할 때 깊이 정보는 밝기값으로 표기가 된다. 위 이미지에서는 밝을수록 가까운 물체에 해당한다.<br />
Bumblebee 시스템의 경우 영상을 PC로 전달하며, 스테레오 비전 알고리즘은 PC에서 동작하기에 다양한 알고리즘을 시도해 볼 수 있어 국내의 많은 연구진들이 이를 구매하여 연구를 진행했었다. 최근에는 Tyzx사에서 Deepsea라는 고속 스테레오 카메라가 출시되었는데 이전의 복잡한 매칭 계산을 상대적으로 간단한 census transform을 사용하여 초당 200 프레임까지 계산이 가능하다. 실제로 census transform은 이전의 방식 보다는 결과가 더 좋지 않지만 빠른 연산으로 우선 매칭을 해결한 다음 post processing으로 계산 결과를 다시 한 번 정리하여 보다 짧은 시간에 이전의 복잡한 방식보다 더 나은 결과를 내고 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3009.jpg" rel="lightbox[7742]"><img class="size-full wp-image-7752 aligncenter" alt="07scwith3009" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3009.jpg" width="208" height="137" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3010.jpg" rel="lightbox[7742]"><img class=" wp-image-7753 aligncenter" alt="07scwith3010" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3010-300x248.jpg" width="210" height="174" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 7. Tyzx사의 Deepsea(좌)와 이 카메라에서 출력되는 3D 이미지(우)</td>
</tr>
</tbody>
</table>
<p>이와 비슷하게 위드로봇에서도 3D 좌표를 계산하는 카메라를 만들어 보유 중이다. CMOS 카메라 두 개를 이용하며 BumbleBee와 동일하게 싱크를 맞춘 영상을 USB 2.0 인터페이스를 통해 PC로 최대 640×480 크기로 전달하며, 3D 계산 알고리즘은 라이브러리로 제공되어 PC 상에서 30fps 속도로 320×240 크기에서 실시간 동작시킬 수 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3011.jpg" rel="lightbox[7742]"><img class="wp-image-7754 aligncenter" alt="07scwith3011" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3011-300x277.jpg" width="180" height="166" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3012.jpg" rel="lightbox[7742]"><img class="wp-image-7755 aligncenter" alt="07scwith3012" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3012-300x224.jpg" width="210" height="157" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 8. myVision-Stereo 프로토타입</td>
</tr>
</tbody>
</table>
<p>그림8은 최대 640×480 컬러 스테레오 이미지를 USB 2.0 HS 인터페이스를 통해 30프레임을 전달하는 장치이다.<br />
위 제품은 외형을 좀 더 손질하여 myVision-Stereo 라는 제품으로 9월 전에 출시할 예정이므로 3D 영상을 연구하는 분들이 외산 장비에 비해 보다 저렴하고 손쉽게 시작할 수 있는 계기를 마련할 것으로 보인다.</p>
<p><strong><span style="color: #008000">게임 분야에서 3D</span></strong><br />
앞서 소개한 스테레오 영상 장치들은 연구용이라 외산 제품의 경우 한 대의 가격이 최소 300만원에서 최대 1천만에 육박하는 고가 시스템이다. 따라서 이러한 제품에서 동작하는 알고리즘을 작성해 봤자 컨슈머 시장으로 진입하기에는 많은 어려움이 있어 시중에서는 3D 정보를 활용하는 장치를 보기가 어려웠었다.<br />
2000년 후반에 들어 3D 모션 인식 분야에서 패러다임 쉬프트가 발생하는데 바로 게임 분야의 적용 및 시장에서의 성공이다. 전통적인 스테레오 영상 처리 기술로는 가격도 비싸고, 성능도 원하는 만큼 나오지 않자 게임 분야에서는 또 다른 방법으로 3D 정보를 얻는 방법을 모색하기 시작했다. 그 첫 번째 신호탄이 닌텐도에서 Wii로 시장에 나타났다. TV 수상기 위에 적외선 LED 바를 올려 놓고, 손에 쥐고 게임을 조정하는 컨트롤로(WiiMote) 내에는 카메라 센서가 들어있어 TV 수상기 위에 위치한 적외선 LED 위치를 추적한다. 추가로 WiiMote 내에는 3축 가속도 센서가 내장되어 있어 WiiMote의 pose를 실시간으로 파악한다. 최근에는 Wii Motion Plus 팩이라고 해서 3축 자이로 센서를 WiiMote에 추가로 부착할 수 있는 장치가 출시되어 보다 정밀한 3차원 공간상에의 위치, 각도를 추정할 수 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3013.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7756" alt="07scwith3013" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3013-300x284.jpg" width="192" height="182" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3014.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7757" alt="07scwith3014" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3014-300x214.jpg" width="240" height="171" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 9. 닌텐도 사의 WiiMote와 Wii Motion Plus</td>
</tr>
</tbody>
</table>
<p>소니의 플레이스테이션의 화려한 그래픽에 수세에 몰려있던 닌텐도는 3D 모션 인식이라는 신기술로 이러한 열세 분위기를 단번에 만회한다. 실제로 2007, 2008년도에는 매장마다 입고가 되자마자 매진되는 분위기였으며, 게임에 있어 가장 중요한 부분은 화려한 그래픽이 아닌 사용자의 몰입감이라는 사실을 다시 한 번 확인하게 된다.<br />
3D 모션 인식이 게임 분야에서 화두로 떠오르면서 소니 사에서도 플레이스테이션 아이라는 장치를 도입하여 추격을 하는데, 이는 닌텐도와 다른 본격적인 영상 처리를 통한 모션 인식에 해당한다. 3차원 공간 상에서 컨트롤러 앞단에 장착되어 있는 구의 색상과 크기를 이용하여 플레이스테이션 아이와 상대적인 위치를 파악하고, 포즈는 MEMS 기반 센서들로 파악한다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3015.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7758" alt="07scwith3015" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3015-291x300.jpg" width="186" height="192" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3016.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7759" alt="07scwith3016" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3016-300x223.jpg" width="240" height="178" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 10. 소니 사의 플레이스테이션 아이(좌)와 무브 컨트롤러(우)</td>
</tr>
</tbody>
</table>
<p>이와 같은 방식은 앞서 소개한 닌텐도 방식에 비해 컨트롤러의 위치를 놓칠 확률이 줄어들고, 동작 범위가 넓어지는 효과가 있으며, 무엇보다 플레이스테이션에 카메라가 장착되는 셈이기에 각종 영상 처리 알고리즘을 응용한 게임이 가능해 진다는 장점이 있다. 이를 이용한 게임 타이틀도 출시 되었는데, eye toy 시리즈와 eye pet이 그것이다. 카메라로부터 입력된 영상을 이용하여 3D 캐릭터를 3차원 공간 상에 실제 존재하는 것처럼 출력하는 즉, 증강 현실 기술을 이용하여 게임을 구현하고 있다. 기존 게임기에 카메라가 붙으니 좀 더 지능적인 장치로 탈바꿈하는 경우이다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3017.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7760" alt="07scwith3017" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3017-300x170.jpg" width="192" height="109" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3018.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7761" alt="07scwith3018" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3018-300x141.jpg" width="216" height="102" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3019.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7762" alt="07scwith3019" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3019-300x168.jpg" width="216" height="121" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 11. EyePet 데모 동영상</td>
<td style="text-align: center" colspan="2">그림 12. MS사의 Kinect 내부 구조와 모션 인식</td>
</tr>
</tbody>
</table>
<p>2000년대 3D 동작 인식 게임기 시장을 닌텐도와 소니가 이끌어왔다면 2010년부터는 MS사의 XBOX 반격이 시작된다. XBOX에서 추가로 부착할 수 있는 Kinect 라는 장비를 선보이는데, 이 제품은 내부에 IR 카메라와 IR 방식의 소형 프로젝터(엄밀히 말하면 IR LED와 렌즈 및 패턴 필름)을 내장한 3D 카메라이다. 흔히 외부에서 보기에 두 개의 카메라가 배치되어 있어 Kinect가 스테레오 기법으로 3D 좌표를 추출하는 것으로 잘못 알고 있는 분들이 많이 있다. Kinect는 기존 3D 영상 처리와 다르게 하나의 카메라로 3D 좌표를 계산해 내는데, 카메라를 하나 사용하는 대신 광원을 이용하여 미리 알고 있는 패턴을 공간에 투사하고, 이 패턴이 어떻게 일그러지는가를 파악하여 거리 정보를 파악하는 방식이다. 이는 이스라엘의 프라임센서사가 가지고 있는 특허로, MS사는 이 특허를 이용하여 Kinect를 제작하였다. 패턴 매칭 및 거리 계산은 ASIC으로 구현하였고, 속도는 놀랍게도 60fps으로 계산이 가능하다. 또한 3D 스테레오 기법에서 해결 못한 고질적인 문제인 “특징점들이 없는 밋밋한 평면”의 거리도 깔끔하게 해결이 된다. 그리고, 오히려 이러한 밋밋한 평면에서 거리 계산이 좀 더 정밀하게 나오기에 게임기가 놓이는 공간인 거실 바닥면을 생각하면 매우 훌륭한 어플리케이션에 접목했다는 것을 알 수 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3020.jpg" rel="lightbox[7742]"><img class="alignnone size-medium wp-image-7763" alt="07scwith3020" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3020-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 13. Kinect에서 투사하는 random dot pattern</td>
</tr>
</tbody>
</table>
<p>그림 13 위 그림처럼 Kinect는 random dot stereogram의 패턴을 쏘고 이 패턴의 일그러짐을 찾아내어 거리를 계산한다.<br />
재미있는 점은 kinect가 시중에서 판매되는 가격이 20만원선인데, 열 배 가격인 연구용 3D 스테레오 시스템보다도 성능이 더 좋다는 사실이다. 이에 kinect를 XBOX가 아닌 일반 PC에서 사용하기 위한 해킹 시도가 있었으며, 실제로 해킹에 성공하여 PC와 리눅스에서 연결에 성공하였다. 이에 올해 4월 MS사는 정식으로 kinect를 지원하는 라이브러리를 공개하였으며, 이를 이용한 여러 PC 응용 프로그램이 출시될 가능성을 열어두었다. Kinect는 많은 가능성을 영상 처리 전공자들에게 열어 두었지만 그 방식의 한계상 실내에서만 사용이 가능하다. 이를 실외에서 응용할 수 있도록 개선한다면 그 활용 범위는 무궁무진하게 넓어질 것으로 예상된다.<br />
이와 같은 게임 분야에서 3D 영상 처리의 성공에 고무된 영상 처리 업체들은 앞다퉈 3D 좌표를 추출할 수 있는 카메라들을 선보이고 있으며, 재미있게도 그림-14의 Zcam은 MS사가 인수 합병하였다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3021.jpg" rel="lightbox[7742]"><img class="alignnone size-thumbnail wp-image-7764" alt="07scwith3021" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3021-150x150.jpg" width="150" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3022.jpg" rel="lightbox[7742]"><img class="alignnone size-thumbnail wp-image-7765" alt="07scwith3022" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3022-150x150.jpg" width="150" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3023.jpg" rel="lightbox[7742]"><img class="alignnone size-thumbnail wp-image-7766" alt="07scwith3023" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3023-150x150.jpg" width="150" height="150" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="3">그림 14. 여려 종류의 3D 카메라들 (좌에서부터 MESA사의 SR4000, PMDTec, ZCam)</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #008000">3D 정보를 얻는 또 다른 방법</span></strong></p>
<p>본고의 주제가 3D 영상 처리이기에 카메라 영상을 통해 3D 정보를 얻는 방법을 소개했지만 현재까지 3D 정보를 추출하는 방식으로는 카메라의 영상을 이용하는 것보다는 레이저를 이용하는 방식이 훨씬 신뢰도가 높다. 대표적인 회사로 SICK 시스템이 있는데, 실내-실외 모두 mm 이하의 정밀도로 거리를 빠르게 계산해 주기에 무인 차량에는 영상 처리용 카메라 이외에 레이저 스캐너 센서를 차량 천장에 주렁주렁 달고 실험을 하고 있다. 이러한 현실은 이런저런 영상 처리 기법으로 3D 정보를 찾아내는 방법이 레이저를 쏘고 물체에 맞아 돌아오는 시간을 측정하는 TOF(Time of Flight) 방식에 비해 아직 정밀도가 떨어진다는 것을 간접적으로 설명해 준다. 이와 같은 상황을 비관적으로 해석하여 ‘영상 처리로는 3D 정보를 얻는데 한계가 있다’라고 단정적으로 결론을 짓고 레이저 센서의 응용으로 분야를 바꾸는 연구자들도 있는 것이 사실이다. 하지만 실제 생태계에서 수많은 동물들이 영상 처리를 통해 3D 정보를 얻고 있으며, TOF 방식으로 공간에 대한 정보를 얻는 동물은 박쥐와 돌고래 정도 뿐이니 아직 우리에게 충분히 빠른 프로세서와 뛰어난 알고리즘이 없음을 탓해야 할 것 같다. 또한 달리 표현하면 아직 영상 처리 쪽에서는 할 일이 많이 남아있다고 해도 과언이 아닐 것이다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3024.jpg" rel="lightbox[7742]"><img class="alignnone size-full wp-image-7767" alt="07scwith3024" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3024.jpg" width="200" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3025.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7768" alt="07scwith3025" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3025-300x280.jpg" width="168" height="157" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 15. SICK사의 레이저 스캐너와 무인 차량 모습</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #008000">카메라 캘리브레이션</span></strong><br />
이제서야 카메라 캘리브레이션을 설명하려고 한다. 통상적인 3D 스테레오 영상 처리 설명이라면 카메라 캘리브레이션부터 설명하지만 저자는 “왜 캘리브레이션이 필요한지, 어떤 분야에서 쓰게 되는 것인지”를 먼저 설명하고 싶었다. 전형적인 캘리브레이션의 수학적인 표현은 아래와 같다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3026.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7769" alt="07scwith3026" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3026-620x349.jpg" width="434" height="244" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 16. 카메라 좌표계와 유클리디안 좌표계</td>
</tr>
</tbody>
</table>
<p>(x,y,z)는 일반적으로 우리가 알고 있는 3차원 공간 상의 좌표계이며, (u,v)는 이미지 상에서 좌표계이다. 이 때 카메라 내부 파라미터를 최대한 간략하게 표기하면 초점 거리 f와 scale factor w로 두 좌표계간의 변환을 쓸 수 있다.</p>
<p>카메라 캘리브레이션이란, 이 미지수들을 찾아내는 과정이며, 이를 찾기 위해 미리 3차원 공간상의 좌표를 알고 있는 특정 패턴을 카메라로 받아들여 계산해 낸다. 위에서 [u,v, w] 좌표와 [x,y,z] 사이의 좌표를 변환하는 행렬을 프로젝션 매트릭스 P라고 부르며, P를 계산하기 위해 3차원 공간의 여러 점 또는 한 점을 공간 상에서 움직여가며 촬영하여 수식을 쌓아(stacking) 최적화 문제로 해결한다. 이 때 P 매트릭스에 여러 가지 기하학적인 특징이 있기에 값을 계산할 때 이러한 기하학적 특징까지 고려하여 계산하면 보다 정밀한 값을 찾을 수 있다. 가장 일반적으로 많이 사용하는 방식은 SVD(Singular Value Decomposition)을 사용하며 좀 더 복잡하게 계산할 때는 전형적인 최적화 방식으로 계산하기도 한다.</p>
<p>캘리브레이션을 수행하기 위해 사용되는 패턴은 크게 2D 체커 보드와 3D 캘리브레이션 박스로 나눌 수 있다. 2D 체커 보드는 상대적으로 제작이 쉽지만 캘리브레이션을 위해 체커 보드를 이리저리 바꿔가며 여러 장의 이미지를 얻어야 한다는 단점이 있다. 반면 캘리브레이션 박스는 한 장의 이미지만으로 카메라 캘리브레이션을 수행할 수 있다는 장점이 있지만 제작이 복잡하다는 단점이 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3027.jpg" rel="lightbox[7742]"><img class="alignnone size-full wp-image-7770" alt="07scwith3027" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3027.jpg" width="263" height="199" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3028.jpg" rel="lightbox[7742]"><img class="alignnone size-medium wp-image-7771" alt="07scwith3028" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3028-300x224.jpg" width="300" height="224" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 17. 카메라 캘리브레이션에 사용되는2D 체커 보드(좌)와 위드로봇에서 제작한 캘리브레이션 박스(우)</td>
</tr>
</tbody>
</table>
<p>위드로봇에서는 영상 처리 전공자들이 손쉽게 사용할 수 있는 캘리브레이션 박스를 제작하여 시판을 앞두고 있으며, PC와 무선으로 데이터를 주고 받을 수 있어 매칭 문제도 손쉽게 해결할 수 있도록 하였다.<br />
3D 좌표값의 정밀도는 카메라 캘리브레이션의 정확도와 연결된다. 위드로봇에서는 1280×1024 해상도의 카메라를 이용하여 전방 3m 앞의 물체가 움직일 때 mm 이하의 해상도로 0.01도의 움직임까지 측정할 수 있는 기술을 확보하고 있다. 이는 전적으로 캘리브레이션 기술에 의존적이기에 영상 처리를 통해 정밀한 계측이 필요하다면 캘리브레이션 기술 확보가 먼저 수행되어야 한다.</p>
<p><strong><span style="color: #008000">마감하며</span></strong><br />
원고를 정리하다 보니 해당 내용을 공개 강좌로 진행한지도 벌써 3개월이 지났다. 공개 강좌 때 여러 내용을 추가 보강하여 유료 강좌로 시작하겠다고 독자들에게 약속을 했었는데, 아직 그 약속이 실행되고 있지 못하고 있다. 다행스러운 점은 위드로봇 연구소에서 다양한 신기술들이 개발되어 올해 하반기에는 여러 종류의 영상 처리 시스템이 선 보일 것으로 예상된다. 하루 빨리 제품 개발을 마무리하고, 새로운 내용을 보강하여 강의 프로그램을 만들 것을 다시 한 번 약속 드린다. 다음 번 원고는 마지막 원고로 임베디드 비전 시스템에 대한 설명이 이어지며, 위드로봇의 여러 기술이 소개될 것이다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<span style="font-size: 13px;line-height: 19px">※이미지 출처</span><br />
그림6 PointGrey Inc. 홈페이지<br />
그림7 PointGrey Inc. 홈페이지<br />
그림9 Nintendo Inc.<br />
그림10 Sony Inc.<br />
그림11 YouTube<br />
그림12 www.ros.org, PrimeSense사<br />
그림13 www.ros.org<br />
그림14 산기평 비전 SoC 기획 보고서<br />
그림15 SICK Inc, DARPA<br />
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/7742/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[6호] 위드로봇 무료강좌 기술자료 &#8211; 2차</title>
		<link>http://www.ntrexgo.com/archives/7697</link>
		<comments>http://www.ntrexgo.com/archives/7697#comments</comments>
		<pubDate>Fri, 25 Mar 2011 06:38:51 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[6호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[기술]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[스페셜]]></category>
		<category><![CDATA[위드로봇]]></category>
		<category><![CDATA[자료]]></category>
		<category><![CDATA[컬럼]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=7697</guid>
		<description><![CDATA[디바이스마트매거진 6호 &#124; 전형적인 영상처리 시스템은 영상을 취득하는 카메라, 취득된 영상 신호를 원거리로 전송할 수 있게 변경하는 인코더, 그리고 이를 다시 복원하는 디코더, 마지막으로 영상을 출력 또는 처리하는 PC 또는 임베디드 시스템으로 구성할 수 있다. ]]></description>
				<content:encoded><![CDATA[<h3><span style="color: #333333"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH011.jpg" rel="lightbox[7697]"><img class=" wp-image-7711 alignleft" alt="06SCWITH011" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH011-300x204.jpg" width="210" height="143" /></a>2차 릴레이 무료강좌 기술자료</span></h3>
<h2><strong><span style="color: #008000">영상 처리 시스템 소개</span></strong></h2>
<p>&nbsp;</p>
<p style="text-align: left">글 | 위드로봇(주) 김도윤대표</p>
<p>&nbsp;</p>
<p><span style="font-size: 13px;line-height: 19px">위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 2차 교육이 2010년 12월 11일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다. 영상 처리 시스템에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다. </span></p>
<p><strong><span style="color: #008000">센서 관점에서 영상 처리</span></strong></p>
<p>자동화 시스템을 구성할 때 대상 시스템의 상태를 정확하게 파악하기 위해 다양한 센서들이 사용된다. 예를 들어 모터의 속도를 정확하게 유지하는데 관심이 있다면 타코메타(Tachometer) 또는 엔코더(Encoder)를 센서로 사용하게 될 것이고, 어떤 물체가 특정 위치를 지나갔는지 아닌지를 판단하기 위해서는 접촉식 스위치 또는 적외선 LED 방식의 비접촉 검출 센서를 사용하게 될 것이다. 자동화 시스템에서 사용되는 센서는 무수히 예를 들 수 있겠지만 이러한 많은 센서들 중에서 가장 많은 정보를 포함하고 있는 센서로는 영상(Image)을 취득할 수 있는 이미지 센서를 꼽는데 전문가들은 주저하지 않는다.</p>
<p>영상은 3차원 공간 상에 존재하는 물체들이 광원의 빛 입자를 반사하는 파장대(색깔)를 2차원 공간에 투영한 것으로 데이터 안에 공간에 대한 기하학적인 정보(크기, 모양, 두께, 각도, 형태, 존재 유무)뿐만 아니라 색상 정보에 의한 추가 정보(대상 물체간의 그룹핑, 표면의 결함, 각 물체의 인식, 사람일 경우 얼굴 인식, 성별 인식, 나이 추정 등)까지 알 수 있어 그 활용도는 무궁무진하다. 정보가 많다는 것은 그 데이터의 크기가 크다라는 말과 직결되고, 영상 데이터의 크기 문제 때문에 이전 기술로는 실시간 처리가 어려워 산업체에서는 활발히 사용하기가 어려웠다. 하지만 빠르게 발전하는 전자공학과 IT 기술에 힘입어 이제 주변에서 손쉽게 영상 데이터를 취득할 수 있으며, 데이터의 가공, 조작이 쉬워졌다. 따라서 조만간 우리 주변에 많은 부분에서 이러한 영상 센서를 사용한 제품군들을 접하게 될 것으로 예상되며, 이런 기술을 가진 기술자, 전문가들 또한 많이 필요할 것으로 예상되어, 디바이스마트 매거진 독자들에게 해당 기술을 소개할 목적으로 본 원고는 작성되었다.</p>
<p><strong style="font-size: 13px;line-height: 19px"><span style="color: #008000">영상처리 시스템의 구성</span></strong></p>
<p>전형적인 영상처리 시스템은 영상을 취득하는 카메라, 취득된 영상 신호를 원거리로 전송할 수 있게 변경하는 인코더, 그리고 이를 다시 복원하는 디코더, 마지막으로 영상을 출력 또는 처리하는 PC 또는 임베디드 시스템으로 구성할 수 있다. 이 중 영상처리 분야에서는 디코더 대신 해당 기능을 강조한 이미지 그래버(Image Grabber) 또는 프레임 그래버(Frame Grabber)라는 표현을 더 많이 사용한다. 현재 시장에 나와있는 대부분의 카메라는 인코더를 카메라에 내장한 형태로 나오기에 다시 정리해 보면 카메라-이미지 그래버-PC 형태로 정리할 수 있고 아래 그림과 같다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH012.jpg" rel="lightbox[7697]"><img class="wp-image-7715 aligncenter" alt="06SCWITH012" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH012-620x255.jpg" width="558" height="230" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 1. 영상 처리 시스템의 구성</td>
</tr>
</tbody>
</table>
<p>위드로봇에 많이 문의하는 내용 중에 하나가 “2~3만원하는 USB 웹캠으로 영상을 받아 PC에서 처리하는 형태로 시스템을 구성하면 안되나요?”이다. 결론부터 말하면 “문제없다”이다. 예전에는 웹캠의 영상을 사용자가 작성할 프로그램 영역으로 가져오기 위해 MS Windows OS를 사용하는 경우에는 Direct Show 기술을 미리 알고 있어야 했지만, <span style="font-size: 13px;line-height: 19px">최근에는 OpenCV(http://sourceforge.net/projects/opencvlibrary/)와 같은 공개 비전 라이브러리를 이용하면 매우 손쉽게 웹캠 영상을 바로 취득할 수 있으며, 여러 영상 처리 알고리즘을 라이브러리 레벨에서 바로 이용할 수 있다. 하지만 복수 개의 영상을 얻어야 한다든지, 렌즈 화각을 변경해야 한다든지, 노출 시간을 조절해야 하는 부분은 USB 웹캠으로는 해결하기 어려운 부분이다. 따라서 영상 처리 분야에 입문하는 분들이라면 USB 웹캠과 OpenCV로 학습을 하다가 일정 단계 지식이 쌓이면 카메라와 이미지 그래버를 구매하여 본격적인 연구를 진행할 수 있는 시스템을 구축하는 것도 좋은 방법이다.</span></p>
<p><strong><span style="color: #008000">영상 처리에서 가장 중요한 광원</span></strong></p>
<p>위에서 전형적인 영상 처리 시스템은 카메라-그래버-PC 세 가지 조합으로 구성된다고 설명했다. 하지만, 이 세 가지 전체를 합친 것보다 중요한 것은 광원이다. 영상을 얻으려면 물체 자체가 발광하지 않는 한 외부에 어떠한 광원이 있어야 하는데, 영상은 광원의 종류, 개수, 위치에 따라 큰 차이가 발생하게 된다.</p>
<p>예를 들어, 참치캔을 제조하는 회사에서 참치캔 윗면에 주름이 제대로 있는지 없는지 확인하는 검사 장비를 의뢰했다고 가정해 보자. 전형적인 환경에서 카메라로 참치캔 윗면을 촬영한다면 아래 그림 2처럼 나올 것이다. 이 영상에서 참치캔 주름을 잘 찾아내는 일은 영상 처리 분야에 지식을 많이 가진 고수들도 꽤나 난감한 일이다. 주름 부분이 도드라진 부분도 있지만, 그림자로 인해 반대로 어두운 부분이 섞여 있으며, 참치캔 표면에 인쇄되어 있는 글씨들도 영상 처리에 많은 영향을 미친다. 이 사진 하나로 참치캔 주름의 유무를 찾아야 한다면 꽤나 복잡한 영상 처리 알고리즘을 동원해야 하고, 그런다손 치더라도 다양한 참치캔에 일일이 적용해 보기 전에는 그 결과를 장담할 수 없는 시스템이 만들어진다. 하지만 광원을 바꿔 촬영할 수 있다면 이는 매우 손쉬운 문제로 바꿀 수 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH001.jpg" rel="lightbox[7697]"><img class="wp-image-7706 aligncenter" alt="06SCWITH001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH001-300x234.jpg" width="168" height="131" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH004.jpg" rel="lightbox[7697]"><img class="alignnone  wp-image-7709" alt="06SCWITH004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH004-150x150.jpg" width="135" height="135" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH002.jpg" rel="lightbox[7697]"><img class="alignnone size-thumbnail wp-image-7707" alt="06SCWITH002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH002-150x150.jpg" width="150" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH003.jpg" rel="lightbox[7697]"><img class="alignnone size-thumbnail wp-image-7708" alt="06SCWITH003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH003-150x150.jpg" width="150" height="150" /></a></td>
</tr>
<tr>
<td>그림 2. 전형적인 참치캔의 윗면을 일반 광원에서 촬영한 영상</td>
<td colspan="3">그림 3. 좌측 그림처럼 돔형 광원을 배치하고 거리를 달리하여 영상을 촬영하면 중앙과 우측의 영상을 얻을 수 있다.</td>
</tr>
</tbody>
</table>
<p>위 그림3과 같이 돔형으로 생긴 광원을 이용하여 참치캔 적정 거리에서 영상을 하나 얻고, 광원을 참치캔에 좀 더 접근하여 또 다른 영상을 얻으면 중앙과 우측과 같은 영상을 얻을 수 있다.<br />
두 영상을 비교해 보면 하나의 영상은 참치캔 주름이 그림자로 짙은 색으로 표현되어 있고, 다른 한쪽은 주름의 그림자가 사라진 것을 볼 수 있다. 두 영상의 차이를 추출하면 간단히 참치캔의 주름 부분을 파악할 수 있어 매우 손쉬운 문제로 바뀐다.</p>
<p>위 예에서 볼 수 있듯이 지능적이고, 고도로 복잡한 영상 처리 알고리즘보다 잘 선택한 광원으로 얻은 영상과 간단한 영상 처리 알고리즘의 조합이 훨씬 더 좋은 결과를 내는 경우가 많다. 가장 좋은 디자인은, 더 이상 뺄 것이 없는 디자인이라는 말이 있듯이 가장 좋은 시스템은 복잡한 것이 아니라, 간단하고 명료하면서 정확하게 동작하는 시스템이다. 아쉬운 점은 이러한 광원에 대한 연구는 학계에서 보다는 산업체 현장에서 더 강조되고 있기에 체계적인 매뉴얼에 의해 광원 선정 및 배치가 이뤄지기 보다는 현장에서 경험한 시행착오에 의해 결정되고 있다. 보다 많은 영상 처리 전공자들이 이러한 광원에 대한 여러 경험치를 공유하고 정리된다면 영상 처리 분야의 발전을 보다 당길 수 있을 것으로 기대된다.</p>
<p><strong><span style="color: #008000">너무나 넓은 영상 처리 분야</span></strong></p>
<p>이러한 영상 처리 분야를 본격적으로 학습하려면 어디서부터 무엇을 하는 것이 좋을까? 앞에서 언급했듯이 영상 데이터 자체에 워낙 많은 정보가 들어있어 영상 처리의 목적에 따라 각각의 관심 분야가 달라지기에, 내가 최종적으로 무엇을 원하는가를 명확하게 알고 있어야 한다. 영상 처리에 관하여 권위 있는 AIA(Automated Imaging Association)에서는 다음과 같이 영상 처리 분야를 Machine Vision, Image Processing, Computer Vision으로 세 분류로 나눠났다. 각각의 특징은 여러 가지로 설명할 수 있겠지만 Image Processing과 Computer Vision 분야는 아무래도 그 차이점을 구분하기가 모호한 것이 사실이다. 따라서 위드로봇에서는 Computer Vision 분야 대신 Computer Graphics로 표현을 변경하고 그림 4의 좌측 표로 세 분류간의 차이를 설명하곤 한다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH006.jpg" rel="lightbox[7697]"><img class="wp-image-7701 aligncenter" alt="06SCWITH006" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH006.jpg" width="216" height="216" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH005.jpg" rel="lightbox[7697]"><img class="wp-image-7710 aligncenter" alt="06SCWITH005" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH005-300x192.jpg" width="270" height="173" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 4. 좌측-AIA 에서 제안한 영상 처리 분야, 우측-위드로봇 관점의 영상 처리 분야 grouping</td>
</tr>
</tbody>
</table>
<p>위 표를 보면서, 각 분야의 차이점을 따져보자. 입력으로 영상을 넣고 출력을 영상으로 얻는 것에 관심이 있는 경우는 Image Processing 분야가 된다. 만일 여러분이 포토샵과 같은 툴을 이용해 작업하는 분야에 관심이 있다면 이는 Image Processing 분야가 된다. 입력은 영상이 아닌데 출력이 영상으로 나오는 경우는 Computer Graphics 분야가 된다. 각종 3차원 기하학적인 정보와 광원의 속성들을 입력하여, 가상의 이미지를 얻어내는 분야가 Computer Graphics 분야이다. 세 번째로 영상을 입력하여 영상이 아닌 다른 데이터를 얻어내는 것에 관심을 가지는 분야가 Machine Vision 분야이다. 예를 들면 각종 영상 기반 검사 장치에서 제품에 하자는 없는지, 인쇄는 제대로 되었는지 등을 영상을 통해 파악하는 경우는 Machine Vision 분야에 속하게 되는 것이다. 마지막으로 영상이 아닌 것을 넣어 영상이 아닌 정보를 얻는 것은 당연히 영상 처리 분야에 속하지 않으므로 이 자리에서 언급할 필요는 없어 보인다.</p>
<p>위에서 소개한 세 분류는 각각의 목적에 따라 알아야 할 지식, 관심을 가지는 방법론들이 서로 다르다. Image Processing을 전공하는 사람들은 주로 2D Signal Processing에 관심이 많다. 2D Matrix로 표현되는 선형 필터를 설계하거나, 압축을 위해 Mpeg을 연구하는 분들이 이 부류에 속한다. 반면에 Machine Vision의 경우는 카메라 내부, 외부의 기하학적인 정보(Intrinsic, Extrinsic Parameter)를 정확하게 얻어내기 위한 카메라 캘리브레이션(Camera Calibration)이 가장 기초가 되며 한 장의 영상으로 원하는 정보를 얻지 못하는 경우 여러 장의 이미지에서 원하는 데이터를 추출하는 Multi-view Geometry에 관심을 가진다. 자신이 현재 해결하고자 하는 영상 처리 문제가 어디에 속하는 문제인지 파악하는데 어려움을 겪고 있는 독자가 있었다면, 위 표로 조금이나마 도움이 되길 바란다.</p>
<p><strong><span style="color: #008000">색의 수학적 표현</span></strong></p>
<p>우리는 초등학교 시절부터 색은 3원색으로 구성되며 Red, Green, Blue (RGB)라고 배워왔다. 정말 색은 R + G + B의 조합으로 구성될까? 특정 색이 RGB로 표현된다는 뜻은 수학적으로 보면 3가지 색상이 각각의 좌표축을 이뤄 공간을 형성하며, 이 공간이 벡터 스페이스가 되어야 한다. 하지만 RGB 는 단지 인간의 편의에 의해 만들어진 공간이기에 RGB 공간 상에서는 일반 대수 연산이 아무런 의미를 가지지 못한다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH008.jpg" rel="lightbox[7697]"><img class="alignnone  wp-image-7703" alt="06SCWITH008" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH008-300x281.jpg" width="240" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH007.jpg" rel="lightbox[7697]"><img class="alignnone size-medium wp-image-7702" alt="06SCWITH007" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH007-300x148.jpg" width="300" height="148" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 5. RGB 공간에서 색의 표현</td>
</tr>
</tbody>
</table>
<p>설명이 복잡하니 좀 더 쉽게 설명해 보자. 어떤 물체의 색상이 잘 칠해졌는지 잘못 칠해 졌는지 판단하는 영상 처리 시스템을 만든다고 가정해 보자. 카메라로 물체를 촬영하여 색상 정보를 추출한 뒤 내가 원래 가지고 있는 색상과 얼마나 차이가 나는지를 어떻게 프로그램 할 것인가?</p>
<p>RGB 공간에서 프로그램 한다면 원래 알고 있는 색상의 각각 R, G, B 값과 측정한 물체의 R, G, B 값을 빼서 그 차이가 크면 원본과 차이가 많이 난다고 할 수 있을 것이다. 그런데 R 값의 차이와 G 값의 차이는 1:1 같은 의미를 가지는가? 어떤 샘플은 G와 B는 일치하는데 R 값은 차이가 Alpha 만큼 났고 또 다른 샘플은 R과 G는 일치하는데 B 값은 Alpha 만큼 났다. 그러면 이 두 샘플은 원본과 비슷한 정도로 차이가 나는 걸까? 아쉽게도 RGB 공간은 벡터 스페이스가 아니기에 이러한 뺄셈은 서로 비교가 불가하다(정확한 표현은 벡터 스페이스가 아니면 뺄셈이라는 연산이 정의가 되지 않는다). 원리가 이러한데 아무런 사전 지식 없이 색상의 차이를 RGB 공간에서 비교하겠다고 프로그래밍을 작성한다면 아무리 복잡한 알고리즘을 들이민들 해결책을 찾기란 꽤나 어려울 것이다.</p>
<p>다행히 벡터 스페이스 정의를 만족하는 CIE 색공간이 정의되어 있으며, RGB 공간을 조금은 복잡하지만 CIE 색공간으로 바꿀 수 있다. CIE 공간에서는 위에서 설명한 색상 차이를 정확하게 계산해 낼 수 있다. CIE 공간으로 바꾸는 수식이 꽤나 복잡하여 연산량이 많기에 산업체 현장에서는 CIE 공간 효과를 볼 수 있는 YUV나 YIQ 색공간에서 위와 같은 작업을 대신하기도 하지만 엄밀한 의미에서 이 공간들도 벡터 스페이스 정의를 만족시키지는 못한다.</p>
<p><strong><span style="color: #008000">영상 전송 방식</span></strong></p>
<p>앞의 글에서 영상 신호를 원거리로 전송하기 위해 특정 신호 규약으로 인코딩을 한다고 밝혔다. 일반적인 CCTV 카메라들은 국내에서는 NTSC 신호 규약으로 아날로그 방식으로 전송하고 있으며, 웹캡에 사용되는 CMOS 센서들은 ITU BT.601 또는 BT.656으로 전송한다. 영상 처리를 하려면 이러한 신호를 다시 풀어 접근이 가능한 메모리 영역에 영상을 집어 넣어야 하기 때문에 이러한 전송 방식에 따른 특장, 장단점을 잘 알고 있어야 한다.</p>
<p>아날로그 전송 방식은 국내의 경우는 거의 예외 없이 NTSC 방식을 따르므로 NTSC 신호를 디코딩 할 수 있는 장치, 즉 이미지 그래버가 필요하다. 이러한 이미지 그래버는 PC에 연결하는 방식에 따라 다시 PCI(또는 PCI Express) 방식과 USB 방식으로 나뉜다. CPU 점유율, 전송 지연 시간, 영상의 품질 등에서는 아무래도 PCI 방식이 USB 방식에 비해 낫다. 하지만 PCI 방식일 경우 부피가 큰 데스크톱 PC에만 설치가 가능하므로, 이동이 잦고 노트북이나 PCI 슬롯이 없는 환경에서는 USB 타입의 이미지 그래버가 필요하게 된다. 이러한 이미지 그래버를 사용하면 NTSC 신호로 전달되는 영상 신호를 사용자가 접근할 수 있는 영역까지 전달하는 라이브러리를 제공하므로 손쉽게 프로그래밍 할 수 있다.</p>
<p>CMOS 센서의 경우 BT.601/656 데이터 신호를 PC에서 직접 받을 수 있는 장치는 없다. 따라서 이 신호를 기존 PC가 가지고 있는 USB나 기타 인터페이스에 맞게 변형하여 전달해야 하는데, 아직 시장이 형성되지 않은 관계로 상용품은 찾기 어려우며, 주로 개발 용역 과제 형태로 진행된다. 특정 CMOS 센서를 이용해서 시스템을 구축해야 하는 경우라면 외주 용역 형태로 개발 또는 자체 개발을 해야 할 것이며, 센서 모델이 딱히 정해지지 않은 경우라면 일반 웹캠을 이용하는 것도 한 가지 방법이다.</p>
<p><span style="color: #008000"><strong>임베디드 비전 시스템</strong></span></p>
<p>1990년대까지만 해도 영상 처리는 고가의 PC에서도 실시간으로 처리하기 어려울 만큼 연산량이 많은 분야였다. 하지만 눈부시게 발전하는 반도체 기술로 인해 이제는 손바닥에 올라갈 만큼의 조그마한 임베디드 마이크로프로세서 보드들이 2000년대 중반에 나온 PC의 성능만큼을 가지게 되어 매우 복잡한 알고리즘이 아니면 이러한 임베디드 보드에서도 실시간 처리가 가능하게 되었다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH009.jpg" rel="lightbox[7697]"><img class="alignnone size-medium wp-image-7704" alt="06SCWITH009" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH009-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH010.jpg" rel="lightbox[7697]"><img class="alignnone size-medium wp-image-7705" alt="06SCWITH010" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH010-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 6. 2011년 하반기 출시 예정인 Smart-I 플랫폼</td>
</tr>
</tbody>
</table>
<p>위드로봇에서는 이러한 시대의 흐름에 맞춰 Smart-I 라는 임베디드 비전 플랫폼을 만들어 출시할 계획이다. 실수 연산이 가능한 ARM11 프로세서와 CMOS 1.3M 화소의 카메라를 내장하고, PC와는 USB로 연결이 된다. 이 보드에는 OpenCV가 이식되어 있으며, PC쪽으로 영상을 USB를 통해 전송하여 PC에서 처리 결과를 바로 확인할 수 있다. 또한 PC쪽에서 작성한 알고리즘이 별다른 변경 없이 바로 Smart-I 플랫폼에서 동작할 수 있도록 환경을 구축하여 보다 편리하게 영상 처리 개발자들이 임베디드 비전 시스템을 사용할 수 있을 것이라 기대하고 있다. Smart-I 플랫폼은 2008년도에 그 원형이 개발 완료되었지만, 이러한 편리한 기능을 갖추기 위해 시간이 많이 소요되었으며, 2011년 올해 드디어 공개할 수 있을 것으로 보인다.</p>
<p><span style="color: #008000"><strong>인간의 시각 시스템과 비교</strong></span></p>
<p>마지막으로 영상 시스템은 인간의 시각 시스템과 그 구조, 구성이 매우 유사하기에 인간의 시각 시스템과 자주 비교되곤 한다. 카메라의 해상도, 즉 화소는 인간의 망막에 있는 시세포와 동일한 기능을 한다. 디지털 카메라의 성능을 비교할 때 몇 만 화소인가를 이야기하는데, 최근 시장에서 많이 판매되는 디지털 카메라의 경우는 약 천 만화소급이 많이 보인다. 그렇다면 인간의 시세포는 몇 만 화소쯤 될까? 재미있게도 1:1 비교가 조금은 힘들다. 디지털 카메라의 화소는 영상을 얻는 전체 영역에 같은 분포로 배치가 되어 있지만 인간의 경우는 그렇지 않기 때문이다. <span style="font-size: 13px;line-height: 19px">그 이유는,</span></p>
<p style="padding-left: 60px">1. 인간의 망막에는 흑백 명암만을 구별하는 간상체(Rod)와 색상을 인식하는 추상체(Cone)로 나눠져 있다.<br />
2. 추상체와 간상체의 배치가 디지털 카메라의 화소처럼 바둑판 모양으로 균일하게 배치되어 있지 않고, 망막 중심에 집중적으로 배치되어 있다.<br />
3. 일반 카메라는 렌즈와 센서가 하나지만, 인간은 두 개다.</p>
<p><span style="font-size: 13px;line-height: 19px">1번을 상세히 설명해 보면 인간의 눈에는 흑백 센서와 컬러 센서가 따로 존재한다는 뜻이 된다. 하나의 눈에 300만개 이상의 추상체가 있는 것으로 알려져 있다. 생각보다 적은 수치인데 반면 흑백 명암을 구별하는 간상체는 약 1억개 이상으로 추정된다.</span></p>
<p><span style="font-size: 13px;line-height: 19px">2번의 내용은 컬러를 인식하는 추상체의 경우 눈을 움직여 어느 한 곳을 응시할 때, 상이 맺히는 망막에 집중적으로 분포하고 그 외 지역에는 듬성듬성 배치되어 있다. 이러한 이유로 우리는 무엇인가 집중적으로 보려고 할 때, 고개와 눈동자를 돌려 관심있는 물체를 응시하는 습관이 나오게 되는 것이다.</span></p>
<p>3번 내용은 매우 복잡하다. 아직까지도 인간이 3차원 공간을 어떻게 인지하는지 전문가들 사이에서도 의견이 분분하다. 확실한 것은 하나의 2차원 이미지로는 3차원 공간에 대한 정보를 얻을 수 없기에 눈 두 개를 이용하여 사라진 3차원 공간에 대한 정보를 복원하는 것인데, 단순히 이러한 스테레오 매칭만으로는 인간의 뛰어난 인지 능력을 설명하기에는 부족하다. 최근 뇌공학자들의 집중적인 연구에 의해 밝혀진 부분은 단순히 영상이 뇌로 전달되는 경로(feed-forward path)만 있는 것이 아니라, 뇌에서 다시 되먹임 경로(feedback path)를 통해 상위 레벨의 정보가 하위단으로 내려오는 부분이 있다는 점이다. 이는 단순히 두 개의 눈으로 들어온 정보만으로 3차원 공간을 인지하는 것이 아니라, 기존 학습에 의해 인지하고 있는 정보를 추가로 이용하여 공간을 인지한다는 가설을 뒷받침하는 강력한 증거이기도 하다. 스테레오 비전 시스템은 이 주제만으로 한참 설명을 해야 하므로 다음 번 디바이스마트 매거진을 통해 소개하기로 한다.</p>
<p><strong><span style="color: #008000">마감하며</span></strong></p>
<p>영상 처리 기술을 소개한다며 정작 영상 처리 알고리즘에 대한 이야기는 한 마디도 언급이 안되었다. 이는 디바이스마트 매거진 독자층을 고려한 것인데, 현재 영상 처리 분야에서 활동하시는 분이라면 최근 이슈가 되고 있는 알고리즘의 동향(예를 들면 SIFT, SURF 등등의 특징점 추출 알고리즘)의 소개를 기대했을지 모르겠다. 하지만 위드로봇에서 공개강좌를 했을 때 접한 대다수 분들은 영상 처리에 대해 관심을 가지고 막 시작하려는 분들이 대부분이었기에, 우선 본격적인 알고리즘이나 이론을 소개하기에 앞서 영상 처리 분야가 이런 것이고 이런 부분이 중요하다는 점을 강조하고 싶었다. 다음 번 원고(스테레오 영상 및 3D Vision 기술)도 현재 작성 중인데 이 때 알고리즘과 이론들을 설명하는 것으로 이번 호를 마친다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/7697/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[5호]위드로봇 무료강좌 기술자료 -1차</title>
		<link>http://www.ntrexgo.com/archives/7658</link>
		<comments>http://www.ntrexgo.com/archives/7658#comments</comments>
		<pubDate>Mon, 17 Jan 2011 05:22:38 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[5호]]></category>
		<category><![CDATA[mems]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[관성]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[위드로봇]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=7658</guid>
		<description><![CDATA[디바이스마트 매거진 5호 &#124; MEMS 관성 센서 원리 및 활용법에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다. 2차, 3차, 4차로 진행된 강의 내용들도 순서대로 소개될 예정이니, 기대하셔도 좋을 듯 싶습니다.]]></description>
				<content:encoded><![CDATA[<h3> <a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1013.jpg" rel="lightbox[7658]"><img class="wp-image-7689 alignleft" alt="05SCWITH1013" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1013-620x424.jpg" width="245" height="167" /></a><span style="color: #003300">1차 릴레이 무료강좌 기술자료</span></h3>
<h2><strong><span style="color: #333333">MEMS 관성 </span></strong></h2>
<h2><strong><span style="color: #333333">센서 원리 및 활용법</span></strong></h2>
<p><span style="color: #666699"><strong>부제 | 3축 가속도, 자이로 센서 응용</strong></span></p>
<p style="text-align: left"><span style="color: #333333">글 | 위드로봇(주) 김도윤대표</span></p>
<p style="text-align: left">
<p><span style="font-size: 13px;line-height: 19px">위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 1차 교육이 2010년 11월 27일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다.  MEMS 관성 센서 원리 및 활용법에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다. 2차, 3차, 4차로 진행된 강의 내용들도 순서대로 소개될 예정이니, 기대하셔도 좋을 듯 싶습니다.</span></p>
<p>디바이스마트 홈페이지에는 여러 종류의 센서들이 판매되고 있는데 가속도, 자이로 센서의 설명을 보면“MEMS 가속도 센서를 이용한 3축 가속도 센서 입니다”“MEMS 자이로 센서를 응용한 제품 입니다”라는 문구를 접할 수 있다.<br />
MEMS 기술이 어떤 것인지, 어떤 장점을 가지고 있으며, 어떤 단점을 가지고 있는지 알고 있다면 이러한 센서를 보다 유의 적절하게 사용할 수 있을 것이다.</p>
<p><span style="color: #ff6600"><strong>MEMS란?</strong></span></p>
<p>MEMS는 Micro Electro Mechanical Systems의 머릿글자를 딴 약어이다. 단어를 그대로 풀어보면 소형 반도체 공법을 이용하여 기계 시스템을 만드는 것을 뜻한다.<br />
전형적인 산업용 공작 기계를 이용하면 아무리 작게 가공하여도 수 mm 이하의 부품을 만들어 내는 것은 힘들다. 하지만 반도체 웨이퍼 상에서 반도체를 제조하는 식각 공정을 이용하면 그 가공법에 한계는 있지만 수 um 수준의 부품을 만들어 낼 수 있다.<br />
이러한 MEMS 공법은 반도체 제조 공정과 동일하기에 한 번에 여러 부품을 만들어 낼 수 있으며, 품질 또한 균일하게 만들며, 크기가 작아지기에 값싸고 여러 분야에 응용할 수 있다는 장점이 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1011.jpg" rel="lightbox[7658]"><img class="alignnone size-medium wp-image-7673" alt="05SCWITH1011" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1011-300x119.jpg" width="300" height="119" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1010.jpg" rel="lightbox[7658]"><img class="alignnone size-medium wp-image-7672" alt="05SCWITH1010" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1010-300x166.jpg" width="300" height="166" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림1. 산업용 공작기계 공정과 MEMS 공정 비교</td>
<td style="text-align: center">그림2. MEMS 기술의 시대별 주요 시장</td>
</tr>
</tbody>
</table>
<p>이와 같은 장점에 80년대 후반부터 많은 연구가 진행이 되어 왔고, 90년대에 들어와 차량용 에어백 장착이 의무화되면서 MEMS 가속도 센서 시장의 확대로 1차 중흥기를 맞이한다. 이후 2000년대에 들어와 게임기, 휴대폰에 이러한 가속도 센서가 인터페이스 도구로 활용되기 시작하면서 2차 중흥기 및 본격적인 양산 시대에 돌입한다.<br />
특히 2010년 하반기에 들어서 가속도 센서에 비해 상대적으로 수 배에서 수 십배까지 비쌌던 MEMS 자이로 센서가 iPhone4를 위시하여 WiiMote Plus, 각종 테블릿 PC에 기본 장착되기 시작하며 MEMS 가속도, 자이로 센서는 수$ 대의 저렴한 가격대로 시장에 선보이고 있다. MEMS 시장을 예측하는 사람들은 2010년 이후에는 MEMS 기술이 의료(Lab on a chip), 군사 쪽에 활발히 적용되어 3세대를 열어갈 것이라 예상하고 있다.</p>
<p><span style="color: #ff6600"><strong>DLP 프로젝트</strong></span></p>
<p>MEMS 기술을 손쉽게 만날 수 있는 곳은 프로젝터이다. 90년대만해도 LCD 프로젝터가 주종을 이뤘으나, 2000년대 들어와 TI사에서 DLP(Digital Lighting Processing) 기술을 양산에 성공하면서 저렴한 DLP 프로젝터가 시장의 주종을 이루고 있다. 이 DLP 내부에 DMD(Digital Micro mirror Device) 부분이 바로 MEMS 기술을 이용한 부분이다. 반도체 공법으로 초소형 거울을 만들고 이 거울이 미세하게 움직일 수 있도록 하여 광원에서 나온 빛을 컬러 휠을 통과 시킨 후 거울에 반사시켜 하나의 이미지를 만드는 방식으로 값비싼 LCD를 대치하고 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1009.jpg" rel="lightbox[7658]"><img class="wp-image-7671 aligncenter" alt="05SCWITH1009" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1009-620x442.jpg" width="434" height="309" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림3. DLP 내부 구조</td>
</tr>
</tbody>
</table>
<p><span style="color: #ff6600"><strong>가속도 센서</strong></span></p>
<p>MEMS 기술을 소개하는데 가속도 센서를 빼놓을 수 없다. MEMS 기술을 이용한 제품 중에서 MEMS 가속도 센서만큼 성공한 제품이 아직까지 없기 때문이다. MEMS 가속도 센서의 동작 원리는 여러 가지 방법으로 설명할 수 있겠지만 보다 손쉽게 설명하는 방법은 버스 내부에 손잡이와 기둥을 생각하면 손쉽게 이해할 수 있다.<br />
자, 우리가 버스 안에 타고 있다고 생각해 보자. 버스가 정차하고 있는 동안 손잡이는 가운데 늘어져 있을 것이다. 이 때 운전사가 가속 패달을 밟으면 자동차를 속도을 올리기 시작하며 출발할 것이고, 가속되는 순간 손잡이는 뒤쪽으로 밀릴 것이다. 어느 정도 속도를 내어 정속으로 달리기 시작하면 다시 손잡이는 가운데로 돌아올 것이고, 브레이크를 밟아 감속하기 시작하면 손잡이는 앞으로 움직인다.<br />
자, 이 때 버스 안쪽의 기둥의 거동은 어떠한가?<br />
기둥은 버스와 단단히 한 몸체를 이루고 있어 이러한 관성력과 상관없이 단단히 제자리에 서있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1008.jpg" rel="lightbox[7658]"><img class="alignnone size-large wp-image-7670" alt="05SCWITH1008" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1008-620x237.jpg" width="620" height="237" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림4. 버스 손잡이의 거동이 MEMS 센서 동작 원리와 같다.</td>
</tr>
</tbody>
</table>
<p>MEMS 기술로 만든 가속도 센서 내부도 버스의 기둥과 손잡이의 구조로 구성되어 있다. 아래 그림 5가 MEMS 가속도 센서 내부의 현미경 사진이다. 마치 빗처럼 생긴 부분을 확인할 수 있을 것이다. 이 빗처럼 생긴 부분이 바로, 센서 몸체에 단단히 붙어 있는 버스 기둥에 해당하는 부분과 버스 손잡이처럼 센서가 움직이면 자유롭게 같이 움직이는 추의 역할을 하는 부분이 중복되어 배치되어 있는 것이다. MEMS 센서는 이 양쪽에 전기를 가하여, 기둥과 손잡이의 간격이 줄어들었는지, 늘어났는지를 전기적 신호로 바꿔 외부로 출력하고 있는 것이다. 이 간극의 변화가 센서 움직임의 가속, 감속에 해당하는 것이기에 가속도 센서라 부른다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1007.jpg" rel="lightbox[7658]"><img class="wp-image-7669 aligncenter" alt="05SCWITH1007" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1007-620x465.jpg" width="347" height="261" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림5. MEMS 가속도 센서 내부 구조</td>
</tr>
</tbody>
</table>
<p>그런데 이러한 MEMS 기반의 가속도 센서에는 재미있는 성질을 관측할 수 있다. 위와 같은 구조로 X축, Y축, Z축 3축으로 각각 손잡이와 기둥을 배치했다고 생각해 보자. 센서가 가만히 서 있는 경우 X축과 Y축에는 변화가 없겠지만 Z축 방향으로는 우리는 못 느끼지만 지구상에 있는 모든 물체에게 항상 작용하는 힘, 바로 중력 가속도가 작용하여 손잡이 부분이 축 늘어지게 될 것 이다.<br />
이 이야기는 3축 가속도 센서가 멈춰있을 경우 중력 가속도가 측정이 된다는 뜻이며, 센서를 회전시키면 중력 가속도가 측정되는 축이 변경되기에 센서가 어떤 포즈로 위치하고 있는지를 알 수 있다는 뜻이 된다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1006.jpg" rel="lightbox[7658]"><img class="alignnone  wp-image-7668" alt="05SCWITH1006" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1006-620x264.jpg" width="496" height="211" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림6. 가속도 센서 위치에 따른 중력 가속도 측정 축의 변화</td>
</tr>
</tbody>
</table>
<p>이 기능은 MEMS 센서를 이용하는 사용자라면 누구든지 알고 있었으나 가장 멋지게 제품으로 포장해서 내놓은 제품이 바로 iPhone/iPod touch 이다.<br />
장치를 회전하면 자동으로 알아서 화면을 가로 보기에서 세로 보기로 전환하는 기능은“팔리는 제품을 만들기 위해서는 기술을 어떻게 포장해야 하는가?”를 보여주는 단적인 예이기도 하다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1005.jpg" rel="lightbox[7658]"><img class="wp-image-7667 aligncenter" alt="05SCWITH1005" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1005.jpg" width="234" height="201" /></a></td>
</tr>
<tr>
<td>그림7. 가속도 센서를 써본 사람이라면 누구든 알고 있던 기능을 스티븐 잡스는 화려한 인터페이스와 함께 멋지게 녹여냈다.</td>
</tr>
</tbody>
</table>
<p><span style="color: #ff6600"><strong>MEMS 자이로 센서</strong></span></p>
<p>MEMS 가속도 센서와 함께 널리 알려진 센서로는 MEMS 자이로 센서가 있다. 자이로 센서는 회전 각속도를 측정하는 센서로 일반 개발자들에게 많은 오해를 불러 일으키는 센서이기도 하다. 대부분의 개발자들은 회전한 각도를 알고 싶어하는데 이 때 자이로 센서를 사용하면 손쉽게 이 문제를 해결할 수 있을 것으로 생각한다. 하지만 아쉽게도 자이로 센서는 각속도 센서이지, 각도 센서가 아니다.<br />
즉 회전하면 회전하는 속도를 측정하여 알려주는 센서이기에 회전한 각도를 알고 싶으면 자이로 센서의 출력값을 적분해야 한다. 디지털 제어기에서는 적분이 매 샘플링마다 덧셈으로 바뀌기에 이 값을 계속 더해야 하는데, 아쉽게도 센서는 항상 참값(true value)만 내주지는 않는다. 센서 출력값에는 true value와 노이즈(noise)가 섞여있기 마련인데, 이 값을 계속 적분하고 있으면 시간이 흐를수록 노이즈가 누적되는 현상이 나타나며, 이를 센서 드리프트(sensor drift)라고 한다. 이를 보상하는 기법은 매우 다양하게 연구되고 있으며, 결론부터 말하면 아직까지 다른 센서 도움 없이 완벽하게 센서 드리프트를 없애는 방법은 없다. 따라서 자이로 센서만을 이용하여 각도를 측정하려는 경우는 드리프트를 가능한 작게 만드는 알고리즘을 개발하는데 만족해야 하며, 완전히 제거하려면 다른 센서의 도움이 필요하다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1004.jpg" rel="lightbox[7658]"><img class="alignnone size-medium wp-image-7678" alt="05SCWITH1004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1004-300x246.jpg" width="300" height="246" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1003.jpg" rel="lightbox[7658]"><img class="alignnone size-medium wp-image-7677" alt="05SCWITH1003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1003-300x247.jpg" width="300" height="247" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림8. 저가형 자이로 센서의 출력(녹색)과 알고리즘은 적용하여 각도를 추출한 경우(파란색)</td>
</tr>
</tbody>
</table>
<p>위드 로봇에서는 위 두 가지 방법을 모두 시도하여 꽤나 의미 있는 결과를 얻어냈다.<br />
우선 단일 자이로 센서의 출력에서부터 각도를 의미 있게 추출하기 위해 폐루프 제어 시스템을 구성한 뒤 강화학습 알고리즘을 적용하여 자이로 센서의 노이즈를 제거하는 방법을 개발하였다(특허 3건, 논문 2편). 실험 결과 저가형 자이로 센서를 이용하여 알고리즘을 적용한 결과 한 시간당 5도 이내의 누적 오차를 보이는 고가형 자이로에서도 얻기 힘든 결과를 획득할 수 있었다. 특히 정지되어 있지 않고 움직일 경우는 더욱 오차가 줄어들기에 활용시에는 더욱 개선된 성능을 느끼게 될 것이다.<br />
위드로봇에서는 2011년 상반기 중으로 이와 같은 알고리즘을 적용한 자이로 센서를 100원짜리 동전보다 작은 형태로 패키징하여 출시할 계획을 가지고 있다.</p>
<p><strong><span style="color: #ff6600">센서 융합</span></strong></p>
<p>자이로 센서는 가속도 센서와 융합할 경우 더욱 큰 효과를 볼 수 있다. 3축 가속도 센서와 2축 자이로 센서를 융합하면 ARS(Attitude Reference System)을 구성할 수 있다. 전형적인 구조는 각 센서의 출력값을 적절한 상태 변수(states)를 가지는 칼만 필터(Kalman filter)를 구성하여 각도를 뽑아내는 것인데, 3축 가속도와 2축 자이로의 조합일 경우는 tilt와 pitch값을 드리프트 없이 찾아낼 수 있다.<br />
위드로봇에서는 2010년 하반기에 이러한 ARS 장치를 초소형으로 제작하는데 착수하여 개발을 완료하였다. 2011년 1월 중으로 디바이스마트를 통해 판매 예정에 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1002.jpg" rel="lightbox[7658]"><img class="wp-image-7676 aligncenter" alt="05SCWITH1002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1002-232x300.jpg" width="186" height="240" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1001.jpg" rel="lightbox[7658]"><img class="wp-image-7675 aligncenter" alt="05SCWITH1001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1001-274x300.jpg" width="219" height="240" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림9. 개발 완료된 초소형 ARS(모델명 : myARS-USB)</td>
</tr>
</tbody>
</table>
<p>보기에는 작아 보이지만, 내부에 USB, i2c, UART 인터페이스를 가지고 있어 별도의 장치 없이 USB 케이블을 연결하면 바로 PC와 연결이 가능하다. 이 제품의 개발 과정은 위드로봇 개발자 블로그인 withrobot.tistory.com에 자세히 설명되어 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1012.jpg" rel="lightbox[7658]"><img class="alignnone size-large wp-image-7674" alt="05SCWITH1012" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/05SCWITH1012-620x413.jpg" width="620" height="413" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 10. myARS-USB 테스트 모습</td>
</tr>
</tbody>
</table>
<p>이 외에도 저잡음 MEMS 가속도 센서를 손쉽게 USB, UART로 연결 가능한 제품군과 3축 가속도, 3축 자이로 센서로 구성된 myIMU6-USB, 9축 IMU(3축 가속도, 자이로, 지자기 센서)도 개발 중이거나 개발이 완료되어 2011년 상반기에 출시 일정을 조율하고 있다. 이러한 제품들이 출시되면 디바이스마트 고객들은 보다 손쉽게 MEMS 기반 센서들을 다룰 수 있게 될 것이라 예상하고 있다.</p>
<p><strong><span style="color: #ff6600">같이 생각해 보고 싶은 결론</span></strong></p>
<p><strong></strong>가속도 센서와 자이로 센서의 융합을 통해 각 센서의 단점을 없애고 보다 나은 결과를 도출해 내듯이 엔지니어들도 협동(Co-work)을 통해 시너지를 낼 수 있는 팀 플레이(Team play)에 보다 관심을 쏟을 때라 생각한다.<br />
10년간 꽤 많은 국내외 학회에 참석하거나 연구소를 방문하여 국내, 국외 엔지니어들과 이야기해 보았지만 국내 엔지니어 개개인의 연구자질은 최상급이다. 문제는 이렇게 훌륭한 엔지니어들이 2명, 3명을 모아두면 1+1= 2 또는 3이 되어야 할 텐데 1.5, 1.2가 되거나 심지어는 0.8, 0.7이 된다는 점이 문제이다. 이는‘혼자 일하는 방법’만 배웠고,‘같이 일하는 방법’은 어느 누구도 가르쳐 주지 않았기 때문인 것 같다.<br />
MEMS 센서 활용에서 배울 수 있듯이‘같이 일하는, 같이 행복해지는’방법을 다같이 고민해 봤으면 한다. 위드로봇(WITHROBOT)의 ‘WITH’접두사도 이러한 고민을 담은 사명이기도 하다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<p><strong>이미지출처</strong></p>
<p>그림3 : 출처-Texas Instruments 홈페이지<br />
그림5 : 출처-Analog Device 홈페이지<br />
그림7 : 출처-Apple 홈페이지</p>
<p><span style="font-size: 13px;line-height: 19px"></div></span></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/7658/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[4호]왕초보 전자회로 강좌특집 4부 &#8211; 1</title>
		<link>http://www.ntrexgo.com/archives/10509</link>
		<comments>http://www.ntrexgo.com/archives/10509#comments</comments>
		<pubDate>Mon, 18 Oct 2010 05:57:46 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[4호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[로직회로]]></category>
		<category><![CDATA[왕초보]]></category>
		<category><![CDATA[전자회로]]></category>
		<category><![CDATA[회로도]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=10509</guid>
		<description><![CDATA[디바이스마트 매거진 4호 &#124; 왕초보 전자회로 강좌 4부 1편. 로직회로에 대하여 알아보자! ]]></description>
				<content:encoded><![CDATA[<table style="width: 620px" border="0">
<tbody>
<tr>
<td><img class="size-full wp-image-10792 alignleft" alt="Scimage0" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/Scimage0.jpg" width="201" height="151" /></td>
<td><span style="font-size: x-large;color: #ee1146"><strong>왕초보 전자회로 강좌특집 4부 &#8211; 1</strong></span></p>
<p style="text-align: right"><span style="font-size: small">글 |스네일앤 스네이크</span></p>
<p style="text-align: right"><span style="font-size: small;color: #808080">※ 상기 내용은 디바이스마트와 스네일앤 스네이크의 협의를</span><br />
<span style="font-size: small;color: #808080"> 통하여 사용을 득한 내용입니다.</span></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><span style="color: #d72844;font-size: large">로직회로는 전자회로 공략의 베이스 캠프</span></strong></p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로설명 (circuit description)</strong></span><br />
대학(大學)에서 특정한 학문(學問)에 입문(入門)하면 처음 단계로 개론(槪論) 즉 총론(總論)을 배우는 데서 시작됩니다. 개론의 사전적 의미는 &#8220;내용을 대강 간추리어 논설함&#8221;으로 배우고자 하는 과목의 전체과 구성, 시작에서 현재까지의 흐름을 공간(空間)과 시간(時間)이라는 두 가지 관점에서 정리하여 일목요연하게 보여주는 역할을 맡고 있습니다.<br />
그러므로 우리가 어떤 과목의 개론을 배우고 나면, 그 과목에 대한 (전체적인) 감을 잡을 수 있는 것입니다. 개론을 훑고 난 다음 단계는(전체적인 시각에서) 필요한 각론을 선택하고, 좀 더 상세히 배워나가는 순서로 진행됩니다. 개론을 섭렵하고 나면 새로운 과목에 대한 흥미가 솟아나거나 혹은 (내가 원하는 것이 아니라는 것을 알게 되므로) 흥미가 반감되는 것이 일반적입니다. 어쨌거나 결과적으로는 마음이 편안해지는 느낌을 받게 됩니다.<br />
이를 역으로 생각해보면 공부하면서 어쩐지 마음이 불안하다면, 대개의 경우 자신의 현재 위치를 다시 확인해 볼 필요가 있다는 의미로 해석됩니다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<p><strong><span style="text-decoration: underline">1. 취미로 전자회로를 배우거나, &#8220;필요에 의해 잠깐 회로를 이용한다&#8221;라 는 가벼운 경우에도 개론의 중요성은 그대로 살아 있습니다.</span></strong><br />
전자회로의 세계처럼 혼란스러운(?) 장소에서 (자의건 타의건 간에) 어떤 일을 하다보면 해변의 모래 사장에서 혼자 탑을 쌓고있던 어린 아이가 갑자기 주변을 둘러보는 영화 장면처럼 금방 불안해지는 (자신의)마음을 경험합니다. (영화에서) 갑자기 불쑥 튀어나온 불안은 망설임으로 이어지고 아이는 가족을 찾아 지금까지 쌓던 탑을 팽개치고 (익숙한 세계로) 달려가 버립니다. 그러나 우리의 마음도 영화 속의 아이와 마찬가지일 것입니다.</p>
<p><span style="text-decoration: underline">2. 우리는 지구라는 커다란 행성속에 살고 있지만, 지구의 대부분 지역은 모르고 살아갑니다.</span><br />
중요한 것은 내가 지금 살고있는 도시와 마을을 자세히 아는 것입니다. 만일 새로운 지역으로 갈 필요가 생기면 그 때 가서 주위 사람에게 물어 보거나, 지도를 보면서 필요한 정보를 모으게 됩니다. 이 이야기의 요점은 우리의 (시간과 호기심등의) 한정된 자원을 필요한 부분에 집중하는 전략으로 세상에서 살고있다는 것입니다. 전자회로의 공부도 마찬가지로 커다란 전체적 개요만 이해하고 나면, 다음은 선택과 집중이 중요해지는 법입니다.</p>
<p><strong><span style="text-decoration: underline">3. 인생(人生)에도 공부(工夫)에도 전략(戰略)이 필요합니다.</span></strong><br />
전자회로에 욕심이 있는 사람은 회로기술을 빨리 습득하여 이용하고 싶을 것입니다. 오늘날의 전자회로는 (단독으로 동작하기 보다) 반드시 컴퓨터나 마이컴과 연관 지어진다고 해도 과언이 아닙니다. 따라서 도도히 흘러가는 (전자회로의 대세라는) 강물의 폭과 방향을 파악하고, 본류(本流)에서 (여행을) 시작하도록 준비할 필요가 있습니다.<br />
강(江)의 중심(中心)에 배를 띄우고, 흐름에서 벗어나지 않으려고 노력한다면 빠르고 강한 물살은 당신의 후원자가 되어, 여행이 쉽고 용이하도록 도와 줄 것입니다.<br />
</div>
<p><strong><span style="text-decoration: underline;color: #ff9900"> ▶ 회로도 (The circuit diagram) : 전자회로 발전도(發展圖)로 분석한 회로공략(攻略) 포인트</span></strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/04SC001.jpg" rel="lightbox[10509]"><img class="alignnone size-large wp-image-10758" alt="04SC001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/04SC001-620x215.jpg" width="620" height="215" /></a></p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로동작 설명 (circuit operation)</strong></span><br />
그림_&#8221;전자회로 발전도로 분석한 회로공략 포인트 회로도&#8221;에 전자회로의 중요 기술들을 발전 시간순으로 나열하였습니다. (좌측의 &#8220;진공관 회로&#8221;는 현재 오디오 앰프에만 일부 사용) 현 시점에서 전자회로의 전체적인 블럭도를 보는 이유는 우리의 현재위치를 파악하고 분석해서, 다음에 나아갈 방향과 목표을 파악하자는 뜻입니다.<br />
블럭도에 의하면 현재 우리의 &#8220;초보 전자회로 모음&#8221; 강좌는 &#8220;논리회로&#8221;의 초입에 위치하고 있습니다. 비록 &#8220;트랜지스터 회로&#8221; 블록에 해당하는 Tr과 FET라는 개별소자를 많이 다루지는 않았지만, &#8220;왕 초보 전자회로&#8221;와 &#8220;재미있고 유용한 555 응용회로&#8221; 로도 (논의하는 정도로는) 충분하다고 판단됩니다.</p>
<p>자! 그림의 블럭도에서 가운데에 위치한 &#8220;논리회로&#8221; 블럭에 주목해 봅시다. 논리회로란 TTL이나 CMOS 패밀리와 같은 Logic IC를 주축으로 하여 구성된 회로를 말합니다. 논리회로는 마이컴이 보편화 되기 전인 1970년대에 전성기를 누렸습니다. 보통 10여개에서 수십개의 트랜지스터나 FET가 하나의 칩에 집적된 Logic IC는 100가지가 넘는 서로다른 종류의 IC가 모여 하나의 패밀리를 구성합니다. 패밀리에 포함된 하나하나의 Logic IC는 마치 다른 모양을 한 벽돌과 같아, 단순히 조립하는 것만으로도 크고 멋있는 건물 즉 복잡하고 다양한 (기능의) 회로를 용이하게 만들 수 있다는 장점이 있습니다.</p>
<p>그러나 마이컴과 마이크로 콘트롤러가 보편화되면서 Logic IC의 용도는 (소프트웨어 파워에 밀려나서) 마이컴 주변의 인터페이스 회로에 사용되는 정도로까지 축소 되었습니다. 그렇다면 이제 논리회로는 역사의 장막 뒤로 사라져 버린 것일까요? 사실은 그렇게 단순하게만 정의할 수 없다는데 문제가 있습니다. 왜냐하면 비록 Logic IC 자체는 마이컴에 밀려 났지만, 마이컴 IC의 전기적 규격은 Logic IC에 그대로 승계되고 있기 때문입니다. 마이컴의 본질이 소프트웨어로 변화될 수 있는 Logic IC이기 때문에, 마이컴 내부의 하드웨어는 Logic IC로 설계되어 있습니다.<br />
마치 Logic IC가 마이컴 내에 흡수되어 버린 형국입니다.</p>
<p><span style="color: #008080">Logic IC 설계 개념을 보면 &#8220;어떻게 디지털 회로는 고속으로 안정하게 동작할 수 있는가?&#8221;라는 질문의 답을 얻을 수 있습니다. 이 개념은 너무나 중요하기에 다음 페이지에서 자세히 설명할 예정입니다.</span></p>
<p>전자회로는 Tr, FET와 같이 (전압/전류) 증폭기능이 있는 능동소자와, 능동소자를 보조하는 Diode 및 R, L, C와 같은 수동소자로 나누어집니다. 전자회로에서 능동소자의 역할과 기능이 중요하다는 점은 너무도 명백합니다. 그러나 트랜지스터(Tr)나 FET와 같은 개별(능동)소자는 너무나도 기본적인 기능만 가지고 있으므로 개별소자만으로 뭔가 의미있는 회로를 만들기에는 힘이 부칩니다. (너무 복잡해집니다)</p>
<p>비록 전자회로를 처음 배우는 입장에서 보면 먼저 구입한 여러 부품 중에서 필요한 부품을 구분하고, 회로도의 심볼 을 읽어내서 부품간의 연결과 결합을 파악할 필요가 있습니다. 그러나 이 초보단계는 금방 지나갑니다. 회로도를 읽어낼 수가 있게되면 다음에는 의미있는 회로를 만들고 싶어지고, 이 단계에서는 마이컴이나 Logic IC등 여러종류의 IC를 사용해야 목적을 달성할 수 있게 됩니다.</p>
<p>지금까지 설명한 개요와 자료를 바탕으로 이제 중요한 질문을 던질 시점이 되었습니다. 앞에서 전자회로를 공부하는 전략에 대해 언급했습니다만, 그림의 블럭도와 같이 방대하고 복잡한 전자회로의 계보를 보면서 도대체 어디서부터 어떻게 접근해야 좋은지 궁금해지지 않는다면 이상하지 않겠습니까?<br />
그냥 취미니까 되는데로 공부해봐요? 그러다 아님 말고요???<br />
→ 말도 안됩니다. 반드시 우선순위를 따져서 체계적으로 접근해야 합니다. 물론 정답은 없습니다. 논리와 취향이 있을 뿐이지요.<br />
만일 정해야 한다면 이제 당신은 분명히 선택의 기로에 서 있는 것입니다. (전부 한번씩 해 보겠다는 생각에는 절대 찬성할 수 없습니다. 하나 하기도 벅찹니다. 하나를 신중히 골라서 꾸준히 노력해야 합니다)</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<p>전략 1. 기초부터 찬찬히 : 트랜지스터를 기본으로 한 회로부터,<br />
착실히 (위로위로) 배워 나간다.<br />
전략 2. 마이컴 회로 + 임베디드 소프트웨어에 중점을 둔다.<br />
전략 3. Logic IC와 Tr을 포함한 Interface 회로에 중점을 둔다.<br />
마이컴은 복잡한 Logic IC 정도로 보고, 통신회로를 추가해서<br />
PC와 연결하는 방법을 모색한다.<br />
PC의 막강한 프로그래밍 환경에 투자한다.<br />
전략 4. (National Instruments사 같은) PC (상용) Interface 카드를 사용한다.<br />
전략 5. 전자회로는 포기한다. 그 대신 순수 소프트웨어에서 승부를..</p>
</div>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 선택한 전략의 해설</strong></span><br />
<strong>전략 1 해설</strong>  : 철저한 것은 좋으나 너무 발이 늦다. 대학교 방식이다. 권하기 힘듦.<br />
<strong>전략 2 해설</strong>  : (직업적인) 전문가 방식이다. 세상은 &#8220;서버 + 클라이언트 + 네트워크&#8221; 방식을 기반으로 진화하고 있다. (전공이 아니라면) 스스로 고립되고, 시야가 좁아지는 방식을 채택할 필요는 없지 않을까? 실제로는 많은 사람들이 (자기도 모르게) 채택하는 방법이다.<br />
왜냐하면 대학에서 강의하고 교재도 많기 때문에 원리적으로는 모든 것을 할 수 있다. 그러나 고생에 비해, 막상 (독립적으로) 해 볼 수 있는 일은 너무나 적어 실망하기 일쑤이다. 가장 큰 문제점은 PC 환경에서 멀어지는 것이다.<br />
<strong>전략 3 해설</strong> : : 약간 생소하고, 일견 산만해 보이지만, 실은 가장 활용도가 넓은 방법이다. ① 우선 강력한 PC 환경을 이용하므로, 빠른 시간내에 결과를 얻어내서 분석하고, 다시 개선시키기 용이하다.<br />
② 디지털 환경의 핵심인 로직과 인터페이스 회로를 깊이 공부할 수 있어 활용범위가 넓다.<br />
③ 지대한 노력이 필요한 마이컴을 비교적 쉽게 이해할 수 있다. (마이컴은 로직회로를 기본으로 소프트웨어 동작하기 때문 )<br />
④ 네트워크의 기본인 통신기술을 중시하고 있다. (통신기술이 바로 미래기술의 핵(核)임을 명심해야 한다.) 무엇보다도 (기술 전반에 대한) 전체적인 시야를 확보할 수 있다는 점이 가장 큰 매력이다.<br />
<strong>전략 4 해설</strong> : PC를 중심에 놓는다는 점에서 전략 3과 같다. (고급 과제를 수행하는) 대학과 연구소에서 채택하는 방법이다.<br />
단점은 돈이 많이 든다. 메뉴얼을 소화하는 것도 만만치 않다. 왜냐하면 전자회로와 디지털 하드웨어의 기본이 반드시 필요하기 때문이다. 사실은 대학에서 전자를 전공한 사람들이 취업해서 주로 당면하는 과제이다.<br />
<strong>전략 5 해설 </strong>: 소극적이고, 어설픈 것 같지만 실제로 많은 사람들이 선택한 방법이다. 데이터베이스 프로그래밍, 서버 프로그래밍, 게임 프로그래밍을 생각해보라. 실제로 대학의 전산과 사람들이 많다.</p>
<p><span style="color: #ffffff;background-color: #000080"><strong>결론적으로 필자는 (개인적으로) &#8220;전략 3&#8243;을 선호합니다.</strong></span></p>
<p>즉 Logic 회로와 Tr의 기초적 동작 및 유용한 인터페이스 회로를 먼저 착실히 공부해 두는 것입니다. 이런 이유로 &#8220;초보 전자회로 모음&#8221; 강의도 두번째 테마로 &#8220;기초 로직회로&#8221;를 설명하고, 다음으로 &#8220;디지털 인터페이스 회로&#8221;를 선택하였습니다.<br />
이 단계에서는 Tr의 기초동작과 Logic IC, Tr, 포토 커플러를 포함한<br />
실제 인터페이스 회로를 설명할 예정입니다.<br />
이러한 준비작업들이 끝나면 데이터 로거(Data Logger)를 사용한 인터페이스를 실험해 볼 단계에 도달합니다. 데이터 로거는 PC와 (RS232C)통신으로 연결된 마이컴으로 사용하기 간편하면서도 재미있는 기능을 보여 줄 것입니다. 이 단계까지 오면 회로도 판독에서 PC를 이용한 실험장치 준비까지의 모든 과정이 마무리됩니다.<br />
이제 비로소 실제 흥미있는 과제를 해결하는 응용 단계로 들어갈 수 있습니다. 드디어 메인 소프트웨어인 PC 프로그래밍과 센서(sensor)의 사용법이 중요해지는 단계가 됩니다.</p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 프로그램에 익숙한 분들을 위하여</strong></span><br />
Logic IC와 마이컴의 관계를 Visual C++, Visual basic과 Turbo C, qbasic에 비유하여 말씀드리겠습니다. 아시다시피 윈도환경의 Visual C++, Visual basic을 공부하다 보면 막상 basic과 C, C++ 언어에 대한 언급은 거의 없다는 것을 깨닫게 됩니다. 이런 형편이므로 초심자가 비쥬얼 책만을 아무리 달달 공부한다 해도 나중에 남는 것은 별로 없습니다. (자신도 붙지 않구요.) 경험있는 선배라면 먼저 컴퓨터 언어(Language)를 공부하라고 진심으로 조언할 것입니다.<br />
마이컴도 마찬가지입니다. 근본이 되는 Logic과 Tr 동작을 모르고 덤벼들면 수 많은 마이컴 명령어나 외우다가 끝이 납니다.<br />
인터페이스 회로도 같습니다. 실험실에서 비싼 PC용 인터페이스 보드가 손에 들어와도 활용하기 망설여지기는 마찬가지입니다. 공부를 해도, 메뉴얼에 따라온 &#8220;회로도&#8221;도 이해하기 힘든 수준이 이어집니다. 그러니 인터페이스 보드에 센서나 외부장비를 연결하기가 겁나는 것도 당연합니다.<br />
즉 &#8220;프로그래밍이라면 어떻게 해 보겠는데, 하드웨어는 아무리 설명을 들어도 통 모르겠어&#8221; 라고 말하게 되고 맙니다. 이유는 간단합니다.<br />
한 단계 아래에 깔려있는 기술 이해가 부족하기 때문입니다.</p>
<p><strong><span style="color: #d72844;font-size: large">로직회로의 핵심, 마법의 갈고리</span></strong></p>
<p><span style="text-decoration: underline"><strong><span style="color: #ff9900;text-decoration: underline">▶ 회로설명 (circuit description)</span> </strong></span><br />
크고 웅장한 건축물은 언제나 우리의 시선을 끌고, 마음을 감동시킵니다. 그 중에서도 10~14세기 중세에 세워진 사원이나 교회, 왕궁처럼 돌로 쌓아올린 거대한 구조물들은 &#8220;경이&#8221;라는 감정을 넘어선, 엄숙함과 섬뜩함까지 느끼게 하는 존재입니다.<br />
역사와 인간에 대한 교육의 혜택으로, &#8220;왜 저렇게 큰 구조물을 만들 필요가 있었는가?&#8221; 라는 질문에 대한 해답은 어렴풋이 짐작할 수 있지만 &#8221; 어떻게 저렇게 수 많은 돌들이 현재까지 자기위치를 고수하고 있는지&#8221; 그저 감탄할 따름입니다.<br />
고등학교 물리시간에서, 빗면 위에서 나타나는 힘의 분산에 대한 응용 예로 &#8220;쐐기&#8221; 모양에 대해 기억하시는지요?<br />
중세의 거대 건축물의 회랑과 창문, 거대한 둥근 형태의 천장을 지탱하는 비밀이 평범한 쐐기모양 돌의 형태에서 비롯된다는 점을 알고 계시는지요? 마찬가지로 교묘한 응용 사례들의 뒤편에서 미소짓고 있는, 한 두가지 핵심원리의 존재와 위력을 잠시라도 (가슴 깊이) 공감해 보신 적이 있으신지요.</p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로도 (The circuit diagram) : 로직회로의 핵심, 마법의 갈고리 (Magic Hook)</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/04SC002.jpg" rel="lightbox[10509]"><img class="alignnone size-large wp-image-10759" alt="04SC002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/04SC002-620x280.jpg" width="620" height="280" /></a></p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로동작 설명 (circuit operation)</strong></span><br />
회로도_&#8221;로직회로의 핵심, 마법의 갈고리&#8221;그림 속에 나타난 중세 건축물의 장엄한 자태를 보면, 거대한 곡선을 이루는 아치(Arch), 둥근 돔(Dom), 아치가 교차하고 있는 볼트(Vault)의 역할이 절대적입니다.<br />
오늘날 건축물 뼈대의 소재로 견고하고 단단한 철을 사용하고 있는 것에 반해서, 중세에는 무거운 소재인 돌을 사용하였으므로 (건물내의) 공간을 확보하기가 그 만큼 어려웠을 것으로 짐작됩니다.</p>
<p>생각해 보십시요. 겉보기에 거대하지만, 아파트 지하주차장 같이 빽빽한 기둥숲이 건물내부에 자리잡고 있다면 후원자나 방문자에게 큰 감명을 주기는 어려울 것입니다. (외관의 크기만이 중요하다면, 차라리 동산을 쌓고, 속을 파서 사용하면 쉬울 것입니다) 그렇다면 당면한 문제는 (건물 속에) 가능한한 넓은 공간을 확보하는 것입니다. 그리고 공간을 확보하자면 결국 기둥과 기둥 사이가 멀리 떨어져야 합니다. 문제는 어떤 방법으로 이 사이가 먼 기둥위에 지붕을 얹는단 말입니까? 그것도 돌을 사용해서&#8230;<br />
답은 아래 그림에 있는 아치형태 입니다. ①과 같이 떨어져 있는 두 지점 사이를 직선으로 연결하면, 중력에 의해 소재가 아래로 힘을 받습니다.<br />
그 결과 소재가 나무라면 휘어져 버릴 것이고, 단단한 돌이라면 부러져 버리게 됩니다. (악어는 행복) 그러나 ②처럼 (작은 쐬기모양의 조각돌을 서로 잇대어) 아치를 만든다면, 중력이 좌우로 분산되어 (스스로 지탱되는) 튼튼한 구조물을 만들 수 있습니다. (악어는 불행) ③의 그림에 빗면에 의한 힘의 분산이 화살표로 표시되어 있습니다.<br />
인류가 아치(Arch) 형태를 이해하고 자유자재로 활용함에 따라, 비로소 돌을 사용하고도 텅 빈 공간을 가진 거대한 건축물의 축조가 가능해 졌습니다. 아치 형태의 이해는, 지식의 중요성을 웅변적으로 보여줄 뿐 아니라 사람을 매혹시키는 위대한 기술의 토대는, (마법과도 같이) 단순하고 명확한 기본원리로 구축되어 있음을 알려주는 생생한 사례입니다.</p>
<p><span style="color: #3366ff">※ 아치(Arch) 형태를 회전하면 돔(Dom) 모양이 되고, 몇 방향에서 교차시키면 볼트(Vault) 구조가 됩니다. 즉 아치(Arch) 형태가 기본입니다.</span><br />
<span style="color: #3366ff"> 그렇다면 논리회로에서 건축의 아치(Arch)에 해당하는 철학이란 무엇일까요? 아니 논리회로에서도 과연 이와 같이 위대한 기술이 필요하기나 한 것일까요? 답하기가 쉽지 않습니다.</span></p>
<p>자! 그렇다면 먼저 논리회로란 무엇인지 생각해 봅시다.</p>
<p>논리회로는 인간이란 동물이 만들어 낸 희안하고도 또 희안한 물건으로한 마디로 요약하면, 전기로 작동되는 일종의 기계입니다. 그러나 이 특이한 기계는, 마법의 기계로 한 치의 오차도 없고, 끝도 없이 동작하는 전자식 메커니즘을 갖고 있습니다.</p>
<p>이제 당신이 우연히 여러 종류의 작은 기계 뭉치를 손에 넣었다고 가정합시다. 손에 넣은 기계장치가 고장의 염려없이, 나름대로의 기능을 가지고 있다는 것을 알게 된다면 당신은 이 기계들을 어떻게 이용하리라고 생각하십니까? 아마 누구라도 시간이 있다면 먼저 하나씩 하나씩 동작시켜 보고나서, 다음에 이것 저것들을 서로 연결해 동작시켜 볼 가능성이 큽니다. 점점 이러한 연결을 확대해서 결국에는 더 크고, 더 복잡하고, 더 다양한 기능을 가진 기계장치를 만들고 싶어하게 될 것입니다.</p>
<p>그렇습니다. 그러한 대표적인 결과가 마이크로 프로세서입니다.<br />
그러나 최초의 컴퓨터라 할 수 있는 베비지(Chales Babbage, 영국, 수학자/발명가)의 기계식 컴퓨터가 결국 실패했듯이 마법에 걸린 기계장치와 현실세계의 기계 사이에는 분명 차이가 존재합니다. 아시다시피 현실에서는 무척이나 작으면서, 고장없이 동작하는 기계장치가 절대로 존재할 수 없기 때문입니다. (마찰과 마모가 주 원인입니다.)</p>
<p>그러나 트랜지스터나, FET를 사용하면 독립되고, 믿을 수 있으며, 작은 기계처럼 동작하는 회로를 만들 수 있습니다.<br />
바로 논리회로(Logic circuit) 입니다. 그렇다면 이제 드디어 모든 문제가 해결된 것처럼 보이는군요. 바야흐로 마음껏 연결해서, 원하는 대로 쌓아올려 가면 되지 않을까요? 아닙니다. 아직 안됩니다. 아직도 문제가 남아 있습니다. 그것도 심각한 문제가&#8230;<br />
하나 하나의 작은회로의 동작을 신뢰할 수 있는 것과 이 회로들을 (수 없이) 연결한 커다란 전체회로가 문제없이 동작하는 것은 분명히 다릅니다. 돌로 작은 집을 지을 수 있다는 사실이, 돌로 큰 궁전까지 건축할 수 있다는 것을 보증하는 것은 아닙니다.<br />
문제는 규모입니다. 건축의 규모가 커지면 중력이 큰 문제로 떠오릅니다. 전자회로에도 마찬가지 문제가 있습니다. 건축에서 중력에 해당하는 문제가, 회로에서는 노이즈(noise)에 해당합니다. 전기/전자에서 노이즈(noise)란 원하지 않는 (전기적) 간섭을 의미합니다. 이 원치않는 간섭은, 전자파의 형태로 (공중을 날아서) 침입해 들어옵니다. 100% 피하는 방법이란 없습니다. 중력을 피할 수 없듯이 전자파도 피할 수 없습니다.<br />
전자파의 원인은 앞이나 옆, 뒤 혹은 위나 아래에서 신나게 동작하고 있는 다른 (회로) 친구들의 활동입니다. 회로의 동작에서 전자파가 발생되기 때문입니다.<br />
이제 거의 결론에 도달했습니다.<br />
인류가 커다란 건축물을 세우기 위해, 먼저 아치공법이 발명되어야 했듯이 수 많은 논리회로를 (마음대로) 연결해서 큰 회로를 만들기 위해서는, 또 하나의 위대한 기본원리가 먼저 발명되어야 했습니다. 자유로운 연결을 위한 기술의 핵심은 오늘날 모든 논리회로 IC와 마이컴 IC속에 살아 숨쉬고 있습니다. (출력과 입력신호를 단단히 맺어주어, 외부의 전자파 간섭을 뿌리칠 수 있는) 기술의 핵은 입력 단자를 Low 상태로 만들기 위해, 입력단자에서 외부 회로로 흘러나가는 전류가 필요하다는, &#8220;입력 싱크전류&#8221;의 존재를 정의한 것입니다. (흘러나가는 전류가 없으면, 입력의 상태는 High)<br />
<span style="color: #3366ff">※ TTL 로직 IC에서 설명한 &#8220;입력 싱크전류&#8221;의 의미는 그림을 참조하세요. 청색 화살표로 표시된 전류가 &#8220;입력 싱크전류&#8221;입니다. &#8220;입력 싱크전류&#8221;는 반드시 앞 단의 출력회로 동작과 연계되어야 존재할 수 있습니다.</span><br />
<span style="color: #3366ff"> (&#8220;입력 싱크전류&#8221;는 Tr2가 ON 되어야 발생합니다. 이 전류로 Tr3이 동작하고, 그 결과 Tr4가 OFF 상태로 됩니다.) 적색 화살표는 &#8220;입력 싱크전류&#8221;가 없을 때 흐르는 전류를 나타냅니다. (이 전류로 Tr4가 ON 상태로 됩니다)</span><br />
<span style="color: #3366ff"> 그림의 우측하단에 TTL과 CMOS IC의 기본회로를 보였습니다.</span><br />
<span style="color: #3366ff"> 각 IC에서 사용하고 있는 소자를 보면, 트랜지스터와 FET로 나뉘어 있다는 것을 확인할 수 있습니다.</span></p>
<p>곰곰히 생각해보면 입력이란 &#8220;무엇인가를 받아들인다&#8221;라는 의미를 내포하고 있습니다. 그런데 반대로 전류를 내보내야 Low 상태가 성립된다는 조건은 뜻밖의 시각, 패러다임의 전환을 요구합니다.<br />
만일 입력단자가 수동적으로 전압을 받아들이기만 한다면, 외부의 상태가 필요한 신호인지? 노이즈인지? 구별할 재주가 없습니다. (노이즈는 전압을 더해주기는 해도, 전류까지 빼내 갈 능력까지는 없습니다. 전류의 이동에는 큰 에너지가 필요하기 때문입니다. 대부분의 경우 노이즈는 본 신호에 비해 가지고 있는 에너지가 작습니다) 한발 더 나아가 능동적으로 촉수(전류)를 내 보내 확인함으로써 외부의 적과 아군을 판단할 수 있는 것입니다. 이 혁신적인 아이디어야 말로, 입_출력 신호를 단단히 연결해 주는 &#8220;마법의 갈고리&#8221;를 구성하는 핵심요소입니다.<br />
신무기<strong><span style="color: #ff0000"> &#8220;마법의 갈고리&#8221;</span></strong> 즉 <strong><span style="color: #ff0000">&#8220;입력 싱크전류&#8221;</span></strong>의 개념을 장착함에 따라 우리는 마음껏 논리회로를 구사할 수 있게 되었습니다. 논리회로 IC의 연결만 주의한다면 논리회로는 (우리의) 생각대로 정확히 동작하고, 명확한 결과를 보여줍니다. 그 증거가 컴퓨터, 핸드폰, MP3, 유비쿼터스 등등으로 대표되는 오늘날의 디지털 세계입니다.<br />
이제 디지털 세계의 일부인 논리 IC가, 당신의 손 위에 놓여 있습니다.<br />
<span style="color: #3366ff">※ 이와같이 논리회로에는 논리회로 특유의 장/단점이 나타납니다.</span><br />
<span style="color: #3366ff"> 예를들면 &#8220;마법의 갈고리&#8221;인 &#8220;입력 싱크전류&#8221; 방식에는 전류소비가 늘어나고, 발열이 커진다는 단점이 있습니다. 역시 &#8220;마법은 아니였구나&#8221;라는 생각에 안심이 됩니다. (마법이 좋을 것 같지만 역시 공평한 자연의 법칙이 더 미덥습니다. )</span></p>
<p>&nbsp;</p>
<p style="text-align: right"><span style="color: #808080">다음편에서 계속 됩니다.</span></p>
<p style="text-align: right">
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/10509/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[3호]왕초보 전자회로 강좌특집 3부 &#8211; 4</title>
		<link>http://www.ntrexgo.com/archives/10500</link>
		<comments>http://www.ntrexgo.com/archives/10500#comments</comments>
		<pubDate>Tue, 10 Aug 2010 05:50:12 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[3호]]></category>
		<category><![CDATA[555 Timer IC]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[왕초보]]></category>
		<category><![CDATA[응용]]></category>
		<category><![CDATA[전자회로]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=10500</guid>
		<description><![CDATA[디바이스마트 매거진 3호 &#124; 왕초보 전자회로 강좌 3부 마지막편. 555 Timer IC를 이용한 응용작들을 만들어 보자! ]]></description>
				<content:encoded><![CDATA[<table style="width: 620px" border="0">
<tbody>
<tr>
<td><img class="size-full wp-image-10792 alignleft" alt="Scimage0" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/Scimage0.jpg" width="201" height="151" /></td>
<td><span style="font-size: x-large;color: #ee1146"><strong>왕초보 전자회로 강좌특집 3부 &#8211; 4</strong></span></p>
<p style="text-align: right"><span style="font-size: small">글 |스네일앤 스네이크</span></p>
<p style="text-align: right"><span style="font-size: small;color: #808080">※ 상기 내용은 디바이스마트와 스네일앤 스네이크의 협의를</span><br />
<span style="font-size: small;color: #808080"> 통하여 사용을 득한 내용입니다.</span></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><span style="color: #d72844;font-size: large">차례로 빛나는 LED를 만나보자.</span></strong></p>
<p><span style="text-decoration: underline"><span style="color: #ff6600;text-decoration: underline">이번 시간에는 준비한 8 가지 기초회로 중의 일곱번째로 555 (Timer IC)의 펄스열 발생회로를 사용하여 코일의 특성을 이해할 수 있는 회로입니다.</span></span></p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로설명 (circuit description)</strong></span><br />
이번에는 555에서 발생시킨 구형파를 입력으로 하는, 로직(Logic) 카운터 IC 4017의 활약으로 10개의 LED를 순차적으로 점등시키는 회로를 소개합니다.<br />
이 회로의 핵심인 4017 (10진 카운터 IC)는, 여섯 번째 555 응용회로에서 소개한 CMOS 로직(Logic) 페밀리 IC인 4027 (JK F/F)과 같은 종류로 널리 사용되는 대표적인 CMOS IC중 하나입니다.<br />
이번 회로를 기점으로, 로직회로와 디지털 인터페이스 회로에서 폭 넓게 사용되고 있는 CMOS 계열의 Logic IC에 친숙해지고, 편안히 사용할 수 있는 계기가 되기를 바랍니다.</p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로동작 설명 (circuit operation)</strong></span><br />
그림에서 소개된 회로는 많은 설명이 필요하지 않습니다.<br />
먼저 555는 T=(R1+2 x R2) x C1 / 1.44=약 0.08초 (80ms) 주기의 구형파를 발생 시킵니다. 이제는 너무나 익숙한 회로이지요.<br />
555 출력 구형파는 4017의 14번 Clock 입력단자로 들어갑니다.<br />
4017은 메뉴얼에 의하면 입력펄스 상태가 Low에서 High로 바뀔 때 (on the rising-edge) 카운트가 증가하며, 카운팅에 해당되는 Q0_Q9 단자만 High 상태가 됩니다. (결과적으로 입력펄스가 들어오면, 10개 LED 중 하나씩만이 돌아가며 켜집니다.)</p>
<p><span style="color: #3366ff">※ 영문참조 : The count advances as the clock input becomes high (on the rising-edge). Each output Q0-Q9 goes high in turn as counting advances.</span><br />
<span style="color: #3366ff"> ※ 4017 카운터 IC 핀 번호는 메뉴얼을 참조 바랍니다. (표준 번호매김 방법과 동일)</span></p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로도 (The circuit diagram) : 순차점등 카운터 IC 회로</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03SC013.jpg" rel="lightbox[10500]"><img class="alignnone  wp-image-10755" alt="03SC013" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03SC013.jpg" width="493" height="540" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="color: #d72844;font-size: large">1 Hz, 10 Hz, 100 Hz, 1 KHz, 10 KHz, 100 KHz 표준 펄스발생기</span></strong></p>
<p>&nbsp;</p>
<p><span style="color: #ff9900"><strong><span style="text-decoration: underline">▶ 회로설명 (circuit description)</span> </strong></span><br />
이제 555 응용회로의 마지막 예제에 이르렀습니다.<br />
이번 회로는 임의 시간을 관측할 때, 비교기준으로 사용할 수 있는 표준펄스를 만드는 회로입니다. 정확한 주기의 표준펄스는 계측기나 측정회로의 기준신호로 필수적인 것입니다.<br />
정확한 표준펄스는 특별한 회로가 필요한 것이 아니고, 정확하고 안정된 부품에서 나옵니다. 우리는 이런 종류의 부품을 표준부품이라고 부르며 구하기도 어려울 뿐만 아니라 값도 비쌉니다. (고가의 계측장비에 사용) 시중에서 1% 오차의 저항은 구할 수 있으나, 1~2% 오차의 콘덴서를 구하기는 거의 불가능하므로 표준부품을 구하는 어려움이, 단지 가격의 문제뿐이 아니라는 것을 알 수 있습니다.<br />
우리는 실험단계에 있으므로, 기존의 부품으로 동작시켜 보겠습니다.<br />
만일 오실로스코우프나 주파수 카운터를 이용할 수 있으면 VR1을 조정하여 정확한 주파수에 셋팅할 수 있습니다. 이렇게 보다 정확한 장비를 기준으로 (제작된 회로를) 조정하는 과정을 보정(Compensation)이라고 부릅니다.</p>
<p><span style="color: #ff9900"><strong><span style="text-decoration: underline"><span style="text-decoration: underline">▶ 회로도 (The circuit diagram) : </span>1, 10, 100, 1K, 10K, 100KHz 표준 펄스발생기 회로</span></strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03SC014.jpg" rel="lightbox[10500]"><img class="alignnone  wp-image-10756" alt="03SC014" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03SC014.jpg" width="504" height="653" /></a></p>
<p><span style="color: #ff9900"><strong><span style="text-decoration: underline">▶ 회로동작 설명 (circuit operation)</span> </strong></span><br />
회로 설명은 주파수의 계산으로 끝입니다. R1과 VR1의 직렬값을 미리 50㏀이 되도록 맞추어 둡니다. 발생되는 펄스 주기의 계산은 아래를 참조하시기 바랍니다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
T = (R1 + 2 x R2) x C /1.44, ( f = 1 / T )<br />
1Hz→ (50k+2 x 47k) x 10uF/1.44=144k x 10uF/1.44=1(sec)=1Hz<br />
10Hz→ (50k+2 x 47k) x 1uF/1.44 = 144k x 1uF/1.44=0.1(sec)=10(Hz)<br />
100Hz→ (50k+2 x 47k) x 104p/1.44=144k x 104p/1.44=0.01(sec)=100(Hz)<br />
1KHz→ (50k+2 x 47k) x 103p/1.44=144k x 103/1.44=0.001(sec)=1(KHz)<br />
10KHz→ (50k+2 x 47k) x 102p/1.44=144k x 102p/1.44=0.1(msec)=1(KHz)<br />
100KHz→ (50k+2 x 47k) x 100p/1.44=144k x 100p/1.44=0.01(msec)=100(KHz)<br />
</div>
<p>설명드린 대로 콘덴서의 오차가 10% 이므로, 555에서 출력되는 펄스도 동일한 (크기의) 오차를 가집니다. 소개한 &#8220;표준 펄스발생기&#8221; 회로는 만능기판에 (독립해서) 제작해 두면, 다른 Logic 회로나 마이컴 인터페이스 회로를 실험하는데, (기준 펄스원으로) 매우 유용하게 사용될 수 있습니다.</p>
<p>&nbsp;</p>
<p style="text-align: right"><span style="color: #999999">▶왕초보 전자회로의 555Timer IC 강의를 종료합니다.</span><br />
<span style="color: #999999"> 수고하셨습니다. 다음 강의에 만나뵙겠습니다.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/10500/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[3호]위드로봇 무료강좌 “영상처리신호의 이해”강좌 참관기</title>
		<link>http://www.ntrexgo.com/archives/9946</link>
		<comments>http://www.ntrexgo.com/archives/9946#comments</comments>
		<pubDate>Tue, 10 Aug 2010 05:09:04 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[핫 뉴스]]></category>
		<category><![CDATA[3호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[위드로봇]]></category>
		<category><![CDATA[핫뉴스]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=9946</guid>
		<description><![CDATA[디바이스마트 매거진 3호 &#124; 現 (주)위드로봇 대표이사님으로 계신 김도윤 대표님의 인사말로 시작된 강의는 기본적인 영상처리 전반에 걸친 소개와 CMOS/CCD 영상 센서 신호, NTSC 신호 획득 방법에 대한 강의였다. ]]></description>
				<content:encoded><![CDATA[<h3><strong><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi004.jpg" rel="lightbox[9946]"><img class=" wp-image-9692 alignleft" alt="03HNwi004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi004-300x225.jpg" width="210" height="158" /></a>위드로봇 무료강좌 </strong></h3>
<h2><span style="color: #000080"><strong>“영상처리신호의 이해”</strong></span></h2>
<h2><span style="color: #000080"><strong>강좌 참관기</strong></span></h2>
<p>&nbsp;</p>
<p style="text-align: right">글 | 김형준 기자 episode@ntrex.co.kr</p>
<p> 찌는 듯한 무더위가 기승을 부렸던 지난 7월 10일 . 디바이스마트와 (주)위드로봇에서 주최하는 MyVision USB 무료교육 “영상처리 신호의 이해” 강좌가 열린 강의실에는 토요일 이른 아침부터 교육을 받기 위해 용인, 성남 , 수원 등 먼 곳에서 한달음에 달려오신 많은 분들의 뜨거운 교육열기로 가득 차 있었다.</p>
<table style="border-collapse: collapse;width: 600px" border="1" cellspacing="3" cellpadding="3">
<tbody>
<tr>
<td style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi004.jpg" rel="lightbox[9946]"><img class="wp-image-9692 aligncenter" alt="03HNwi004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi004-620x465.jpg" width="391" height="293" /></a></td>
</tr>
<tr>
<td>디바이스마트 고객님을 위한 무료강좌가 열린 강의실 내부모습. 토요일 오전임에도 불구하고 일찍 나오신 분들이 보인다.</td>
</tr>
</tbody>
</table>
<p>제 1부는 경우 영상처리 소개에 대한 강의였다.<br />
現 (주)위드로봇 대표이사님으로 계신 김도윤 대표님의 인사말로 시작된 이번 강의는 크게 3부로 나뉘어 약 2시간이 넘는 시간 동안 진행이 되었다 .</p>
<p>기본적인 영상처리 전반에 걸친 소개와 CMOS/CCD 영상 센서 신호, NTSC 신호 획득 방법에 대한 강의였다. 영상시스템과 시각시스템의 차이점 ,영상처리의 필요성과 중대성, 관련학문 분야, CCD와 CMOS 방식의 차이, 아놀로그 텔레비전 방식의 NTSC(National Television System Committee), PAL(Phase-Alternating Line) 신호와 디지털 신호방식인 YUV, RGB16, RGB32에 방식에 대한 교육을 받을 수 있었다. 또한 RGB-3원색에 대한 기본적인 이해와 RGB color Model 의 문제점 파악, HSV, CIE, HLS 방식 등의 장, 단점에 대한 기초적인 이론을 배워 볼 수 있었다.</p>
<table style="border-collapse: collapse;width: 600px" border="1" cellspacing="3" cellpadding="3">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi002.jpg" rel="lightbox[9946]"><img class="alignnone size-medium wp-image-9690" alt="03HNwi002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi002-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi003.jpg" rel="lightbox[9946]"><img class="alignnone size-medium wp-image-9691" alt="03HNwi003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi003-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td>제1부 강의중 영상처리에 관련된 학문분야에 대해 설명을 해주시는 (주)위드로봇 김도윤 대표님.</td>
<td>제1부 강의중 영상시스템과 시각시스템의 차이점에 대하여<br />
설명을 해주시고 있다.</td>
</tr>
</tbody>
</table>
<p>제 2부는 현재 상용화 되어있는 color tracking system, 스테레오 시스템, 얼굴인식 시스템, 물체인식 시스템, VR Pen을 이용하여 블루투스를 통한 제스쳐 인식 등에 대한 시연 예제 동영상등을 보면서 현재까지 발전해온 Vision 시스템에 대한 전반적인 이해와, 향후 발전 가능한 분야에 대한 교육이 실시 되었다.</p>
<p>제 3부는 이론과 동영상 교육 등, 이번 교육을 통해 알게된 Vision 분야에 대한 질의 응답 시간을 가졌다.</p>
<p>많은 분들께서 해주셨던 다양한 질문들 중 기억에 남는 질문은, “위치인식 시스템을 이용한 자동 청소 로봇의 사용방법과 원리” 에 대한 질문이었는데, 평소 우리 주변에서 사용하고 있고 볼 수 있었던 청소 로봇 제품에 대한 것이어서 그런지 가장 기억에 남았다 .<br />
간단히 그 내용을 옮겨보면, 기본적으로 청소로봇 제품에 장착이 되어 있는 카메라를 통하여 천장과 각 기둥사이의 거리를 측정 한 후 큰 그림을 그린 다음, 각 자리에 위치해 있는 물품들에 대한 vision sensing을 통하여 제품의 거리, 특징 등을 기억해 두었다가 청소를 마친 후, 메모리 되어있던 사물들의 특징들을 확인하여 처음에 위치했던 자리로 돌아가는 방법에 대한 기본설명이었다.</p>
<p>제 3부, 교육과 질의 응답시간이 끝난 뒤에는 개발자들의 고충과 헌신적인 노력, 개발을 통해 우리가 지금보다 더 나은 삶을 살 수 있다는 점에 대한 대표님의 솔직한 말씀과 더불어 현재 판매되고 있는 위드로봇 제품들을 살펴보는 시간들을 가졌다.<br />
마지막으로 이번 교육에 대한 간단한 설문 조사를 진행한 후 참여하신 분들과 단체사진을 찍는 것으로 이번 무료 강좌를 끝맺음 지었다.<br />
평소 관심은 있지만 Vision 분야에 대해 어디서부터 시작을 해야 할지 모르는 사람들에게도, 혹은 이 분야에 대한 지식이 부족한 필자 같은 입장에서도 이번 무료 강좌가 좋은 기회이자, 알찬 시간이었음을 확인할 수 있었다.</p>
<table style="border-collapse: collapse;width: 600px" border="1" cellspacing="3" cellpadding="3">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi001.jpg" rel="lightbox[9946]"><img class="wp-image-9689 aligncenter" alt="03HNwi001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/03HNwi001-620x465.jpg" width="397" height="298" /></a></td>
</tr>
<tr>
<td>이번 강좌를 함께 해주신 참석자분들과 기념사진 촬영을 하였다.</td>
</tr>
</tbody>
</table>
<p>한편, 이번 무료강좌에 200 여분이 넘는 많은 회원 분들이 교육 참가를 신청해주셨으나, 안타깝게도 20여 분만을 추첨하여 교육을 진행할 수 밖에 없어서 진행자로서 아쉬운 마음이 들기도 했다 .<br />
디바이스마트 회원님들을 위해 준비한 이번 강좌에 참여해주신 참가자분들과 훌륭한 강의를 해주신 (주)위드로봇 김도윤 대표이사님께 이 자리를 빌어 감사의 말씀을 드립니다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<p><span style="text-decoration: underline"><strong> 설문조사 후기</strong></span></p>
<p>교육 후 진행된 설문 조사 결과, 짧았던 교육 시간에 대한 아쉬움과 선정되신 분들 이외에 참여해주신 참가자분들로 인해 강의실 정원보다 다소 초과되어 진행된 강의실 환경에 대한 의견들이 있으셨습니다. 이러한 부분들은 다음번 무료 강좌 진행시 참고하도록 하겠습니다.</p>
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/9946/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[2호]왕초보 전자회로 강좌특집 2부 &#8211; 2</title>
		<link>http://www.ntrexgo.com/archives/10413</link>
		<comments>http://www.ntrexgo.com/archives/10413#comments</comments>
		<pubDate>Sun, 20 Jun 2010 04:34:16 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[2호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[브레드보드]]></category>
		<category><![CDATA[왕초보]]></category>
		<category><![CDATA[전자회로]]></category>
		<category><![CDATA[회로]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=10413</guid>
		<description><![CDATA[디바이스마트 매거진 2호 &#124; 왕초보 전자회로 강좌 2부 2편. LED, 저항에 대하여 알아보자.]]></description>
				<content:encoded><![CDATA[<table style="width: 620px" border="0">
<tbody>
<tr>
<td><img class="size-full wp-image-10792 alignleft" alt="Scimage0" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/Scimage0.jpg" width="201" height="151" /></td>
<td><span style="font-size: x-large;color: #ee1146"><strong>왕초보 전자회로 강좌특집 2부 &#8211; 2</strong></span></p>
<p style="text-align: right"><span style="font-size: small">글 |스네일앤 스네이크</span></p>
<p style="text-align: right"><span style="font-size: small;color: #808080">※ 상기 내용은 디바이스마트와 스네일앤 스네이크의 협의를</span><br />
<span style="font-size: small;color: #808080"> 통하여 사용을 득한 내용입니다.</span></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><span style="color: #d72844;font-size: large">첫번째 회로만들기 / LED,저항</span></strong></p>
<p><span style="text-decoration: underline"><span style="color: #ff6600;text-decoration: underline">이번 시간에는 준비한 8 가지 기초회로 중의 첫번째로 LED를 켜는 가장 간단한 회로입니다.<br />
회로의 부품으로 LED와 저항이 사용되었으므로 이 부품들도 함께 설명합니다. </span></span></p>
<p>(공통부품인 브레드보드와 전원, 부품배치와 회로도 보는 법에 대해서는 앞에서 미리 설명을 드렸습니다)<br />
그림_“회로도 이해하기 (3)”에 회로도, 실체도, 부품리스트, 동작테스트 방법 및 주의사항이 나옵니다. 이 구성은 모든 회로예제에서 마찬가지입니다.<br />
※ 처음 회로를 제작하시는 분은 “실체도”를 똑같이 제작하시기 바랍니다. 다음에 회로동작을 확인한 후 자신의 생각대로 부품배치를 바꿔서 동작시켜 보십시요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SC013.jpg" rel="lightbox[10413]"><img class="wp-image-10733 aligncenter" alt="02SC013" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SC013-540x620.jpg" width="432" height="496" /></a></p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 회로설명</strong></span><br />
전원의 6V 전압 때문에 R1과 LED를 통해서 전류가 흐릅니다. (약 1mA 정도) 그 결과 LED가 점등합니다. (켜집니다)</p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 추가실험</strong></span><br />
LED가 극성이 있다고 하니 리드(lead)를 바꾸어 꼽아봅니다. LED가 켜지지 않는 것을 확인합니다. 저항의 리드(lead)도 바꾸어 보십시요. 그냥 LED 상태에 변화가 없지요? 그것은 저항은 극성이 없기 때문입니다. (아하! 극성이 없다는 말은, 뒤집어 생각하면 부품의 방향, 앞뒤, 전후가 없다는 말이로구나… 느낌이 팍 오지 않나요?)<br />
첫번째 회로는 무척이나 간단해 보입니다. 그렇다면 우리는 무엇 때문에, 지금, 여기서, 이 회로를 바라보고 있을까요? 간단하고 많이 쓰이니까요? 그런점도 있지만 단지 그런 이유만은 아니랍니다. 여기 쯤에서 우리가 전자회로를 공부하는 동기와 비젼 그리고 마음자세에 대해 생각해 봅시다.</p>
<p>대다수의 사람들은 새로운 것을 받아드리고 배우기를 무척이나 꺼립니다. 웬만하면 그전에 알고 있었던 지식을 이용하여 적당히 이해하고 떼우려고 합니다. 오락실이나 컴퓨터의 게임에서도 마찬가지입니다.<br />
가만히 살펴보면 여러가지 게임의 진행방법과 목표가 매우 비슷비슷하여 판에 박은 듯 합니다. 또 기본적인 규칙도 단순하다고 느껴지는 것이 많고, 결코 어렵지는 않습니다.<br />
우리가 새로운 지식을 습득하기 어렵다는 하나의 예로, 미흡하지만 필자가 지식 ⓐ를 받아들이는 과정을 묘사해 보겠습니다.</p>
<p>① 대부분의 경우 어디서 지식 ⓐ가 필요(중요)하다는 소리(정보)를 듣습니다.<br />
② 긴가민가 하면서 미적미적 여기저기 정보의 진위를 알아봅니다. (마음속으로는 사실이 아니기를 기대하면서…)<br />
③ 알고보니 불행히도 지식 ⓐ는 무척이나 중요할 것 같다는 생각이 듭니다. (세상에는 필요한 지식이 많지요)<br />
④ 그래도 올인하기는 커녕, 겨우 책이나 한권 사두고 한숨을 돌립니다.<br />
⑤ 멀찌감치서 이리 재고 저리 재보며 지식 ⓐ의 근처에서 빙빙 돌면서 세월을 보냅니다. (사실은 팍 덤벼들면 한 입 감인 경우도 많은데…)<br />
⑥ 이 핑계 저 핑계를 대면서 슬슬 공부합니다.<br />
⑦ 많은 시간이 흐릅니다.<br />
⑧ 어찌어찌하여 남보다 많이 알게되면 은근히 뻐기고&#8230; 난리도 아닙니다.</p>
<p>재미 있으셨나요? 뭐 인간의 본성이 그렇습니다.<br />
너무 자책하지 말기로 하지요&#8230; 하지만 필자가 왜 이런 이야기를 하는 것일까요?</p>
<p>그 이유는 원래 새로운 배움이 힘들기는 하지만, 그렇다고 소 닭보듯 경원하거나 한 발만 슬쩍 걸쳐놓고 “뭐 재미있는 것이 없나”하는 태도는 무척이나 위험하다는 말을 하고 싶어서입니다.</p>
<p><span style="background-color: #000080;color: #ffffff;font-size: medium"><strong>전자회로의 공부에 대해 약간 소개를 드리겠습니다.</strong></span></p>
<p>만일 대학에서 전공이나 그 비슷한 정도로 공부하시고 싶은 분은 전자공학이 기계공학과 더불어 현대 지식공학의 핵을 이루고 있다는 것만으로도 충분한 매력을 느낄 것입니다.(전자회로는 전자공학의 중요한 부분입니다)<br />
일반 아마추어에게는 전자회로 → 마이컴 (회로/프로그램) → 로봇 (마이컴 + 회로 + 통신 + 모터제어 + 기구) 으로 발전해 나간다는 것에 주목할 필요가 있습니다. 이 예를 보면 왜 로봇기술이 매력적인지 알 수 있습니다. (여러 기술이 종합되는 응용분야이기 때문) 전자회로와 마이컴을 알면 전기/전자분야의 기본이 갖추어진 것이므로, 앞으로 노력 여하에 따라 여러가지 응용기술로 뻗어 나아갈 수 있습니다. (로봇도 그 중의 하나입니다) 대학에서도 실무적으로 전자회로와 마이컴까지만 가르치는 것도 이런 이유가 있기 때문입니다.<br />
그렇다면 가장 중요한 질문 하나!</p>
<p>전자회로와 마이컴을 이해하는데 얼마나 시간과 노력을 투자해야 할까요??? → Nobody know right now. (지금으로서는 아무도 모릅니다)</p>
<p>이런… 무슨 말인지 모르겠다구요?<br />
많은 회사에서 프로젝트를 수행할 수 있는 연구원이 모자라서 발을 구르고 있습니다. 심지어는 대학을 졸업해도 능력이 부족해서 회사에서 다시 교육이 필요하다고 야단이지요. 이러한 현상은 우리나라만의 예는 아닐 것입니다. 세계 어디서나 우수한 인력은 모자랍니다. 그렇다면 우수한 능력을 갖고 있다는게 무슨 뜻인가요? 회사에서 우수한 능력은 새로운 제품을 개발해 내는 능력이고, 연구소에서 우수한 인력이란 새로운 연구를 진행하는 방법과 수단을 갖춘 사람을 의미합니다.<br />
결국 한 마디로 요약하면, 우수한 연구자란 탄탄한 기초위에 응용력을 겸비한 성실하고 겸손한 사람입니다. (겸손해야 새로운 지식(기술)에 마음을 열어 받아들일 수 있고, 성실해야 새로운 지식(기술)을 자기것으로 습득할 수 있습니다)</p>
<p>이런 이유로 기업에서는 대학에서 마이크로 로봇 제작경험이나 기업과 공동프로젝트를 수행해 본 경험을 높이 평가해줍니다. 기초와 응용을 어느정도 겸비했다고 보여지니까요. (대학시절에 까다로운 연구 프로젝트를 찾아서 문제해결에 노력하고, 그 연구결과를 정리하여 레포트를 만들어서 연구직 입사원서와 함께 제출하면 면접까지는 문제없습니다. 누구라도 이런 사람을 한 번 만나보고 싶어하지요. 이런사람이 바로 능동적이고 톡톡튀는 인재랍니다)</p>
<p>전자회로와 마이컴은 위에서 설명한 탄탄한 기초에 해당합니다. 그러므로 “얼마나 시간과 노력을 투자해야 할까?” 라는 질문에 한마디로 답하기는 어렵습니다. 사람마다 자질과 지식을 습득하는 방법이 천차만별로 다르기 때문입니다. 사람이 흉중에 포부가 있어야 한다고 말합니다. 또 미래에 대한 비젼이 있어야 한다고도 합니다. 그러나 무엇을, 어떻게, 얼마나 해야할지를 가늠할 수 없다면 현실적인 포부나 비젼이 자리잡기 어렵습니다.<br />
그렇다면 질문 방향을 바꾸어서, 전자회로와 마이컴 이해에 필요한 시간과 노력에 대한 판단은 각자에게 맡기기로 하고, 방법과 습득해야할 지식의 양을 알아보는 것이 현실적이겠습니다.</p>
<p>전자회로의 특별한 점은 몇가지 종류의 부품조합으로 회로가 구성된다는 것입니다. (수동부품 : R, L, C 능동부품 : D, Tr, FET, IC) 여기에 더해서 직류(DC), 교류(AC+pulse), 전압(V), 전류(A)의 개념 정도를 이해할 필요가 있습니다. 물론 전자회로 실험이 반드시 병행되어야 합니다. 마이컴쪽은 마이컴 회로와 인터페이스 회로 그리고 마이컴 프로그램의 이해의 3 가지로 나뉘어집니다. 그러나 이미 전자회로를 습득해 두었으므로 마이컴 회로, 인터페이스 회로의 이해와 실험은 간단합니다. (이런 이유때문에 우리가 지금, 여기서 고생하는 거지요 )</p>
<p>하나남은 상대는 “마이컴 프로그램” 이지만, 일단 마이컴 회로가 동작하면 작성한 프로그램을 한단계 한단계 동작을 확인할 수 있으므로 쉽고 재미있고 빠르게 실력이 붙습니다. (대개 30-50가지의 작은 프로그램을 작성해서 시험해보면 혼자서 응용가능한 수준이 됩니다. 프로그램 작성은 의외로 재미있어서 시간가는 줄 모릅니다) 마이컴은 책만 붙들고 백날 공부해 봐도 거의 진전이 없습니다. 반드시 실험이 따라주어야 합니다. (마이컴은 IC이기 때문에 마이컴 실험은 전자회로 제작의 경험이 필요합니다)</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<p>※ 책만으로는 절대로 마이컴에 재미를 붙일 수 없습니다. (98%의 신뢰도) &#8211; 이유는 명확하지만 나중에 설명합시다. 사실은 전자회로도 마찬가지입니다. 대학에서 전공을 했어도 실험이 부족하기 때문에 회로사용에 자신있는 사람이 별로 없을 정도입니다. (거기다가 전자회로는 어렵니, 어쩌니 하면서 다 완성되어 있는 컴퓨터의 프로그램만 선호합니다. 대부분 틀린 말입니다. 차근차근 순서대로 공부해가면 전자회로는 결코 어렵지 않습니다.</p>
</div>
<span style="text-decoration: underline;color: #ff9900"><strong>▶ 용어 : 저항(R), 코일(L), 콘덴서(C), 다이오드(D), 트랜지스터(TR), 전계효과 TR(FET), 집적회로(IC)</strong> </span><br />
지금까지 전자회로와 마이컴을 이해하고 사용하는 것이 전기/전자분야의 기초가 되는 이유를 설명드렸습니다. 그리고 공부해야 할 내용과 범위도 함께 정리해 보았습니다. 이제 다시 이전의 질문으로 되돌아가 봅시다.<br />
①_⑴ 전자회로에서 부품 10가지, 개념 10가지 정도를 이해하고 나서 ①_⑵ 20-30가지의 간단한 기본회로를 만들고 동작시키는 것을 목표로 부품을 구하고 실험을 해 보는데 얼마나 걸릴까? ②_⑴ 간단한 마이컴 회로를 만들어 두고 ②_⑵ 30-50가지의 100줄 미만의 작은 프로그램을, 하나씩 작성하고 마이컴의 롬(rom)에 입력시키면서 동작을 확인해 나가는데 얼마나 걸릴까? 목표가 분명하니 올인해 볼 수도 있지 않겠습니까? 이 학습이 여러분의 미래에 중요한 역할을 한다고 가정하고 진지하게 생각해 보면 어떤 답이 나올까요?<br />
생각은 사람마다 다르겠지만, 확실한 점은 전자회로와 마이컴 과정을 체계적으로 배워 나간다면 무척 어려운 일은 아니라는 것이지요. 필자의 생각으로는 각각 1~2달 정도 소요되지 않을까요? 이 정도면 대학의 한학기 과정이지요&#8230; 그렇다면 우리의 “왕초보 전자회로”의 10가지 부품설명과 8가지 기초회로도 상당한 내용을 담고 있다는 이야기입니다.<br />
필자는 지금의 강의를 만드는데 많은 아이디어와 정성을 들였습니다.<br />
새로운 지식을 배울 때, 배우는 사람의 입장에서 찔끔찔끔 한정없이 끌려다니면 정말 짜증이 납니다. 제목은 거창한데 내용이 별로인 경우도 본전 생각이 납니다. 손오공이 근두운을 타고 적진을 둘러보듯이, 전자회로라는 큰 성채를 한번에 휘둘러 돌아볼 수 있도록 “왕초보 전자회로” 강의를 기획했습니다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
&lt;&lt; 강의의 요점 &gt;&gt;<br />
① 전자부품을 학습하고, ② 부품의 심볼을 익혀 회로도를 볼 수 있으며, ③ 실제부품과 브레드보드를 사용하여 회로를 제작하고 동작을 확인한다는 3 마리 토끼를 단번에 잡으려는 것입니다. (각 장에 소개되는 회로는 그 장에서 설명하는 부품을 실험하도록 설계 되었습니다. 왜 부품이 그와 같은 동작을 하는지 주의깊게 살펴보시기 바랍니다) 산을 바라보고 있으면, 산보다 작은 나무 하나하나는 주의가 소홀하게 되는 경우가 많습니다. 중요한 의미를 전달하는데 중점을 두다보니, 부득이 생략되는 부분에 대해서도 관심과 주의를 부탁드립니다.<br />
</div>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 부품설명 : LED (Light Emitting Diode)</strong></span><br />
LED는 일종의 다이오드입니다. 빛을 내는 다이오드죠… 그래서 “발광 다이오드” 라고 부릅니다. 다이오드이므로 +, _극이 정해져 있습니다. (다리가 긴 쪽이 Anode로 +극입니다) LED는 반도체로 전류를 빛으로 전환하는 효율이 높아 적은 전류를 소비하며 수명도 깁니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SC012.jpg" rel="lightbox[10413]"><img class="wp-image-10732 aligncenter" alt="02SC012" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SC012.jpg" width="478" height="245" /></a></p>
<p>적색, 녹색, 노란색의 빛을 내는 3가지 종류의 제품이 판매됩니다. 일반적으로 디지탈 회로에서 회로상태를 모니터하기 위해 많이 사용됩니다.</p>
<p><span style="text-decoration: underline;color: #ff9900"><strong>▶ 부품설명 : 저항 ( Registor, 정격 단위는 오옴 [Ω로 표기] )</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SC015.jpg" rel="lightbox[10413]"><img class="wp-image-10735 aligncenter" alt="02SC015" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SC015-620x418.jpg" width="496" height="334" /></a><br />
저항은 그림_“부품 이해하기 (저항)-1”에서 처럼 여러가지 종류가 있으며 사용용도가 조금씩 다릅니다. 일반적으로 널리 사용되는 종류는 1/4W, 5% 오차의 저항입니다. 지금 단계에서 우리에게 필요한 것은 색깔띠로 표기된 저항값의 크기를 읽는 방법을 습득하는 것입니다.<br />
색띠의 갯수는 보통 4 개이며 맨 마지막의 색은 대부분 금색으로 5%의 오차를 나타냅니다. 앞에서 3개의 띠로 저항값을 나타내며, 그림에서 보면 갈색(1), 검정색(0), 노란색(10㏀:10000Ω) 입니다. 첫번째, 두번째의 숫자를 순서대로 늘어놓고, 세번째의 숫자를 곱합니다. 즉 1 0×10000Ω = 100000Ω (= 100㏀) 이 됩니다. 몇 번 연습하면 어렵지 않습니다. (디지탈 테스터의 저항측정 모드를 사용하면 쉽게 측정할 수 있습니다. )<br />
저항은 전류를 제한하는 역활을 하며, 그 결과 전압을 낮추는 효과를 가져옵니다. 저항과 전압과 전류의 관계는 오옴의 법칙 I=V/R 으로 표현됩니다. (우리 강의에서는 설명하지 않습니다) 저항은 자신을 통해 흐르는 전류의 제곱에 비례하는 열을 발생시킵니다.<br />
그러므로 전류를 많이 흘리는 회로에서는 열을 발산하기 위해 저항의 표면적을 키우므로 덩치가 커집니다. (1/4W는 0.25W 까지 열을 발생해도 좋다는 뜻입니다. 대부분의 회로에서는 이 정격으로 O.K) 저항이 파손되는 경우는 과도한 열이 발생하여 타버리는 것으로, 연기가 솔솔 발생하며 타는 냄새가 나는 경우가 대부분입니다.</p>
<p>&nbsp;</p>
<p style="text-align: right"><span style="color: #999999">다음편에서 계속 됩니다. </span></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/10413/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
