<?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; Projects to build</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/projects-to-build/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>[39호]카멜레온 DIY LED 이야기 ⑤</title>
		<link>http://www.ntrexgo.com/archives/32471</link>
		<comments>http://www.ntrexgo.com/archives/32471#comments</comments>
		<pubDate>Fri, 25 Nov 2016 00:00:16 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[39호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=32471</guid>
		<description><![CDATA[디바이스마트 매거진 39호 &#124; 오늘은 좀 더 멋진 프로젝트로 [특별한 크리스마스 트리] 만들기에 도전해 보겠습니다. 사슴도 만들고, 산타도 만들고, 커다랗고 멋진 눈 결정도 만들고… 그리고 이것들을 엮어서 크리스마스 트리를 만든 다음, 스마트폰으로 트리 점등을 해 보는데까지 씽씽 달려보겠습니다. 야호~ 신난다. “흰 눈 사이로 ♬ 썰매를 타고 ♬ GO~ GO~”]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-1.jpg" rel="lightbox[32471]"><img class="alignnone size-large wp-image-32622" alt="39 ptb diyled (1)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-1-620x234.jpg" width="620" height="234" /></a></p>
<p>&nbsp;</p>
<p><span style="font-size: large"><strong>카멜레온 DIY LED 이야기 5</strong></span></p>
<p><strong><span style="font-size: xx-large">LED ART 2 : 특별한 크리스마스 트리</span></strong></p>
<p>&nbsp;</p>
<p style="text-align: right">글 | 신상석 ssshin@jcnet.co.kr</p>
<p style="text-align: right">
<table style="background-color: #e2e2e2;;width: 620px" border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>디바이스마트 매거진 독자 여러분, 안녕하세요. 앞으로 5회에 걸쳐 [카멜레온 DIY LED 이야기]를 진행할 신상석입니다.<br />
이 이야기는 WS2812B라는 컬러 LED를 기반으로 제작된 [카멜레온 DIY LED] 시리즈를 이용하여 생활에 필요한 다양한 형상을 꾸며보고 이것을 다양한 컬러로 디스플레이 해보는 내용입니다. 앞으로 진행할 내용에 대하여 간단히 알아보면 다음과 같습니다. (약간 변경될 수도 있습니다.)<br />
앞으로 즐겁고 유익한 강의가 될 수 있도록 많은 격려와 성원 부탁드립니다.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>디바이스마트매거진 독자 여러분, 안녕하세요. 반갑습니다.<br />
[카멜레온 DIY LED 이야기] 다섯번째, 어느덧 벌써 마지막 시간이네요.<br />
지난 시간에는 카멜레온 DIY LED(카DL)을 이용하여 [I ♥ U] 모양과 [변색 카멜레온]을 꾸미고 실행시켜 보았습니다. 오늘은 좀 더 멋진 프로젝트로 [특별한 크리스마스 트리] 만들기에 도전해 보겠습니다. 사슴도 만들고, 산타도 만들고, 커다랗고 멋진 눈 결정도 만들고… 그리고 이것들을 엮어서 크리스마스 트리를 만든 다음, 스마트폰으로 트리 점등을 해 보는데까지 씽씽 달려보겠습니다. 야호~ 신난다. “흰 눈 사이로 ♬ 썰매를 타고 ♬ GO~ GO~”</p>
<p><span style="color: #008000"><strong>아이템(ITEM) 모듈</strong></span></p>
<p>지난번 이야기에서 카DL의 기본 구성품 중 4종류의 모듈을 소개한 바 있습니다. BAR 모듈은 직선용, ARC 모듈은 곡선용, DIR 모듈은 방향 전환용, FIGURE 모듈은 기본 도형용으로 소개를 하였지요. 크리스마스 트리를 장식할 여러가지 형상을 만들기 전에, 카DL의 나머지 형상 모듈인 ITEM 모듈을 소개하는 것이 앞으로의 이야기 전개에 편리할 것 같아 이것을 먼저 간단히 살펴보고 가겠습니다. 아이템(ITEM) 모듈은 말 그대로 사람들이 자주 사용할만한 간단한 아이템을 형상화한 모듈입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-2.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32624" alt="39 ptb diyled (2)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-2.jpg" width="620" height="338" /></a></p>
<p>해(링), 달, 별, 작은화살표, 하트, 눈, 큰화살표의 7가지 모듈이 있는데, 이것은 개별 형상을 가지고 있으므로 단독으로도 사용할 수 있고, 다른 모듈과 조합하여 사용할 수도 있습니다. 창조적인 상상력을 동원하면 이 모듈들을 이리저리 엮어서 또 다른 멋진 아이템을 만들어 낼 수도 있겠습니다.</p>
<p><span style="color: #008000"><strong>특별한 크리스마스 트리</strong></span></p>
<p>카DL로 [특별한 크리스마스 트리]를 제작하기로 하였으므로 일단 어떤 모양으로 어떤 크기로 어떤 기능을 갖도록 만들 것인지를 먼저 고민하여 결정한 후 이것을 제작하도록 하겠습니다. 일단 하고 싶은 것을 죽 나열해 보기로 하지요.</p>
<p>· 내 키 정도 되는(1.5m ~ 2m) 크기의 녹색 트리에 장식한다.<br />
· 카DL의 ARC 모듈을 사용하여 물결 모양의 형상을 만들고, 반짝반짝하는 느낌과 물결이 흘러가는 느낌을 주도록 프로그램한다.<br />
· 카DL의 BAR, FIGURE, ITEM 모듈을 적당히 섞어서 사용하여 알록달록하고 다양한 색상이 나타나도록 프로그램한다.<br />
· 손바닥 정도 크기의 크리스마스 상징물을 카DL을 이용하여 5-6개 만들어 배치하고, 각 상징물의 색상과 움직임이 구별되도록 프로그램한다.<br />
· 얼굴정도 크기로 조금 큰 특별 형상을 1개 만들어 중앙에 배치하고, 은은하게 조금씩 변하도록 프로그램한다.<br />
· 스마트폰으로 그룹별로 껐다 켰다 할 수 있게 프로그램한다.</p>
<p>(사실 이것들을 모두 한꺼번에 다 제작한다고 하면 비용이 꽤 많이 듭니다. 실제로는 자신이 해보고 싶은 것만, 마음에 드는 것만 부분적으로 구현하면 되겠습니다. 별 하나만 제작한다고 해도 충분히 특별한 크리스마트 트리가 될 수 있으니까요.)<br />
어느 정도 아우트라인이 갖추어졌으므로 세부적인 것은 하나씩 구현해 가면서 구체화시켜 보겠습니다.</p>
<p><span style="color: #3366ff"><strong>1단계 : 트리 구입 및 약간의 장식 구입</strong></span><br />
기반이 되는 트리가 있어야 실제로 구현하면서 적용해 볼 수 있으므로 트리를 우선 준비하여야 하겠습니다. 방울이나 종, 리본 등 크리스마스 기분을 내기 위한 약간의 장식도 함께 준비해 두면 더 예쁠테니 취향에 따라서 원하는 것을 구입하여 준비합니다.</p>
<p><span style="color: #3366ff"><strong>2단계 : 필요한 형상 설계하기</strong></span><br />
두번째로 할 일은 지난 회에도 언급한 것처럼 형상을 제작하여야 합니다. 트리에 얹혀 있는 형태로 만들면 되므로 필요한 형상을 만들고 이것들을 케이블로 죽 이어가는 형태로 하겠습니다.<br />
기본 형상은 있는 그대로 연결하면 되므로, 크리스마스 기분이 나는 손바닥만한 형상 5-6개와 얼굴만한 큰 형상 1개를 정해서 따로 만들겠습니다. 무엇이 좋을까요? 음… 심사숙고한 끝에…<br />
십자가, 별, 트리, 지팡이, 싼타, 루돌프 이렇게 6가지 형상은 손바닥만한 크기로 만들고, 눈(SNOW) 결정은 얼굴만한 형상으로 조금 크게 구현하는 것으로 하겠습니다.<br />
카DL로 이런 모양을 형상화하여 구현하려면 사실 디자인적인 감각이 약간 필요합니다만, 뭐, 그냥 자신이 원하는대로 만들어도 별 지장은 없습니다. 제 멋에 사는거니까요.</p>
<p>저는 다행히 주변에 디자이너가 있어서 도움을 받아 아래와 같이 형상 설계를 하였습니다.<br />
AUTOCAD 같은 설계도구를 이용하여 만들었기 때문에 상당히 정교하게 제작되었는데, 이런 도구없이 손으로 대강 쓱쓱 그려도 무방합니다.<br />
형상이 마음에 드시나요? 단순하지만 특징을 잘 잡아 잘 표현된 것 같습니다. 저는 매우 만족합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-3.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32626" alt="39 ptb diyled (3)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-3.jpg" width="620" height="396" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-4.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32627" alt="39 ptb diyled (4)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-4.jpg" width="620" height="429" /></a></p>
<p>와우~ [눈(SNOW) 결정] 형상! 이건 거의 예술이네요. FIGURE 모듈(JLED-TRI-6)과 ITEM 모듈(JLED-ARROW-9, JLED-SNOW-12) 그리고 BAR 모듈(JLED-BAR-1, JLED-BAR-2)의 5가지 모듈을 적절히 배치하여 아주 독특하면서도 멋진 [눈(SNOW) 결정]을 구현하였습니다. 이것을 보면 정말 웬만한 형상은 카DL의 기본 모듈로 모두 다 구현이 가능할 것이라는 확신이 듭니다. 이것은 매우~ 매우~ 만족입니다.</p>
<p>참, 지난 번에도 이야기한 것처럼, 이와 같은 형상을 만들 때는 연결성도 고려하면서 모듈을 배치해야 하는 것도 잊지 말아야 할 사항입니다. 나중에 LED에 불이 ON 될 때를 고려하면 나름대로 자신만의 규칙성을 가지고 LED에 불이 들어올 때를 상상하며 연결을 하는 것이 좋습니다.<br />
만들어진 형상을 연결을 표시하여 다시 나타내 보겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-5.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32628" alt="39 ptb diyled (5)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-5.jpg" width="620" height="460" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-6.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32629" alt="39 ptb diyled (6)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-6.jpg" width="620" height="412" /></a></p>
<p>이 중, 십자가 형상은 CON-0 를 이용하여 연결하면 밑판 없이도 연결이 가능할 것 같고, 나머지 형상은 밑판을 대고 카DL을 꽂은 후 뒤에서 CABLE-MM-10이나 CABLE-MM-20과 같은 케이블로 연결하면 될 것 같습니다.</p>
<p>눈결정 형상은 좀 더 복잡한데, 여섯 방향의 메인 직선 형상을 먼저 연결한 다음, 주변의 나머지부분을 연결하는 형태로 된 것을 확인할 수 있습니다. 어쨓거나 자기 자신만의 룰을 이용하여 한 줄로 연결이 되도록 하면 됩니다.<br />
나중에 형상 제작을 위하여 한 가지 팁을 더 말씀드리면 아래와 같이 그림을 그려 놓고 필요한 카DL의 종류와 개수를 적어 놓으면 나중에 모듈을 준비할 때 조금 더 편리할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-7.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32630" alt="39 ptb diyled (7)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-7.jpg" width="582" height="401" /></a></p>
<p><span style="color: #3366ff"><strong>3단계 : 형상 제작하기</strong></span><br />
자, 이제 설계(디자인)가 완료되었으니 구현할 차례입니다.<br />
모든 카DL을 하나로 모두 연결할 수도 있겠지만 이 경우 전체 LED의 갯수가 너무 많아 제어하기가 어렵기 때문에, 여기서는 4개 그룹으로 나누고 각 그룹마다 아두이노를 하나씩 따로 연결하여 프로그램을 하는 것으로 하겠습니다.</p>
<p><strong>제 1 그룹 연결</strong><br />
ARC 모듈은 기본 형상을 그대로 사용하므로 CON-0 및 CABLE-MM-10 케이블을 이용하여 직접 연결합니다. 최종적으로 만들어진 형상은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-8.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32631" alt="39 ptb diyled (8)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-8.jpg" width="582" height="318" /></a></p>
<p><strong>제 2 그룹 연결</strong><br />
BAR, FIGURE, ITEM 모듈도 기본 형상을 그대로 사용하므로 CABLE-MM-20 또는 CABLE-MM-10 케이블을 이용하여 직접 연결합니다. 최종적인 형상은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-9.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32632" alt="39 ptb diyled (9)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-9.jpg" width="587" height="320" /></a></p>
<p><strong>제 3 그룹 연결</strong><br />
제 3그룹은 손바닥만한 형상을 설계하여 만든 모듈인데, 이 중 십자가는 아무런 보조 도구 없이 그냥 CON-0를 이용하여 연결하면 되지만, 나머지 형상은 직접 연결만으로는 형상을 만들 수 없으므로 지난번에 살펴본대로 폼보드(2mm) 등을 밑판으로 하여 카DL을 관통하여 모양을 잡고, 뒤쪽에서 CON-0 커넥터와 CABLE-MM-10 또는 CABLE-MM-20 케이블을 이용하여 고정시키는 방법을 사용하여야 합니다. 참, 조립하기 전에 폼보드의 형상은 칼이나 가위 등을 이용하여 미리 알맞게 잘라놓는 것이 좋습니다. 아래는 트리의 경우 앞면과 뒷면의 조립 형상입니다. 직접 연결되는 부분은 CON-0를 이용하여 연결하고 조금 떨어져 있는 경우는 CABLE-MM-10을 이용하여 연결한 것을 알 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-10.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32633" alt="39 ptb diyled (10)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-10.jpg" width="584" height="350" /></a></p>
<p>조립을 좀 더 편하게 할 수 있는 팁을 하나 더 알려드리지요. 폼보드 위에 설계한(그린) 도안을 붙이고 이 위에 카DL을 하나씩 순서대로 꼽아가면 눈으로 보면서 조립하는 것 보다는 훨씬 편리합니다. 6가지 형상을 모두 조립한 후의 모습은 아래와 같습니다. 십자가 형상은 CON-0만으로도 연결이 가능하여 밑판없이 제작하였고 나머지 5개 형상은 모두 2mm 두께의 폼보드를 이용하여 밑판을 만든 후 제작하였습니다. 최종적인 형상은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-12.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32635" alt="39 ptb diyled (12)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-12.jpg" width="581" height="336" /></a></p>
<p><strong>제 4 그룹 연결</strong><br />
제 4 그룹에 속하는 것은 오직 눈결정 모듈 1개입니다. 제 3그룹의 6개 형상을 제작한 것과 동일한 방법으로 제작하면 됩니다. 최종적인 형상은 아래와 같습니다.</p>
<p><span style="color: #3366ff"><strong>4 단계 : 아두이노 연결하기</strong></span><br />
이제 만들어진 형상을 제어하기 위하여 아두이노를 연결하도록 하겠습니다. 우리는 스마트폰으로 아두이노를 제어하기로 하였으므로 아두이노에도 무선 모듈을 연결(또는 장착)하여 이를 해결해야 합니다. 스마트폰에서 사용할 수 있는 무선 통신 방식은 와이파이(WIFI)를 이용한 이더넷 통신과 블루투스를 이용한 시리얼 통신이 있는데, 전송하여야 할 데이터의 양이 많지 않으므로 연결하기 쉬운 블루투스 통신 방식을 사용하는 것이 간편하므로 이것을 사용하는 것으로 하겠습니다.</p>
<p>아두이노 UNO를 비롯한 아두이노 모듈은 블루투스 모듈을 내장하고 있지 않으므로 이것을 가능하게 하려면, (1) 블루투스 실드를 장착하여 사용하거나 (2) 블루투스 모듈을 준비하여 케이블로 연결하거나 (3) 아예 블루투스 모듈을 내장한 아두이노를 사용하는 방법이 있습니다. 우리의 경우는 크기와 편의성을 위하여 (3)번 방식을 채택하도록 하며, 여기에 가장 알맞은 아두이노로 JARDUINO-UNO-BTmini(제이씨넷)를 선정합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-13.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32636" alt="39 ptb diyled (13)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-13.jpg" width="579" height="558" /></a></p>
<p>JARDUINO-UNO-BTmini는 아두이노 UNO와 기능이 호환되며, HC-05 블루투스시리얼 모듈을 내장하고 있는 새끼손가락만한 크기의 모듈입니다. 블루투스 포트 선택 스위치는 HC-05 블루투스시리얼 모듈의 TX/RX 연결 포트를 아두이노 내부의 RX(D0)/TX(D1) 핀으로 연결하거나 D4/D7 핀으로 연결하도록 선택하는 스위치인데, 우리는 이것을 D4/D7로 연결되도록 위치시키고, D4/D7 핀을 SoftSerial 포트로 선언해서 사용할 것입니다. 한편, 카DL 그룹의 첫번째 모듈의 I(Data Input) 핀에 연결할 핀은 임의로 D13으로 할당하겠습니다. 장시간 사용을 염두에 둔다면 안정성을 위하여 JLED-START-1을 JARDUINO-UNO-BTmini와 카DL 사이에 삽입하는 것이 좋지만 짧은 시간 사용하는 것이라면 이것을 생략하여도 무방합니다.</p>
<p>크리스마트 트리 제작에 있어 또 하나 고려할 점은 전원 공급 방식입니다. 몇 개 안되는 모듈을 사용할 때는 USB 케이블을 통하여 제공되는 전원(5V, 500mA)이나, 휴대폰 보조배터리로도 사용이 가능하겠지만, 이번과 같이 한 그룹 당 카DL에 사용된 WS2812B의 개수의 최대치가 약 150개 정도 될 것으로 예상되는 경우는 다른 전원 공급 방법을 사용하여야 합니다. 일단, 필요한 전류량을 계산해보겠습니다.</p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="4">
<tbody>
<tr>
<td style="text-align: center">항목</td>
<td style="text-align: center">필요 전류량</td>
</tr>
<tr>
<td style="text-align: center">WS2812B 1개 (최대)</td>
<td style="text-align: center">60mA</td>
</tr>
<tr>
<td style="text-align: center">WS2812B 150개 (1개 그룹 최대)</td>
<td style="text-align: center">9A (60mA X 150)</td>
</tr>
<tr>
<td style="text-align: center">WS2812B 600개 (4개 그룹 최대)</td>
<td style="text-align: center">36A (9A X 4)</td>
</tr>
<tr>
<td style="text-align: center">WS2812B 600개 (실제 사용 최대)</td>
<td style="text-align: center">18A (최대치의 1/2 가정)</td>
</tr>
</tbody>
</table>
<p>이론적인 최대값은 WS2812B의 모든 R, G, B LED가 켜져 있는 상태를 가정한 경우이므로 실제 사용 최대값은 약 1/2 정도로 설정하여도 충분하리라 생각됩니다. 이 경우 전원 공급은 최대 10A짜리 파워서플라이 2개를 사용하여 2그룹씩 제공하여야 할 것 같네요. 물론 4개의 JARDUINO-UNO-BTmini에도 전류를 공급하여야 하는데 이것은 큰 전류량이 아니므로 이것은 한 쪽 파워서플라이에서 함께 공급하면 되겠습니다.</p>
<p>눈결정 그룹에 연결된 모습만 간단하게 나타내면 아래와 같으며, 다른 그룹도 같은 방법으로 연결할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-14.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32637" alt="39 ptb diyled (14)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-14.jpg" width="596" height="390" /></a></p>
<p><span style="color: #3366ff"><strong>5 단계 : 아두이노 스케치 프로그램하기</strong></span><br />
하드웨어는 모두 완성되었으므로, 이제는 스케치 프로그램을 작성할 시간입니다. 그동안 배운 라이브러리를 이용하여 자신이 원하는 대로 프로그램을 작성하면 되겠습니다. 모든 그룹에 대한 프로그램를 제시하는 것은 양도 너무 많으므로 가장 핵심이 되는 형상인 눈결정에 대한 스케치 프로그램만 살펴보도록 합니다.<br />
스케치 프로그램의 큰 줄기는 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-2.png" rel="lightbox[32471]"><img class="alignnone  wp-image-32625" alt="39 ptb diyled (2)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-2.png" width="500" /></a></p>
<p>· 블루투스 신호(TX/RX)는 아두이노 D4/D7 핀에 연결되어 있으므로 이것을 SoftwareSerial로 선언하고 처리한다.<br />
· 블루투스 앱을 이용하여 휴대폰으로부터의 [켜짐] 또는 [꺼짐] 명령을 받아, [켜짐] 명령이 오면 LED 동작을 실행하고, [꺼짐] 명령이 오면 LED를 모두 끈다. 따로 명령이 오지 않으면 현재 상태를 지속한다.<br />
· 눈결정 모양은 총 157개의 LED로 구성되는데, 이것을 크게 3부분으로 나누어 프로그램한다. 즉, 처음 108번째까지는 눈(SNOW) 형상의 MAIN 부분으로, 109번째부터 133번째까지는 SUB1 부분으로,</p>
<p>나머지는 SUB2 부분으로 나누어 처리한다.</p>
<p>· 단조로움을 피하기 위해 컬러 및 컬러 변화 시간을 결정할 때 random( ) 함수를 가능한 많이 이용한다.<br />
· 카DL은 밝기가 상당히 밝으므로 눈으로 쳐다 보았을 때 눈이 많이 부시지 않는 정도의 밝기로 처리한다.<br />
· 각 부분의 컬러는 아래의 기준으로 결정한다.<br />
· MAIN : 청색과 녹색의 비중을 강하게 하고, 빨강의 비중은 약하게 함<br />
· SUB1 : 청색과 녹색의 비중을 조금 강하게 하고, 빨강의 비중은 조금 약하게 함<br />
· SUB2 : 청색과 녹색, 빨강 비중을 똑같이 함<br />
· 모든 LED의 컬러가 흰색이 되는 경우와 각 LED의 컬러가 알록달록하도록 하는 경우도 구현한다.</p>
<p>이를 바탕으로 구현한 알고리즘은 아래와 같습니다.<br />
자, 이제 스케치 프로그램을 작성해 보겠습니다. 알고리즘을 보면서 차근차근 구현하면 되겠습니다. 아래를 보시지요.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
#include &lt;Adafruit_NeoPixel.h&gt;<br />
#include &lt;SoftwareSerial.h&gt;</p>
<p>#define CDL 13 // 아두이노(JARDUINO-UNO-BTmini) 연결 핀 = D13<br />
#define NUMPIXELS 157 // 눈결정에 사용된 카DL LED의 총 개수<br />
#define SNOW_NUM1 108 // 눈결정 MAIN 골격에 사용된 마지막 LED 번호<br />
#define SNOW_NUM2 133 // 눈결정 SUB1에 사용된 마지막 LED 번호<br />
#define SNOW_NUM3 157 // 눈결정 SUB2에 사용된 마지막 LED 번호<br />
#define BT_RX 4 // 블루투스가 연결된 RX핀 번호 (소프트시리얼로 연결)<br />
#define BT_TX 7 // 블루투스가 연결된 TX핀 번호 (소프트시리얼로 연결)<br />
#define CMD_ON ‘1’ // 휴대폰에서의 카DL 켜기(ON) 명령어<br />
#define CMD_OFF ‘0’ // 휴대폰에서의 카DL 끄기(OFF) 명령어</p>
<p>int mode=CMD_ON; // 시작은 카DL이 켜진 상태</p>
<p>SoftwareSerial btSerial=SoftwareSerial(BT_RX, BT_TX); // 블루투스 시리얼 핀 할당<br />
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, CDL, NEO_GRB + NEO_KHZ800); // 눈결정 구성 = (개수, 핀번호, 기타)</p>
<p>void setup()<br />
{<br />
pinMode(CDL,OUTPUT);<br />
btSerial.begin(115200); // 115200 baud (JARDUINO-UNO-BTmin 기본 셋팅<br />
pixels.begin(); //<br />
randomSeed(analogRead(0)); // 랜덤 초기값 설정<br />
for(uint8_t i = 0; i&lt;=NUMPIXELS; i++)<br />
pixels.setPixelColor(i,pixels.Color(0,0,0)); // 모든 카DL 꺼진 상태에서 시작<br />
pixels.show();<br />
delay(300);<br />
}</p>
<p>void loop()<br />
{<br />
uint8_t r, g, b, command, dummy;<br />
int i;</p>
<p>if (btSerial.available()) // 휴대폰에서의 명령 검사<br />
{ // 휴대폰의 입력이 있으면<br />
command = btSerial.read(); // 값을 저장하고,<br />
while (btSerial.available()) // 기타 다른 입력이 혹시 있으면<br />
dummy = btSerial.read(); // 모두 버림<br />
if (command == CMD_ON) // [켜기] 명령어면<br />
mode = CMD_ON; // [켜기] 모드 세팅<br />
else if (command == CMD_OFF) // [끄기] 명령어면<br />
mode = CMD_OFF; // [끄기] 모드 세팅<br />
else ; // 그 외의 명령어이면 무시!<br />
}<br />
if (mode == CMD_ON) // [켜기] 모드이면<br />
{<br />
r = random(0,16); // 눈결정의 MAIN은 r, g, b를 약한 불빛으로 랜덤하게<br />
g = random(32,64); // 단, 청색과 녹색이 많이 강하도록<br />
b = random(32,64);<br />
for(i = 0; i&lt;=SNOW_NUM1; i++)<br />
pixels.setPixelColor(i,pixels.Color(r,g,b));<br />
pixels.show();<br />
delay(random(100,1000)); // 지속 시간도 0.1초~1초로 랜덤하게</p>
<p>r = random(0,64); // 눈결정의 SUB1은 r, g, b를 약한 불빛으로 랜덤하게<br />
g = random(32,64); // 단, 청색과 녹색이 조금 강하도록<br />
b = random(32,64);<br />
for(i=SNOW_NUM1+1; i&lt;=SNOW_NUM2; i++)<br />
pixels.setPixelColor(i,pixels.Color(r,g,b));<br />
pixels.show();<br />
delay(random(100,1000)); // 지속 시간도 0.1초~1초로 랜덤하게</p>
<p>r = random(0,64); // 눈결정의 SUB2는 r, g, b를 약한 불빛으로 랜덤하게<br />
g = random(0,64); // 단, 모든 색상 가능<br />
b = random(0,64);<br />
for(i=SNOW_NUM2+1; i&lt;=SNOW_NUM3; i++)<br />
pixels.setPixelColor(i,pixels.Color(r,g,b));<br />
pixels.show();<br />
delay(random(100,1000)); // 지속 시간도 0.1초~1초로 랜덤하게</p>
<p>g = b = random(32,128); r = g/2; // (빨강은 광량을 줄여서 처리하여야 비슷하게 됨)<br />
for(i=0; i&lt;=NUMPIXELS; i++)<br />
pixels.setPixelColor(i,pixels.Color(r,g,b));<br />
pixels.show();<br />
delay(random(100,1000)); // 지속 시간도 0.1초~1초로 랜덤하게</p>
<p>for(i=0; i&lt;=NUMPIXELS; i++) // 눈결정의 LED 각각을 모두 랜덤한 다른 색상으로<br />
{<br />
r = random(0,64);<br />
g = random(0,64);<br />
b = random(0,64);<br />
pixels.setPixelColor(i,pixels.Color(r,g,b));<br />
}<br />
pixels.show();<br />
delay(random(100,1000)); // 지속 시간도 0.1초~1초로 랜덤하게<br />
}<br />
else // [끄기] 모드이면<br />
{<br />
for(i = 0; i&lt;=NUMPIXELS; i++) // 모든 LED를 OFF<br />
pixels.setPixelColor(i,pixels.Color(0,0,0));<br />
pixels.show();<br />
delay(1000);<br />
}<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
</div>
<p>카DL의 색상이나 켜져있는 시간 등을 결정할 때 random() 함수를 많이 사용한 이유는 임의성을 주어 실행시 나타나는 패턴이 단조롭지 않게 하기 위함입니다.</p>
<p><span style="color: #3366ff"><strong>6 단계 : 업로드하고 실행시키기</strong></span><br />
이제 프로그램까지 준비가 되었으니 업로드하고 실행시켜 보겠습니다.<br />
JARDUINO-UNO-BTmini는 아두이노 UNO 호환이므로 업로드시 스케치 프로그램의 [보드] 선택 항목을 ‘UNO’로 선택하면 되고 나머지 업로드 방법은 일반적인 아두이노와 동일합니다. 자, 그러면 가볼까요? GO~<br />
결과가 어찌 되었을까요?</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-15.jpg" rel="lightbox[32471]"><img class="alignnone size-full wp-image-32638" alt="39 ptb diyled (15)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-15.jpg" width="583" height="608" /></a></p>
<p>오우~ FANTASTIC!!! 너무나 아름답습니다.<br />
그동안 한 번도 보지 못했던 환상적인 컬러의 율동입니다.<br />
계속 바라봐도 질리지 않는… 북극에서 오로라를 보는 것과 같은 감흥(?)이…</p>
<p><span style="color: #3366ff"><strong>7 단계 : 트리에 장식하여 크리스마스트리 점등하기</strong></span><br />
나머지 3개 그룹에 대한 스케치 프로그램에 대한 제작 과정과 프로그램 소개는 생략하도록 하겠습니다. 각 그룹마다 다르게 구성된 카DL의 특징이 살아나도록 개별 스케치 프로그램을 작성하면 되는데, 예를 들어, 싼타나 지팡이 형상의 경우는 모자, 리본 장식 등의 형상마다 특징적인 색상을 갖도록 한다든지, ARC로 구성된 그룹의 모듈에 대하여는 물결이 흘러가는 듯이 컬러와 움직임을 구현하는 등이 그 예입니다. (실제로도 그렇게 구현했습니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-16.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32639" alt="39 ptb diyled (16)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-16.jpg" width="500" /></a></p>
<p>이렇게 모든 그룹에 대한 형상 제작과 스케치 프로그램 실행을 개별적으로 확인하였으므로, 이젠 드디어 전체 크리스마스트리를 완성할 시간이 되었습니다. 합동 공연의 모습은 어떨라나요?<br />
아래와 같이 꾸며 놓고… 점등해 보면… 짜잔~!</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-17.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32640" alt="39 ptb diyled (17)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-17.jpg" width="500" /></a></p>
<p>아, 실제로 보면 컬러의 율동이 너무너무 환상적인데 사진으로는 이 느낌을 나타낼 길이 없네요.<br />
어쨌거나 성공입니다!</p>
<p><span style="color: #3366ff"><strong>8 단계 : 스마트폰으로 끄고 켜기</strong></span><br />
이제 마지막 마무리 단계로 스마트폰에 앱을 설치해서 스마트폰으로 크리스마트트리를 껐다 켰다 할 수 있도록 해 보겠습니다. 스케치 프로그램은 이미 블루투스로부터 들어오는 ‘ON’, ‘OFF’ 명령에 반응할 수 있도록 작성되어 있으므로 우리는 적당한 블루투스 앱을 스마트폰에 설치하여 실행하기만 하면 됩니다. 블루투스 앱은 상당히 많은 종류가 있는데 어떤 것을 사용하여도 무방하지만 여기서는 제가 익숙한 [Bluetooth Controller(블루투스 컨트롤)]라는 앱을 이용해 아래와 같이 실행해 보겠습니다. (해당 앱은 찾아서 설치하셔야 합니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-19.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32642" alt="39 ptb diyled (19)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-19.jpg" width="500" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-20.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32643" alt="39 ptb diyled (20)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-20.jpg" width="500" /></a></p>
<p>· [Bluetooth Controller] 앱을 실행(1)하면, 위와 같은 화면(2)이 나타납니다.<br />
· [키설정]을 클릭하면 (3) 화면이 나타납니다.<br />
· [키 이름]과 [데이터 설정]에 각각 화면과 같이 ‘ON’, ‘1’, ‘OFF’, ‘O’을 입력하고 아래쪽으로 스크롤하여 [OK]를 클릭하면 (4)의 화면이 나타납니다.<br />
· [장치검색]을 클릭하여 (5) 화면이 나타납니다.<br />
· ‘JARDUINO-XXXX(4자리수)’를 찾아 (6) 화면이 나타나면서 “연결되었습니다.” 라는 메시지가 나타나면 스마트폰과 JARDUINO-UNO-BTmini가 패어링되어 통신이 가능한 상태가 된 것입니다.<br />
· 이제부터는 ‘ON’ 또는 ‘OFF’를 클릭하는 경우 JARDUINO-UNO-BTmini에 명령이 전달되어 크리스마스트리가 점등되거나 꺼지게 됩니다.</p>
<p>자, 그러면 이제 실제로 [OFF]를 클릭해 보지요. 1초, 2초, 오! 모두 꺼졌습니다. 다시 [ON]을 클릭해보면 1초, 바로 다시 동작합니다. 이것도 문제없이 성공! 다 잘 된 것 같네요.<br />
이렇게 해서 오늘의 주제인 [특별한 크리스마스 트리 제작]은 잘 마무리가 되었습니다. 올해는 독창적이고 멋진 크리스마스 트리를 보면서 새해를 맞을 수 있겠네요. 여러분도 기회가 된다면 한 번 시도해 보시기 바랍니다.<br />
참, 잊을뻔했네요. 마지막으로, [특별한 크리스마스 트리]에 사용된 다양한 형상을 디자인해 주신 신승현님(제이씨넷 디자이너)과 트리 제작 및 스케치 구현에 도움을 준 윤병우님(한밭대학교 학생)께도 깊은 고마움을 표합니다. 수고하셨습니다. 고맙습니다.</p>
<p><span style="color: #008000"><strong>카멜레온 DIY LED 기타 응용</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-21.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32644" alt="39 ptb diyled (21)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-21-519x620.jpg" width="500" /></a><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-22.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32645" alt="39 ptb diyled (22)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-22.jpg" width="500" /></a><a href="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-23.jpg" rel="lightbox[32471]"><img class="alignnone  wp-image-32646" alt="39 ptb diyled (23)" src="http://www.ntrexgo.com/wp-content/uploads/2016/11/39-ptb-diyled-23.jpg" width="500" /></a></p>
<p>저는 이번 [특별한 크리스마스 트리]를 만들면서 카DL의 응용 범위가 상당히 넓어질 수도 있다는 것을 새삼 느끼게 된 계기가 되었습니다. 부분적으로 만들어 본 사슴, 산타, 눈결정 등의 모양을 만들면서 어떠한 형상도 제작이 가능할 것 같다는 확신도 생겼고, 스케치 프로그램 입장에서도 상당히 다양한 라이브러리를 구현해 볼 수 있는 기회가 되었습니다.</p>
<p>여기에 자세히 소개하지는 않았지만 카DL은 생활 속 소품으로 무드등, 건물 모형 미니어처, 자동차 뒷면 표시등 등의 다양한 DIY 응용에 적용해 본 예가 있으며, 앞으로 여러분의 무한한 상상력이 가미되면 멋진 생활 소품이나 기상천외한 작품도 제작될 수 있으리라 예상합니다. 많은 시도를 기대하겠습니다.</p>
<p><span style="color: #008000"><strong>카DL 연재를 마치며</strong></span></p>
<p>작년 1년은 [너무 쉬운 아두이노 DIY] 연재로, 올해 1년은 [카멜레온 DIY LED 이야기] 연재로 디바이스마트 매거진의 독자 여러분과 만나게 되었는데, 이번 회를 마지막으로 아쉬운 작별 인사를 드립니다. 그동안 두 연재물을 사랑해주신 독자 여러분과 미흡한 글에 지면을 할당해 주신 디바이스마트 매거진 담당자 여러분께 진심으로 감사의 말씀 드리며, 다음 기회에 더 맑고 건강한 얼굴로 만나겠습니다. 안녕히 계십시오.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/32471/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[38호]카멜레온 DIY LED 이야기 ④</title>
		<link>http://www.ntrexgo.com/archives/31927</link>
		<comments>http://www.ntrexgo.com/archives/31927#comments</comments>
		<pubDate>Sun, 25 Sep 2016 04:35:02 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[특집]]></category>
		<category><![CDATA[38호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=31927</guid>
		<description><![CDATA[디바이스마트 매거진 38호 &#124; 카멜레온 DIY LED를 실제 생활에 적용하여 만들 수 있는 다양한 작품을 만들어 보는 시간을 준비해 보았습니다. ]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-39.jpg" rel="lightbox[31927]"><img class="alignnone size-large wp-image-32414" alt="38 PTB (39)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-39-620x229.jpg" width="620" height="229" /></a></p>
<p>&nbsp;</p>
<p><span style="font-size: large"><strong>카멜레온 DIY LED 이야기 4</strong></span></p>
<p><strong><span style="font-size: xx-large">LED ART 1 : I ♥ U와 변색 카멜레온</span></strong></p>
<p>&nbsp;</p>
<p style="text-align: right">글 | 신상석 ssshin@jcnet.co.kr</p>
<p style="text-align: right">
<table style="background-color: #e2e2e2;;width: 620px" border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>디바이스마트 매거진 독자 여러분, 안녕하세요. 앞으로 5회에 걸쳐 [카멜레온 DIY LED 이야기]를 진행할 신상석입니다.<br />
이 이야기는 WS2812B라는 컬러 LED를 기반으로 제작된 [카멜레온 DIY LED] 시리즈를 이용하여 생활에 필요한 다양한 형상을 꾸며보고 이것을 다양한 컬러로 디스플레이 해보는 내용입니다. 앞으로 진행할 내용에 대하여 간단히 알아보면 다음과 같습니다. (약간 변경될 수도 있습니다.)<br />
앞으로 즐겁고 유익한 강의가 될 수 있도록 많은 격려와 성원 부탁드립니다.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>디바이스마트매거진 독자 여러분, 안녕하세요. 반갑습니다.<br />
[카멜레온 DIY LED 이야기] 네번째 시간입니다.<br />
아, 참, 그리고 앞으로는 [카멜레온 DIY LED] 대신 줄인 말로 [카DL]을 주로 사용할까 합니다. 아무래도 3글자가 편하겠죠?<br />
그러면, 기본 준비물부터 챙겨 보도록 하지요. GO~</p>
<p><span style="color: #0000ff"><strong>직선(BAR) 모듈과 곡선(ARC) 모듈</strong></span></p>
<p>카DL의 기본 구성품은 그리 많지는 않지만, 직선과 곡선, 방향자, 기본 도형을 가지고 있어서 똑같지는 않지만 비슷한 정도로는 어떤 형상이든 모두 구현이 가능합니다. 왜냐하면 임의의 형상은 이것을 이루는 직선과 곡선의 조합으로 표현이 가능하기 때문입니다. 물론, 정밀도에서는 조금 차이가 날 것이므로 완전 똑같게는 안되겠지만 잘만 만들면 상당히 비슷하게 됩니다.<br />
카DL은 직선(BAR) 형태로 다음의 6가지 모듈을 제공합니다. 실제로 JLED-BAR-1만으로도 구성은 가능하겠지만 이렇게 되면 너무나 많은 연결이 필요하므로 길이가 다른 6가지 모듈을 제공하여 사용의 편의성을 제공하고 있습니다. 이 6가지 모듈은 길이가 각각 1, 2, 3, 4, 5, 10cm 로 설계되어 있어 연결된 형상의 크기를 매우 쉽게 예측할 수 있는 것도 장점입니다. 급할 때는 자 대용으로도 사용이 가능하지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-1.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32376" alt="38 PTB (1)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-1.jpg" width="517" height="286" /></a></p>
<p>기본 직선(BAR) 모듈에 대응하여 카DL이 제공하는 기본 곡선(ARC) 모듈은 다음의 12가지 모듈입니다. 곡선의 경우는 원의 일부인 원호에 해당되는 부분을 제공하는데 모든 원호에 대하여 제공할 수는 없으므로 대표적인 3가지 다른 곡률을 가진 원을 정하여 제공합니다. 개수는 3개가 연속된 것과 4개가 연속된 것의 2종류를 제공하고, 방향성에 따라 UP, DOWN의 2종류로 나누어 제공하므로, 총 3 x 2 x 2 = 12 가지가 기본 모듈이 됩니다. (방향은 왼쪽이 IN, 오른쪽이 OUT입니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-2.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32377" alt="38 PTB (2)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-2.jpg" width="517" height="466" /></a><br />
모듈의 이름은 이 원호 모듈을 이용하여 원을 만들 경우, 사용되는 총 LED의 개수와 모듈이 포함한 원의 개수, 그리고 방향을 포함하여 만들어집니다. JLED-ARC12-D3 모듈을 예로 들면, 이 모듈은 LED 3개로 이루어진 DOWN(D) 방향의 LED로, LED가 총12개(이 모듈 4개)가 모이면 아래와 같이 원(지름 약 40mm 정도)이 되는 모듈입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-3.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32378" alt="38 PTB (3)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-3.jpg" width="517" height="348" /></a><br />
여러 개의 서로 다른 원호 모듈을 이용하면 부드러운 곡선을 표현할 수 있는데, 예를 들어 아래와 같은 지렁이 형상을 만들 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-4.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32379" alt="38 PTB (4)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-4.jpg" width="517" height="311" /></a><br />
오, 그러면 직선(BAR) 모듈과 곡선(ARC) 모듈을 함께 섞어서 사용한다면 여러가지 임의의 형상을 만들 수도 있겠네요. 예. 맞습니다. 동물도 만들 수 있고, 글자도 만들 수 있고, 메뚜기도 만들 수 있고, 조금은 어렵겠지만 뽀로로도 만들 수 있겠습니다. 아래는 몇가지 예입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-5.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32380" alt="38 PTB (5)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-5.jpg" width="517" height="426" /></a><br />
너무 오래 설명만 하면 재미가 없으니까 다른 모듈이 더 필요해지면 그 때 가서 또 설명하기로 하고, 우리의 1단계 목표인 [I ♥ U] 제작에 들어가 봅시다.</p>
<p><span style="color: #0000ff"><strong>I ♥ U</strong></span></p>
<p><span style="color: #3366ff"><strong>1단계 : 형상 설계하기</strong></span><br />
제작을 하기 위하여 가장 먼저 해야 할 일은 규격을 정하는 것입니다. 아래와 같은 사항을 정해 놓고 시작하는 것이 좋겠습니다.<br />
첫번째로 결정해야 할 것은 형상입니다. 무엇을 만들지, 어떤 형상으로 만들지를 정해야 합니다. 우리는 이미 정했죠! [I ♥ U] 형태로 가로로 길게 만드는 것으로 하겠습니다.</p>
<p>두번째로 결정해야 할 것은 용도입니다. 어떤 용도로 어느 장소에 설치할 것인가? 소품 형태로 어떤 곳에 놓아도 되는 형태로 만들 것인지, 벽이나 유리창에 간판처럼 붙여놓을 것인지 등이지요. 일단 우리는 휴대용 소품으로 들고 다닐 수 있는 투명 아크릴 박스 형태로 꾸며보기로 하지요. 아크릴 박스 형태는 온라인 아크릴 전문점에서 다양한 크기의 박스 형태를 구입할 수 있습니다.</p>
<p>세번째는 크기가 되겠습니다. 용도에 알맞게 하기 위하여 크기를 결정하기도 하지만 크기는 소요되는 비용과도 어느 정도의 비례하므로 이것도 고려 대상이 됩니다. 크기가 너무 크면 비용이 많이 들 뿐만 아니라, 전원 공급이나 고정 방법 등에서도 제약을 받을 수 있습니다. 그렇다고 너무 작으면 원하는 형상을 표현하는데 어려움이 따르거나 형상이 부자연스러워질 수도 있으므로 알맞은 크기를 선택하여야 합니다. 우리는 비용은 적게 들면서도 형상은 또렷하게 나타낼 수 있는 정도의 크기로 전체 크기가 25cm (가로) X 10cm (세로) X 7cm (두께) 정도의 아크릴박스에 들어가는 정도로 하겠습니다. (사실은 미리 생각해서 준비한 박스입니다.)</p>
<p>마지막으로 해야 할 일은 디자인입니다. 디자인을 하기 위하여는 일단, 카DL이 제공하는 모든 형상을 알고 이것을 선택적으로 사용하여 디자인하는 것이 좋습니다. 디자인은 사실 제작하는 사람의 취향이나 능력에 따라 조금씩 달라질 수 있습니다. 디자인 감각이 있는 사람은 좀 더 예쁘고 세련되게 만들 수 있을 것이고, 그렇지 않은 사람은 약간은 어색하거나 투박한 형상으로 만들 가능성이 높겠지요. 제가 사용할 디자인은 제이씨넷 [신승현]님이 만들어 준 것인데 8cm X 8cm 사각형을 기준으로 아래와 같이 디자인하였습니다. 직선(BAR) 모듈과 곡선(ARC) 모듈을 다양하게 사용하였고, 방향자 모듈도 사용한 것이 보입니다. 제가 보기에는 디자인이 꽤 괜찮습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-6.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32381" alt="38 PTB (6)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-6.jpg" width="517" height="171" /></a></p>
<p>영문자 I 와 U는 카DL 모듈이 가능한 직접 연결이 될 수 있도록 하면 누가 디자인해도 거의 이런 모양으로 나올 것 같고, 하트(♥)는 사람마다 다르게 디자인할 것 같은데, 이런 경우 2가지 사항은 꼭 고려하면서 디자인하셔야 합니다. 하나는 LED의 모양 및 배치입니다. 카DL에 실제로 전원이 들어와서 불이 켜질 때의 모습을 상상하여 원하는 모습으로 나타날 수 있도록 모듈을 선택하고 배치하는 것이 중요합니다. 실제로 동작하는 것은 LED 불빛이므로 아래와 같이 카DL의 동그란 LED를 색칠해 본 후 이것이 괜찮게 보이는지를 판단해 보는 것이 하나의 방법입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-7.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32382" alt="38 PTB (7)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-7.jpg" width="517" height="171" /></a></p>
<p>다른 하나는 연결성입니다. 형상 때문에 어쩔 수 없이 연결이 직접적으로 될 수 없는 부분이 생기게 되는데 이런 상황이 가능한 적게 생기도록(즉, 직접 연결이 가능한 많아지도록) 디자인하는 것이 중요합니다. 왜냐하면 직접 연결은 간단한 커넥터(JLED-CON-0)로만 쉽게 연결되기 때문입니다. 또한, 모서리 부분은 카DL의 직선(BAR) 모듈과 곡선(ARC) 모듈만으로는 표현하기 어려운 부분이 있을 수 있으므로 필요에 따라 방향자(DIR) 모듈이나 도형(FIGURE) 모듈도 섞어서 사용하면 좀 더 자연스러운 형상을 만들 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-8.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32383" alt="38 PTB (8)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-8.jpg" width="517" height="253" /></a></p>
<p>아, 참, 방향자(DIR) 모듈은 위에서 설명을 하지 않았죠. 카멜레온 DIY LED는 모서리의 직접 연결을 위하여 아래와 같은 6가지 방향자(DIR)를 제공합니다. 이것은 UP 또는 DOWN 방향으로 각각 45도, 90도, 135도 방향 전환 시 사용할 수 있으며, 가끔씩은 도형적인 의미로도 사용됩니다.<br />
위 하트 모양에서는 오른쪽과 같이 동그라미로 표시된 부분에 안성맞춤으로 사용이 되었네요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-9.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32384" alt="38 PTB (9)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-9.jpg" width="182" height="182" /></a></p>
<p><span style="color: #3366ff"><strong>2단계 : 형상 제작하기</strong></span><br />
자, 이제 설계(디자인)가 완료되었으니 구현할 차례입니다. 일반적으로 카DL을 구현하는 방법은 하나의 골판지 또는 폼보드 등을 밑판으로 하여 카DL을 관통하여 모양을 잡고, 뒤쪽에서 커넥터와 케이블을 이용하여 고정시키는 방법이 가장 편하고 쉽습니다. 도화지, 아트지, 스티로폼, 책받침과 같은 얇은 플라스틱 등등 상당히 많은 다양한 재료를 사용하여 보았지만, 현재까지는 2mm 두께의 폼보드가 가장 편리하고, 그 다음으로는 1mm 정도 두께의 골판지가 편리한 것으로 보입니다. 조립할 때 한가지 주의해야 할 것은 카DL은 방향성이 있으므로 신호선의 IN과 OUT 방향을 잘 보고 연결해야 한다는 점입니다. 각 모듈의 V(+5V)와 G(GND) 신호는 동일한 신호끼리 연결하여야 하는 것은 물론, 앞 모듈의 O(Data Out)핀은 반드시 다음에 연결할 모듈의 I(Data In)핀에 연결해야만 카DL 전체 형상이 정상적으로 동작할 수 있습니다.<br />
그러면, 이제 실제로 골판지를 밑판으로 사용하여 순서대로 제작해 보겠습니다.</p>
<p>(1) 검정색 골판지를 가로 239mm, 세로 94mm의 사각형으로 자릅니다. (아크릴 두께가 있어 양쪽으로 3mm씩은 여유를 둡니다.)</p>
<p>(2) 카DL을 모양에 맞추어 골판지 위에 원하는 형태로 놓아 봅니다. (뒤집어 놓으면 균형을 잘 잡을 수 있습니다.)</p>
<p>(3) 카DL을 조립합니다. 방향성을 잘 확인하고, 위치를 잘 잡아가며 조립하여야 자신이 원하는 형태가 되므로 주의하여야 합니다. 특히 2개의 카DL이 직접 연결되는 부분은 정확하게 연결되도록 위치를 잘 잡아서 조립하여야 나중에 커넥터(JLED-CON-0)를 쉽게 연결할 수 있습니다. 한편, 카DL은 연결 핀이 뾰족하게 나와 있어 골판지를 관통하여 조립할 때 매우 조심하여야 합니다. 잘못하면 연결 핀에 손이 찔려 상처가 날 수도 있습니다.</p>
<p>(4) 골판지를 뒤로 돌려서, 직접 연결되는 카DL은 JLED-CON-0를 이용하여 연결하고(JLED-CON-0는 2핀 점퍼 3개를 동시에 각각 연결하는 형태인 2&#215;3 점퍼임) 직접 연결되지 않는 카DL은 JLED-CABLE3-MM10 또는 JLED-CABLE3-MM20 케이블을 이용하여 연결합니다. 이 때 전원 및 데이터 신호가 서로 일치하도록 방향성을 확인하면서 연결해야 합니다. (V-V, O-I, G-G가 연결되도록 함)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-10.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32385" alt="38 PTB (10)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-10.jpg" width="517" height="262" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-11.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32386" alt="38 PTB (11)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-11.jpg" width="517" height="244" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-12.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32387" alt="38 PTB (12)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-12.jpg" width="517" height="244" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-13.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32388" alt="38 PTB (13)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-13.jpg" width="517" height="246" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong style="color: #3366ff">3단계 : 아두이노 연결하기</strong></p>
<p>이제 만들어진 형상을 제어하기 위하여 아두이노를 연결하도록 하겠습니다. 아두이노는 일반적으로 가장 많이 사용하는 아두이노 UNO를 사용해도 되지만, 우리는 제어기를 아크릴박스에 넣어서 휴대용으로 제작하려 하므로, 크기가 작고 가격이 저렴한 아두이노를 선택하는 것이 좋겠습니다. 아두이노 NANO도 좋고, 아두이노 Pro Micro 등 어떤 것도 좋은데, 여기서는 기왕이면 크기가 엄지 손가락 크기로 가장 작고 가격도 상대적으로 저렴한 아두이노 Pro Micro(아두이노 Leonardo의 소형 버전)를 사용하는 것으로 하겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-14.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32389" alt="38 PTB (14)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-14.jpg" width="517" height="193" /></a></p>
<p>아두이노 Pro Micro는 납땜이 되지 않은 상태의 것이 많은데 아래와 같은 핀 배열을 가지고 있습니다. 카DL과 연결할 신호는 VCC와 GND, 데이터 1포트이므로, 연결하기 쉽게 빨강색 네모 박스의 신호를 연결하도록 하겠습니다. 데이터신호로 A3 신호를 사용하는 것이지요. (아날로그 핀은 디지털핀으로도 사용 가능합니다.) 좀 더 편리하게 사용하려면 이 3핀의 신호를 터미널블록으로 처리한 카DL 전용 아두이노인 JARDUINO-PROMICRO-1을 사용하는 것도 방법입니다. (여기서는 이것을 사용하겠습니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-15.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32390" alt="38 PTB (15)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-15.jpg" width="517" height="256" /></a></p>
<p>JARDUINO-PROMICRO-1의 3핀을 카DL 형상의 첫번째 모듈의 입력과 연결하면 되는데, 이 때 JLED-START-1을 아두이노와 카DL 첫번째 모듈 사이에 삽입하는 것이 좋습니다. JLED-START-1은 카DL 모듈을 여러 개 연결하거나 장시간 사용하는 경우 전체 모듈의 안정성을 위하여 제어기(아두이노)와 카DL 첫번째 모듈 사이에 장착하는 안정화 모듈로 안정화를 위한 대용량 커패시터와 저항을 내장하고 있습니다. 신호선 연결은 일반적인 카DL 모듈과 동일하게 연결합니다. (V-V, O-I, G-G)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-16.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32391" alt="38 PTB (16)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-16.jpg" width="508" height="321" /></a></p>
<p><span style="color: #3366ff"><strong>4단계 : 아두이노 스케치 프로그램하기</strong></span><br />
하드웨어는 모두 완성되었으므로, 이제는 스케치 프로그램만 작성하면 될 것 같습니다. 자신이 원하는 형태로 [I ♥ U]가 움직이도록 프로그램을 작성해 보시지요. 지난 시간에 라이브러리를 이용하는 방법을 익혔으므로 너무 어렵게 생각하지 말고 일단 지난번 배운 라이브러리만을 이용하여 구현해 보겠습니다. 한가지 예로 지난 회에서 언급하였던 Adafruits 프로그램 중 strandtest 프로그램을 데이터 핀 번호와 LED 개수, 그리고 색상과 delay 시간 등만 아주 조금 바꾸고 그대로 실행시켜 보겠습니다. 설명은 프로그램 내의 주석을 참조하시기 바랍니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
#include &lt;Adafruit_NeoPixel.h&gt;<br />
#include &lt;avr/power.h&gt;</p>
<p>#define PIN A3 // JARDUINO-PROMICRO-1 사용으로 데이터 핀은 A3</p>
<p>Adafruit_NeoPixel strip = Adafruit_NeoPixel(53, PIN, NEO_GRB + NEO_KHZ800); // [I ♥ U] LED 갯수 = 53</p>
<p>void setup() {<br />
strip.begin();<br />
strip.show();<br />
}<br />
void loop() {<br />
colorWipe(strip.Color(255, 0, 0), 20); // 빨강색으로 하나씩 순서대로 채우기<br />
colorWipe(strip.Color(0, 255, 0), 20); // 녹색으로 하나씩 순서대로 채우기<br />
colorWipe(strip.Color(0, 0, 255), 20); // 파랑색으로 하나씩 순서대로 채우기</p>
<p>theaterChase(strip.Color(127, 127, 0), 20); // 노랑색(Yellow) 사이키 조명 디스플레이<br />
theaterChase(strip.Color( 0, 127, 127), 20); // 심홍색(Magenta) 사이키 조명 디스플레이<br />
theaterChase(strip.Color(127, 0, 127), 20); // 청록색(Cyan) 사이키 조명 디스플레이<br />
theaterChase(strip.Color(127, 127, 127), 20); // 흰색(White) 사이키 조명 디스플레이</p>
<p>rainbow(20); // // 전체가 같은 색으로 동시에 변하면서 디스플레이<br />
rainbowCycle(20); // // 전체가 다르게 다양한 색으로 변하면서 디스플레이<br />
theaterChaseRainbow(20); // // 다양한 색으로 변하면서 사이키 조명 디스플레이<br />
}</p>
<p>// 하나씩 순서대로 채우기 함수<br />
void colorWipe(uint32_t c, uint8_t wait) {<br />
for(uint16_t i=0; i&lt;strip.numPixels(); i++) {<br />
strip.setPixelColor(i, c);<br />
strip.show();<br />
delay(wait);<br />
}<br />
}</p>
<p>// 전체가 같은 색으로 동시에 변하면서 디스플레이하는 함수<br />
void rainbow(uint8_t wait) {<br />
uint16_t i, j;</p>
<p>for(j=0; j&lt;256; j++) {<br />
for(i=0; i&lt;strip.numPixels(); i++) {<br />
strip.setPixelColor(i, Wheel((i+j) &amp; 255));<br />
}<br />
strip.show();<br />
delay(wait);<br />
}<br />
}</p>
<p>// 전체가 다르게 다양한 색으로 변하면서 디스플레이하는 함수<br />
void rainbowCycle(uint8_t wait) {<br />
uint16_t i, j;</p>
<p>for(j=0; j&lt;256*5; j++) { // 5 cycles of all colors on wheel<br />
for(i=0; i&lt; strip.numPixels(); i++) {<br />
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) &amp; 255));<br />
}<br />
strip.show();<br />
delay(wait);<br />
}<br />
}</p>
<p>// 한가지 색의 사이키 조명 디스플레이<br />
void theaterChase(uint32_t c, uint8_t wait) {<br />
for (int j=0; j&lt;10; j++) { //do 10 cycles of chasing<br />
for (int q=0; q &lt; 3; q++) {<br />
for (int i=0; i &lt; strip.numPixels(); i=i+3) {<br />
strip.setPixelColor(i+q, c); //turn every third pixel on<br />
}<br />
strip.show();</p>
<p>delay(wait);</p>
<p>for (int i=0; i &lt; strip.numPixels(); i=i+3) {<br />
strip.setPixelColor(i+q, 0); //turn every third pixel off<br />
}<br />
}<br />
}<br />
}</p>
<p>// 다양한 색으로 변하면서 사이키 조명 디스플레이<br />
void theaterChaseRainbow(uint8_t wait) {<br />
for (int j=0; j &lt; 256; j++) { // cycle all 256 colors in the wheel<br />
for (int q=0; q &lt; 3; q++) {<br />
for (int i=0; i &lt; strip.numPixels(); i=i+3) {<br />
strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on<br />
}<br />
strip.show();</p>
<p>delay(wait);</p>
<p>for (int i=0; i &lt; strip.numPixels(); i=i+3) {<br />
strip.setPixelColor(i+q, 0); //turn every third pixel off<br />
}<br />
}<br />
}<br />
}</p>
<p>// 0~255까지의 값을 전달하면 4 바이트 컬러값을 리턴하는 함수<br />
// 임의의 고르게 분포된 컬러값을 생성하기 위하여 사용<br />
uint32_t Wheel(byte WheelPos) {<br />
WheelPos = 255 &#8211; WheelPos;<br />
if(WheelPos &lt; 85) {<br />
return strip.Color(255 &#8211; WheelPos * 3, 0, WheelPos * 3);<br />
} else if(WheelPos &lt; 170) {<br />
WheelPos -= 85;<br />
return strip.Color(0, WheelPos * 3, 255 &#8211; WheelPos * 3);<br />
} else {<br />
WheelPos -= 170;<br />
return strip.Color(WheelPos * 3, 255 &#8211; WheelPos * 3, 0);<br />
}<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
</div>
<p>&nbsp;</p>
<p><span style="color: #3366ff"><strong>5단계 : 업로드하고 실행시키기</strong></span><br />
이제 프로그램까지 준비가 되었으니 업로드하고 실행시켜 볼 차례입니다. 한가지 주의하여야 할 것은 앞에서도 언급했듯이 아두이노 Pro Micro는 아두이노 Leonardo의 소형 버전이므로, 업로드시 스케치 프로그램의 [보드] 선택 항목을 “UNO”가 아닌 “Leonardo”로 선택하여야 하는 것입니다. 나머지 업로드 방법은 일반적인 아두이노와 동일합니다.<br />
아래에 업로드 된 프로그램이 실행되는 예를 몇 가지 보였습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-17.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32392" alt="38 PTB (17)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-17.jpg" width="508" height="266" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-18.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32393" alt="38 PTB (18)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-18.jpg" width="508" height="266" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-19.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32394" alt="38 PTB (19)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-19.jpg" width="508" height="266" /></a></p>
<p>오우, 아주 화려하게 잘 동작합니다. 생각했던 것보다 꽤 밝아서 눈이 조금 부실 정도입니다. 밤에는 멀리서도 아주 잘 보일 것 같네요. (혹시, 은은한 밝기를 원하시면 스케치 프로그램 작성 시 색상을 조절하시면 됩니다.)</p>
<p><span style="color: #3366ff"><strong>6단계 : 외관을 정리하고 고정하기</strong></span><br />
위의 사진에서는 아크릴 상자에 넣어진 모습으로 동작하는데, 사실은 아크릴 상자에 넣지않은 상태에서 동작을 테스트하고 원하는 형태로 잘 동작하면 그 때 아크릴 상자에 조립하는 것이 순서입니다. 조립시에는 먼저, 연결된 카DL 형상을 아크릴 상자의 앞면에 밀착시키고, JLED-START-1과 JARDUINO-PROMICRO-1 은 뒤쪽으로 빼 놓습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-20.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32395" alt="38 PTB (20)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-20.jpg" width="508" height="266" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-21.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32396" alt="38 PTB (21)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-21.jpg" width="508" height="266" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-22.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32397" alt="38 PTB (22)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-22.jpg" width="508" height="266" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-23.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32398" alt="38 PTB (23)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-23.jpg" width="508" height="266" /></a></p>
<p>준비한 휴대폰 보조 배터리(용량이 큰 것일수록 좋음. 적어도 5000mAh 이상의 배터리 권장)를 아크릴 박스 뒷면에 위치시킵니다. 휴대성 및 전원 공급 용량의 이유로 업로드 후 실제 동작 시에는 전원 공급을 USB 케이블로 하지 않고 휴대폰 보조 배터리 등으로 하는 것이 좋습니다. 위 사진에서 보듯 찍찍이를 아크릴의 한쪽 면과 휴대폰 보조 배터리의 한쪽 면에 각각 붙인 후 서로 밀착시켜 정리하면 깔끔한 모양을 유지할 수 있습니다. USB 케이블을 이용하여 휴대폰 보조 배터리와 JARDUINO-PROMICRO-1을 연결하면 완성입니다.</p>
<p><span style="color: #3366ff"><strong>7단계 : 내가 원하는 곳에 놓고 감상하기</strong></span><br />
모든 것이 원하는 대로 잘 동작합니다. 이제 내가 원하는 곳에 가져다 놓고 감상할 시간입니다. 주변 사람에게 자랑도 좀 하구요. 연인이나 친구에게 선물할 수도 있겠습니다. 저는 일단, 거실 앞쪽에 한 번 놓아 보았습니다. 괜찮게 된 것 같네요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-26.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32401" alt="38 PTB (26)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-26.jpg" width="508" height="266" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-25.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32400" alt="38 PTB (25)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-25.jpg" width="508" height="266" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-26.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32401" alt="38 PTB (26)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-26.jpg" width="508" height="266" /></a></p>
<p>불을 꺼보니 LED의 움직임이 더욱 선명하게 나타나는 것이 환상적입니다. 오~ 예~<br />
이 정도면 자동차 뒤 유리창에 놓아도 괜찮을 장식이 될 것 같습니다. 뒷 차에 부담을 주는 정도가 안되도록 밝기는 조절해야 하겠죠? 기회가 되면 [I ♥ U] 뿐만 아니라 내가 원하는 모양을 만들어 응용도 해보시기 바랍니다.</p>
<p><span style="color: #0000ff"><strong>변색 카멜레온</strong></span></p>
[I ♥ U]가 잘 만들어졌으니, 좀 더 고급 단계인 [변색 카멜레온]에 도전해 보겠습니다. [I ♥ U]에서 했던 방법과 똑같은 순서대로 진행해 봅니다.</p>
<p><span style="color: #3366ff"><strong>1단계 : 형상 설계하기</strong></span><br />
이제 긴 설명은 생략하고 조금 단순화하여 빠르게 진행해 보겠습니다.</p>
<p>· 형상 : 카멜레온<br />
· 용도 : 실제 카멜레온처럼 일부분씩 색상을 다르게 나타낼 수 있고, 약간의 움직임도 표현할 수 있는 창문에 부착하는 전광판 형태로 제작<br />
· 크기 : A4 용지 크기와 비슷한 30cm X 20cm에 들어가는 크기<br />
· 디자인 : 아래 참조 (이번 디자인도 제이씨넷 [신승현]님의 디자인입니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-27.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32402" alt="38 PTB (27)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-27.jpg" width="508" height="298" /></a></p>
<p>카멜레온과 같은 동물 형상은 조금은 복잡하므로 특징을 잘 살려서 단순하게 표현하는 것이 중요합니다. (이것은 재능이 조금은 필요한 부분이므로 자신이 직접 하기가 어려우면 잘 할 수 있는 다른 사람에게 부탁하는 것도 방법입니다.) 아, 참, 그리고 기본 설계 도구가 궁금하실 분도 있을 것 같은데 위 그림은 오토캐드를 이용하여 카DL 기본 형상을 라이브러리처럼 모두 만들어 놓은 상태에서 이것을 배치하고 연결하여 만든 그림임을 밝혀둡니다. 이렇게 하기가 쉽지 않으면 그냥 손으로 대강의 모습을 스케치 한 후 카DL을 직접 배열해 가면서 진행해도 되겠습니다.</p>
<p>이미 한 번 이야기한 것처럼 카DL은 방향성이 있으므로 이것을 잘 고려하여 형상을 만들어야 합니다. 또한, 첫 시작점을 어디로 잡을 것인지, 연결되는 순서는 어떻게 할 것인지도 전체적인 모양을 고려하여 결정하는 것이 좋습니다.</p>
<p>저는 목 부분에서 시작하여 얼굴 ▶ 등 ▶ 꼬리 ▶ 배 ▶ 뒷다리 ▶ 앞다리 ▶ 피부 ▶ 눈 ▶ 혀의 순으로 연결되도록 카DL을 배치하였습니다. 여기서 새로 선보인 것은 눈 형상에 해당되는 JLED-HEXA-7 입니다. 6각형 모서리에 LED(WS2812B)가 하나씩 있고 가운데에도 1개가 있는 형상으로 카DL 도형(FIGURE) 그룹 중의 하나입니다. 카DL의 도형(FIGURE) 그룹은 아래와 같이 7개의 도형으로 구성되어 있으므로 필요에 따라 알맞은 것을 골라 사용하면 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-28.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32403" alt="38 PTB (28)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-28.jpg" width="524" height="284" /></a></p>
<p><span style="color: #3366ff"><strong>2단계 : 형상 제작하기</strong></span><br />
1단계에서 배열한 순서대로 카DL을 조립해 봅니다. 지난번과 마찬가지로 직접 연결되는 부분이 잘 조립될 수 있도록 하는 것에 주의하여야 하며, 한 가지 팁을 더 이야기하면 직접 연결되는 부분은 순서대로 차례차례 조립하는 것이 좋습니다. 순서 없이 조립을 진행하다 보면 중간에 직접 연결되는 부분을 조립할 때 서로 어긋나서 이미 진행하였던 조립을 다시 수정하여야 하는 상황이 발생할 수도 있기 때문입니다. 아래 그림에서는 화살표로 방향과 연결 관계를 미리 표시하여 가능한 이 순서대로 조립을 진행합니다. 또한 카DL의 원호(ARC) 그룹인 경우는 Up 방향 모듈과 Down 방향 모듈의 구분이 쉽지 않으므로, 그림 상에서 “U”, “D”를 간단히 명시해 놓고 조립을 진행하면 실수를 줄일 수 있습니다.<br />
아래는 조립이 완성된 상태의 앞면입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-29.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32404" alt="38 PTB (29)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-29.jpg" width="524" height="309" /></a></p>
<p><span style="color: #3366ff"><strong>3단계 : 아두이노 연결하기</strong></span><br />
이번에는 제어기로 가장 많이 사용하는 아두이노 UNO를 사용하도록 하겠습니다. 아두이노 UNO와 JLED-START-1까지 연결한 뒷면 모습은 아래와 같습니다. 데이터핀은 디지털 핀 6번을 사용하였습니다. 아두이노와 JLED-START-1의 입력쪽을 각각 +5V- V(VCC), GND-G(GND), D6-I(Data In)의 짝으로 연결합니다.</p>
<p><span style="color: #3366ff"><strong>4단계 : 아두이노 스케치 프로그램하기</strong></span><br />
그 동안에는 다른 사람들이 제공하였던 라이브러리와 스케치 프로그램을 그대로 이용하면서 값만 조금 바꾸어 사용하였는데, 이번에는 조금 더 적극적으로 내가 표현하고 싶은 동작과 색상을 정하고 이것을 스케치 프로그램으로 구현하도록 해 보겠습니다. 필요하다면 새로운 함수도 정의하여 작성하도록 하지요. 일단, 동작과 색상을 표로 간단하게 기술해 봅시다.</p>
<p><strong>[카멜레온 형상의 동작 및 색상]</strong></p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center">단계</td>
<td style="text-align: center">동작과 색상</td>
<td style="text-align: center">참조 사항</td>
</tr>
<tr>
<td style="text-align: center">1</td>
<td style="text-align: center">머리를 녹색으로 켜기</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">2</td>
<td style="text-align: center">등과 배, 꼬리를 파랑색으로 켜기</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">3</td>
<td style="text-align: center">뒷다리와 앞다리를 보라색으로 켜기</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">4</td>
<td style="text-align: center">피부를 노랑색으로 켜기</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">5</td>
<td style="text-align: center">눈을 주황색으로 켜기</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">6</td>
<td style="text-align: center">앞다리와 뒷다리를 번갈아 가면서 켜기</td>
<td style="text-align: center">2번 반복</td>
</tr>
<tr>
<td style="text-align: center">6</td>
<td style="text-align: center">혀를 빨강색으로 내밀었다가 집어넣기</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">7</td>
<td style="text-align: center">눈은 싸이키로 반짝반짝, 피부도 싸이키로 반짝반짝</td>
<td style="text-align: center"></td>
</tr>
<tr>
<td style="text-align: center">8</td>
<td style="text-align: center">전체가 동일한 랜덤색으로 앞에서부터 뒤로 천천히 변신</td>
<td style="text-align: center">3번 반복</td>
</tr>
<tr>
<td style="text-align: center">9</td>
<td style="text-align: center">전체가 개별적으로 무지개색으로 변신</td>
<td style="text-align: center">약 5초간</td>
</tr>
<tr>
<td style="text-align: center">10</td>
<td style="text-align: center">완전히 사라짐</td>
<td style="text-align: center">약 5초간</td>
</tr>
</tbody>
</table>
<p style="text-align: right">※ 10단계까지 진행을 마치면 다시 1단계부터 무한 반복합니다.</p>
<p> <strong>[프로그램 구현 방법]</strong></p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center">연결순서</td>
<td style="text-align: center">그룹구분</td>
<td style="text-align: center">시작번호</td>
<td style="text-align: center">끝번호</td>
</tr>
<tr>
<td style="text-align: center">1</td>
<td style="text-align: center">머리</td>
<td style="text-align: center">0</td>
<td style="text-align: center">3<br />
1</td>
</tr>
<tr>
<td style="text-align: center">2</td>
<td style="text-align: center">등</td>
<td style="text-align: center">3<br />
2</td>
<td style="text-align: center">5<br />
7</td>
</tr>
<tr>
<td style="text-align: center">3</td>
<td style="text-align: center">꼬리</td>
<td style="text-align: center">5<br />
8</td>
<td style="text-align: center">8<br />
3</td>
</tr>
<tr>
<td style="text-align: center">4</td>
<td style="text-align: center">배</td>
<td style="text-align: center">8<br />
4</td>
<td style="text-align: center">8<br />
9</td>
</tr>
<tr>
<td style="text-align: center">5</td>
<td style="text-align: center">뒷다리</td>
<td style="text-align: center">9<br />
0</td>
<td style="text-align: center">9<br />
9</td>
</tr>
<tr>
<td style="text-align: center">6</td>
<td style="text-align: center">앞다리</td>
<td style="text-align: center">1<br />
0<br />
0</td>
<td style="text-align: center">1<br />
1<br />
1</td>
</tr>
<tr>
<td style="text-align: center">7</td>
<td style="text-align: center">피부</td>
<td style="text-align: center">1<br />
2<br />
2</td>
<td style="text-align: center">1<br />
3<br />
2</td>
</tr>
<tr>
<td style="text-align: center">8</td>
<td style="text-align: center">눈</td>
<td style="text-align: center">1<br />
3<br />
3</td>
<td style="text-align: center">1<br />
3<br />
9</td>
</tr>
<tr>
<td style="text-align: center">9</td>
<td style="text-align: center">혀</td>
<td style="text-align: center">1<br />
4<br />
0</td>
<td style="text-align: center">1<br />
4<br />
7</td>
</tr>
</tbody>
</table>
<p>색상이 바뀌는 동작은 그룹별로 처리되어야 하므로, 이것을 효과적으로 처리할 수 있는 기능은 우리가 새로 만들어야 할 것 같습니다. 음… 당장 엄밀하게 정의하지는 못하겠지만, 현재 우리가 사용하고 있는 기능을 LED 번호의 특정 범위에서 실행할 수 있는 함수로 확장하여 정의하면 매우 편리할 것 같네요. 예를 들어 colorWipe(color, wait)로 정의된 기능을 이용하여 colorWipeFT(from, to, color, wait)와 같이 시작 LED 번호인 from과 끝 LED 번호인 to를 파라미터로 더 정의하여 사용하면 좋을 것 같습니다. 이것은 원래 제공되었던 프로그램을 그대로 가져다가 쓰면서 for 루프를 사용하여 from부터 to까지 적용하면 되므로 별로 어렵지는 않을 것으로 생각됩니다. 예를 들어 colorWipeFT(from, to, color, wait) 함수 하나만 작성해 보면 아래와 같이 됩니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void colorWipeFT(uint16_t from, uint16_t to, uint32_t color, uint16_t wait)<br />
{<br />
/* 일정 범위의 카DL을 하나씩 순서대로 채우는 함수<br />
- from : from LED 번호<br />
- to : to LED 번호<br />
- color : 32비트 RGB 컬러 코드, 0x00RRGGBB 형태<br />
- wait : LED 사이의 동작 간격(딜레이)<br />
*/</p>
<p>for (int i=from; i&lt;=to; i++) // 원래 범위가 (0~끝)인 것을 (from~to)로 수정<br />
{<br />
strip.setPixelColor(i, c);<br />
strip.show();<br />
delay(wait);<br />
}<br />
}<br />
</div>
<p>원래 colorWipe( ) 프로그램 내에서 for (uint16_t i=0; i&lt;strip.numPixels(); i++) 로 표현된 부분을 for (int i=from; i&lt;=to; i++) 로 바꾸기만 하면 쉽게 colorWipeFT( )가 작성되는 것을 볼 수 있습니다. 다른 함수들도 이런 방법을 잘 응용하면 쉽게 만들 수 있겠지요?<br />
또, 한가지 미리 알아둘 것은 randomSeed( ) 함수와 random( ) 함수에 관련된 것입니다. 이 부분은 C 함수에서도 많이 나오는 라이브러리 함수인데 아두이노에서도 라이브러리 로 제공됩니다. random( ) 함수를 이용하면 임의의 값(난수)을 얻을 수 있으므로 스케치 프로그램을 실행시킬 때 다양성을 부여하기가 매우 쉽습니다. 예를 들어 카DL 형상에 색상을 표현할 때 이 random( ) 함수를 적용하여 표현한다면 함수가 실행될 때마다 값이 달라져 표현되는 색이 실행할 때마다 변하는 임의성을 확보할 수가 있겠습니다. 함수를 사용하는 방법은 아래와 같습니다.</p>
<p><span style="text-decoration: underline"><strong>randomSeed(seed)</strong></span></p>
<p style="padding-left: 30px">· 기능 : seed 값에 따른 난수표의 시작 포인트를 결정하여, 추후 random( ) 함수 사용시 난수를 제공할 수 있는 준비를 함, seed 값이 같으면 random( )의 return 값은 동일한 값이 됨<br />
· seed : 정수값<br />
· 반환값 : 없음</p>
<p><span style="text-decoration: underline"><strong>random(max)</strong></span><br />
<span style="text-decoration: underline"> <strong>random(min, max)</strong></span></p>
<p style="padding-left: 30px">· 기능 : min과 max 사이의 임의의 난수값을 제공<br />
· min : 반환값 범위의 최소값으로 long 타입이며 이 값은 포함됨<br />
· max : 반환값 범위의 최대값으로 long 타입이며 이 값은 포함이 되지 않음<br />
· 반환값 : 0~max 또는 min~max 사이의 정수</p>
<p>많이 사용되는 예로는,</p>
<p style="padding-left: 30px">randomSeed(analogRead(0));<br />
randNumber = random(256);</p>
<p>과 같이 사용하여 0~255까지의 난수를 얻는 방법이 있습니다. 즉, 아두이노에서 아날로그 포트 중 하나인 A0 포트에 아무 것도 연결하지 않은 상태의 값을 읽으면 임의의 값이 읽히는 것을 이용하여 randomSeed(seed) 함수를 결정하고, 이후 원하는 범위의 값은 random(max)를 이용하여 추출해 내는 것이지요.<br />
자, 이제 기본 준비가 되었으니 실제 카멜레온 형상에 대한 스케치 프로그램을 직접 작성해 보겠습니다. 가능하면 여러분들도 나름대로 먼저 충분히 작성해 본 다음에 아래 내용과 비교 검토해 보기를 권장합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
/* 카멜레온 만들기 */</p>
<p>#define RED 0x00ff0000 // 빨강<br />
#define GREEN 0x0000ff00 // 녹색<br />
#define BLUE 0x000000ff // 파랑<br />
#define YELLOW 0x00ffff00 // 노랑<br />
#define SKYBLUE 0x0073d1f7 // 하늘색<br />
#define PINK 0x00f69fa8 // 분홍<br />
#define BLACK 0&#215;00000000 // 검정(OFF)<br />
#define BROWN 0x0088563f // 갈색<br />
#define ORANGE 0x00f3753a // 오렌지색<br />
#define DEEPBLUE 0x002a365c // 남색</p>
<p>#define HEAD_FROM 0 // 머리 시작 번호<br />
#define HEAD_TO 31 // 머리 끝 번호<br />
#define SPINE_FROM 32 // 등 시작 번호<br />
#define SPINE_TO 57 // 등 끝 번호<br />
#define TAIL_FROM 58 // 꼬리 시작 번호<br />
#define TAIL_TO 83 // 꼬리 끝 번호<br />
#define BELLY_FROM 84 // 배 시작 번호<br />
#define BELLY_TO 89 // 배 끝 번호<br />
#define LEG_B_FROM 90 // 뒷다리 시작 번호<br />
#define LEG_B_TO 99 // 뒷다리 끝 번호<br />
#define LEG_F_FROM 100 // 앞다리 시작 번호<br />
#define LEG_F_TO 111 // 앞다리 끝 번호<br />
#define SKIN_FROM 112 // 피부 시작 번호<br />
#define SKIN_TO 132 // 피부 끝 번호<br />
#define EYE_FROM 133 // 눈 시작 번호<br />
#define EYE_TO 139 // 눈 끝 번호<br />
#define TONGUE_FROM 140 // 혀 시작 번호<br />
#define TONGUE_TO 147 // 혀 끝 번호</p>
<p>#define TWINKLE_LOOP 3 // twinkle 함수 실행시 깜빡깜빡 사이키 조명 횟수<br />
#include &lt;Adafruit_NeoPixel.h&gt;<br />
#include &lt;avr/power.h&gt;</p>
<p>#define PIN 6 // 6번 핀을 데이터 핀으로 이용</p>
<p>Adafruit_NeoPixel cdl = Adafruit_NeoPixel(147, PIN, NEO_GRB + NEO_KHZ800);<br />
// cdl 구조체 설정, 카멜레온 LED 총 개수 = 147<br />
void setup() {<br />
cdl.begin();<br />
cdl.show();<br />
randomSeed(analogRead(0)); // random( ) 함수 사용을 위한 준비, seed = A0 포트 read 값<br />
}</p>
<p>void loop() {<br />
uint8_t r, g, b;<br />
uint16_t i;<br />
uint32_t color;<br />
colorWipeFT(HEAD_FROM, HEAD_TO, GREEN, 0); // 머리를 녹색으로 켜기<br />
delay(300);<br />
colorWipeFT(SPINE_FROM, SPINE_TO, SKYBLUE, 0); // 등을 하늘색으로 켜기<br />
colorWipeFT(BELLY_FROM, BELLY_TO, SKYBLUE, 0);// 배를 하늘색으로 켜기<br />
colorWipeFT(TAIL_FROM, TAIL_TO, BLUE, 0); // 꼬리를 파랑색으로 켜기<br />
delay(300);<br />
colorWipeFT(LEG_F_FROM, LEG_F_TO, BROWN, 0); // 앞발을 갈색으로 켜기<br />
colorWipeFT(LEG_B_FROM, LEG_B_TO, BROWN, 0);// 뒷발을 갈색으로 켜기<br />
delay(300);<br />
colorWipeFT(SKIN_FROM, SKIN_TO, YELLOW, 0); // 피부를 노랑색으로 켜기<br />
colorWipeFT(EYE_FROM, EYE_TO, PINK, 0); // 눈을 핑크색으로 켜기<br />
delay(300);<br />
for (i=0; i&lt;4; i++) // 앞발과 뒷발을 번갈아 가면서 켜고 끄기, 4번 실행<br />
{<br />
colorWipeFT(LEG_F_FROM, LEG_F_TO, DEEPBLUE, 0);// 앞발은 남색으로 켜고<br />
colorWipeFT(LEG_B_FROM, LEG_B_TO, BLACK, 0); // 뒷발은 끄기<br />
delay(200);<br />
colorWipeFT(LEG_B_FROM, LEG_B_TO, DEEPBLUE, 0); // 뒷발은 남색으로 켜고<br />
colorWipeFT(LEG_F_FROM, LEG_F_TO, BLACK, 0); // 앞발은 끄기<br />
delay(200);<br />
}<br />
colorWipeFT(LEG_F_FROM, LEG_F_TO, DEEPBLUE, 0); // 앞발을 남색으로 켜기<br />
delay(200);<br />
tongueFT(TONGUE_FROM, TONGUE_TO, RED, 50); // 혀를 빨강색으로 내밀었다가 집어넣기<br />
twinkleFT(EYE_FROM, EYE_TO, PINK, 20); // 눈을 핑크색으로 깜빡이기<br />
colorWipeFT(EYE_FROM, EYE_TO, PINK, 0); // 눈을 모두 켜기<br />
twinkleFT(SKIN_FROM, SKIN_TO, YELLOW, 20); // 피부를 노랑색으로 깜빡이기<br />
colorWipeFT(SKIN_FROM, SKIN_TO, YELLOW, 0); // 피부를 모두 켜기<br />
delay(300);<br />
for (i=0; i&lt;3; i++) {<br />
r = random(256); // 난수 1개 얻어 r 값으로 할당<br />
g = random(256); // 난수 1개 얻어 g 값으로 할당<br />
b = random(256); // 난수 1개 얻어 b 값으로 할당<br />
color = cdl.Color(r, g, b); // r, g, b로 RGB 컬러값 결정<br />
colorWipeFT(0, cdl.numPixels()-1, color, 10); // 위 컬러로 전체를 차례로 색칠<br />
delay(500);<br />
}<br />
rainbowCycle(20); // 각 카DL을 다양한 색으로 표현<br />
colorWipeFT(0, cdl.numPixels()-1, BLACK, 0); // 모든 카DL 소등(OFF)<br />
delay(3000);<br />
}</p>
<p>/* colorWipeFT( ) : 일정 범위의 카DL을 하나씩 순서대로 채우는 함수<br />
- from : from LED 번호<br />
- to : to LED 번호<br />
- color : 32비트 RGB 컬러 코드, 0x00RRGGBB 형태<br />
- wait : LED 사이의 동작 간격(딜레이)<br />
*/<br />
void colorWipeFT(uint16_t from, uint16_t to, uint32_t color, uint16_t wait)<br />
{<br />
uint16_t i;<br />
for (i=from; i&lt;=to; i++) // 원래 범위가 (0~끝)인 것을 (from~to)로 수정<br />
{<br />
cdl.setPixelColor(i, color);<br />
cdl.show();<br />
delay(wait);<br />
}<br />
}</p>
<p>/* tongueFT( ) : 일정 범위의 카DL을 혀를 내밀었다가 다시 거둬들이도록 동작처럼 움직이도록 하는 함수<br />
- from : from LED 번호<br />
- to : to LED 번호<br />
- color : 32비트 RGB 컬러 코드, 0x00RRGGBB 형태<br />
- wait : LED 사이의 동작 간격(딜레이)<br />
*/<br />
void tongueFT(uint16_t from, uint16_t to, uint32_t color, uint16_t wait)<br />
{<br />
uint16_t i;<br />
for (i=from; i&lt;= to; i++) // 혀를 내미는 동작<br />
{<br />
cdl.setPixelColor(i, color);<br />
cdl.show();<br />
delay(wait);<br />
}<br />
delay(wait);<br />
for (i=to; i&gt;= from; i&#8211;) // 혀를 거둬들이는 동작<br />
{<br />
cdl.setPixelColor(i, BLACK);<br />
cdl.show();<br />
delay(wait);<br />
}<br />
delay(wait);<br />
}</p>
<p>/* twinkleFT( ) : 일정 범위의 카DL을 사이키 조명처럼 번쩍번쩍하면서 움직이도록 하는 함수<br />
- from : from LED 번호<br />
- to : to LED 번호<br />
- color : 32비트 RGB 컬러 코드, 0x00RRGGBB 형태<br />
- wait : LED 사이의 동작 간격(딜레이)<br />
*/<br />
void twinkleFT(uint16_t from, uint16_t to, uint32_t color, uint16_t wait)<br />
{<br />
uint16_t i, j;<br />
for(j=0; j&lt;TWINKLE_LOOP; j++)<br />
{<br />
for(i=from; i&lt;=to; i=i+2) // 1개는 켜고, 그 다음 1개는 끔(BLACK)<br />
{<br />
cdl.setPixelColor(i, color);<br />
if (i+1&lt;=to)<br />
cdl.setPixelColor(i+1, BLACK);<br />
cdl.show();<br />
}<br />
delay(wait);<br />
for(i=from; i&lt;=to; i=i+2) // 위와 반대로, 켜진 것은 끄고(BLACK), 꺼진 것은 켬<br />
{<br />
cdl.setPixelColor(i, BLACK);<br />
if (i+1&lt;=to)<br />
cdl.setPixelColor(i+1, color);<br />
cdl.show();<br />
}<br />
delay(wait);<br />
}<br />
}</p>
<p>// 지난 회에 사용하였던 함수<br />
// 전체가 다르게 다양한 색으로 변하면서 디스플레이하는 함수<br />
void rainbowCycle(uint8_t wait) {<br />
uint16_t i, j;</p>
<p>for(j=0; j&lt;256*5; j++) {<br />
for(i=0; i&lt; cdl.numPixels(); i++) {<br />
cdl.setPixelColor(i, Wheel(((i * 256 / cdl.numPixels()) + j) &amp; 255));<br />
}<br />
cdl.show();<br />
delay(wait);<br />
}<br />
}</p>
<p>// 지난 회에 사용하였던 함수<br />
// 0~255까지의 값을 전달하면 4 바이트 컬러값을 리턴하는 함수<br />
// 임의의 고르게 분포된 컬러값을 생성하기 위하여 사용<br />
uint32_t Wheel(byte WheelPos) {<br />
WheelPos = 255 &#8211; WheelPos;<br />
if(WheelPos &lt; 85) {<br />
return cdl.Color(255 &#8211; WheelPos * 3, 0, WheelPos * 3);<br />
} else if(WheelPos &lt; 170) {<br />
WheelPos -= 85;<br />
return cdl.Color(0, WheelPos * 3, 255 &#8211; WheelPos * 3);<br />
} else {<br />
WheelPos -= 170;<br />
return cdl.Color(WheelPos * 3, 255 &#8211; WheelPos * 3, 0);<br />
}<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
</div>
<p>※ 프로그램 정리 및 테스트는 한밭대학교 윤병우님이 도움을 주었습니다.</p>
<p>&nbsp;</p>
<p><span style="color: #3366ff"><strong>5단계 : 업로드하고 실행시키기</strong></span><br />
조금 긴 과정이었지만 스케치 프로그램 작성이 완료되었습니다. 이번에는 아두이노 UNO 이므로 업로드시 스케치 프로그램의 [보드] 선택 항목을 “UNO”로 선택하고 업로드와 실행을 진행하면 되겠습니다. 자, 원하는 대로 잘 움직이는지 살펴 볼까요? 아, 참, 여기서 한가지만 더 주의!!! 바로 전에 실행했던 [I ♥ U] 제작 시와 다르게 고려하여야 할 것 하나는 휴대폰 보조 배터리 용량입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-31.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32406" alt="38 PTB (31)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-31.jpg" width="524" height="245" /></a></p>
<p>이번 [변색하는 카멜레온]의 경우는 147개의 WS2812B가 사용되므로 전류 소모량이 상당히 되므로 최소 약 2A의 전류 공급 용량을 갖는 휴대폰 보조 배터리를 사용하시기 바랍니다. LED를 켜다가 전류 용량이 부족하면 그대로 정지하거나 리셋되어 다시 처음부터 시작할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-32.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32407" alt="38 PTB (32)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-32.jpg" width="524" height="245" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-33.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32408" alt="38 PTB (33)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-33.jpg" width="524" height="273" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-34.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32409" alt="38 PTB (34)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-34.jpg" width="524" height="273" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-35.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32410" alt="38 PTB (35)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-35.jpg" width="524" height="273" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-36.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32411" alt="38 PTB (36)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-36.jpg" width="524" height="273" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-37.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32412" alt="38 PTB (37)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-37.jpg" width="524" height="273" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-38.jpg" rel="lightbox[31927]"><img class="alignnone size-full wp-image-32413" alt="38 PTB (38)" src="http://www.ntrexgo.com/wp-content/uploads/2016/08/38-PTB-38.jpg" width="524" height="273" /></a></p>
<p>성공입니다! 발이 왔다가는 하는 동작과 혀를 날름거리는 동작도 잘 된 것 같습니다. 몸 전체 컬러를 변화시킬 때는 random() 함수를 이용하므로 루프가 반복될 때마다 새로운 색상으로 변화하므로 지루하지 않다는 장점도 있네요. 외관을 잘 다듬어서 지난번에 만든 것처럼 아크릴 판에 넣거나, 창문이나 유리판에 고정시켜 보조 간판처럼 사용하는 것이 가능할 것 같습니다. OK~</p>
<p>이 정도면 이제 어떤 형상, 어떤 컬러, 어떤 움직임도 시간만 주어진다면 모두 만들 수 있을 것 같은 자만심(?)도 드네요. 여러분도 상상의 나래, 창조의 나래를 펴서 자신만의 디자인과 자신만의 프로그램으로 동작하는 카DL 소품을 한 번쯤 만들어 보시기 바랍니다.<br />
오늘 모두 수고 많으셨습니다. 다음 시간에는 [카멜레온 DIY LED 이야기]의 마지막 시간으로, [특별한 크리스마스 트리] 제작을 포함하여 생활 속에서 응용할 수 있는 재미있는 카DL 소품을 함께 만들어 보는 시간을 갖도록 하겠습니다. 좋은 하루 되시기 바랍니다. 감사합니다.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/31927/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[35호]카멜레온 DIY LED 이야기 ①</title>
		<link>http://www.ntrexgo.com/archives/30734</link>
		<comments>http://www.ntrexgo.com/archives/30734#comments</comments>
		<pubDate>Tue, 15 Mar 2016 05:12:57 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[35호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=30734</guid>
		<description><![CDATA[디바이스마트매거진 35호 &#124; 이 이야기는 WS2812B라는 컬러 LED를 기반으로 제작된 [카멜레온 DIY LED] 시리즈를 이용하여 생활에 필요한 다양한 형상을 꾸며보고 이것을 다양한 컬러로 디스플레이 해보는 내용입니다. ]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-메인.jpg" rel="lightbox[30734]"><img class="alignnone size-large wp-image-30933" alt="35 프로젝트 메인" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-메인-620x234.jpg" width="620" height="234" /></a></p>
<p><span style="color: #000000;background-color: #ffffff"> </span></p>
<p><span style="font-size: x-large;color: #000000;background-color: #ffffff"><strong>카멜레온 DIY LED 이야기 ①</strong></span></p>
<p><span style="font-size: large;color: #000000;background-color: #ffffff">WS2812B와 카멜레온 DIY LED</span></p>
<p style="text-align: right">글 | 신상석 ssshin@jcnet.co.kr</p>
<p style="text-align: left">
<p style="text-align: left"><div class="symple-box grey none" style="text-align:left; width:100%;"> 
<p>디바이스마트 매거진 독자 여러분, 안녕하세요. 앞으로 5회에 걸처 [카멜레온 DIY LED 이야기]를 진행할 신상석입니다.<br />
작년에 [너무 쉬운 아두이노 DIY] 강좌를 1년 정도 진행했었는데, 이번에 디바이스마트 매거진 발행진의 배려로 연속하여 새로운 코너를 진행하게 되었습니다. 새로운 시작이므로 제 소개를 다시 한 번 간단히 드립니다.</p>
<p>■ 서울대 제어계측공학과(학사) ▷ KAIST 전산과(석사) ▷ KAIST 전산과(박사 수료)<br />
■ ETRI 책임연구원 ▷ 해동정보통신 연구소장 ▷ 욱성전자 연구소장 ▷ (현재) 제이씨넷 연구소장, 상명대학교 컴퓨터공학과 겸임교수,<br />
임베디드홀릭 카페(http://cafe.naver.com/lazydigital) 부매니저, 전자계산기 기술사</p>
<p>이 이야기는 WS2812B라는 컬러 LED를 기반으로 제작된 [카멜레온 DIY LED] 시리즈를 이용하여 생활에 필요한 다양한 형상을 꾸며보고 이것을 다양한 컬러로 디스플레이 해보는 내용입니다. 앞으로 진행할 내용에 대하여 간단히 알아보면 다음과 같습니다. (약간 변경될 수도 있습니다.)<br />
앞으로 즐겁고 유익한 강의가 될 수 있도록 많은 격려와 성원 부탁드립니다.</p>
<p style="text-align: left"></div>
<p><span style="color: #ffffff;font-size: medium;background-color: #003366"><strong>카멜레온 DIY LED?</strong></span></p>
<p>카멜레온 DIY LED라는 이름은 아마도 처음 들어보는 이름일 것이라 생각합니다. 왜냐하면 카멜레온 DIY LED라는 이름은 제이씨넷(http://www.jcnet.co.kr)에서 출시한 상품 이름이고 고유명사이기 때문입니다.<br />
이름도 생소한데 이것 저것 설명하려면 답답할 수 있으므로 일단 생김새부터 눈으로 보고 이야기를 시작하도록 하는 것이 좋곘습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-1.jpg" rel="lightbox[30734]"><img class="wp-image-30896 aligncenter" alt="35 프로젝트 1" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-1.jpg" width="482" height="209" /></a></p>
<p>위의 사진은 카멜레온 DIY LED 시리즈 중의 하나인 JLED-BAR-5 라는 모듈인데요. 길쭉한 PCB 판위에 5개의 네모난 부품이 얹혀 있는 형상입니다. 5개의 네모난 부품은 WS2812B라는 이름을 가지고 있는 컬러 LED로, 불이 켜지는 부분은 네모 형태 안쪽에 있는 동그라미 부분입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-2.jpg" rel="lightbox[30734]"><img class="wp-image-30897 aligncenter" alt="35 프로젝트 2" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-2.jpg" width="482" height="418" /></a></p>
<p>조금 다른 모양의 카멜레온 DIY LED 하나만 더 보겠습니다.<br />
이것의 이름은 JLED-SNOW-13입니다. 이쯤되면 약간 느낌이 오시지요? ‘내 눈에 콩깍지’라는 말처럼 혹시 저만 위 모듈이 ‘SNOW’로 보이는 것은 아니겠지요?<br />
이름 풀이를 해 보면, ‘JLED’는 제이씨넷(JCNET)이 만든 LED라는 의미로 ‘JLED’, LED의 배치 모양이 눈(SNOW) 형상을 닮았으므로 ‘SNOW’, 사용된 LED의 총 개수가 13개 이므로 ‘13’, 이것을 차례로 합하면 ‘JLED-SNOW-13’이 되겠습니다.<br />
내친김에, 카멜레온 DIY LED 이름도 어떻게 작명되었는지를 소개합니다. 아래 사진을 보시지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-3.jpg" rel="lightbox[30734]"><img class="wp-image-30898 aligncenter" alt="35 프로젝트 3" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-3.jpg" width="309" height="378" /></a></p>
<p>JLED-BAR-5와 JLED-SNOW- 12를 연결한 형태에 LED가 켜진 상태의 모습인데요. 알록달록 LED 불빛 색깔이 예쁘죠? 나무인 것도 같고, 뒤집으면 훈장 같기도 합니다. 카멜레온 DIY LED 모듈은 아두이노나 AVR모듈을 연결하여 프로그램해 주면 주인이 원하는 컬러와 동작을 아주 다양하게 연출할 수 있답니다.<br />
이와 같이 카멜레온처럼 LED 색깔이 아주 환상적으로 자유롭게 변할 수 있으므로 ‘카멜레온’, JLED-BAR-5의 한쪽 끝과 JLED-SNOW-12가 서로 연결된 것처럼 다른 종류의 카멜레온 DIY LED를 연속해서, 쉽게, 내 멋대로 연결할 수 있기 때문에 ‘DIY’, 그리고, 당연히 LED이므로 ‘LED’, 이것을 합체하여 ‘카멜레온-DIY-LED’! 말 되나요?</p>
<p>내가 그의 이름을 불러주기 전에는<br />
그는 다만 하나의 몸짓에 지나지 않았다.<br />
내가 그의 이름을 불러주었을 때,<br />
그는 나에게로 와서 꽃이 되었다.</p>
<p>예전에 읽은 기억이 있는 김춘수 시인의 ‘꽃’이라는 시에 나오는 구절인데요. 이것처럼 우리가 이름을 붙여주어서 새로운 생명(신상품) 카멜레온 DIY LED 시리즈가 탄생하였답니다.</p>
<p>처음으로 나온 신상품을 바라보고 있으면 오우~ 기분이 흐뭇해집니다. “대박! 나자~~~”<br />
물론 약간의 걱정도 함께 있지요. “혹시 쪽박? ……”<br />
사실 이 이름으로 확정되기 전에는 수 많은 이름 후보가 있었습니다.</p>
<p>판타지아, 프리즘, RGB, 내맘대로,<br />
알라딘, 매직, 스케치, 지니, 지니어스&#8230;.</p>
<p>이리 불러보고 저리 불러보고, 이렇게 조합해보고, 저렇게 합체해보고, 이리 찾아보고, 저리 찾아보고, 이 사람에게 물어보고, 저 사람에게 의견 구하고, 하다가 이 제품을 가장 잘 표현할 수 있는 것으로 결국 카멜레온-DIY-LED 이름이 선택되고, 세상에 나온 것입니다.<br />
이미 똑같은 것, 비슷한 것이 많이 나와 있다구요? 으~ 정말이요?<br />
비슷한 부분도 있겠지만, 단언컨데 카멜레온 DIY LED는 현재까지 나온 종류와는 상당 부분 다릅니다. 뭐가 다른지는 앞으로의 이야기에서 자연스럽게 아실 수가 있을 것이고… 여기서 이야기를 이어가기 위하여 간단한 퀴즈! 카멜레온 DIY LED에서 가장 중요한 것은 무엇일까요?<br />
뭐 물어보나 마나 한 시시한 질문이지요?<br />
LED!!! 예, 정답입니다. “단팥없는 찐빵”이 있을 수 없고, “고무줄 없는 팬츠”가 존재할 수 없는 것처럼 LED 없는 카멜레온 DIY LED는 상상할 수가 없겠습니다.</p>
<p><span style="font-size: medium;color: #ffffff;background-color: #003366"><strong>WS2812B와 이를 이용한 모듈</strong></span></p>
<p>그렇다면 카멜레온-DIY-LED의 기반이 되는 LED의 정체는 무엇일까요? 아마도 몇몇 분들은 앞의 사진을 보시자마자 “척 보면 압니다!” 하셨을 것으로 압니다. 이 LED는 WS2812B라는 컬러 LED입니다.<br />
2010년에 설립된 Worldsemi라는 중국 회사가 개발한 LED인데 내부에 LED를 제어하는 제어 로직이 함께 들어가 있는, 특허도 가지고 있는 약간은 독특한 기능과 형태를 가진 컬러 LED랍니다. 일반적인 컬러 LED는 R(Red), G(Green), B(Blue) 핀과 VCC 또는 GND 핀으로 이루어진 4핀 인터페이스 형태를 가지고 있지만, WS2812는 VCC, GND와 DIN(Data Input), DOUT(Data Output)의 4핀 인터페이스를 가지고 있고 정해진 프로토콜에 의하여 데이터를 전송받아 R, G, B의 컬러를 표현하는 한다는 점에서 일반 컬러 LED와 크게 구별됩니다.</p>
<table style="width: 620px;border: 1px solid #c4c4c4" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-4.jpg" rel="lightbox[30734]"><img class="wp-image-30899 aligncenter" alt="35 프로젝트 4" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-4-300x253.jpg" height="200" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-5.jpg" rel="lightbox[30734]"><img class="wp-image-30900 aligncenter" alt="35 프로젝트 5" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-5-300x300.jpg" height="200" /></a></td>
</tr>
<tr>
<td style="text-align: center">WS2812</td>
<td style="text-align: center">WS2812B</td>
</tr>
</tbody>
</table>
<p>위에서 대강의 형태를 보았으니 이번에는 크게 확대해서 안을 조금 들여다 보겠습니다. 보는 김에 WS2812B의 초기버전인 WS2812도 함께 보시지요.<br />
2가지 모두에서 동그라미 내부에 아주 작은 직사각형으로 보이는 것이 3개 있는데 이것이 R(Red), G(Green), B(Blue) 개별 LED이고 LED 반대편으로 꽤 크게 보이는 직사각형이 이들의 제어로직입니다.<br />
WS2812는 출시된 지 얼마 되지 않아 효율성과 안정성이 강화된 WS2812B로 개량되었습니다. 핀 수도 6개에서 4개로 단순화되었고, 내부 로직도 더 효율적으로 개선되었으며, 무엇보다도, 전원의 (+)와 (-) 를 서로 바꾸어 연결해도 안전하도록 설계되었다고 합니다. 현재는 거의 WS2812B만 사용하므로 우리는 WS2812B만 조금 더 자세히 살펴보는 것으로 하겠습니다. 전체적인 특징부터 정리해 보지요.</p>
<p><span style="color: #ffffff;background-color: #003366"><strong>WS2812B의 특징</strong></span></p>
<p><strong>● 제어로직 내장형 고휘도 컬러 LED</strong><br />
· 표현할 수 있는 컬러 : 1600만 가지 이상<br />
· 낮에도 디스플레이 형상이 식별 가능한 고휘도<br />
· 가로 x 세로 크기가 5mm X 5mm 인 5050 SMD(Surface Mounting Device) 패키지</p>
<p><strong>● 직렬 연결 방식의 4핀 인터페이스</strong><br />
· 입력(DIN), 출력(DOUT) 핀 각 1개와 전원(VCC, GND) 2핀의 단순한 구조<br />
· 앞 WS2812B 출력(DOUT)이 뒤 WS2812B 입력(DIN)으로 연결되는 직렬 연결 방식<br />
· 연결 가능 최대 LED 개수 : Refresh 간격이 초당 30 프레임인 경우, 1024개 이상</p>
<p><strong>● 다음 LED까지의 최대 간격 : 5m</strong><br />
· 단순하고 효율적인 데이터 처리 방식</p>
<p><strong>● 데이터 전송 프로토콜 : NRZ(Non Return to Zero) 방식</strong></p>
<p><strong>● DIN 포트로 들어오는 24비트의 데이터를 취하여 이것을 내부 데이터 래치에 저장하고, 이후 들어오는 데이터는 DOUT 포트로 출력</strong></p>
<p><strong>● 연속적인 연결의 경우 하나의 WS2812B를 통과할 때마다 계속 24비트씩의 데이터가 감소하는 방식으로 무한대(?)의 WS2812B 연결 가능</strong></p>
<p>간단히 이야기하면, WS2812B를 한 줄로 죽~ 내가 원하는 대로 엄청나게 많이 연결하면서, 각 LED 단위로 내가 원하는 컬러로(껐다 켰다 포함) 자유롭게 표현할 수 있다는 이야기입니다. 와우!!! 이거 잘만 하면 뭔가 기발한 것을 만들어 볼 수 있겠다는 생각이 들지 않나요?<br />
세상에 나온 지 몇 년 되었으니 당연히 이것을 이용해서 이미 만들어진 것이 있겠지요. 확인해 보겠습니다.<br />
해외에는 Adafruit(www.adafruit.com)라는 회사가 NeoPixel 이라는 브랜드명으로 여러가지 상품을 만들어 판매하고 있습니다. (디바이스마트에서도 현재 수입 판매 중!) 대표적인 것들만 몇 개 보겠습니다.</p>
<table style="width: 620px;border: 1px solid #eaeaeb;border-color: #f2f2f3;border-width: 1px" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-6.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30901" alt="35 프로젝트 6" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-6-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-7.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30902" alt="35 프로젝트 7" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-7-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td>Flora : 1개짜리 개별 LED로 4 방향으로 각각 신호선을 납땜할 수 있는 형태 (VCC, GND, DIN, DOUT)</td>
<td>Stick &#8211; 8개 LED가 막대처럼 연속 연결된 형태, 신호 연결을 위한 패드는 뒷면에 있음</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-8.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30903" alt="35 프로젝트 8" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-8-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-9.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30904" alt="35 프로젝트 9" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-9-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td>Stick  2개를 연속하여 연결한 모습으로 뒤로 제어기(예 : 아두이노)가 연결된 것이 보인다.</td>
<td>Stick의 뒷 모습으로 신호 연결을 위한 SMD 패드가 보이며, 여기에 전선을 연결하여 제어기(아두이노 등)와 연결하거나 다른 LED들을 연속하여 연결할 수 있다. 다른 제품들도 연결 방식은 모두 SMD 패드에 납땜하는 형태이다.</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-10.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30905" alt="35 프로젝트 10" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-10-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-11.jpg" rel="lightbox[30734]"><img class="alignnone  wp-image-30906" alt="35 프로젝트 11" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-11.jpg" width="300" /></a></td>
</tr>
<tr>
<td>Jewel &#8211; 7개 LED로 구성되어 있으며, 뒤에 있는 제어기는 Adafruit의 Pro Trinket</td>
<td>Ring &#8211; 16개의 LED로 구성된 반지 모양의 모듈로 뒤쪽 제어기에 ARDUINO 글씨가 살짝 보인다.</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-12.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30907" alt="35 프로젝트 12" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-12-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-13.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30908" alt="35 프로젝트 13" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-13-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td>Matrix &#8211; 64 LED로 구성된 도트매트릭스 형태로 환상적인 색깔이네요.</td>
<td>Ring 머리 장식이나 귀걸이, 목걸이, 팔찌 등의 응용도 됩니다.</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-14.jpg" rel="lightbox[30734]"><img class="alignnone  wp-image-30909" alt="35 프로젝트 14" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-14.jpg" width="300" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-15.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30910" alt="35 프로젝트 15" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-15-300x188.jpg" width="300" height="188" /></a></td>
</tr>
<tr>
<td>Strip 형태. 많은 양의 LED를 연결할 때 사용되는 제품으로 가위로 필요한 만큼 잘라 쓸 수 있답니다.</td>
<td>strip 형태. 신발에 총천연색 발광이라~.</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-16.jpg" rel="lightbox[30734]"><img class="alignnone size-medium wp-image-30911" alt="35 프로젝트 16" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-16-300x211.jpg" width="300" height="211" /></a></td>
<td></td>
</tr>
<tr>
<td>Strip 형태. 이런 응용도 가능하네요.</td>
<td></td>
</tr>
</tbody>
</table>
<p>어쩌다 보니 NeoPixel 선전이 되어버린 것 같은데… 쩝! 어쨌든 응용범위가 넓은 것 같습니다. (나중에 아시겠지만 카멜레온 DIY LED는 응용 범위가 훨씬 더 넓습니다.) 시장이 작아서인지, Adafruit가 치고 나가서 엄두가 나지 않아서 인지는 잘 모르겠지만 해외에서도 Adafruit사 말고는 WS2812B 기반의 상품을 출시한 다른 회사는 거의 보이지 않습니다.<br />
그럼, 국내는 어떤지 보겠습니다.<br />
유일하게, N사에서 ‘R******시리즈’라고 이름을 붙여 아래와 같은 5개 제품을 출시하여 판매하고 있습니다. 형태는 NeoPixel의 일부 제품과 비슷한 것 같네요.<br />
지금까지 WS2812B를 사용하여 만들어진 제품을 간략히 살펴보았습니다. NeoPixel은 국내에서는 디바이스마트가 국내 공식 파트너로 판매중이고, R******시리즈는 디바이스마트 등에서 판매가 되고 있습니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size: 13px;line-height: 19px" href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-17.jpg" rel="lightbox[30734]"><img class="alignnone  wp-image-30912" alt="35 프로젝트 17" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-17-270x300.jpg" width="173" height="192" /></a></td>
<td colspan="2"><img class="alignnone  wp-image-30914" alt="35 프로젝트 19" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-19-270x300.jpg" width="173" height="192" /></td>
<td><img class="alignnone  wp-image-30913" alt="35 프로젝트 18" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-18-270x300.jpg" width="173" height="192" /></td>
</tr>
<tr>
<td rowspan="2" colspan="2"><img class="size-thumbnail wp-image-30916 aligncenter" alt="35 프로젝트 21" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-21-150x150.jpg" width="150" height="150" /></td>
<td rowspan="2" colspan="2"><img class="size-full wp-image-30915 aligncenter" alt="35 프로젝트 20" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-20.jpg" width="160" height="178" /></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><span style="color: #ffffff;font-size: medium;background-color: #003366"><strong>카멜레온 DIY LED 응용</strong></span></p>
<p>자, 이제 다른 제품들에 대하여 알아보았으니, 카멜레온 DIY LED에 대하여 좀 더 자세하게 알아보겠습니다.<br />
카멜레온 DIY LED 시리즈는 고휘도 WS2812B 컬러 LED를 여러개 조합하여 제작된 모듈이라는 점에서는 다른 제품들과 비슷하지만, 크게 2가지의 다음과 같은 다른 특장점을 가지고 있습니다.<br />
첫째, 카멜레온 DIY LED는 점, 막대, 원호, 다각형 등의 기본 도형 및 별, 하트, 눈, 화살표 등의 예쁘고 친근한 형상을 기본 모듈로 가지고 있습니다.<br />
둘째, 모든 모듈은 레고처럼 각 모듈끼리의 직접 연결을 통하여(납땜 불필요, 세계 최초!) 숫자나 문자, 도형은 물론 캐릭터나 동물 등 자신이 원하는 형상을 쉽고, 빠르고, 자유롭게 구현할 수 있습니다.<br />
카멜레온 DIY LED 시리즈는 현재 아래와 같이, 막대(BAR) 그룹, 원호(ARC) 그룹, 방향전환자(DIR) 그룹, 도형(FIG) 그룹, 아이템(ITEM) 그룹, 연결자(CON) 그룹의 총 6개 그룹 48개 모듈과 모듈 연결에 필요한 케이블 2종을 포함하여 총 50개의 모듈로 구성됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-22.jpg" rel="lightbox[30734]"><img class="alignnone size-large wp-image-30917" alt="35 프로젝트 22" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-22-620x438.jpg" width="620" height="438" /></a><br />
카멜레온 DIY LED로 형상을 만들고 아두이노나 AVR 등의 마이크로콘트롤러를 연결하여 각 LED마다 색상과 밝기, ON/OFF 동작을 원하는 대로 프로그램하면, 그 응용은 아래 사진과 같이 다양한 분야, 다양한 용도로 무한하게 확장 가능합니다.</p>
<table style="width: 620px;border: 1px solid #d6d4d7;border-width: 0px" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-23.jpg" rel="lightbox[30734]"><img class="size-full wp-image-30918 aligncenter" alt="35 프로젝트 23" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-23.jpg" width="316" height="186" /></a></td>
</tr>
<tr>
<td colspan="2">
<p style="text-align: center">카멜레온 DIY LED의 가장 간단한 모듈 JLED-BAR-1을 아두이노(JARDUINO-UNO-BTmni)에 연결</p>
</td>
</tr>
<tr>
<td colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-24.jpg" rel="lightbox[30734]"><img class="aligncenter" alt="35 프로젝트 24" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-24.jpg" width="329" height="207" /></a></td>
</tr>
<tr>
<td colspan="2">
<p style="text-align: center">카멜레온 DIY LED의 JLED-RING-12를 아두이노 UNO에 연결하여 색상환을 디스플레이</p>
</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-25.jpg" rel="lightbox[30734]"><img class="wp-image-30920 aligncenter" alt="35 프로젝트 25" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-25-300x197.jpg" width="270" height="177" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-26.jpg" rel="lightbox[30734]"><img class="size-medium wp-image-30921 aligncenter" alt="35 프로젝트 26" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-26-300x168.jpg" width="300" height="168" /></a></td>
</tr>
<tr>
<td colspan="2">
<p style="text-align: center">(좌) 카멜레온 DIY LED 다수개를 폼보드를 밑판으로 하여 회사명을 구현한 모습<br />
(우) 아두이노를 연결하고 프로그램한 후 실행한 디스플레이</p>
</td>
</tr>
<tr>
<td colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-27.jpg" rel="lightbox[30734]"><img class="size-medium wp-image-30922 aligncenter" alt="35 프로젝트 27" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-27-300x171.jpg" width="300" height="171" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">카멜레온 DIY LED를 밑판없이 연결자만을 이용하여 I Love(♥) U 형상을 구현</td>
</tr>
<tr>
<td colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-28.jpg" rel="lightbox[30734]"><img class="size-medium wp-image-30923 aligncenter" alt="35 프로젝트 28" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-28-300x200.jpg" width="300" height="200" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">카멜레온 DIY LED인 해(JLED-RING-12), 달(JLED-MOON-11), 별(JLED-STAR-10)을 아크릴판에 고정</td>
</tr>
<tr>
<td colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-29.jpg" rel="lightbox[30734]"><img class="size-medium wp-image-30924 aligncenter" alt="35 프로젝트 29" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-29-300x168.jpg" width="300" height="168" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">카멜레온 DIY LED를 조합하여 만든 장식용 안경</td>
</tr>
<tr>
<td colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-31.jpg" rel="lightbox[30734]"><img class="size-medium wp-image-30925 aligncenter" alt="35 프로젝트 31" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-31-300x182.jpg" width="300" height="182" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">카멜레온 DIY LED로 꾸며본 고양이 얼굴</td>
</tr>
<tr>
<td style="text-align: center" colspan="2"><a href="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-32.jpg" rel="lightbox[30734]"><img class="size-medium wp-image-30926" alt="35 프로젝트 32" src="http://www.ntrexgo.com/wp-content/uploads/2016/03/35-프로젝트-32-300x155.jpg" width="300" height="155" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">카멜레온 DIY LED의 모든 LED 모듈을 한 개씩만 사용하여 구성한 비상하는 용의 모습</td>
</tr>
</tbody>
</table>
<p>이러한 카멜레온 DIY LED 모듈은 현재 디바이스마트<a href="//www.devicemart.co.kr" target="_blank">(http://www.devicemart.co.kr</a>)와 제이씨넷스토어팜(<a href="http://storefarm.naver.com/jcnet" target="_blank">http://storefarm.naver.com/jcnet</a>)등의 인터넷 쇼핑몰에서 판매가 되고 있으며, 전체적인 소개 동영상은 유투브 <a href="https://www.youtube.com/watch?v=OSUZdWhpAb8" target="_blank">https://www.youtube.com/watch?v=OSUZdWhpAb8</a>를 참조하시면 됩니다.</p>
<p>오늘은 세계 최초 레고타입 컬러 LED 모듈인 카멜레온 DIY LED 시리즈에 대하여 개략적으로 알아보았습니다. 다음 회에는 카멜레온 DIY LED 시리즈이 기반이 되는 WS2812B의 동작 원리에 대하여 자세히 알아보고, 이를 기반으로 한 카멜레온 DIY LED 모듈을 이용하여 12색상환 만들기에 도전해 보도록 하겠습니다.<br />
다음 회에 건강하고 멋진 모습으로 다시 만나기를 기원합니다. 안녕히 계십시오.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/30734/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[33호]너무 쉬운 아두이노 DIY ⑤ &#8211; 캐롤송 카드 &amp; 컬러링 온도계</title>
		<link>http://www.ntrexgo.com/archives/29852</link>
		<comments>http://www.ntrexgo.com/archives/29852#comments</comments>
		<pubDate>Thu, 15 Oct 2015 07:54:25 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[33호]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[아두이노]]></category>
		<category><![CDATA[캐롤송]]></category>
		<category><![CDATA[컬러링]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=29852</guid>
		<description><![CDATA[디바이스마트매거진 33호 &#124; 너무 쉬운 아두이노 DIY 5번째 이야기! 연말(年末)을 즐겁게 마무리하는 의미로 오늘은 다가오는 크리스마스에 사용할 멋진 캐롤송 카드와 집안에 장식하면 좋을 듯한 컬러링 온도계를 만들어보도록 하겠습니다. ]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/Cap-2016-01-15-16-19-06-424.jpg" rel="lightbox[29852]"><img alt="Cap 2016-01-15 16-19-06-424" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/Cap-2016-01-15-16-19-06-424-620x180.jpg" width="620" height="180" /></a></p>
<p><span style="font-size: large; color: #000080;"><strong>너무 쉬운 아두이노 DIY ⑤</strong></span></p>
<p><span style="font-size: medium; color: #000080;">캐롤송 카드 &amp; 컬러링 온도계</span></p>
<p style="text-align: right;">글 | 신상석 ssshin@jcnet.co.kr</p>
<p> <div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>이 강의는 아두이노를 가지고 간단하게 생활에 필요한 용품을 만들어 보는 강의입니다. 뚝딱뚝딱 뭔가 자신만의 DIY 용품을 만들어 보는 쏠쏠한 재미가 있는 강의라고나 할까요? 이미 주변에 아두이노와 관련한 많은 책이 출간되었고 카페나 블로그를 통하여 강의가 진행된 경우도 꽤나 많이 있는데도 불구하고, 이 지면을 통하여 강의를 개설한 이유는 다음과 같습니다.</p>
<p>1. 아두이노의 초보자들을 위한 쉽고 재미있는 강의가 거의 없는 것 같아, 가능하면 초등학생(?)까지도 함께 해 볼 수 있는 그런 강의를 한 번 해보고 싶어서…<br />
2. 아두이노를 가지고 뭔가 조금은 다른, 자신만의 창의적인(?) DIY를 할 수 있는 자리를 만들어주고 싶어서…<br />
3. 디바이스마트매거진은 임베디드와 관련된 독자들이 많고, 발행 부수도 많아, 저와 제가 속한 회사(제이씨넷) 그리고 임베디드홀릭 카페의 홍보에 도움이 될 것 같아서…</p>
<p>현재 구상하고 있는 회차별 내용을 간략하게 정리해 보면 다음과 같습니다. (변경될 수 있습니다.)</p>
<table style="border: 1px solid #e2dee2; width: 340px;" border="1" cellspacing="0" cellpadding="1">
<tbody>
<tr>
<td style="text-align: center;">회차</td>
<td>내용</td>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td>3색 신호등 만들기</td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td>카멜레온 반지, 스위치를 이용한 신호등 게임기</td>
</tr>
<tr>
<td style="text-align: center;">3</td>
<td>FND로 만드는 디지털전압계, 카운트다운 계수기</td>
</tr>
<tr>
<td style="text-align: center;">4</td>
<td>어두워지면 켜지는 정원등, 공중회전그네</td>
</tr>
<tr>
<td style="text-align: center;">5</td>
<td>캐롤송 카드, 컬러링 온도계</td>
</tr>
<tr>
<td style="text-align: center;">6</td>
<td>스마트폰으로 조정하는 스마트카</td>
</tr>
</tbody>
</table>
<p>앞으로 즐겁고 알찬 강의가 될 수 있도록 최선을 다할 것을 약속 드리며, 이 강의를 보는 독자들도 메일이나 카페를 통하여 Q&amp;A(Question &amp; Answer)나 피드백을 주셔서, 함께 정감을 나눌 수 있는 계기가 되기를 기대해 봅니다.<br />
</div>
<p>여러분, 안녕하세요. 날씨가 많이 추워지고 있습니다. 눈의 계절 겨울이 시작되고 있고, 2015년도 저물어가고 있습니다. 연말(年末)을 즐겁게 마무리하는 의미로 오늘은 다가오는 크리스마스에 사용할 멋진 캐롤송 카드와 집안에 장식하면 좋을 듯한 컬러링 온도계를 만들어보도록 하겠습니다. 카드를 열면 신나는 징글벨 음악이 나오는 캐롤송 카드를 예쁘게 만들어서 사랑하는 연인에게 선사하고, 실내 온도가 낮아지거나 높아지면 경보음이 울리는 컬러링 온도계를 만들어서 거실에 설치해 보세요~재미있을 것 같죠?</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 소리   </strong></span></p>
<p>아두이노를 가지고 소리를 내고 음악을 연주하기 전에 일단 소리에 대하여 간단히 알아보고 가겠습니다. 소리는 공기를 진동시켜 생성된 압력파가 귀의 고막으로 전달되어 감지되는 것인데요. 보통은 일정한 주파수를 갖는 정현파(正弦波, 사인파) 형태로 나타냅니다. 전자회로로 소리를 생성할 때는 디지털 주기 파형으로 HIGH값과 LOW값을 순간적으로 바꾸는 형태이므로 정현파가 아니라 구형파(矩形波, 사각파) 형태가 되는데 이 구형파는 정현파에 비하여 소리가 날카롭고 귀에 거슬리는 단점이 있습니다. 아두이노의 경우, DAC(Digital Analog Converter, 디지털-아날로그 변환기)를 내장한 아두이노 두에(DUE)를 제외한 다른 아두이노는 오직 구형파 형태만 생성할 수 있습니다. 우리가 가지고 있는 아두이노 UNO도 그러니까 구형파만 만들 수 있는 것이지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-1.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30136" alt="33 아두이노  (1)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-1.bmp" width="431" height="95" /></a></p>
<p>소리를 구분 짓는 요소는 크게 3가지가 있는데, 그것은 높이, 세기, 맵시(소리의 3요소라 함)입니다. 소리의 높이는 보통 음계로 나타내는데, 진동수(주파수)가 많아지면(높아지면) 높은 음의 소리가 나게 됩니다. 소리의 세기는 보통 데시벨(dB)로 나타내는데, 진폭(파고)이 클 수로 큰(센) 소리가 되겠습니다. 마지막으로 소리의 맵시는 파형의 형태로 구분되는데, 소리를 생성한 소스(원인)에 따라 소리의 생긴 모양(파형)이 다르게 나타나는 것으로, 맵시가 다르기 때문에 같은 높이의 같은 세기의 소리라도 피아노 소리와 바이올린 소리는 구별이 되는 것입니다. 아래 그림을 보면 이해가 조금 더 쉽게 될 것 같네요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-2.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30140" alt="33 아두이노  (2)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-2.bmp" width="517" height="283" /></a></p>
<p>&nbsp;</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 삐에조 버저    </strong></span></p>
<p>소리에 대한 기초를 공부했으니까, 이번에는 소리를 만들어내는 도구인 버저(buzzer)에 대하여 알아보겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-3.bmp" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30143" alt="33 아두이노  (3)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-3.bmp" /></a></p>
<p>버저는 전자석의  코일에 단속적(斷續的)으로 전류를 보내어 철판 조각을 진동시켜 내는 소리 생성 장치를 말합니다. 소리를 내는 원리는 아래와 같이 소리를 내는 철편이 전자석 근처에 있어서 전자석에 전류를 흘리면 전자석이 철편을 잡아당겨 붙게 되면서 소리가 나는 것이지요. 이렇게 전류를 흘렸다 끊었다 하는 동작을 1초에 몇 번 수행하는가에 따라, 주파수를 높이면 높은 음의 소리가 나게 되고 주파수를 낮추면 낮은 음의 소리가 나게 되는 것입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-4.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30146" alt="33 아두이노  (4)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-4.bmp" width="477" height="136" /></a></p>
<p>한편, 우리는 삐에조 버저를 사용할 것인데, 이것은 압전 현상을 이용한 것입니다. 석영(quartz)이나 세라믹과 같은 물질에 전압을 가하면 물체에 변형(늘어짐과 수축)이 생기게 되는데 이를 이용하면 공기를 진동시켜 소리를 낼 수 있습니다. 아래 왼쪽 그림은 삐에조 버저를 분해하여 본 것인데, 둥그런 판처럼 생긴 것은 수정진동자를 포함하여 2개의 서로 다른 물질이 접착된 원형 판입니다. 전원을 가하거나 끊게 되면 석영 판이 늘어나거나 수축되어 원형 판이 아래 오른쪽 그림과 같이 굽혀졌다 펴졌다 하면서 공기를 진동시켜 소리가 나게 되는 것입니다.</p>
<table style="width: 620px;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><img class="alignnone  wp-image-30149" alt="33 아두이노  (5)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-5.bmp" width="275" height="216" /></td>
<td><a style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;" href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-6.bmp" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30152" alt="33 아두이노  (6)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-6.bmp" /></a></td>
</tr>
</tbody>
</table>
<p>삐에조 버저도 종류가 여러가지 있지만 여기서는 간단한<a href="http://www.devicemart.co.kr/32839"> BPE-1404P-40</a>의 규격을 간단히 살펴보고 가겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-2.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30142" alt="33 아두이노  (2)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-2.png" width="386" height="120" /></a></p>
<p>5V를 연결해주고, 4000Hz 근처의 주파수를 삐에조 버저 양단에 걸어주면 약 80 데시벨(dB) 정도 크기의 소리가 날 것 같네요. 사람들이 보통 이야기하는 소리의 크기가 약 50~60 데시벨(dB) 정도이고, 청소기 돌리는 소리가 70~80 데시벨(dB) 정도라고 하니 거리가 떨어져 있다 해도 동작시키면 꽤나 큰 소리가 들릴 것 같습니다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 삐 ~ 소리내기    </strong></span></p>
<p>이 정도면 기초 지식은 갖추었으니, 삐에조 버저로 소리를 내 보도록 하겠습니다. 일단은 욕심 부리지 말고 “삐~” 소리를 4000Hz의 소리로 내 보겠습니다.<br />
아두이노는 좋은 것이, 이렇게 보편적으로 필요로 할 것 같은 기능은 거의 다 함수(라이브러리)로 만들어 놓았다는 것입니다. 버저도 예외는 아니어서 아두이노는 소리를 내는 함수로 tone( )이라는 아주 편리한 함수를 제공합니다. 아래 내용을 보시지요.</p>
<p style="padding-left: 60px;"><span style="color: #008000;">tone(pin, frequency, duration)</span><br />
<span style="color: #008000;"> &#8211; pin : 소리를 출력할 핀 번호</span><br />
<span style="color: #008000;"> &#8211; frequency : 출력할 소리의 주파수</span><br />
<span style="color: #008000;"> &#8211; duration : 출력할 소리의 지속 시간(ms), 인수를 생략하는 경우는 noTone() 함수를 호출하기 전까지 소리 출력이 계속됨</span></p>
<p>여기서 주의하셔야 하는 것은 tone 함수를 사용하여 버저를 제어할 경우, 버저는 반드시 PWM(Pulse Width Control)이 가능한 핀에 연결하여야 한다는 것입니다(아두이노에서 PWM이 가능한 핀은 핀 번호에 물결 표시(‘~’)가 있음).<br />
예를 들어 5번 핀에 삐에조 버저를 연결하고, tone(5, 4000, 3000) 을 실행하면 4000Hz의 소리가 3000ms(3초) 동안 생성되겠습니다. 이거야 정말 쉽네요. 벌써 해답이 나와 버렸습니다. 바로 해 봐야겠죠?</p>
<p><strong>[아두이노 연결]</strong><br />
아두이노 연결은 아래와 같습니다. 연결이 너무 간단하여 설명이 필요 없겠습니다. 삐에조 버저의 (+) 부분은 PWM 제어가 가능한 5번핀에 연결하고, (-) 부분은 GND에 연결하면 끝! 와우~ 정말 쉽다!</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-7.bmp" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30155" alt="33 아두이노  (7)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-7.bmp" /></a></p>
<p><strong>[알고리즘]</strong><br />
구현한 규격은 조금 전에 예로 들었던, 4000Hz 음높이로 삐~ 소리를 3초간 내는 것으로 합니다. 알고리즘이라고 할 것도 없지만 굳이 형식을 취한다면 이렇게 되겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-1.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30139" alt="33 아두이노  (1)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-1.png" width="441" height="91" /></a></p>
<p><strong>[스케치 프로그램]</strong><br />
자, 그럼 프로그램을 작성해 보시지요.</p>
<p>너무 쉬워서 바로 갑니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define PIEZO 5</p>
<p>void setup()<br />
{<br />
pinMode(PIEZO, OUTPUT); // PIEZO 버저 핀은 출력<br />
}</p>
<p>void loop()<br />
{<br />
tone(PIEZO, 4000, 3000); // 4Khz(4000) 주파수로 3초(3000) 동안 출력<br />
delay(3000); // tone 함수 자체는 시간을 소모(delay)하지 않음<br />
while(1) ; // 3초후 정지, 다시 시작하려면 RESET 버튼을 누름<br />
}</p>
</div>
tone() 함수 자체는 시간을 소모하지 않고 내부적으로 Timer/Counter를 사용하여 파형을 만드는 것이므로 소리가 날 동안 다른 일을 진행하지 않을 것이면 delay()를 주어서 동기를 맞추어 줄 필요가 있다는 것만 조심하면 될 듯 합니다.<br />
바로 실행시켜 보겠습니다.</p>
<p><span style="font-size: large; color: #ff0000;">삐&#8211;</span></p>
<p>와~ 소리가 잘 나네요.(한 번 더 실행해 보려면 아두이노의 RESET 버튼을 누르면 됩니다!)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-13.jpg" rel="lightbox[29852]"><img class="alignnone  wp-image-30170" alt="33 아두이노  (13)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-13-620x316.jpg" width="434" height="221" /></a></p>
<p><a href="https://www.youtube.com/watch?v=MngcqOZq5IA">동영상 보러가기</a></p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 음계      </strong></span></p>
<p>일단 한 걸음을 내디뎠으니 반은 온 것이나 다름 없습니다. 본격적으로 캐롤송 노래 연주를 위한 작업에 들어가야 하는데, 일단, 연주를 하려면 음계를 알아야 하니까 이것부터 해결하고 가지요.<br />
음계는 “음악에 쓰이는 음을 높이의 차례대로 배열한 음의 층계”(두산백과사전)라고 사전에 정의되어 있습니다. 쉽게 말해서 “도, 레, 미, 파, 솔, 라, 시, 도”를 말하는 것이지요. 기본 음의 주파수는 세계적으로 표준 주파수가 이미 정해져 있습니다. 예를 들어 6번째 옥타브의 주파수는 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30179" alt="33 아두이노" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-620x91.png" width="434" height="64" /></a></p>
<p>아래쪽 ‘도’와 위쪽 ‘도’의 주파수를 비교해 보면 주파수가 2배 차이가 나는 것을 알 수 있지요. 어쨌든 음계에 따라 주파수가 정해져 있으므로 우리가 원하는 노래의 음계를 안다면, 당연히 주파수를 알 수 있고, 주파수를 안다면 그 주파수를 tone( ) 함수를 이용하여 음의 길이만큼만 실행하면 원하는 노래를 연주할 수 있을 것 같습니다. 그렇다면, 음계와 음의 길이는 악보를 찾으면 되고, 음계에 해당되는 주파수만 찾으면 되는데, 이건 당연히 … 누군가가 정리해 놓았겠죠?</p>
<p>맞습니다. 아두이노 예제에서 pitches.h 라는 파일을 제공하는데 여기에 각 음계에 해당되는 주파수가 모두 정의되어 있답니다. 위의 6번째 옥타브에 해당되는 것만 살펴보면 요렇게 …</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define NOTE_C6 1047 // 도 (6옥타브)<br />
#define NOTE_CS6 1109<br />
#define NOTE_D6 1175 // 레 (6옥타브)<br />
#define NOTE_DS6 1245<br />
#define NOTE_E6 1319 // 미 (6옥타브)<br />
#define NOTE_F6 1397 // 파 (6옥타브)<br />
#define NOTE_FS6 1480<br />
#define NOTE_G6 1568 // 솔 (6옥타브)<br />
#define NOTE_GS6 1661<br />
#define NOTE_A6 1760 // 라 (6옥타브)<br />
#define NOTE_AS6 1865<br />
#define NOTE_B6 1976 // 시 (6옥타브)<br />
#define NOTE_C7 2093 // 도 (7옥타브)</p>
</div>
<p>위의 표보다 음의 개수가 많은 것은 반음에 해당되는 것도 모두 정의되어 있기 때문인데, 하나씩 비교하여 보면 똑같다는 것을 알 수 있습니다. 음. 그럼, 이 pitches.h 파일만 include 하여 프로그램을 작성하면 되니까 이제 프로그램 작성 준비도 모두 마친 것 같습니다.<br />
알고 보면 별 것 아니죠?</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 캐롤송 카드     </strong></span></p>
<p>자, 이제 준비가 다 되었으니 오늘의 메인 메뉴인 DIY 캐롤송 카드를 만들어 봅시다. GO, GO~ 먼저 기능 규격부터 살펴봅니다.</p>
<p><strong>[기능 규격]</strong></p>
<p>카드를 열면 3초 후에 징글벨 노래가 나오는 캐롤송 카드 만들기</p>
<p>이번엔 어떻게 구현하면 될 지 방법을 잠시 생각해 보겠습니다.</p>
<p><strong>[구현 방법]</strong></p>
<p>(1) 아두이노 PWM 핀에 삐에조 버저의 (+) 단자를, GND에 (-) 단자를 연결하고, PWM을 이용하여 ‘징글벨’ 음계에 해당되는 주파수를 음표 길이에 해당하는 시간만큼 연이어서 출력<br />
(2) 음계에 해당되는 파일은 아두이노에 이미 “pitches.h”이 존재하므로 이를 include 하여 사용<br />
(3) 크리스마스 카드를 만들거나 준비한 후 카드 양단에 전도성 패드를 붙이고 한쪽은 아두이노의 RESET 신호를, 다른 한 쪽은 GND에 연결해 놓고, 카드가 접혀져 있는 상태에는 두 신호가 연결되도록 함 (클립 등으로 접함, RESET 상태)<br />
(4) 카드가 열리면 RESET 신호가 단락되도록 하여 아두이노가 실행되면서 3초후에 징글벨 노래가 연주됨</p>
<p><strong>[알고리즘]</strong></p>
<p>정리된 알고리즘은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-3.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30145" alt="33 아두이노  (3)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-3.png" width="441" height="139" /></a></p>
<p><strong>[아두이노 연결]</strong><br />
크리스마스 카드와 아두이노, 버저의 연결 방법은 다음과 같이 되겠네요~</p>
<p>(1) 지난번 버저를 연결한 형태에 추가하여, RESET 핀과 GND 핀을 점퍼선으로 끌어내어 카드가 서로 겹치는 부분에 테이프 등을 이용하여 끝을 X자 형태가 되도록 부착<br />
(2) 카드를 접어서 RESET 점퍼선과 GND 점퍼선이 서로 단락이 되도록 하고 이 부분을 클립 등을 이용하여 고정</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-8.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30158" alt="33 아두이노  (8)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-8.bmp" width="498" height="297" /></a></p>
<p><strong>[스케치 프로그램]</strong><br />
자, 그럼 아래의 징글벨 노래 악보를 보면서 프로그램을 작성해 봅시다.<br />
길이가 길어서 저는 첫번째 줄 악보만 입력하겠으니 여유가 조금 있으신 분들은 나머지 음계를 모두 채워서 프로그램 해보시기 바랍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-9.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30161" alt="33 아두이노  (9)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-9.bmp" width="422" height="323" /></a></p>
<p>&nbsp;</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#include “pitches.h”<br />
#define PIEZO 5</p>
<p>// 징글벨 첫 소절 음계 : 알기 쉽게 다장조의 음계로 변환하여 처리<br />
int song[ ] = { NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_G4, 0, // 솔미레도솔(쉼표)<br />
NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_A4, 0, // 솔미레도라(쉼표)<br />
NOTE_A4, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_B4, 0, // 라파미레시(쉼표)<br />
NOTE_G5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_E5, NOTE_C5, 0 }; // 솔솔파레미도(쉼표)</p>
<p>// 징글벨 첫 소절 연주시간<br />
int time[ ] = { 250, 250, 250, 250, 750, 250, // 8분음표 = 250ms<br />
250, 250, 250, 250, 750, 250,<br />
250, 250, 250, 250, 750, 250,<br />
250, 250, 250, 250, 500, 250, 250 };</p>
<p>void setup() // 한 번만 연주하게 하기 위하여<br />
// 실행 프로그램을 setup()에서 처리<br />
{<br />
int i;<br />
pinMode(PIEZO, OUTPUT); // PIEZO 버저핀은 출력<br />
delay(3000); // 카드를 열고 3초후에 연주 시작<br />
for (i=0; i&lt;25; i++) // 연주 길이만큼 숫자 조정<br />
{<br />
tone(PIEZO, song[i], time[i]); // 배열순으로 노래 재생<br />
delay(time[i]);<br />
}<br />
}</p>
<p>void loop() // 한 번만 연주하게 하기 위하여<br />
{ // loop()에서는 아무 것도 처리하지 않음<br />
}</p>
</div>
<p>&nbsp;</p>
<p>노래는 한 번만 들으면 되므로 loop()가 아닌 setup() 내부에 프로그램한 점이 예전 것과 약간 다르며, 만약 연주가 반복되게 하려면 loop() 내부에 프로그램을 넣으면 됩니다.<br />
한편, 프로그램 실행시 한가지 주의할 점은 pitches.h 파일을 추가하는 방법인데, pitches.h 파일은 다음과 같은 방법으로 현재 실행 디렉토리에 가져와야 합니다. (그냥 임의로 파일을 옮겨 놓으면 에러가 발생하므로 주의!)</p>
<p>(1) 프로그램에서 [스케치] ▶ [파일추가] 메뉴 선택<br />
(2) 파일 대화 상자가 나오면 “C:\Program Files(x86)\Arduino\examples2.Digital\toneKeboard\pitches.h”를 선택하여 추가<br />
(3) 새로운 탭이 열리면서 현재 실행 디렉토리에 pitches.h 파일이 자동으로 생성됨<br />
(4) 이 상태에서 컴파일 후 업로드 실행</p>
<p>자, 어떻게 되었나요? 캐롤송이 잘 나오나요? 브라보!!! 라구요?</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-14.jpg" rel="lightbox[29852]"><img class="alignnone  wp-image-30172" alt="33 아두이노  (14)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-14-620x319.jpg" width="496" height="255" /></a></p>
<p><a href="https://www.youtube.com/watch?v=Ln_EEmGS5vM">동영상 보러가기</a></p>
<p>눈도 오고 흥겨운 캐롤송도 나오고, 기분도 UP되는 크리스마스와 연말연시를 기대해 봅니다.<br />
Merry Christmas &amp; Happy New Year!</p>
<p>이제, 두번째 DIY 작품을 만들어 보기 전에 잠시 휴식을 취하겠습니다.<br />
각자 나름대로 스트레칭도 하고, 바깥의 신선한 공기도 마신 후 다시 시작하시지요. 모두 휴식~!</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 온도 센서    </strong></span></p>
<p>오늘의 두번째 DIY 주제는 “경보 장치가 내장된 컬러링 온도계”입니다.<br />
컬러 LED를 이용하여 현재의 온도를 색깔로 나타내주고, 설정 온도 범위를 벗어나면 주기적으로 버저를 울려주는 온도계를 만들어 안방이나 거실에 장착해 보는 것으로 하겠습니다.<br />
온도센서는 영어로는 Thermistor라고 하는데, 이것은 니켈이나 코발트, 구리, 철 등의 화합물로 이루어진 물질을 이용하여 온도를 측정하는 센서입니다. 보통 이 물질은 아래 그림과 같이 온도가 높아지면 저항값이 내려가고, 온도가 내려오면 저항값이 올라가는 특성을 가지는데 이러한 성질을 잘 이용하면 온도를 측정할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-10.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30163" alt="33 아두이노  (10)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-10.bmp" width="233" height="148" /></a></p>
<p>예를 들어, 어떤 Thermistor 저항은 100°C 경우 1KΩ 이하, 0°C 경우 15KΩ 정도, -10°C 경우 25KΩ 정도가 됩니다.<br />
온도값에 따라 저항값이 달라진다면, 예전에 이와 비슷한 성질을 갖는 센서가 있었는데…<br />
예. 광센서! 빛의 세기에 따라 저항값이 달라지는 물질이었죠.<br />
이것을 아래와 같이 연결한 후 “? V” 에 해당되는 지점을 아두이노의 ADC 포트(A0)에 연결한 후 이 값을 측정하면 광량을 측정할 수 있었습니다. 기억나시나요? 안난다면… 다시 복습! Back to the Future!</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-3.jpg" rel="lightbox[29852]"><img class="alignnone  wp-image-30144" alt="33 아두이노  (3)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-3.jpg" width="441" height="170" /></a></p>
<p>그렇다면 이번에도 이와 비슷하게 아래와 같이 Thermistor를 연결하면 예전과 마찬가지로 측정이 가능하지 않을까요?</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-4.jpg" rel="lightbox[29852]"><img class="alignnone  wp-image-30147" alt="33 아두이노  (4)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-4.jpg" width="496" height="151" /></a></p>
<p>예. 맞습니다. 원리가 같으니까 예전처럼 하면 되겠습니다. 온도센서가 아날로그 온도센서인 경우에는 그냥 이렇게 처리하면 되겠습니다.<br />
그런데 한가지 더 생각해 볼 것은 아날로그 온도센서의 경우는 위에서 본 것과 같이 온도 변화에 따른 저항값이 선형적이지 않게 변화되므로 사용자가 이를 고려하여 프로그램하는 것이 매우 귀찮고 쉽지 않은 작업이라는 것입니다. 그리고 또 하나는 라즈베리파이 같이 ADC 포트가 아예 없는 마이크로콘트롤러들도 있습니다. 그래서 온도의 정확도도 높이고, 인터페이스도 단순하게 만든 디지털 온도센서가 출현하게 되었는데(물론 이것도 내부적으로는 아날로그 온도센서를 내장하고 있습니다.) 그 형태는 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-5.jpg" rel="lightbox[29852]"><img class="alignnone  wp-image-30150" alt="33 아두이노  (5)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-5.jpg" width="496" height="130" /></a><br />
내부에 디지털로직이 함께 결합되어 외부와는 UART(Universal Asynchronous Receiver/Transmitter)나 I2C(Inter Integrated Circuit), SPI(Serial Pheriperal Interface)와 같은 시리얼통신 인터페이스를 통하여 아두이노 내부의 마이크로콘트롤러에 연결되는 것이고, 이를 통하여 측정된 온도값이 전달되는 것입니다.<br />
온도센서 모듈은 여러가지가 있지만 오늘은 I2C 통신 인터페이스를 제공하는 제이씨넷사의 JMOD-TEMP-1 디지털 온도센서를 사용하여 DIY 설계를 진행해 보겠습니다. JMOD-TEMP-1 디지털 온도센서 모듈을 사용하기 위하여는 일단 I2C에 대하여 먼저 알아야 하기 때문에, 이것부터 먼저 간단히 공부해 봅시다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ I2C 통신 프로토콜    </strong></span></p>
<p>I2C는 “I Square C”라고 발음하는데, Philips 사가 1980년에 제안한 근거리용 직렬 동기식 양방향 통신 규격을 말합니다. SCL(Serial Clock, 마스터 제공 클록), SDA(Serial Data, 마스터와 슬레이브가 공유하는 데이터)의 2개 신호만 사용하여 통신하며, 최대 128개의 기기(센서 등)를 연결할 수 있는데 통신 속도는 100kbps, 400kbps, 3.4Mbps의 3가지가 대표적입니다.<br />
연결된 모습을 보면 아래와 같습니다. SDA와 SCL 신호는 Open Drain/Open Collector 방식으로 연결되기 때문에 풀업 저항(R1, R2)을 장착해 주어야 하며 저항값은 보통 10KΩ 이상입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-6.jpg" rel="lightbox[29852]"><img class="alignnone  wp-image-30153" alt="33 아두이노  (6)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-6.jpg" width="441" height="200" /></a></p>
<p>아두이노를 연결하는 경우 I2C 통신 프로토콜에 대하여 자세하게 알아야 할 필요는 없지만, 어느 정도는 원리를 이해하는 것이 도움이 될 것 같아 조금만 더 설명하도록 하겠습니다. 이 부분이 너무 어려운 분들은 세부적인 내용을 이해하지 않아도 되며, 다만, 이러한 일을 실행해야만 통신이 이루어진다는 점만 이해하고 넘어가셔도 되겠습니다.<br />
아래 그림은 I2C 통신 규격입니다. WRITE는 마스터(예-아두이노)가 슬레이브(예-온도센서)에게 데이터(예-명령어)를 전달할 때의 규격이고 READ는 마스터(예-아두이노)가 슬레이브(예-온도센서)로부터 데이터(예-온도값)를 전달받을 때의 규격입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-11.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30165" alt="33 아두이노  (11)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-11.bmp" width="442" height="188" /></a></p>
<p>(WRITE)일 때의 동작을 간단히 설명해 보면, 다음과 같습니다.</p>
<p style="padding-left: 30px;">1. 마스터는 START 신호 생성<br />
2. 마스터는 통신하고자 하는 슬레이브 어드레스(7비트) + READ/WRITE 상태(1비트, 1이면 READ, 0이면 WRITE, 여기서는 WRITE이므로 1)의 총 8비트 생성<br />
3. 2번 과정에서 생성한 슬레이브 어드레스에 해당되는 슬레이브가 ACKNOWLEDGE 신호 생성(해당 슬레이브가 없으면 ACKNOWLEDGE가 생성되지 않음-에러)<br />
4. 마스터는 슬레이브에 전달하고자 하는 데이터값(예-명령어) 생성<br />
5. 슬레이브는 데이터값을 취한 후 ACKNOWLEDGE 생성(이후 다수의 데이터가 필요한 경우 4번, 5번 과정을 필요한 만큼 반복, 마지막은 ACKNOWLEDGE를 생성하지 않을 수도 있음)<br />
6. 마스터는 STOP 신호 생성</p>
<p>(READ)일 때의 동작을 간단히 설명해 보면, 다음과 같습니다.</p>
<p style="padding-left: 30px;">1. 마스터는 START 신호 생성<br />
2. 마스터는 통신하고자 하는 슬레이브 어드레스(7비트) + READ/WRITE 상태(1비트, 1이면 READ, 0이면 WRITE, 여기서는 READ이므로 0)의 총 8비트 생성<br />
3. 2번 과정에서 생성한 슬레이브 어드레스에 해당되는 슬레이브가 ACKNOWLEDGE 신호 생성(해당 슬레이브가 없으면 ACKNOWLDEGE가 생성되지 않음-에러)<br />
4. 슬레이브는 마스터에게 전달하고자 하는 데이터값(예-온도값) 생성<br />
5. 마스터는 데이터값을 취한 후 ACKNOWLEDGE 생성(이후 다수의 데이터가 필요한 경우 4번, 5번 과정을 필요한 만큼 반복, ACKNOWLEDGE를 생성하지 않음)<br />
6. 마스터는 STOP 신호 생성</p>
<p>여기서 START 신호와 STOP 신호, 데이터 전송값 등을 전달하는 방법은 앞서 이야기한 대로 SCL 및 SDA 신호를 아래와 같은 형태로 생성하여 처리합니다. 이해가 조금 어려운 분들은 너무 고민하지 마시고, “그냥 그렇게 된다는구만~~~” 하고 넘어가셔도 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-12.bmp" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30167" alt="33 아두이노  (12)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-12.bmp" /></a></p>
<p>어쨌든 결론은 이러한 I2C 통신 방법을 이용하면 아두이노가 I2C 인터페이스를 제공하는 온도센서에게서 온도값을 읽어올 수 있다는 것이지요. 얼추~ 이해는 되셨죠? 그럼, 얼른 다음으로 넘어가 봅시다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ JMOD-TEMP-1    </strong></span></p>
<p>백그라운드 지식을 갖추었으니 이제 우리가 타겟으로 삼은 JMOD-TEMP-1 온도센서에 대하여 알아봅시다.<br />
사용자 설명서에 의하면 JMOD-TEMP-1 규격은 아래와 같습니다.</p>
<p>· LM75A 온도센서를 기본으로 한 I2C 디지털 온도센서 모듈<br />
· 측정 범위 : -55° ~ 125°C<br />
· 동작 전압 : 2.7V ~ 5.5V<br />
· 아두이노나 AVR과의 연결이 쉬운 소켓핀 타입의 I2C 인터페이스 제공<br />
· SDA 및 SCL 신호에 pullup 저항 제공<br />
· 내부 어드레스 A6~A3은 “1001”로 정해져 있으며, 어드레스 신호(A2, A1, A0) 값은 0과 1의 값을 선택할 수 있도록 선택용 점퍼 제공(예를 들어 점퍼를 모두 연결하면 A6~A0는 0b1001111=0x4F가 되고, 점퍼를 하나도 연결하지 않으면 A6~A0는 0b1001000=0&#215;48이 됨)</p>
<p>외관은 아래와 같이 생겼습니다. 실제 크기는 엄지 손톱 크기 정도로 작습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-13.bmp" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30169" alt="33 아두이노  (13)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-13.bmp" /></a></p>
<p>배치도를 이용하여 자세히 살펴보면 아래와 같습니다. I2C 인터페이스이므로 당연히 SCL, SDA을 아두이노에 연결해야 하고, 부가적으로 VCC(+5V)와 GND도 함께 연결해 주어야 함은 물론입니다. O.S 신호는 여기서는 사용하지 않으므로 O.S 신호를 제외한 아래 4개의 신호만 아두이노와 전선으로 연결해주면 되겠습니다. 또한, A2~A0 점퍼의 장착 여부에 따라 JMOD-TEMP-1의 슬레이브 어드레스가 결정되므로 이것은 사용자가 결정하여야 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-4.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30148" alt="33 아두이노  (4)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-4.png" width="446" height="180" /></a></p>
<p>다른 것은 생각하지 않고, 아두이노와 JMOD-TEMP-1과의 연결만을 나타내보면 아래와 같습니다.</p>
<p><strong>[아두이노 연결]</strong><br />
1. JMOD-TEMP-1은 VCC(+5V), GND, SCL, SDA 신호를 해당되는 아두이노 신호와 연결<br />
2. SCL은 아두이노의 A5 핀에, SDA는 아두이노의 A4 핀에 연결 (A5, A4 핀은 아두이노가 I2C 통신을 이용하는 경우 각각 SCL, SDA 신호로 고정됨)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-14.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30171" alt="33 아두이노  (14)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-14.bmp" width="427" height="375" /></a></p>
<p>&nbsp;</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 아두이노 ISC 라이브러리    </strong></span></p>
<p>LM75A에 대하여 알아보기 전에, 우리는 아두이노를 사용하여 I2C 통신을 구현하여야 하므로 일단 아두이노에서 I2C 통신을 위하여 제공하는 라이브러리가 어떤 것이 있는지 알아보는 것이 더 좋겠습니다. 왜냐하면, 이것을 알아야 이 라이브러리를 사용하여 LM75A로부터 온도값을 읽어올 스케치 프로그램에 사용할 수 있기 때문입니다. 아래를 보시지요.</p>
<p><strong>[아두이노에서 제공하는 I2C 관련 함수(라이브러리)]</strong></p>
<p style="padding-left: 30px;">· Wire.begin() // I2C 버스 활성화, I2C 버스 사용 처음에 반드시 실행<br />
· Wire.beginTransmission(address); // Start 전송 (버스 시작), address = 슬레이브 어드레스<br />
· Wire.write(data); // Write (데이터값 Write), data = Write할 데이터값(바이트 크기)<br />
· Wire.endTransmission(); // Stop 전송 (버스 종료)<br />
· Wire.requestFrom(address, count); // Read Request (데이터 요청), address = 슬레이브 어드레스, count = 요청하는 데이터의 개수(바이트 수)<br />
· Wire.available() // 데이터 도착 확인, return값 = Read한 데이터 개수<br />
· Wire.read(); // Read (데이터값 입력), return값 = 데이터 값(바이트 크기)</p>
<p>물론 위 라이브러리를 사용하려면, 아두이노 스케치 프로그램의 첫머리에 “#include &lt;Wire.h&gt;”를 넣어주어야 하는 것도 잊지 말아야 합니다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ LM75A 구조 및 동작    </strong></span></p>
<p>JMOD-TEMP-1은 내부에 온도센서 IC 칩인 LM75A를 내장하고 있으므로, 아두이노와 JMOD-TEMP-1과의 동작은 실제로는 아두이노와 LM75A와의 동작을 의미합니다. 그러므로 우리는 이제 LM75A에 대한 정보를 알아야 하겠네요. 아래는 LM75A의 구조입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-15.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30173" alt="33 아두이노  (15)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-15.bmp" width="515" height="339" /></a></p>
<p>VCC, GND 신호는 전원 신호이며, SCL, SDA 신호는 I2C 신호, A2, A1, A0 신호는 LM75A의 슬레이브 어드레스를 결정하는 어드레스 신호임은 앞에서 살펴본 것과 같습니다. A2, A1, A0 신호는 JMOD-TEMP-1 내부에 점퍼를 이용하여 값을 지정해 주는 형태로 구현되어 있으므로(이번 DIY에서는 점퍼를 장착하지 않은 상태로 진행하므로 A6~A0 = 0b1001000 = 0&#215;48 임) 아두이노와의 직접적인 연결 신호는 VCC, GND, SCL, SDA 신호가 되겠습니다.<br />
LM75A는 주기적으로 내부의 아날로그 온도센서의 값을 읽어 이것을 ‘Temperature Register’에 저장하는데, I2C 버스를 통하여 LM75A 내부의 ‘Temperature Register’ 값을 읽어 오려면 아래와 같은 절차를 밟아야 합니다. (LM75A datasheet 참조 요망)</p>
<p>(1) Start (버스 시작) 실행 및 타겟 어드레스 지정<br />
(2) Configuration Register를 지정하는 데이터 값(00)을 Write<br />
(3) Configuration Register가 저장할 값(01 = Temperature Register)을 Write<br />
(4) Stop (버스 종료) 실행<br />
(5) Start (버스 시작) 실행 및 타겟 어드레스 지정<br />
(6) Temperature Register를 지정하는 데이터 값(01)을 Write<br />
(7) Temperature Register로부터 2바이트 데이터를 Read 하고 이 값을 지정<br />
(8) Stop (버스 종료) 실행</p>
<p>구조도를 보면서 보충 설명을 조금 더 하자면, LM75A는 내부에 Pointer Register를 가지고 있는데, 이 Pointer Register에 저장한 값(0&#215;00~0&#215;03)에 따라 순서대로 오른쪽 4개의 레지스터(Configuration Regitser(0&#215;00), Temperature Register(0&#215;01), TOS Register(0&#215;02), THYST Register(0&#215;03)) 중 하나를 지정하게 되고, 이 상태에서 연속하여 데이터를 읽거나(Read) 쓰면(Write), 지정된 레지스터에 대하여 값을 읽거나(Read), 쓰게(Write) 됩니다. 참고로, 세부적인 버스 상의 동작을 그림으로 나타내면 아래와 같습니다. (조금 어렵게 느껴지는 분은 그냥 넘어가셔도 됩니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-17.bmp" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30175" alt="33 아두이노  (17)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-17.bmp" /></a></p>
<p>이제 동작은 알았으니 Configuration Register의 내용과 Temperature Register의 내용이 무엇을 의미하는지만 알면 되겠습니다. 다시 LM75A 데이터시트를 찾아봐야 하겠네요. 아래와 같이 나옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-5.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30151" alt="33 아두이노  (5)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-5.png" width="460" height="367" /></a></p>
<p>Nomal 모드로 동작하면 되고(B0 = 0), 다른 값들은 별 의미가 없으니 Configuration Register의 값은 0&#215;00 으로 하면 되겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-6.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30154" alt="33 아두이노  (6)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-6.png" width="460" height="367" /></a></p>
<p>Temp Register 데이터의 값은 11비트로 부호(Sign) 비트 + 7비트 정수 + 3비트 소수 형태를 갖추고 있습니다. 2’s complement 형식으로 표현하고 있으므로 이것을 처리하면 순수 온도를 표시할 수 있을 것 같습니다. 여기서 2’s complement 표현 방식이란 음수를 표현할 때, 양수로 표현한 데이터의 complement를 취한 후(2진수로 나타내는 경우 모든 비트의 0과 1을 반대로 1과 0으로 바꿈) 이 값에 1을 더해서 표현하는 방법을 말합니다. 예를 들어 8비트의 표현에서 -3은 양수인 3의 2진값을(0b00000011), complement를 취하고(0b11111100) 여기에 1을 더해서(0b11111101) 표현하는 것입니다. 우리는 소수첫째자리를 0.5 단위까지만 표현하는 것으로 하겠습니다.<br />
오우~, 이제 구현에 필요한 기본적인 백그라운드(Background)는 갖추어진 것 같네요.<br />
그렇다면 최종 목표인 “경보장치가 내장된 컬러링 온도계”를 완성하러 가아죠? 계속 GO~ GO~</p>
<p><span style="color: #ffffff; font-size: medium; background-color: #008000;"><strong>■ 경보장치가 내장된 컬러링 온도계    </strong></span></p>
<p>언제나 그렇듯이 일단 목표(타겟)를 정해야 합니다. 무엇을 만들까? 어떤 기능을 하도록 만들까? 주요 기능 규격에 해당되는 것은 일단 정하고 가는 것이 중요합니다. 자, 정해볼까요?</p>
<p><strong>[기능 규격]</strong><br />
1. 겨울철 실내(생활) 온도에 따라 컬러 LED의 색깔이 변함 (각각의 색깔은 1도 정도의 온도 변화에 따라 단계별로 변하도록 함 (보통 20도 정도가 적당한 온도라고는 하나 약간 추운듯한 느낌이 들고, 체온으로 시험해보기 위해서 아래와 같이 임의로 결정함. 여름철에는 프로그램을 다르게 해야 되겠죠?)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-7.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30157" alt="33 아두이노  (7)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-7.png" width="460" height="160" /></a><br />
2. 5초 마다 온도를 측정하여 온도 변화가 예전 온도와 1도 이상 오르면 높은 음으로 “삐~” 알람을 1초간 울리고, 1도 이상 내리면 낮은 음으로 “삐~” 알람을 1초간 울림<br />
3. 최저온도(24도) 미만이거나 최고온도(29)도 이상이면 높은 음과 낮은 음을 혼합하여 “삐~뽀~삐~뽀~”를 4초간 울림</p>
<p>온도센서 값을 읽어오는 것은 조금 전에 배웠고, 컬러 LED의 색깔을 결정하는 방법과 tone() 함수를 이용하여 소리를 만드는 것은 이전 DIY에서 배웠으니 이것들을 조합하면 해결 방법을 찾을 수 있을 것 같습니다.</p>
<p><strong>[연결도]</strong><br />
사용되는 부품은 아두이노 외에 3색 LED, 삐에조버저, 온도센서가 있으면 되겠네요. 3색 LED는 공통 캐소드 타입을 사용하고(RGB 핀 번호는 3색 LED마다 다를 수 있으니 각 모듈마다 확인 후 사용 요망), 버저는 삐에조버저를, 온도센서는 JMOD-TEMP-1 모듈을 사용하는 것으로 하면, 연결도는 아래와 같이 될 것 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노26.bmp" rel="lightbox[29852]"><img class="alignnone  wp-image-30181" alt="33 아두이노26" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노26.bmp" width="379" height="267" /></a></p>
<p><strong>[알고리즘]</strong><br />
자, 이제 어떻게 위의 기능을 구현할 지 찬찬히 생각해봐야 할 때입니다. 일단, 온도센서로 온도를 재고, 여기에 대응되는 색깔을 찾아서 이것을 3색 LED에 디스플레이 하고, 이전(5초전)에 잰 온도보다 1도 이상 온도가 올라갔거나 내려갔으면 “삐~” 알람을 울리고, 마지막으로 온도가 24도 보다 작거나 29도 보다 크면 “삐~뽀~삐~뽀~” 알람을 울리면 되겠네요. 다시 정리해 보면 아래와 같이 되겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-8.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30160" alt="33 아두이노  (8)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-8.png" width="460" height="276" /></a><br />
자, 그러면 차근차근 하나씩 구현해 볼까요?<br />
이번 구현처럼 코드의 양이 조금 많아 지는 경우에는 코드를 처음부터 끝까지 한꺼번에 프로그램하기 보다는 기능 단위나 블록 단위로 나누어 프로그램을 작성하면 조금 더 편리합니다. 알고리즘에 쓰는 용어로 Divide-and-Conqure 방식이 자주 이용됩니다. 이것은 전체의 문제를 몇 개의 큰 덩어리로 잘라 따로 따로 해결 방법을 찾는 방식입니다. 예를 들어 올림픽 행사를 치른다고 할 때, 정부의 여러 부처가 역할을 분담하여 일을 맡고, 각 부처는 다시 하부조직인 부나 실, 팀 등으로 구분하여 일을 처리하는 것을 생각하면 이해가 빠를 겁니다. 비슷한 방법으로 프로그램에서는 이렇게 큰 덩어리로 구분한 것 각각을 하나의 함수로 할당하여 처리하면 조금 더 편리합니다. 단, 함수로 처리할 때는 입력과 출력을 정확하게 정의하여야 하는 것을 잊으시면 안됩니다.</p>
<p>그럼, 위의 내용을 함수로 한 번 표현해 보겠습니다.</p>
<p style="padding-left: 30px;"><span style="color: #008080;"><strong>온도값 읽기 : read_temp( )</strong></span><br />
<span style="color: #008080;"> &#8211; 리턴값 = 1바이트의 정수 온도값</span></p>
<p style="padding-left: 30px;"><span style="color: #008080;"><strong>온도값을 3색 LED에 디스플레이 : display_temp(unsigned char temperature)</strong></span><br />
<span style="color: #008080;"> &#8211; 입력값 = 1바이트의 온도값</span><br />
<span style="color: #008080;"> &#8211; 리턴값 = 없음</span></p>
<p style="padding-left: 30px;"><span style="color: #008080;"><strong>알람음 발생 : tone(pin, frequency, duration)</strong></span><br />
<span style="color: #008080;"> &#8211; 아두이노 제공 라이브러러리</span></p>
<p style="padding-left: 30px;"><span style="color: #008080;"><strong>tone(pin, frequency, duration)</strong></span><br />
<span style="color: #008080;"> &#8211; pin : 소리를 출력할(버저가 연결된) 핀 번호</span><br />
<span style="color: #008080;"> &#8211; frequency : 출력할 소리의 주파수</span><br />
<span style="color: #008080;"> &#8211; duration : 출력할 소리의 지속 시간(ms)</span></p>
<p>위 함수를 기본으로 프로그램을 작성해 보겠습니다.</p>
<p>일단 read_temp()와 display_temp(temperature)는 잠시 후에 따로 코딩하도록 하고 전체 아우트라인을 작성해 보지요. (#include와 #define및 global 변수 선언도 일단은 생략하고 추후 코드 합체 시 넣겠습니다.)</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void setup()<br />
{<br />
pinMode(PIEZO, OUTPUT);<br />
pinMode(RED_LED, OUTPUT);<br />
pinMode(GREEN_LED, OUTPUT);<br />
pinMode(BLUE_LED, OUTPUT);</p>
<p>Wire.begin(); // I2C 활성화<br />
Wire.beginTransmission(temp_addr); // Start (버스 시작) 및 타겟 어드레스 지정<br />
Wire.write(byte(0&#215;01)); // Configuration 레지스터(01) 지정<br />
Wire.write(byte(0&#215;00)); // Configuration 레지스터에 값(00)을 Write : Normal 모드<br />
Wire.endTransmission(); // Stop (버스 종료)<br />
}</p>
<p>void loop()<br />
{<br />
int i;</p>
<p>temperature = read_temp();// JMOD-TEMP-1 모듈로부터 측정된 온도를 읽어옴<br />
display_temp(temperature); // 3-컬러 LED에 온도에 해당되는 색깔을 디스플레이<br />
if ((temperature &lt; TEMP_LOW) || (temperature &gt;= TEMP_HIGH)) // (현재 온도 &lt; 최저 온도) 또는 (현재 온도 &gt;= 최고 온도) 인 경우는 “삐~뽀~삐~뽀~”(6옥타브 ‘도’ 음과 4옥타브 ‘’도’ 음을 번갈아 2번 울림<br />
{<br />
tone(PIEZO, NOTE_C6, 1000); delay(1000);<br />
tone(PIEZO, NOTE_C4, 1000); delay(1000);<br />
tone(PIEZO, NOTE_C6, 1000); delay(1000);<br />
tone(PIEZO, NOTE_C4, 1000); delay(1000);<br />
}<br />
if (temperature &gt;= (pre_temperature + TEMP_DIFF)) // 온도 1도 증가시<br />
tone(PIEZO, NOTE_C6, 1000);// “삐~”(6옥타브 ‘도’ 음) 알람 1초 울림<br />
else if (temperature &lt;= (pre_temperature + TEMP_DIFF)) // 이전(5초전) 온도와 1도 차이가 나는지 비교<br />
tone(PIEZO, NOTE_C4, 1000); // “삐~”(4옥타브 ‘도’ 음) 알람 1초 울림<br />
pre_temperature = temperature; // 다음 측정시(5초후) 비교를 위하여 현재 온도값 저장<br />
delay(5000); // 5초마다 측정<br />
}</p>
</div>
<p>코딩은 간단하니까 주석을 보면 전체적인 흐름은 쉽게 이해가 될 것 같습니다.<br />
삐에조버저와 3색 LED의 3핀은 모두 “~” 표시가 있는 digital 핀에 할당된 것을 주의해서 보시고(이 핀들은 모두 analog 출력 &#8211; 엄밀하게 말하면 pwm digital 출력이 가능하여야 하므로), 또한 TEMP_LOW 및 TEMP_HIGH 값은 자신이 원하는 대로 DIY해서 선택하면 되겠네요. 저는 테스트를 고려하여 24도~29도를 기준으로 잡았습니다.<br />
그럼, 이제 read_temp() 함수를 프로그램해 보겠습니다. 모두 함께 해보시지요!</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>unsigned char read_temp(void)// 1 바이트 처리 (0~127도까지 표현 가능하므로)<br />
{<br />
unsigned char c, d;<br />
Wire.beginTransmission(temp_addr); // Start (버스 시작) 및 타겟 어드레스 지정<br />
Wire.write(byte(0&#215;00)); // Temperature 레지스터(00) 지정<br />
Wire.requestFrom(temp_addr, 2); // 2 bytes read<br />
while(Wire.available() &lt; 2) ; // Wating 2 byte available<br />
c = Wire.read(); // 첫번째 데이터 저장<br />
d = Wire.read(); // 두번째 데이터 저장<br />
Wire.endTransmission(); // Stop (버스 종료)<br />
return(c); // 온도의 정수부분만 반환<br />
}</p>
</div>
<p>LM75A의 출력은 2’s complement 형태의 2바이트 값으로 되어 있다고 했는데, 우리는 실내온도 범위만 측정하려고 하니까 그냥 간단하게 온도값 중 정수값만 취하여 처리하도록 하겠습니다. (소수점까지 계산하려면 귀찮으니까요…) 즉, 읽어온 데이터 중 앞의 1바이트가 정수부분이고, 이 바이트의 MSB(Most Significant Bit, Bit7)만 부호인데, 실내에서는 이 값이 0이므로(영상 온도) 이것만 return 값으로 돌려주면 되겠네요. 엄청 쉽죠?</p>
<p>계속해서, 이번에는 display_temp(temperature) 함수를 작성해 보겠습니다. 온도값의 범위에 따라 위에서 정해진 색깔을 3색LED에 표현하면 되겠습니다. 이것은 예전 강좌(카멜레온링)를 또 참조해서 작성해야 할 것 같으니까 시간이 조금 더 걸리겠네요. 한 10분 기다릴테니, 자, 기억을 더듬거나 찾아서 해보실까요?</p>
<p>아, 참 이번에는 색깔 정하는 것을 그냥 아래 색상표에서 골라서 하는 것으로 해보시지요. 첫번째 바이트가 빨강에 대한 값이고, 두번째 바이트가 녹색, 세번째 바이트가 파랑입니다. 데이터는 지난번처럼 2차원 어레이로 처리하면 되겠구요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-1.gif" rel="lightbox[29852]"><img class="alignnone size-large wp-image-30137" alt="33 아두이노  (1)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-1-446x620.gif" width="446" height="620" /></a></p>
<p>우리가 온도에 따라 사용하고자 하는 색과 여기에 해당하는 코드를 위 색상표에서 찾으면 아래와 같이 될 것 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-08888.png" rel="lightbox[29852]"><img class="alignnone  wp-image-30182" alt="33 아두이노 08888" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-08888.png" width="431" height="162" /></a></p>
<p>&nbsp;</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define TEMP_SKYBLUE 24<br />
#define TEMP_GREEN 25<br />
#define TEMP_YELLOW 26<br />
#define TEMP_ORANGE 27<br />
#define TEMP_WINE 28<br />
#define TEMP_RED 29</p>
<p>int color[7][3] = {{0&#215;00, 0&#215;00, 0xFF}, {0&#215;00, 0xFF, 0xFF}, {0&#215;00, 0xFF, 0&#215;00}, {0xFF, 0xFF, 0&#215;00}, {0xFF, 0&#215;99, 0&#215;00}, {0xFF, 0&#215;00, 0xFF}, {0xFF, 0&#215;00, 0&#215;00}};// 7가지 색, 각 색마다 3가지 값, 2차원 어레이</p>
<p>void display_temp(unsigned char temperature)<br />
{<br />
if (temperature &lt; TEMP_SKYBLUE)<br />
{analogWrite(RED_LED, color[0][0]); analogWrite(GREEN_ LED, color[0][1]); analogWrite(BLUE_LED, color[0][2]);} // 파랑<br />
else if (temperature &lt; TEMP_GREEN)<br />
{analogWrite(RED_LED, color[1][0]); analogWrite(GREEN_ LED, color[1][1]); analogWrite(BLUE_LED, color[1][2]);} // 하늘색<br />
else if (temperature &lt; TEMP_YELLOW)<br />
{analogWrite(RED_LED, color[2][0]); analogWrite(GREEN_ LED, color[2][1]); analogWrite(BLUE_LED, color[2][2]);} // 연두<br />
else if (temperature &lt; TEMP_ORANGE)<br />
{analogWrite(RED_LED, color[3][0]); analogWrite(GREEN_ LED, color[3][1]); analogWrite(BLUE_LED, color[3][2]);} // 노랑<br />
else if (temperature &lt; TEMP_SCARLET)<br />
{analogWrite(RED_LED, color[4][0]); analogWrite(GREEN_ LED, color[4][1]); analogWrite(BLUE_LED, color[4][2]);} // 주황<br />
else if (temperature &lt; TEMP_RED)<br />
{analogWrite(RED_LED, color[5][0]); analogWrite(GREEN_ LED, color[5][1]); analogWrite(BLUE_LED, color[5][2]);} // 자주<br />
else<br />
{analogWrite(RED_LED, color[6][0]); analogWrite(GREEN_ LED, color[6][1]); analogWrite(BLUE_LED, color[6][2]);} // 빨강<br />
}</p>
</div>
<p>&nbsp;</p>
<p>휴, 이제 코드는 다 살펴 본 것 같지요? 그럼 전체를 합쳐 보겠습니다. 이번에는 #include와 #define및 global 변수 선언도 필요한 것은 다 맞추어 넣어서 완성해야겠네요.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#include &lt;Wire.h&gt; // I2C 관련 라이브러리 사용 (JMOD-TEMP-1 억세스용)<br />
#include “pitches.h” // tone() 함수 사용</p>
<p>#define TEMP_LOW 24 // 알람 기준 최저 온도<br />
#define TEMP_HIGH 29 // 알람 기준 최고 온도<br />
#define TEMP_DIFF 1 // 알람을 울리는 온도차</p>
<p>#define PIEZO 3 // 삐에조버저는 3번핀에 할당<br />
#define RED_LED 5 // 빨강색은 5번핀에 할당<br />
#define GREEN_LED 6 // 초록색은 9번핀에 할당<br />
#define BLUE_LED 9 // 파랑색은 6번핀에 할당</p>
<p>#define TEMP_SKYBLUE 24<br />
#define TEMP_GREEN 25<br />
#define TEMP_YELLOW 26<br />
#define TEMP_ORANGE 27<br />
#define TEMP_WINE 28<br />
#define TEMP_RED 29</p>
<p>const int temp_addr = 0&#215;48;</p>
<p>int color[7][3] = {{0&#215;00, 0&#215;00, 0xFF}, {0&#215;00, 0xFF, 0xFF}, {0&#215;00, 0xFF, 0&#215;00}, {0xFF, 0xFF, 0&#215;00}, {0xFF, 0&#215;99, 0&#215;00}, {0xFF, 0&#215;00, 0xFF}, {0xFF, 0&#215;00, 0&#215;00}}; // 7가지 색, 각 색마다 3가지 값, 2차원 어레이</p>
<p>unsigned char temperature;<br />
unsigned char pre_temperature;</p>
<p>unsigned char read_temp(void) // 1바이트 처리 (0~127도까지 표현 가능하므로)<br />
{<br />
unsigned char c, d;<br />
Wire.beginTransmission(temp_addr); // Start (버스 시작) 및 타겟 어드레스 지정<br />
Wire.write(byte(0&#215;00)); // Temperature 레지스터(00) 지정<br />
Wire.requestFrom(temp_addr, 2); // 2 bytes read<br />
while(Wire.available() &lt; 2) ; // Wating 2 byte available<br />
c = Wire.read(); // 첫번째 데이터 저장<br />
d = Wire.read(); // 두번째 데이터 저장<br />
Wire.endTransmission(); // Stop (버스 종료)<br />
return(c); // 온도의 정수부분만 반환<br />
}</p>
<p>void display_temp(unsigned char temperature)<br />
{<br />
if (temperature &lt; TEMP_SKYBLUE)<br />
{analogWrite(RED_LED, color[0][0]); analogWrite(GREEN_ LED, color[0][1]); analogWrite(BLUE_LED, color[0][2]);} // 파랑<br />
else if (temperature &lt; TEMP_GREEN)<br />
{analogWrite(RED_LED, color[1][0]); analogWrite(GREEN_ LED, color[1][1]); analogWrite(BLUE_LED, color[1][2]);} // 하늘색<br />
else if (temperature &lt; TEMP_YELLOW)<br />
{analogWrite(RED_LED, color[2][0]); analogWrite(GREEN_ LED, color[2][1]); analogWrite(BLUE_LED, color[2][2]);} // 연두<br />
else if (temperature &lt; TEMP_ORANGE)<br />
{analogWrite(RED_LED, color[3][0]); analogWrite(GREEN_ LED, color[3][1]); analogWrite(BLUE_LED, color[3][2]);} // 노랑<br />
else if (temperature &lt; TEMP_WINE)<br />
{analogWrite(RED_LED, color[4][0]); analogWrite(GREEN_ LED, color[4][1]); analogWrite(BLUE_LED, color[4][2]);} // 주황<br />
else if (temperature &lt; TEMP_RED)<br />
{analogWrite(RED_LED, color[5][0]); analogWrite(GREEN_ LED, color[5][1]); analogWrite(BLUE_LED, color[5][2]);} // 자주<br />
else<br />
{analogWrite(RED_LED, color[6][0]); analogWrite(GREEN_ LED, color[6][1]); analogWrite(BLUE_LED, color[6][2]);} // 빨강<br />
}<br />
void setup()<br />
{<br />
pinMode(PIEZO, OUTPUT);<br />
pinMode(RED_LED, OUTPUT);<br />
pinMode(GREEN_LED, OUTPUT);<br />
pinMode(BLUE_LED, OUTPUT);</p>
<p>Wire.begin(); // I2C 활성화<br />
Wire.beginTransmission(temp_addr); // Start (버스 시작) 및 타겟 어드레스 지정<br />
Wire.write(byte(0&#215;01)); // Configuration 레지스터(01) 지정<br />
Wire.write(byte(0&#215;00)); // Configuration 레지스터에 값(00)을 Write : Normal 모드<br />
Wire.endTransmission(); // Stop (버스 종료)<br />
}</p>
<p>void loop()<br />
{<br />
int i;</p>
<p>temperature = read_temp(); // JMOD-TEMP-1 모듈로부터 측정된 온도를 읽어옴<br />
display_temp(temperature); // 3-컬러 LED에 온도에 해당되는 색깔을 디스플레이<br />
if ((temperature &lt; TEMP_LOW) || (temperature &gt;= TEMP_HIGH)) // 현재 온도 &lt; 최저 온도 또는 현재 온도 &gt;= 최고 온도 인 경우는 “삐~뽀~삐~뽀~”(6옥타브 ‘도’ 음과 4옥타브 ‘’도’ 음을 번갈아 2번 울림 {<br />
tone(PIEZO, NOTE_C6, 1000); delay(1000);<br />
tone(PIEZO, NOTE_C4, 1000); delay(1000);<br />
tone(PIEZO, NOTE_C6, 1000); delay(1000);<br />
tone(PIEZO, NOTE_C4, 1000); delay(1000);<br />
}<br />
if (temperature &gt;= (pre_temperature + TEMP_DIFF))<br />
tone(PIEZO, NOTE_C6, 1000); // “삐~”(6옥타브 ‘도’ 음) 알람 1초 울림<br />
else if (temperature &lt;= (pre_temperature &#8211; TEMP_DIFF)) // 이전(5초전) 온도와 1도 차이가 나는지 비교<br />
tone(PIEZO, NOTE_C4, 1000); // “삐~”(4옥타브 ‘도’ 음) 알람 1초 울림<br />
pre_temperature = temperature; // 다음 측정시(5초후) 비교를 위하여 현재 온도값 저장<br />
delay(5000); // 5초마다 측정<br />
}</p>
</div>
<p>조금 긴 것 같긴 한데&#8230; 컴파일하고, 에러가 없다면 업로드하고, 잘 돌아라~ 얍! 이 상태에서 손가락을 JMOD-TEMP-1에 부착된 LM75A에 갖다 대면 온도가 좀 오를 테니… 한 번 해 보지요. 아래 동영상처럼 되겠네요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-9.jpg" rel="lightbox[29852]"><img alt="33 아두이노  (9)" src="http://www.ntrexgo.com/wp-content/uploads/2015/10/33-아두이노-9-620x407.jpg" width="434" height="285" /></a></p>
<p><a href="http://serviceapi.nmv.naver.com/flash/convertIframeTag.nhn?vid=AEEDA129DE0FC16A0600227738350106D1EA&amp;outKey=V12767f0e60ea38a5024d9d6a553fbf3dd2bf74c26e7d916b60299d6a553fbf3dd2bf&amp;width=720&amp;height=438%20)">동영상 보러가기</a></p>
<p>손을 갖다대면 체온에 의하여 온도가 1도 올라갈 때마다 색깔이 변하고 높은 “삐~” 소리가 나지요.<br />
손을 떼면 다시 온도가 1도 떨어지니까 낮은 “삐~” 소리가 나구요.<br />
계속 누르고 있으면 온도가 계속 올라가서 29도 이상으로 올라가면 빨강색 LED가 켜지면서 “삐~뽀~삐~뽀~” 소리가 나는 모습을 볼 수 있겠습니다.<br />
오~ 이번에도 성공입니다. (사실은 1번에 성공한 것이 아니라 10번도 더 고쳤답니다. 글자 오타부터 가지 각색의 에러는 항상 나타나므로 디버깅을 해서 모든 오류가 수정된 후에야 성공이지요. 여러분도 10번 정도 수정하여 성공한다면 정상입니다!)<br />
시간이 되면 온도계 테두리도 만들고 좀 꾸미면 그럴 듯 하게 될 것 같으므로 그것은 여러분이 챙기시기 바랍니다.<br />
오늘은 캐롤송카드와 컬러링 온도계를 제작해 보았습니다. 나름대로 자신에게 맞도록 노래를 바꾸거나 설정 온도값을 바꾸거나 구미에 맞도록 DIY하여 사용하시면 될 것 같습니다.<br />
오늘도 수고 많이 하셨고, 다음 DIY 시간은 마지막 시간으로 “스마트폰으로 조정하는 스마트카”를 DIY해 보도록 하겠습니다.</p>
<p>모두모두 안녕~~~</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/29852/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[32호]너무 쉬운 아두이노 DIY ④ &#8211; 정원등과 공중회전그네</title>
		<link>http://www.ntrexgo.com/archives/28795</link>
		<comments>http://www.ntrexgo.com/archives/28795#comments</comments>
		<pubDate>Tue, 15 Sep 2015 01:12:29 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[32호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[아두이노]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=28795</guid>
		<description><![CDATA[어두워지면 저절로 켜지는 정원등과 공중회전그네, 오늘은 [어두워지면 저절로 켜지는 정원등]과 [공중회전그네]를 만들어 볼까 합니다. 
]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32아두이노04.jpg" rel="lightbox[28795]"><img alt="32아두이노04" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32아두이노04.jpg" width="620" height="166" /></a></p>
<p>&nbsp;</p>
<p style="text-align: right;">글 | 신상석 ssshin@jcnet.co.kr</p>
<p> <div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>이 강의는 아두이노를 가지고 간단하게 생활에 필요한 용품을 만들어 보는 강의입니다. 뚝딱뚝딱 뭔가 자신만의 DIY 용품을 만들어 보는 쏠쏠한 재미가 있는 강의라고나 할까요? 이미 주변에 아두이노와 관련한 많은 책이 출간되었고 카페나 블로그를 통하여 강의가 진행된 경우도 꽤나 많이 있는데도 불구하고, 이 지면을 통하여 강의를 개설한 이유는 다음과 같습니다.</p>
<p>1. 아두이노의 초보자들을 위한 쉽고 재미있는 강의가 거의 없는 것 같아, 가능하면 초등학생(?)까지도 함께 해 볼 수 있는 그런 강의를 한 번 해보고 싶어서…<br />
2. 아두이노를 가지고 뭔가 조금은 다른, 자신만의 창의적인(?) DIY를 할 수 있는 자리를 만들어주고 싶어서…<br />
3. 디바이스마트매거진은 임베디드와 관련된 독자들이 많고, 발행 부수도 많아, 저와 제가 속한 회사(제이씨넷) 그리고 임베디드홀릭 카페의 홍보에 도움이 될 것 같아서…</p>
<p>현재 구상하고 있는 회차별 내용을 간략하게 정리해 보면 다음과 같습니다. (변경될 수 있습니다.)</p>
<table style="border: 1px solid #e2dee2; width: 340px;" border="1" cellspacing="0" cellpadding="1">
<tbody>
<tr>
<td style="text-align: center;">회차</td>
<td>내용</td>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td>3색 신호등 만들기</td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td>카멜레온 반지, 스위치를 이용한 신호등 게임기</td>
</tr>
<tr>
<td style="text-align: center;">3</td>
<td>FND로 만드는 디지털전압계, 카운트다운 계수기</td>
</tr>
<tr>
<td style="text-align: center;">4</td>
<td>어두워지면 켜지는 정원등, 공중회전그네</td>
</tr>
<tr>
<td style="text-align: center;">5</td>
<td>캐롤송 카드, 컬러링 온도계</td>
</tr>
<tr>
<td style="text-align: center;">6</td>
<td>스마트폰으로 조정하는 스마트카</td>
</tr>
</tbody>
</table>
<p>앞으로 즐겁고 알찬 강의가 될 수 있도록 최선을 다할 것을 약속 드리며, 이 강의를 보는 독자들도 메일이나 카페를 통하여 Q&amp;A(Question &amp; Answer)나 피드백을 주셔서, 함께 정감을 나눌 수 있는 계기가 되기를 기대해 봅니다.<br />
</div>
<p>&nbsp;</p>
<p>여러분, 안녕하세요. 항상 환한 강사 신상석입니다.<br />
지난번 주제였던 [시한폭탄 카운트다운 계수기] DIY는 한 번 만들어 보셨나요? 양방향 대화가 아니어서 질문하는 것이 조금 멋적긴 하지만, “그래도 한 열 분 정도는 시도해보지 않았을까?” 라고 나름 생각하면서 즐겁게 계속 진도 나갑니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-01.jpg" rel="lightbox[28795]"><img class="aligncenter" alt="32PTB 4강 01" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-01.jpg" width="226" height="340" /></a><br />
오늘은 [어두워지면 저절로 켜지는 정원등]과 [공중회전그네]를 만들어 볼까 합니다.<br />
어둑어둑 해질 무렵의 놀이동산, 노오란 정원등이 하나 둘씩 저절로 켜지고 내가 좋아하는 공중회전그네가 빙글빙글 돌아가는 풍경… 많이 비슷하게는 안되겠지만 기분이라도 이렇게 낭만적으로 상상하면서 한 번 가보도록 하지요.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 광센서 <strong>■ </strong></strong></span></p>
<p>어두워지면 저절로 켜지는 정원등을 만들려면, 일단 어두워졌다는 사실을 알아야 합니다. 즉, 빛의 밝기를 측정할 수 있는 센서가 있어야 하는데, 이러한 센서를 광센서라고 합니다. 보통 광센서는 아래와 같이 생긴 황화카디늄(CdS) 센서를 많이 사용하는데, 이것은 황화카디늄(CdS) 성분이 빛이 밝아지면 전기저항값이 작아지고, 빛이 어두워지면 전기저항값이 커지는 성질이 있기 때문입니다. 오~ 저항값이 변한다면 가변저항의 역할을 할 수 있다는 것이므로 이 성질을 잘 이용하면 뭔가 해답이 나올 것 같지요? 세부적인 방법은 잠시 후에 기본 회로를 꾸며가면서 살펴보기로 하고 일단은 빛과 광센서에 대하여 먼저 알아보겠습니다.<br />
빛의 밝기는 룩스(LUX)로 측정이 되는데, 엄밀한 정의는 이해도 어렵고 필요도 없으므로 룩스 값에 따른 예를 보면서 이해하는 것이 더 좋을 것 같습니다. 아래를 보시지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-02.png" rel="lightbox[28795]"><img class="aligncenter" alt="32 아두이노 02" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-02.png" width="425" height="264" /></a></p>
<p>사람마다 느끼는 것이 다르겠지만 우리는 위의 표와 같이 조금 어두워지는 것 같다고 느껴지는 저녁 황혼의 밝기인 10 룩스 정도에서 정원등이 켜지도록 하겠습니다.<br />
이제 빛의 빛의 밝기에 따라 변하는 광센서의 저항값을 알아봅시다. 아래는 CdS 광센서중의 하나인 GL5537 광센서의 모습과 규격 일부입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-03.png" rel="lightbox[28795]"><img class="aligncenter" alt="32 아두이노 03" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-03.png" width="425" height="131" /></a></p>
<p>우리가 측정하고자 하는 빛의 밝기인 10 LUX는 정도에서 약 20~50KΩ 정도의 저항값을 갖는 것으로 되어 있습니다. 조금은 틀려도 크게 문제는 없을 것이기에 우리는 이 때의 대표 저항값을 중간값인 35 KΩ 라 생각하고 진행하는 것으로 하지요.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 아날로그 센서 측정을 위한 기본 회로 <strong>■ </strong></strong></span></p>
<p>결국 광센서는 빛의 밝기에 따라 저항값이 변하는 가변저항의 역할을 하는 것이고, 우리의 아두이노는 아날로그 입력으로 전압값을 측정할 수 있는 능력이 있으므로 이 광센서의 저항값이 변함에 따라 특정 지점의 전압이 변하도록 회로를 꾸미면 아두이노로 광센싱이 가능하겠습니다. 지난번에 과제로 내주었던 [FND-과제-2]와 비슷한 회로가 될 것 같은데…<br />
아래와 같이 회로를 꾸며 보도록 하지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-065.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28910 aligncenter" alt="32 아두이노 065" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-065.jpg" width="425" height="192" /></a></p>
<p>이렇게 연결한 후 (?V)로 표기된 부분을 아두이노의 아날로그 입력(A0~A5) 핀 중 하나에 연결하고(우리는 A1에 연결) 전압을 측정하면 현재 빛의 밝기를 알 수 있겠습니다. 즉, 광센서의 저항값을 R1, 여기에 직렬로 연결한 저항값을 R2(고정값)으로 설정하고, 양단에 전압 +5V를 인가하면 이 회로에 흐르는 전류(I)는,</p>
<p style="padding-left: 60px;">5 = R1 x I + R2 x I 에서,<br />
I = 5 / (R1+R2)가 되므로<br />
아날로그 입력(A1)에서 측정한 전압값(?V)은<br />
?V = I x R2 = (5 / (R1+R2)) x R2 가 됩니다.</p>
<p>R2는 고정값인 상수이므로 측정된 전압값(?V)를 알면 결국 R1 값을 구할 수 있고, R1 값을 알면 GL5537의 규격표에서 이에 대응되는 현재 빛의 밝기를 알 수 있게 되는 것이지요.<br />
아하~ 그렇구나~</p>
<p><span style="font-size: medium;"><strong>■ 어두워지면 저절로 켜지는 정원등</strong></span></p>
<p>자, 이제 기초적인 원리는 이해가 되었으니 오늘의 주제 중 하나인 [어두워지면 저절로 켜지는 정원등]을 만들어 봅시다. 항상 그렇듯이 일단, 어떤 것을 만들 것인지 기능 규격부터 정해볼까요?</p>
<p><span style="color: #ff0000;"><strong>[기능 규격]</strong></span><br />
· 주변이 10 룩스 정도 밝기로 어두워지면 저절로 켜지는 정원등 제작<br />
· LED를 정원등이라고 생각하고 LED의 ON/OFF 제어</p>
<p><span style="color: #ff0000;">※ 실제 정원등을 제어하려면 AC 전원이 연결된 정원등 스위치를 ON/OFF 하여야 하는데 이것은 릴레이로 스위치를 대신하고 이 릴레이를 제어하면 되므로, 여기서는 그냥 원리만을 알아보는 차원에서 정원등을 DC 5V에 대응되는 LED라고 가정하고 진행합니다.</span></p>
<p>기능 규격을 보니 우리가 공부한 기본 원리를 이용하면 바로 구현이 가능할 것 같습니다. 아래와 같이 하면 되겠네요.</p>
<p><span style="color: #ff0000;"><strong>[아두이노 연결]</strong></span><br />
· GL5537의 규격이 4KΩ ~ 2MΩ 정도의 범위에서 변하므로, 로그 스케일로 그 중간 정도에 있는 값인 200KΩ(또는 그 근처 저항)을 고정저항(R2)으로 선정<br />
· [+5V --- GL5537 광센서 --- 200 KΩ 저항 --- GND] 형태로 회로를 구성하고 GL5537과 200KΩ 저항이 만나는 지점을 아두이노 A1 아날로그 핀에 연결(노란색 도선)<br />
· 아두이노 D3핀(디지털출력, 녹색 도선)에 LED(직렬 저항 포함) 연결</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-04.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28888 aligncenter" alt="32PTB 4강 04" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-04.jpg" width="602" height="435" /></a><br />
<span style="color: #ff0000;"><strong>[알고리즘]</strong></span><br />
정리된 알고리즘은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-07.png" rel="lightbox[28795]"><img class="size-full wp-image-28912 aligncenter" alt="32 아두이노 07" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-07.png" width="425" height="275" /></a><br />
10룩스일 때의 GL5537은 데이터시트에 보면 20~50 KΩ 으로 나타나므로 중간값인 35 KΩ 으로 추정하였을 때 위에서 공부한 이론을 적용하여 10룩스일 때의 전압값(?V)을 계산하여 보면, ?V = (5 / (R1+R2)) x R2 = (5 / (35 + 200)) x 200 = 5 x 200 / 235 이 됩니다. 5V에 대응되는 아날로그로 값은 1024이므로 위의 전압에 해당되는 아날로그 값을 계산하면 5 : 1024 = 5 x 200 / 235 : ?V 의 식으로 표현되므로 ?V 에 해당되는 값을 구하면 ?V = 5 x 200 x 1024 / 235 / 5 = 871 이 되겠습니다.</p>
<p>결론적으로, 위와 같이 연결한 회로에서 10룩스의 밝기가 되면 A0 핀으로는 871값이 읽히게 되므로, 읽은 값이 이 값 보다 작거나 같으면 정원등(LED)을 ON하고, 그렇지 않으면 정원등(LED)를 OFF하도록 스케치 프로그램을 작성하여야 하겠습니다.</p>
<p><span style="color: #ff0000;"><strong>[스케치 프로그램]</strong></span><br />
이제 모든 것이 결정되었으니 프로그램 작성이 가능하겠죠? 바로 갑니다.</p>
<table style="border: 0px solid #564a4b; width: 600px; border-width: 1px; border-color: #c8c5c5;" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>const int LED=3;<br />
const int CDS=1;<br />
#define CDS_10 871 // 200/(35+200) * 1024, 10룩스일 때의 CDS 저항값인 35KΩ에 대응되는 아날로그 값&nbsp;</p>
<p>void setup()<br />
{<br />
pinMode(LED, OUTPUT); // LED 핀은 출력<br />
pinMode(CDS, INPUT); // 광센서 핀은 입력<br />
}</p>
<p>void loop()<br />
{<br />
int value;<br />
value = analogRead(CDS);<br />
if (value &lt;= CDS_10)<br />
digitalWrite(LED, HIGH);<br />
else<br />
digitalWrite(LED, LOW);<br />
delay(1000);<br />
}</td>
</tr>
</tbody>
</table>
<p>에러가 없다면 바로 업로드를 실행한 후 광센서(GL5537) 앞쪽으로 손바닥을 가깝게 가져갔다가 멀리했다가 하는 동작을 반복해 봅시다. 손바닥이 가까이 가면 빛을 차단하게 되므로 어두워져서 빛의 밝기가 10룩스 아래로 내려가게 되어 LED가 켜질 것이고, 다시 멀리하면 빛의 밝기가 10룩스 위로 올라가게 되어 LED가 꺼지게 되겠습니다. 동영상과 같이 된다면 이번 DIY도 성공이네요. 와우~~~</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-05.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28889 aligncenter" alt="32PTB 4강 05" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-05.jpg" width="598" height="434" /></a></p>
<p style="text-align: center;"><a href="https://www.youtube.com/watch?v=mVnkjjk6S_I" target="_blank">동영상 보러가기</a></p>
<p>한가지 더 알려드리고 싶은 것은, 시중에 나와 있는 센서는 광센서와 같이 가변저항의 성질을 이용한 것이 상당히 많다는 사실입니다. 예를 들어 온도센서는 주변 온도에 따라 저항값이 변하는 성질을 이용하며, 압력센서의 경우는, 압력에 따라 저항값이 변하는 성질을 이용하는 것입니다.</p>
<p>이러한 종류의 센서는 지금까지 사용한 방법과 비슷한 방법으로 쉽게 구현할 수 있으므로 이번 예를 잘 응용한다면 앞으로의 다른 DIY 작업도 식은 죽 먹기로… (윽. 너무 오버?)<br />
자, 그러면 첫번째 DIY는 이쯤에서 마치고 잠시 후에는 오늘의 메인 DIY인 공중회전그네 제작에 도전해 보도록 하겠습니다. 조금은 쉬었다 가야겠지요? 모두 10분간 휴식~~~</p>
<p>…(1분)<br />
…(2분)<br />
…(3분)<br />
…(4분)<br />
…(5분)<br />
…(6분)<br />
…(7분)<br />
…(8분)<br />
…(9분)<br />
…(10분)</p>
<p>편안한 휴식이 되셨나요? 그러면 이제 오늘의 메인 DIY인 공중회전그네에 도전해 봅시다.<br />
처음으로 움직이는 작품을 만들어 볼 기회가 되겠네요.<br />
우리가 할 수 있는 것 중에서 단순하면서도 재미있는 것을 이것 저것 생각하다가 찾은 것이 공중회전그네입니다. 이름이 정확한지는 잘 모르겠는데, 롯데월드에 제가 생각한 것과 비슷한 것을 하나 찾았습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-06.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28890 aligncenter" alt="32PTB 4강 06" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-06.jpg" width="373" height="249" /></a><br />
버섯처럼 생긴 부분이 돌아가면 거기에 매달려 있는 그네가 공중에 붕 떠서 도는 것이지요. 저도 타보지는 않았지만 요것, 일반 그네보다는 훨씬 재미있을 것 같으니 여러분도 기회가 되면 꼭 한 번 타보시기 바랍니다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■  모터  <strong>■ </strong><br />
</strong></span></p>
<p>어떤 물건을 움직이려면 동력을 발생시키는 주체가 있어야 하는데, 이것이 모터입니다. 모터의 쓰임새는 거의 무한이어서, 자동차 바퀴, 선풍기 날개, 믹서기 커터, 비행기 프로펠러 등등 그 쓰임새는 셀 수가 없을 정도입니다. 그리고 꼭 회전이 아니더라도 자동문, 도어락, 포크레인 집게 등 생명체가 아니면서 움직이는 것의 대부분은 모터에 의한 것이라고 봐도 과언이 아니지요.</p>
<p>그러니까, 우리도 일단 공중회전그네를 만들기 전에 모터에 대하여 조금은 알고 넘어가는 것이 좋을 듯 합니다.<br />
모터(Motor)는 우리말로 전동기라고 하는데, “전류가 흐르는 도체가 자기장 속에서 받는 힘을 이용하여 전기에너지를 역학적에너지로 바꾸는 장치”입니다. 뭔가 좀 어려운 설명인데, 우리는 그냥 “전기를 넣어주면 축을 중심으로 회전하는 것이 모터”다 라고 알아두면 되겠습니다.</p>
<p>어떤 전류를 사용하느냐에 따라 건전지 같은 전원을 사용하면 DC(Direct Current, 직류) 모터, 220V 같은 콘센트 전원을 사용하면 AC(Alternating Current, 교류) 모터로 구분합니다. 또한, 사용하는 형태에 따라서도 일반 모터, 서보(Servo) 모터, 스테핑(Stepping) 모터로 나눌 수가 있는데, 일반 모터는 그냥 왱~ 하면서 돌아가는 모터구요. 서보 모터는 일정한 각도 만큼만 회전하는 모터로 차단기, 자동문 등에 사용하는 모터입니다. 또한, 스테핑 모터는 아주 정밀한 각도를 움직일 수 있도록 만든 모터가 되겠습니다.</p>
<p>우리는 DC 모터를 사용할텐데, DC 모터는 보통 2개의 단자를 가지고 있고 이 단자의 양단에 모터의 정격에 알맞은 전압을 가하면 회전하게 됩니다. 또한, 일반적으로 2단자의 극성을 바꾸면 반대방향으로 회전하게 되지요.</p>
<p>그러면 이제 아두이노에 모터를 연결하는 방법에 대하여 간단히 알아보겠습니다.<br />
요렇게 연결하면 될까요? (M 표시가 있는 것은 모터 심볼입니다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-07.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28891 aligncenter" alt="32PTB 4강 07" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-07.jpg" width="236" height="302" /></a><br />
아두이노의 핀 하나(OUT1)를 모터의 한쪽에 연결하고, 모터의 다른 한쪽은 GND에 묶어 놓으면, 아두이노에서 제어가 가능할 것 같습니다. OUT1 = 1이면 모터가 돌고, OUT1 = 0 이면 모터가 정지하겠네요.<br />
음. 한번에 완성?<br />
반대 방향으로도 돌려야 할 필요성도 있겠네요. 모터는 보통 양단의 극성을 바꾸어 전원을 공급하면 반대 방향으로 회전하므로 아래쪽에도 GND 대신 포트를 하나 할당하는 것이 좋겠습니다. 값을 1, 0 마음대로 바꿀 수가 있으니까요. 아래와 같이 연결해 보지요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-08.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28892 aligncenter" alt="32PTB 4강 08" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-08.jpg" width="234" height="312" /></a><br />
오, 이렇게 되면, OUT1= 1, OUT2 = 0 인 경우는 모터가 정방향으로 돌고, OUT1 = 0, OUT2 = 1 이렇게 만들면 모터가 역방향으로 돌고… OUT1 = 0, OUT2 = 0 또는 OUT1 = 1, OUT1 = 1 이면…<br />
OUT1 및 OUT2 양단 사이에 전위차가 없으니 모터가 정지할 것 같습니다. 괜찮은 설계가 된 것 같네요.</p>
<p>모두 만족? 음. 약간 부족한 것 같네요. 몇가지 더 생각할 게 있어요.<br />
모터라는 녀석은 힘으로 먹고 사는 녀석이어서… 모터가 도는 힘에 비례하여 전류를 많이 소모합니다. 모터마다 5V-1A, 12V-2A, …, 이런 식으로 규격이 정해져 있지요. 요점은 OUT1 ▶ 모터 ▶ OUT2 방향으로 많은 전류를 흐르게 할 수 있는 지의 여부입니다. 예를 들어 1A의 전류를 모터로 흘려보내야 한다면 그 전류를 아두이노의 출력핀에서 공급하는 것이 가능한지를 살펴보아야 합니다. 오우~ NO! 아두이노 디지털출력핀은 전류를 많이 공급하지 못하네요. 기껏해야 한 신호당 약 40mA 정도가 최대랍니다. 엄청나게 모자라네요.<br />
그렇다면 불가능할까요?<br />
아니겠죠? 다른 방법이 당연히 있습니다.<br />
이렇게 많은 양의 전류를 흘려야 하는 경우에는 전류를 아두이노 출력핀에서 직접 공급하지 않고 간접적으로 흐르게 하는 방법을 사용하여야 하는데, 이런 경우 가장 많이 사용하는 방법은 바로 트랜지스터를 이용하는 것입니다.<br />
트랜지스터는 PNP형과 NPN형이 있는데 여기서는 NPN형을 기준으로 한 번 설명해 보겠습니다. 아래와 같이 생겼습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-09.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28893 aligncenter" alt="32PTB 4강 09" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-09.jpg" width="186" height="203" /></a><br />
여기서 B는 베이스(Base), C는 컬렉터(Collector), E는 에미터(Emitter)인데 아래와 같은 특징이 있습니다. (엄밀한 의미로는 틀릴 수 있는 내용이지만 여기서는 쉽게 설명하기 위하여 개념을 간략화 합니다.)</p>
<p><span style="color: #008000;">1. B-E(베이스-에미터)간 전압이 0.7V 이상 순방향으로 걸리면 트랜지스터는 턴-온(Turn-On)되었다고 하고, 이 때 C-E(컬렉터-에미터)는 서로 직접 연결된 것으로 간주합니다. (물론 0.2V 정도의 전위차가 있긴 하지만 그냥 직접 연결되었다고 생각해도 무방합니다.)</span></p>
<p><span style="color: #008000;">2. B-E(베이스-에미터)간 전압이 0.7V 이하이면 트랜지스터는 턴-오프(Turn-Off)되었다고 하고, 이 때 C-E(컬렉터-에미터)는 연결이 끊어진 것으로 간주합니다.</span></p>
<p><span style="color: #008000;">3. 턴-온 되는 경우 B-E 경로로는 수 mA 정도만 흘러도 C-E 경로로는 B-E 전류의 10~1000배 정도의 전류, 즉 수십 mA ~ 수 A 정도의 전류를 흘릴 수 있습니다. (그렇게 흘러도 아무런 문제가 되지 않습니다. 즉, 트랜지스터가 그 정도의 전류를 견디어 냅니다.)</span></p>
<p>PNP형의 경우는 NPN의 경우와 반대라고 생각하고, B-E간의 전압이 역방향으로 걸리면 턴-온 된다고 생각하면 됩니다.<br />
그러면, 이제 이 트랜지스터를 이용하여 우리의 모터 연결을 수정하여 보겠습니다.</p>
<p>트랜지스터가 방향성을 가지므로, 정방향, 역방향을 모두 수용하려면 아래와 같이 2개의 경우가 생기겠네요. 왼쪽의 경우는 OUT1 = 1, OUT2 = 0 이면 Q1, Q2 트랜지스터가 모두 턴-온되어 모터가 회전하고, 오른쪽의 경우는 OUT1 = 0, OUT2 = 1 이면 Q3, Q4 트랜지스터가 모두 턴-온되어 모터가 회전하겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-10.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28894 aligncenter" alt="32PTB 4강 10" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-10.jpg" width="469" height="387" /></a></p>
<p>이미 눈치 채신 분이 있으시겠지만 <span style="color: #008000;">이 경우 트랜지스터는 턴-온, 턴-오프 상태를 갖는 스위치의 역할을 하게 되며, OUT1, OUT2 출력 신호는 아두이노가 생성할 수 있고, 모터에 흐르는 전류는 모두 VCC ▶ 트랜지스터 ▶ 모터 ▶ 트랜지스터 ▶ GND(접지) 로 흐르므로 모터의 전류 용량도 무난히 소화할 수 있겠습니다. 한가지 더 주의 깊게 보아야 할 것은 VCC로 표시된 전압은 +5V가 아니어도 괜찮다는 것입니다. 즉, OUT1이나 OUT2를 결정하는 로직 레벨과 무관하게 모터(M)의 정격에 알맞은 전압(예를 들어 3V~24V)을 걸어주면 된다는 것이지요. 오, 전류도 맘대로 되고, 전압도 맘대로 할 수 있으니, 일거양득(一擧兩得)! 신세대 은어로는 개이득이네요.</span></p>
<p>다시 돌아가서, 한 개의 모터를 가지고 위 2가지의 경우에 모두 적용되어야 하므로 이제 2개의 회로를 합쳐서 그려보겠습니다. 아래와 같이 될 것 같습니다. 모습이 H 형태와 비슷하다고 하여 이 회로의 이름을 ‘H-브릿지’라고 부릅니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-11.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28895 aligncenter" alt="32PTB 4강 11" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-11.jpg" width="483" height="374" /></a><br />
일단, 맞는지 잘 확인해 보시지요. (특히, Q1, Q1, Q3, Q4 위치)<br />
똑같죠? 왠지 멋져 보입니다.<br />
그럼, 최종 점검해 보겠습니다.<br />
OUT1 = 1, OUT2 = 0 이면 Q1 = ON, Q2 = ON, Q3 = OFF, Q4 = OFF이므로 아래 그림과 같이 VCC ▶ Q1 ▶ 모터(M) ▶ Q2 ▶ GND 방향으로 전류가 흘러서 모터가 순방향으로 회전합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-12.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28896 aligncenter" alt="32PTB 4강 12" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-12.jpg" width="432" height="332" /></a><br />
OUT1 = 0, OUT2 = 1 인 경우는 Q1 = OFF, Q2 = OFF, Q3 = ON, Q4 = ON 이므로 모터로 흐르는 전류 방향이 반대가 되므로 역방향으로 회전하겠네요. (여러분이 한번 전류 흐름을 그려보세요.)</p>
<p>또한, OUT1 = 1, OUT2 = 1 이거나, OUT1 = 0, OUT2 = 0 이면 VCC 쪽이거나 GND 쪽에 연결된 트랜지스터가 OFF 되어 모터로 전류가 흐르지 않으므로 모터는 정지하겠습니다.<br />
이것이면 완전 끝인가요?<br />
아쉽게도 좀 더 세부적으로 들어가면, 모터의 정격 전압, 전류 등에 대하여 제대로 알아야 하구요. 이를 구동할 트랜지스터의 타입, 전류 구동 능력, 관성 다이오드(flywheel diode)의 규격 및 이들의 상관 관계 등 세부적인 계산 방법은 간단하지가 않습니다. 또한, 잘못 연결하거나 맞지 않는 규격을 사용할 경우 모터나 트랜지스터에 손상을 일으킬 여지도 있어, 실제로 모터를 동작시킬 때에는 회로를 직접 꾸미기 보다는 이미 잘 동작하도록 제작된 전용 드라이버 칩 또는 이러한 칩을 사용하여 제작한 모듈을 사용하는 경우가 대부분입니다.<br />
그러므로 우리는 기본 원리를 이해하는 정도에서 만족하고, 실제 DIY에서는 전용 모터드라이버 모듈을 사용하도록 하는 것으로 방향을 잡겠습니다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 모터 드라이버 : JMOD-MOTOR-1 <strong>■ </strong></strong></span></p>
<p>모터드라이버는 앞에서 이야기한대로 모터를 쉽게 구동할 수 있도록 트랜지스터와 저항, 관성다이오드를 내장함은 물론 모터가 도는 방향도 선택하여 제어할 수 있는 구조를 가진 모듈을 의미하며, 시장에는 여러 종류의 모터드라이버가 출시되어 있습니다. 여기서는 우리의 목적에 적합한 모터드라이버로 제이씨넷 사의 JMOD-MOTOR-1이라는 모터드라이버를 사용하여 설명하도록 하겠습니다. (물론, 규격에 알맞은 다른 모터 드라이버를 사용하셔도 됩니다.)<br />
JMOD-MOTOR-1 은 TB6612FNG 칩 기반의 2채널 DC 모터 드라이버입니다. 4.5V~13.5V 범위의 DC 모터를 사용할 수 있고 채널당 최대 1.2A 까지의 전류를 공급할 수 있으며 다른 모터드라이버에 비하여 효율이 상당히 높다는 장점을 가지고 있습니다. 2.54mm 핀헤더 타입 및 2&#215;5 박스헤더 타입의 인터페이스를 함께 제공하여, 아두이노나 AVR 모듈 등과의 연결이 편리한 아래와 같이 생긴 제품(http://www.devicemart.co.kr/1160053)입니다.<br />
세부 구조 및 핀 배치는 다음과 같습니다.</p>
<p style="text-align: center;"><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-13.jpg" rel="lightbox[28795]"><img class="wp-image-28897" alt="32PTB 4강 13" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-13.jpg" width="334" height="326" /></a></p>
<p style="text-align: center;"><a href="//www.devicemart.co.kr/1160053)" target="_blank">제품 상세보러가기</a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-14.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28898 aligncenter" alt="32PTB 4강 14" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-14.jpg" width="538" height="331" /></a><br />
이론적으로 공부한 H-브릿지 드라이버와 실제 드라이버와의 매핑을 해보면 아래와 같이 됩니다. 한가지 다른 점은 TB6612에는 PWMA 라는 신호가 하나 더 있는데, 이것은 제어 입력인 AIN1, AIN2이 회전하는 경우 속도를 제어하기 위한 제어 신호로 PWMA가 High인 경우만 AIN1, AIN2 신호가 AO1, AO2로 그대로 전달되고, PWMA가 Low인 경우는 전달되지 않는다고 생각하시면 되겠습니다.</p>
<p>그렇다면 PWMA를 High로 했다가 Low로 했다가… 를 적당한 길이로 조정하면 모터가 돌다가 쉬다가… 할테니 속도를 조절할 수가 있겠습니다. 쉽게 설명하려고 했는데 설명이 더 어려운 것 같기도 하고…</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-15.jpg" rel="lightbox[28795]"><img class="size-large wp-image-28899 aligncenter" alt="32PTB 4강 15" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-15-506x620.jpg" width="506" height="620" /></a><br />
어쨌든 결과적으로, 우리가 제어하여야 할 핀은 PWMA, AIN1, AIN2의 3핀이고, 이 3핀의 값에 따라 AO1, AO2가 결정되어, 결국 모터가 정회전(CW, ClockWise, 시계방향), 역회전(CCW, CounterClockWise, 반시계방향), 정지(Break, Stop) 기능을 아래 표와 같이 수행하게 됩니다. 조금 장황한 듯 하지만 결국 3개의 신호선만 우리가 원하는 대로 알맞게 출력해 주면 모터는 동작하는 것이지요.<a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32아두이노-09.png" rel="lightbox[28795]"><img class="size-full wp-image-28928 aligncenter" alt="32아두이노 09" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32아두이노-09.png" width="443" height="149" /></a></p>
<p>마지막으로, 모터 전원의 경우는 외부에서 따로 제공하여야 하며, +5V 전원이라 할지라도 아두이노에서 사용하고 있는 +5V 전원과는 다른 전원을 사용하는 것이 좋습니다. 왜냐하면 모터는 기본적으로 전류용량이 커서 최소 수백 mA 이상을 사용하며, 또한 모터 기동시에는 이것의 2-3배 정도의 전류가 더 필요하게 되므로, USB 케이블을 통하여 아두이노에 제공되는 전류 용량(보통 500mA)만으로는 부족한 경우가 많아 모터가 동작하지 않거나 아두이노가 리셋이 되는 경우 등 오동작하는 경우가 발생할 수 있기 때문입니다.</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 간단한 선풍기 <strong>■ </strong></strong></span></p>
<p>자, 이제 이론적인 준비가 끝났으니 DIY 작품을 만들어 보도록 하지요. 공중회전그네를 만들기 전에 먼저 간단한 선풍기를 만들어보겠습니다. 선풍기를 만든 다음에 요것을 변신시켜서 공중회전그네를 만들거랍니다.<br />
기본 재료인 모터는 3V DC 모터인 WRE-260을, 소형프로펠러는 아래와 같이 생긴 프로펠러를 사용하도록 하겠습니다. 다른 이유는 없고 그저 값이 싸다는 이유이므로, 다른 모터를 사용하여도 되고, 프로펠러는 그냥 간단히 스카치테이프나 색종이 등을 모터 축에 오려 붙여서 만들어도 되겠습니다.<br />
다행이도 프로펠러는 모터에 꼭 맞네요.</p>
<table style="width: 620px;" border="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-16.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28900 aligncenter" alt="32PTB 4강 16" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-16.jpg" width="204" height="204" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-17.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28901 aligncenter" alt="32PTB 4강 17" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-17.jpg" width="167" height="158" /></a></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong style="color: #ff0000;">[기능 규격]</strong></p>
<p>· 소형 DC 모터에 모형 날개를 달고 아두이노로 제어하여 간단한 선풍기 제작<br />
· 5초간 정회전, 2초간 정지, 3초간 역회전, 2초간 정지를 반복 실행</p>
<p><span style="color: #ff0000;"><strong>[알고리즘]</strong></span><br />
정리된 알고리즘은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32아두이노-09.png" rel="lightbox[28795]"><img class="aligncenter" alt="32아두이노 09" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32아두이노-09.png" width="443" height="149" /></a></p>
<p>· 위의 표에서 정회전, 역회전, 정지에 해당되는 PWMA, AIN1, AIN2 값을 정해진 시간 동안 차례로 출력</p>
<p><span style="color: #ff0000;"><strong>[아두이노 연결]</strong></span><br />
PWMA는 아두이노 5번핀에 할당하고, AIN1과 AIN2는 각각 7번핀, 8번핀에 할당</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-18.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28902 aligncenter" alt="32PTB 4강 18" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-18.jpg" width="360" height="445" /></a><br />
<span style="color: #008000;">※ 참고 : 모터 전원용으로 배터리(팩)를 연결할 때 배터리의 (+)는 JMOD-MOTOR-1의 VCC에 직접 연결하고 GND는 아두이노의 GND에 연결하면 추가 배선없이 연결됩니다. 모터가 3V용이어서 1.5V 건전지 2개를 직렬로 연결하여 모터 전원(VCC)에 공급하면 됩니다.</span></p>
<p><span style="color: #ff0000;"><strong>[스케치 프로그램]</strong></span><br />
자, 이제 연결은 되었으니, 프로그램해서 돌려 봅시다.<br />
장황하게 왔는데, 프로그램은 항상 너무 간단하죠.</p>
<table style="width: 600px;" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>const int MOTOR_PWM = 5; // 모터 PWM 입력핀, PWM핀으로 할당<br />
const int MOTOR_IN1 = 7; // 모터 IN1 입력핀<br />
const int MOTOR_IN2 = 8; // 모터 IN2 입력핀&nbsp;</p>
<p>void setup()<br />
{<br />
pinMode(MOTOR_PWM, OUTPUT);<br />
pinMode(MOTOR_IN1, OUTPUT);<br />
pinMode(MOTOR_IN2, OUTPUT);<br />
}</p>
<p>void loop()<br />
{<br />
digitalWrite(MOTOR_PWM, HIGH); // 3초간 선풍기 정회전<br />
digitalWrite(MOTOR_IN1, HIGH);<br />
digitalWrite(MOTOR_IN2, LOW);<br />
delay(3000);<br />
digitalWrite(MOTOR_PWM, LOW); // 3초간 선풍기 정지<br />
digitalWrite(MOTOR_IN1, LOW);<br />
digitalWrite(MOTOR_IN2, LOW);<br />
delay(3000);<br />
digitalWrite(MOTOR_PWM, HIGH); // 3초간 선풍기 역회전<br />
digitalWrite(MOTOR_IN1, LOW);<br />
digitalWrite(MOTOR_IN2, HIGH);<br />
delay(3000);<br />
digitalWrite(MOTOR_PWM, LOW); // 3초간 선풍기 정지<br />
digitalWrite(MOTOR_IN1, HIGH);<br />
digitalWrite(MOTOR_IN2, HIGH);<br />
delay(3000);<br />
}</td>
</tr>
</tbody>
</table>
<p>으, 별 것 없죠?<br />
실행 결과은 어떻게 되었나요?<br />
아래 동영상처럼 잘 돌아가나요? 작은 선풍기인데 생각보다는 꽤 쌩쌩~~~ 도네요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-19.jpg" rel="lightbox[28795]"><img class="size-full wp-image-28903 aligncenter" alt="32PTB 4강 19" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-19.jpg" width="572" height="335" /></a></p>
<p style="text-align: center;"><a href="https://www.youtube.com/watch?v=LUHBFqI9Qu0" target="_blank">동영상 보러가기</a></p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ 공중회전그네 <strong>■</strong></strong></span></p>
<p>자, 이제 드디어 마지막 목적지인 공중회전그네 DIY 입니다. 앞에서 제작한 선풍기를 약간 개조하여 공중회전그네를 만들어 보겠습니다. 아마도, 어떻게 만들지 벌써 감을 잡으신 분들이 대부분이겠지요?</p>
<p>선풍기를 꺼꾸로 매달아 공중회전그네의 동력으로 쓰고, 선풍기 날개 끝에 구멍을 뚫어 그네를 매달아 회전을 시키는 형태로 하면 될 것 같습니다. 사용하고 싶은 재료를 자유롭게 골라서 만들면 될 것 같구요. 저는 그네줄은 점퍼케이블로 구현하고, 그네는 그냥 클립으로 찝어 그네라고 우기면서 간단히 꾸며려 합니다.</p>
<p>놀이기구이니까 그냥 도는 것 보다는 회전 속도와 회전 방향을 랜덤하게 하면 좀 더 재미가 있을 것 같으니 그렇게 한 번 해보지요.</p>
<p><span style="color: #ff0000;"><strong>[기능 규격]</strong></span><br />
· 여러명의 사람을 태울 수 있는 공중회전그네<br />
· 한 번은 시계 방향, 한 번은 반시계 방향 회전하며 회전 후에는 2초간 정지<br />
· 한 번 회전시 1~9초간 랜덤 시간 회전<br />
· 저속, 중속, 고속의 랜덤 속도로 회전</p>
<p><span style="color: #ff0000;"> <strong>[필요 함수]</strong></span><br />
<span style="color: #008000;">randomSeed(seed)</span></p>
<p style="padding-left: 60px;"><span style="color: #008000;">· 난수 초기화 함수</span><br />
<span style="color: #008000;"> · seed : 난수 초기화를 위한 초기값</span></p>
<p>랜덤한 값을 만들어 내기 위한 초기값을 결정하는 함수로 seed값에 따라 랜덤한 값의 시작점이 달라짐. seed값도 랜덤하게 하기 위하여 이 값을 analogRead(A0) 를 수행한 값으로 하면 임의의 랜덤값을 얻을 수 있음</p>
<p><span style="color: #008000;">random(min, max) 또는 random(min)</span></p>
<p style="padding-left: 60px;"><span style="color: #008000;">· 난수값 생성 (리턴값)</span><br />
<span style="color: #008000;"> · min : 난수값의 최소값 (범위 포함)</span><br />
<span style="color: #008000;"> · max : 난수값의 최대값 + 1 (범위 불포함)</span></p>
<p>랜덤한 값을 만들어 내는 함수로 min, max 값을 주어 랜덤값의 범위를 결정함</p>
<p><span style="color: #ff0000;"><strong>[알고리즘]</strong></span><br />
정리된 알고리즘은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-08.png" rel="lightbox[28795]"><img class="alignnone size-full wp-image-28911" alt="32 아두이노 08" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-08.png" width="425" height="450" /></a></p>
<p>여기서 주의하여야 할 점은 2가지입니다.<br />
하나는 난수 생성을 어떻게 하는가 하는 것인데, 앞에서 배운 것처럼, 난수를 발행하려면 초기값을 생성해 주어야 하며 이 함수는 random(seed)입니다. 여기서 seed 값에 따라 난수표의 초기 위치가 결정되므로 seed 값도 random으로 입력할 수 있으면 진정한 난수가 될 수 있겠지요. 그래서 보통 사용하는 방법은 이 seed 값을 analogRead(0), 즉 아날로그 포트 0에 아무 것도 연결하지 않은 상태를 읽는 방법을 사용합니다. 포트 0에 신호를 연결하지 않고 그냥 읽으면 일반적으로 0~1023 사이의 랜덤한 값이 읽히게 되는 전기적인 현상을 이용하는 것이지요.<br />
두번째는 속도를 결정하여 이것을 출력하는 것인데, PWM핀에 출력할 때는 이전 예제와는 다르게 digitalWrite( ) 함수를 사용하면 안되고 analogWrite( ) 함수를 사용하여야 한다는 점입니다.<br />
즉, 고속, 중속, 저속의 3가지 경우에 각각 적당한 0~1023 사이의 PWM 값을 결정하여 analogWrite(PWM포트, PWM값)의 형태로 사용하여야 하겠습니다. (실제로는 돌려보고 적당한 값으로 튜닝하는 것이 맞겠네요.)<br />
프로그램은 선풍기 프로그램을 기본으로 난수 발생 함수만 잘 요리하면 되겠습니다. 혼자서도 하실 수 있는 분들은 아래를 보기 전에 먼저 혼자 해 보시구요.</p>
<p>아래와 비슷하게 되겠네요.</p>
<table style="width: 600px;" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>const int MOTOR_PWM = 5; // 모터 PWM 입력핀, PWM핀으로 할당<br />
const int MOTOR_IN1 = 7; // 모터 IN1 입력핀<br />
const int MOTOR_IN2 = 8; // 모터 IN2 입력핀&nbsp;</p>
<p>#define PWM_HIGH 320 // 빠른 속도, 그네 무게에 따라 조정 필요<br />
#define PWM_MID 80 // 중간 속도, 그네 무게에 따라 조정 필요<br />
#define PWM_LOW 20 // 느린 속도, 그네 무게에 따라 조정 필요<br />
#define PWM_ZERO 0 // 정지</p>
<p>void setup()<br />
{<br />
int value;<br />
pinMode(MOTOR_PWM, OUTPUT);<br />
pinMode(MOTOR_IN1, OUTPUT);<br />
pinMode(MOTOR_IN2, OUTPUT);<br />
value = analogRead(0); // A0 포트에 아무런 입력 신호가 없으면 random한 값이 읽혀지는데 이것을 사용<br />
randomSeed(value); // 위 값을 난수 발생의 초기값(seed)으로 사용<br />
}</p>
<p>void loop()<br />
{<br />
int random_value, level;<br />
random_value = random(1, 4);<br />
switch (random_value)<br />
{<br />
case 1: level = PWM_HIGH; break;<br />
case 2: level = PWM_MID; break;<br />
case 3: level = PWM_LOW; break;<br />
default: break;<br />
}<br />
analogWrite(MOTOR_PWM, level); // 한 번은 정회전<br />
digitalWrite(MOTOR_IN1, HIGH);<br />
digitalWrite(MOTOR_IN2, LOW);<br />
delay(random(1,10)*1000); // random(1,10)의 결과는 1~9까지의 정수, 즉 1초~9조간 임의의 시간 동안 회전<br />
analogWrite(MOTOR_PWM, PWM_ZERO);<br />
// 한 번 회전 후에는 항상 2초간 정지<br />
digitalWrite(MOTOR_IN1, LOW);<br />
digitalWrite(MOTOR_IN2, LOW);<br />
delay(2000);<br />
analogWrite(MOTOR_PWM, level); // 다음 번은 역회전<br />
digitalWrite(MOTOR_IN1, LOW);<br />
digitalWrite(MOTOR_IN2, HIGH);<br />
delay(random(1,10)*1000);<br />
// random(3,9)의 결과는 1~9까지의 정수, 즉 1초~9조간 임의의 시간 동안 회전<br />
analogWrite(MOTOR_PWM, PWM_ZERO);<br />
// 한 번 회전 후에는 항상 2초간 정지<br />
digitalWrite(MOTOR_IN1, LOW);<br />
digitalWrite(MOTOR_IN2, LOW);<br />
delay(2000);<br />
}</td>
</tr>
</tbody>
</table>
<p>돌려 본 결과는 아래와 같습니다.</p>
<table style="width: 600px;" border="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-22.jpg" rel="lightbox[28795]"><img class="size-medium wp-image-28906 alignleft" alt="32PTB 4강 22" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-22-194x300.jpg" width="194" height="300" /></a></td>
<td><img class="alignnone size-medium wp-image-28907" alt="32PTB 4강 23" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32PTB-4강-23-247x300.jpg" width="247" height="300" /></td>
</tr>
</tbody>
</table>
<p><a href="https://www.youtube.com/watch?v=kPFmsmO6UYw" target="_blank">동영상 보러가기</a></p>
<p>&nbsp;</p>
<p>빌빌빌… 돌기도 하고, 약간 썡~ 돌기도 하네요.</p>
<p>어쨌든 제가 원했던 공중회전그네와 비슷합니다. 저는 만족!<br />
만들고 시험하노라면 시간이 조금 많이 걸리기는 하는데… 그래도 나름 재미있는 DIY를 해 본 것 같습니다.<br />
저는 사실 조금 게을러서… 꾀를 내어 간단히 만들어 보았지만 여러분은 좀 더 멋있게 정말 공중회전그네처럼 만들어서 동작시켜 보시기를 기대해 보겠습니다.<br />
여기까지 함께 하시느라 고생하셨구요.</p>
<p>다음에는 좀 더 즐겁고 재미있는 내용으로 환하게 다시 만나겠습니다! 모두모두, 안녕~~~</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-100.png" rel="lightbox[28795]"><img class="alignnone size-full wp-image-28929" alt="32 아두이노 100" src="http://www.ntrexgo.com/wp-content/uploads/2015/09/32-아두이노-100.png" width="443" height="206" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/28795/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[31호] 너무 쉬운 아두이노 DIY ③ &#8211; 시한폭탄 카운트다운 계수기와 디지털 전압계</title>
		<link>http://www.ntrexgo.com/archives/29614</link>
		<comments>http://www.ntrexgo.com/archives/29614#comments</comments>
		<pubDate>Wed, 15 Jul 2015 08:32:28 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[31호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[계수기]]></category>
		<category><![CDATA[디바이스마트. 매거진]]></category>
		<category><![CDATA[아두이노]]></category>
		<category><![CDATA[전압계]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=29614</guid>
		<description><![CDATA[디바이스마트 매거진 31호 &#124; 이번 회에서는 숫자를 디스플레이 할 수 FND를 가지고 만들 수 있는 2가지 DIY 작품을 만들어 볼까 합니다. 하나는 007 시리즈와 같은 액션 영화에 자주 나오는 [시한폭탄 카운트다운 계수기]이고, 다른 하나는 건전지 등의 전압을 측정할 수 있는 [디지털 전압계]입니다. ]]></description>
				<content:encoded><![CDATA[<p><img alt="31호 너무 쉬운 아두이노 DIY" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31호-너무-쉬운-아두이노-DIY.jpg" width="620" height="181" /></p>
<p><span style="font-size: small;"><strong>너무 쉬운 아두이노 DIY ③ </strong></span><span style="font-size: small;"><strong>시한폭탄 카운트다운 계수기와 디지털 전압계</strong></span></p>
<p style="text-align: right;">글 | 신상석 ssshin@jcnet.co.kr</p>
<p> <div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>이 강의는 아두이노를 가지고 간단하게 생활에 필요한 용품을 만들어 보는 강의입니다. 뚝딱뚝딱 뭔가 자신만의 DIY 용품을 만들어 보는 쏠쏠한 재미가 있는 강의라고나 할까요? 이미 주변에 아두이노와 관련한 많은 책이 출간되었고 카페나 블로그를 통하여 강의가 진행된 경우도 꽤나 많이 있는데도 불구하고, 이 지면을 통하여 강의를 개설한 이유는 다음과 같습니다.</p>
<p>1. 아두이노의 초보자들을 위한 쉽고 재미있는 강의가 거의 없는 것 같아, 가능하면 초등학생(?)까지도 함께 해 볼 수 있는 그런 강의를 한 번 해보고 싶어서…<br />
2. 아두이노를 가지고 뭔가 조금은 다른, 자신만의 창의적인(?) DIY를 할 수 있는 자리를 만들어주고 싶어서…<br />
3. 디바이스마트매거진은 임베디드와 관련된 독자들이 많고, 발행 부수도 많아, 저와 제가 속한 회사(제이씨넷) 그리고 임베디드홀릭 카페의 홍보에 도움이 될 것 같아서…</p>
<p>현재 구상하고 있는 회차별 내용을 간략하게 정리해 보면 다음과 같습니다. (변경될 수 있습니 다.)</p>
<table style="border: 1px solid #e2dee2; width: 340px;" border="1" cellspacing="0" cellpadding="1">
<tbody>
<tr>
<td style="text-align: center;">회차</td>
<td>내용</td>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td>3색 신호등 만들기</td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td>카멜레온 반지, 스위치를 이용한 신호등 게임기</td>
</tr>
<tr>
<td style="text-align: center;">3</td>
<td>FND로 만드는 디지털전압계, 카운트다운 계수기</td>
</tr>
<tr>
<td style="text-align: center;">4</td>
<td>어두워지면 켜지는 정원등, 공중회전그네</td>
</tr>
<tr>
<td style="text-align: center;">5</td>
<td>캐롤송 카드, 컬러링 온도계</td>
</tr>
<tr>
<td style="text-align: center;">6</td>
<td>스마트폰으로 조정하는 스마트카</td>
</tr>
</tbody>
</table>
<p>앞으로 즐겁고 알찬 강의가 될 수 있도록 최선을 다할 것을 약속 드리며, 이 강의를 보는 독자들도 메일이나 카페를 통하여 Q&amp;A(Question &amp; Answer)나 피드백을 주셔서, 함께 정감을 나눌 수 있는 계기가 되기를 기대해 봅니다.<br />
</div>
<p>여러분, 안녕하세요. 항상 즐거운 강사 신상석입니다.<br />
이번 회에서는 숫자를 디스플레이 할 수 FND를 가지고 만들 수 있는 2가지 DIY 작품을 만들어 볼까 합니다. 하나는 007 시리즈와 같은 액션 영화에 자주 나오는 [시한폭탄 카운트다운 계수기]이고, 다른 하나는 건전지 등의 전압을 측정할 수 있는 [디지털 전압계]입니다. 두가지 모두 일상생활 속에서 여러가지 형태로 응용이 가능한 것이어서 이번 기회에 다루는 기술을 잘 습득하여 다른 DIY 작품을 만드는데 많은 도움이 되시기 바랍니다.<br />
그럼, 출발해 볼까요? GO~ GO~</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>■ FND (Flexible Numeric Display)</strong></span></p>
<p>FND는 ‘Flexible Numeric Display’의 약어로, 직역하면 ‘숫자를 자유롭게 디스플레이 할 수 있는 부품’이 되겠습니다. 다들 아시지요? 7-segement(세븐 세그먼트, 도트를 빼면 숫자 표시 부분은 7개의 LED로 이루어졌기 때문에 이렇게 불러짐)라고 주로 불렀는데 요즘은 FND라고도 많이 부르고 있습니다. 보통 요렇게 생겼지요.</p>
<table style="width: 620px;" border="0">
<tbody>
<tr>
<td><img alt="31 아두이노 DIY 01" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-01.jpg" width="147" height="154" /></td>
<td><img alt="31 아두이노 DIY 02" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-02.jpg" width="298" height="132" /></td>
</tr>
</tbody>
</table>
<p>1개짜리도 있고, 2개, 3개, 4개, … n개 짜리도 있습니다. 디지털시계나 디지털체중계 등에는 액정 형태로도 많이 사용되고, 증권사 객장에서는 주가를 나타내는 전광판 형태로도 사용됩니다. 엘리베이터의 층수를 나타내는 디스플레이로도 이것이죠..</p>
<table style="width: 620px;" border="0">
<tbody>
<tr>
<td><img class="size-full wp-image-29699 aligncenter" alt="31 아두이노 DIY 03" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-03.jpg" width="229" height="60" /></td>
<td><img alt="31 아두이노 DIY 04" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-04.jpg" width="275" height="191" /></td>
</tr>
</tbody>
</table>
<p>자, 그러면 FND의 정체는 무엇일까요? 1개 숫자를 나타내는 FND의 숫자 부분을 조금 자세히 들여다 보면, 디스플레이 숫자판이 8조각(도트(점) 포함)으로 구분되어 있는 것을 알 수 있습니다.</p>
<p>뭔가 생각나는 것이 없나요?<br />
음~ 혹시… 이것도 LED의 일종?<br />
예, 맞습니다. 짐작하신 대로입니다. FND 숫자판의 각 조각은 하나의 LED로 구성되어 있습니다. 즉, 형태가 각각 다른 LED 8개가 숫자 형태를 유지하는 위치에 1개씩 놓여져 있는 것이 FND인 것이지요. 처음에 우리가 다루었던 LED를 8개 준비하여 아래 그림과 같이 위치이동과 형태/크기 변경의 과정을 거치면 FND 1개가 되는 것입니다.</p>
<p><img class="alignnone size-full wp-image-29701" alt="31 아두이노 DIY 05" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-05.jpg" width="505" height="195" /></p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>   ■ FND 구조와 연결 방법     </strong></span></p>
<p>기본적인 구조는 알았으므로, 일단 숫자 1개를 표시할 수 있는 FND를 조금 더 세밀하게 들여다 보겠습니다. 아래 그림을 보시지요.</p>
<p><img class="size-full wp-image-29702 aligncenter" alt="31 아두이노 DIY 06" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-06.jpg" width="602" height="432" /><br />
1개짜리 FND에는 보통 신호(다리)가 10개 할당되어 있는데 이 신호 중 A, B, C, …, G 그리고 DP 까지 8개의 알파벳 이름이 할당되어 각각 LED 1개씩 연결되어 있고, 나머지 2개는 모두 GND(왼쪽 FND) 또는 모두 VCC(오른쪽 FND)에 연결되어 있습니다.<br />
또한, GND 신호가 할당된 FND는 각 LED의 캐소드(cathode)에 해당되는 부분이 공통으로 묶여서 GND에 연결되어 있고, VCC 신호가 할당된 FND는 각 LED의 애노드(anode)에 해당되는 부분이 공통으로 묶여서 VCC에 연결되어 있다는 것을 알 수 있습니다. 이 때 전자를 공통 캐소드 타입(Common Cathod Type)이라고 하는데, 각 알파벳 신호 8개는 아두이노의 디지털포트 핀에 연결하고 GND로 표시된 신호는 아두이노의 GND핀에 연결하면 이 FND를 제어할 수 있습니다. 마찬가지로 후자는 공통 애노드 타입(Common Anode Type)이라고 하는데, 이것도 전자와 비슷한 형태이지만 GND 대신 VCC로 표시된 신호가 있어 이곳은 아두이노의 VCC(+5V) 핀에 연결하는 점만 다릅니다. 한가지 조심하여야 할 것은 알파벳으로 표시된 신호를 아두이노의 핀과 연결할 때는 LED 연결 시와 마찬가지로 반드시 직렬저항(보통 220~1K 오옴)을 연결한 후에 아두이노 핀에 연결하여야만 과전류에 의한 고장을 방지할 수 있다는 점입니다.<br />
자, 연결 방법을 알았으니, 일단 연결을 해볼까요? 먼저 우리가 사용할 FND를 보겠습니다.<br />
FND의 이름은 [SMA42046]로. 구글에서 이것을 찾아보면 데이터시트가 나오는데 아래 그림과 같이 정보가 나옵니다. 우리는 Common Cathode 타입을 사용합니다. FND는 현재 자신이 가지고 있는 것이나 구입하기 쉬운 것을 아무거나 선택하여 사용하면 됩니다.</p>
<p><img class="size-full wp-image-29703 aligncenter" alt="31 아두이노 DIY 07" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-07.jpg" width="543" height="445" /></p>
<p>핀 번호도 보이고, A~DP까지 신호가 할당된 것이 보이므로 바로 연결할 수 있을 것 같습니다.<br />
보통 FND의 점(dot)이 있는 쪽 핀 배열의 맨 왼쪽, 또는 이름이 적혀있는 면의 맨 왼쪽이 1번 핀입니다만, FND마다 핀 배치가 다를 수 있으므로 각자 사용하는 부품의 데이터시트를 잘 보고 적용하시기 바랍니다.<br />
신호 A~DP까지 8개의 신호는 순서대로 아두이노의 D2~D9에 할당하는 것으로 하겠습니다. FND의 신호와 아두이노 신호 사이에는 220오옴~1K오옴의 저항을 넣어주는 것을 꼭 잊지 마시고 이제 아두이노와 연결해 보겠습니다.<br />
예쁘게 보이려고 나름 애썼는데, 괜찮은가요?</p>
<p><img class="size-full wp-image-29704 aligncenter" alt="31 아두이노 DIY 08" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-08.jpg" width="602" height="483" /></p>
<p><span style="color: #ffffff; font-size: medium; background-color: #008000;"><strong>   ■ FND로 숫자 표현하기     </strong></span></p>
<p>자, 그럼 이제 공통 캐소드 방식의 FND를 기준으로 1개의 숫자를 표현하는 방법을 살펴보겠습니다. 기분이 좋아지도록 Lucky Seven (‘7’)을 한 번 표현해보도록 하지요. (GND 신호는 아두이노 GND핀에 연결된 상태라고 가정합니다. ‘7’이 디스플레이로 보이려면 아래와 같이 노란색 불이 들어와야 하므로, A, B, C 신호가 ON(High, 1) 되어야 합니다. 나머지 신호는 당연히 OFF(Low, 0) 되어야 하겠지요.</p>
<p><img class="size-full wp-image-29705 aligncenter" alt="31 아두이노 DIY 09" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-09.jpg" width="172" height="171" /></p>
<p>즉, A=1, B=1, C=1, D=0,, E=0, F=0, G=0, DP=0 이 되도록 각 신호에 연결된 아두이노의 핀을 이 상태로 만들면 되겠습니다. 지난번에 배운 digitalWrite( ) 함수를 이용하면 되겠네요. 간단하지요? 그럼 바로 프로그램을 해보겠습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void setup()<br />
{<br />
pinMode(2, OUTPUT); // pin2 ~ pin9 까지 모두 출력<br />
pinMode(3, OUTPUT);<br />
pinMode(4, OUTPUT);<br />
pinMode(5, OUTPUT);<br />
pinMode(6, OUTPUT);<br />
pinMode(7, OUTPUT);<br />
pinMode(8, OUTPUT);<br />
pinMode(9, OUTPUT);<br />
}</p>
<p>void loop()<br />
{<br />
// FND에 ‘7’ 이라고 보여지려면 {A, B, C, D, E, F, G, DP} = {1, 1, 1, 0, 0, 0, 0, 0} 이어야 함<br />
digitalWrite(2, HIGH); // A(2번핀) = 1<br />
digitalWrite(3, HIGH); // B(3번핀) = 1<br />
digitalWrite(4, HIGH); // C(4번핀) = 1<br />
digitalWrite(5, LOW); // D(5번핀) = 0<br />
digitalWrite(6, LOW); // E(6번핀) = 0<br />
digitalWrite(7, LOW); // F(7번핀) = 0<br />
digitalWrite(8, LOW); // g(8번핀) = 0<br />
digitalWrite(9, LOW); // DP(9번핀) = 0<br />
}</p>
</div>
<p>바로 실행해 봅니다.<br />
FND에 Lucky Seven ‘7’ 숫자가 디스플레이 되었나요? 너무 쉽지요?</p>
<p><img class="size-large wp-image-29707 aligncenter" alt="31 아두이노 DIY 11" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-11-620x348.jpg" width="620" height="348" /></p>
<p>그러면 이번에는 숫자 ‘0’을 혼자 힘으로 만들어보겠습니다. 3분 드립니다. 3~, 2~, 1~<br />
모두 다 잘 되었으리라 믿고, 이번에는 조금 더 효율적인 다른 방법을 사용하여 ‘0’ 이라는 숫자를 만들어 보도록 하지요. 숫자 표현은 어레이를 이용하고, 반복에 대한 부분은 for 문을 이용하면 매우 효율적인 프로그램이 됩니다..</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define FND_A 2 // 핀 매치, A는 2번핀<br />
#define FND_DP 9 // 핀 매치, DP는 9번핀</p>
<p>void setup()<br />
{<br />
int i;</p>
<p>for (i=FND_A; i&lt;=FND_DP; i++)// 핀 번호가 연속적으로 할당되어 있으므로 가능<br />
pinMode(i, OUTPUT); // pin2 ~ pin9 까지 모두 출력으로 세팅<br />
}</p>
<p>void loop()<br />
{<br />
boolean digit[8] = {1, 1, 1, 1, 1, 1, 0, 0}; // ‘0’ : A=1, B=1, C=1, D=1, E=1, F=1, G=0. DP=0 // 각 핀 값을 이렇게 어레이로 처리하면 매우 편리<br />
int i;</p>
<p>for (i=FND_A; i&lt;= FND_DP; i++)<br />
digitalWrite(i, digit[i-2]); // 위 핀에 대응되는 1, 0 값을 Write<br />
// i는 2부터 시작이므로 digit[i-2]로 하여야만<br />
// digit[0]부터 시작하게 됨에 주의!!!<br />
}</p>
</div>
‘0’ 숫자 디스플레이 잘 되셨죠?<br />
뭐, 앞에서의 예와 똑같은 것이긴 하지만 for 반복문을 넣으니까 프로그램이 뭔가 조금 더 고급스러워 보입니다.</p>
<p>한 단계 더 전진해 보겠습니다.<br />
0, 1, 2, … 9 까지의 숫자가 1초마다 순서대로 변하는 초시계 프로그램을 작성해 봅시다.<br />
위의 예처럼 각 숫자를 표현하기 위한 핀 값을 모두 정의해 놓은 후 이것을 1초마다 돌아가면서 디스플레이하면 되겠네요. 8개 어레이를 갖는 10개의 숫자가 필요하므로, 이것을 2차원 어레이로 표현하면 10 x 8 어레이가 되겠고, 이것들을 1초마다 돌아가면서 값을 바꾸어주어야 하므로 for 문을 이용하여 반복 처리하면 될 것 같습니다. 음. 조금 어려울 수 있지만, 찬찬히 이해해 보도록 하지요.</p>
<p>아래 프로그램을 보겠습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define FND_A 2 // 핀 매치, A는 2번핀<br />
#define FND_DP 9 // 핀 매치, DP는 9번핀</p>
<p>void setup()<br />
{<br />
int i;</p>
<p>for (i=FND_A; i&lt;=FND_DP; i++) // 핀 번호가 연속적으로 할당되어 있으므로 가능<br />
pinMode(i, OUTPUT); // pin2 ~ pin9 까지 모두 출력으로 세팅<br />
}</p>
<p>void loop()<br />
{<br />
boolean digit[10][8] = { {1, 1, 1, 1, 1, 1, 0, 0}, // 숫자 ‘0’에 대응<br />
{0, 1, 1, 0, 0, 0, 0, 0}, // 숫자 ‘1’에 대응<br />
{1, 1, 0, 1, 1, 0, 1, 0}, // 숫자 ‘2’에 대응<br />
{1, 1, 1, 1, 0, 0, 1, 0}, // 숫자 ‘3’에 대응<br />
{0, 1, 1, 0, 0, 1, 1, 0}, // 숫자 ‘4’에 대응<br />
{1, 0, 1, 1, 0, 1, 1, 0}, // 숫자 ‘5’에 대응<br />
{1, 0, 1, 1, 1, 1, 1, 0}, // 숫자 ‘6’에 대응<br />
{1, 1, 1, 0, 0, 0, 0, 1}, // 숫자 ‘7’에 대응<br />
{1, 1, 1, 1, 1, 1, 1, 1}, // 숫자 ‘8’에 대응<br />
{1, 1, 1, 0, 0, 1, 1, 0,} }; // 숫자 ‘9’에 대응<br />
int i, j;</p>
<p>for (j=0; j&lt;=9; j++) // 숫자가 0~9까지 10개이므로 10번 루프<br />
{<br />
for (i=FND_A; i&lt;= FND_DP; i++) // 정해진 한 개의 숫자 디스플레이<br />
{<br />
digitalWrite(i, digit[j][i-2]); // 각 핀에 대응되는 1, 0 값을 Write<br />
}<br />
delay(1000); // 한 숫자가 디스플레이 되는 시간인 1초 대기<br />
}<br />
}</p>
</div>
<p>2차원 어레이를 쓰는 방법과 중복 for 루프를 쓰는 방법은 데이터가 많을 때 처리하는 방법으로 매우 유용하니 조금 복잡하고 어렵지만 사용법을 잘 익혀놓는 것이 좋겠습니다.<br />
자, 이제 업로드하고 잘 나오나 봅시다. 성공? 예, 당근 성공이지요. 축하합니다.</p>
<p><img class="size-full wp-image-29711 aligncenter" alt="31 아두이노 DIY 15" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-15.jpg" width="518" height="336" /></p>
<p><span style="color: #ffffff; font-size: medium; background-color: #008000;"><strong>   ■ 4-digit FND     </strong></span></p>
<p>한 개의 숫자를 표현하는 방법은 알았으므로 이번에는 여러 개의 숫자를 디스플레이할 수 있는 4 FND(여기서는 4-digit FND)에 대하여 살펴보겠습니다. 4-digit FND는 모양상으로는 1-digit FND,를 4개 합한 것과 같습니다. 그럼 뭐 특별히 4개짜리를 공부할 필요가 있겠는가 생각할 수도 있겠지만, 공부할 필요가 있습니다. 왜냐하면 연결방법이나 프로그램 방법이 약간 다르기 때문입니다.</p>
<p>위에서 살펴본 1-digit FND,를 생각해보면 이것과 연결된 신호선은 데이터 신호선 8개(A~DP)와 VCC 또는 GND선 2개이므로 총 10개입니다. 단순히 1-digit FND를 4개 묶어서 4-digit FND를 만들었다고 가정하면 VCC와 GND는 공통이고 신호선이 아니니까 빼 놓으면 4-digit FND에 필요한 신호선의 개수는 8 X 4 = 32 가 되어 총 32개의 신호선이 필요합니다. 그런데, 우리의 아두이노 UNO는 디지털 신호선이 D0~D13까지 14개, 아날로그 신호선이 A0~A5까지 6개이므로 이것을 몽땅 끌어다가 쓴다고 해도 최대 20개밖에 제공하지 못하므로 문제가 생기게 되는 것이지요.<br />
그래서 FND를 만든 사람들이 이 문제를 어떻게 해결할 수 있을까 생각하다가… “그렇지! ‘잔상효과’를 이용하면 되겠구나!”하고 아래와 같이 연결하는 방법을 발견하였습니다. (믿거나 말거나…)</p>
<p>우리가 사용할 공통 캐소드 타입 4-digit FND인 [WCN4-0036-SR-C11]의 데이터시트를 보면서 설명해 보겠습니다.</p>
<p><img class="size-full wp-image-29712 aligncenter" alt="31 아두이노 DIY 16" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-16.jpg" width="602" height="201" /></p>
<p>위 연결도를 잘 보면 1-digit FND에서 사용하였던 신호가 4-digit FND에 동일한 신호로 중복되어 연결되어 있는 것을 알 수 있습니다. 그리고 GND로 표시되었던 공통캐소드가 COM으로 표시되어 있고 이것은 따로 4개의 신호로 분리되어 할당되어 있네요. 이것이 무슨 의미인고 하니, A~DP까지의 신호는 4개의 FND가 공통으로 사용하고, 분리된 COM 신호를 이용하여 4개의 FND 중 한 개만 활성화하여 사용하겠다는 뜻입니다. 예를 들어 가장 왼쪽의 COM 신호만 0으로 하고 나머지를 1로 만들면 A~DP까지의 신호는 0이건 1이건 오른쪽 3개의 FND는 불이 들어오지 않으니까요(COM=1이므로 다이오드(LED)가 절대로 도통되지 않음).</p>
<p>즉, 왼쪽 FND 하나만 사용할 수 있는 상황이 됩니다. 이런식으로 COM의 값을 조정하면 선택된 FND만 불을 켤 수 있는 상황을 만들 수 있습니다. 결과적으로 이렇게 연결하면 데이터 신호선 8개와 FND 선택 신호선 4개만 아두이노에서 제어하여 어떤 순간에 한 개의 FND만 제어할 수 있게 됩니다. 즉, 아래와 같이 어떤 한 순간에 한 개의 숫자는 디스플레이가 가능한 것이지요.</p>
<table style="width: 620px;" border="0">
<tbody>
<tr>
<td style="text-align: center;"><img class="alignnone size-full wp-image-29713" alt="31 아두이노 DIY 17-1" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-17-1.jpg" width="198" height="77" /></td>
<td style="text-align: center;"><img class="alignnone size-full wp-image-29714" alt="31 아두이노 DIY 17-2" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-17-2.jpg" width="200" height="77" /></td>
</tr>
<tr>
<td style="text-align: center;"><img class="alignnone size-full wp-image-29715" alt="31 아두이노 DIY 17-3" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-17-3.jpg" width="207" height="77" /></td>
<td style="text-align: center;"><img class="alignnone size-full wp-image-29716" alt="31 아두이노 DIY 17-4" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-17-4.jpg" width="207" height="77" /></td>
</tr>
</tbody>
</table>
<p>이제 어떻게 4개의 숫자가 모두 디스플레이될 수 있는지에 대하여 생각해 보지요.</p>
<p>잔상효과라는 것은 방금 전에 눈으로 본 것을 뇌가 기억하고 있어서 그 다음에 본 것과 방금 전에 본 것이 겹쳐져 보이는 현상을 말하는데 예를 들어 영화나 애니메인션에서 1초에 여러 장(약 30장 정도)의 사진(그림)을 연속으로 보여주면 이것이 따로 따로 독립된 사진(그림)으로 느껴지는 것이 아니라 자연스럽게 움직이는 동영상처럼 보이게 되는 것을 말합니다.<br />
위 4개의 FND 디스플레이를 굉장히 짧은 시간 동안 연속적으로 디스플레이하게 되면 (1초에 30번 이상 디스플레이 되는 정도의 속도) 사람은 잔상효과에 의하여 위 FND에 디스플레이된 형태를 아래와 같이 느끼게 되는 것입니다.</p>
<p><img class="size-full wp-image-29717 aligncenter" alt="31 아두이노 DIY 18" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-18.jpg" width="207" height="77" /></p>
<p>아하, 그러면 표현하고 싶은 글자를 돌아가면서 디스플레이 하되, 1초에 30번 이상 반복하여 디스플레이되도록 하면 해결이 되는 것이네요. 예. 맞습니다.</p>
<p><span style="color: #ffffff; font-size: medium; background-color: #008000;"><strong>   ■ 시한폭탄 카운트다운 계수기     </strong></span></p>
<p>4-digit FND에 숫자를 표현하는 방법을 알았으므로 이제 드디어 우리가 만들고 싶은 물건을 DIY해 볼 시간입니다. 첫번째 DIY는 전쟁 영화, 액션 영화에 자주 나타나는 아래와 같이 생긴 [시한폭탄 카운트다운 계수기]로 하지요.</p>
<p><img class="size-full wp-image-29718 aligncenter" alt="31 아두이노 DIY 19" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-19.jpg" width="407" height="223" /><br />
생긴게 무서워서 어떻게 해야 할 지 아무런 생각이 나지 않는다구요?<br />
하~ 그럴지도… 저도 생각이 잘 …<br />
실감나게 한다고 이 예를 생각해 내긴 하였지만, 사실 뒤에 있는 폭탄을 제거하고 나면 그냥 정해진 숫자가 하나씩 줄어드는 카운트다운 계수기입니다. 조금 어려울 수는 있지만 당연히 4-digit FND로 구현이 가능합니다. 그러면, 무엇을 만들지 기능 규격을 먼저 정확하게 정의하고 회로 설계와 스케치 프로그램에 들어가도록 하겠습니다.</p>
<p><span style="font-size: small;"><strong>[기능 규격]</strong></span></p>
<p>· 4-digit FND로 분과 초를 디스플레이하며, 앞의 2 digit은 분, 뒤의 두 digit은 초를 나타내고, 2번째 digit은 점(dp, dot point)를 함께 디스플레이한다.<br />
· 1초마다 디스플레이는 1초 감소하고 00.00이 되면 멈춘다.<br />
· 전원이 입력되면 초기값은 05.00이고 카운트다운이 시작된다.<br />
· 스위치(SW)가 1개 있어 스위치를 한 번 누르면 카운트다운이 정지되고 한 번 더 누르면 다시 카운트다운이 진행된다. (더 누르면 앞의 동작 반복)</p>
<p><span style="font-size: small;"><strong>[연결도]</strong></span></p>
<p>자, 이제까지 배운 내용을 가지고 FND와 SW를 아두이노에 연결해 보도록 하겠습니다. FND의 A~DP 신호는 순서대로 아두이노의 D2~D9핀에 할당하도록 하겠습니다. COM 신호 4개도 순서대로 D10~D13핀에 할당합니다. (FND의 가장 오른쪽 초 단위 digit을 결정하는 COM핀을 D10에 할당) SW는 디지털 입력이므로 디지털핀에 연결하여야 하는데 자세히 보니, D0핀 및 D1핀만 남아있네요. 여기다가 연결하는 것도 방법이긴 하나, 보통 D0핀과 D1핀은 UART(Univeral Asynchronous Receiver/Transmitter) 통신시 RX(Receive) 및 TX(Transmit) 핀으로 사용되므로 시리얼통신을 사용하게 되는 경우에 대비하여 사용하지 않고 남겨 놓는 것이 보통입니다. 그래서 우리는 A5핀을 스위치핀으로 사용하도록 하겠습니다. 어? 그런데 아날로그핀도 디지털핀으로 사용할 수 있나요? 예, 보통은 잘 사용하지 않지만 사실 A0~A5 신호는 아날로그 입력 신호뿐만 아니라 디지털 입출력 신호로도 사용이 가능합니다. 이 경우 A0~A5는 각각 D14~D19로 매핑이 되므로 프로그램 시 주의하셔야 합니다.</p>
<p>스위치에 풀업 저항을 달아 평상시는 ‘1’이 되도록 하고, 스위치를 누르면 ‘0’이 되도록 로직을 꾸미고 A5(D19)핀에 연결하겠습니다. 모두 연결하면 아래와 같은 형태가 되겠네요.</p>
<p><img class="size-full wp-image-29719 aligncenter" alt="31 아두이노 DIY 20" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-20.jpg" width="589" height="470" /></p>
<p><span style="font-size: small;"><strong>[알고리즘]</strong></span></p>
<p>이제 어떻게 스케치 프로그램을 작성하여야 할지 알고리즘을 먼저 작성해 봅시다.<br />
처음에 카운트다운할 초 단위 시간을 count 라는 변수에 넣어놓고(count = 300), 이것을 1초마다 1씩 감소시키면서 이 값에 해당되는 분, 초를 계산하고 이것이 4개의 FND로 디스플레이하면 되겠습니다. 물론 디스플레이 할 때마다 한 번씩은 스위치가 눌러졌는지도 확인하여야 하겠지요. 스위치가 눌러졌다면 정지하여야 하니까요.<br />
이전에 배운 방법으로 간단하게 표현하여 보도록 하겠습니다. 아래와 같이 되겠네요.</p>
<p>자, 그럼 프로그램을 작성해 보실까요.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define FND_A 2 // 핀 매치, A는 2번핀<br />
#define FND_DP 9 // 핀 매치, DP는 9번핀<br />
#define FND_COM0 10 // 핀 매치, COM0(가장 오른쪽 FND)는 10번핀<br />
#define FND_COM3 13 // 핀 매치, COM3(가장 왼쪽 FND)는 13번핀<br />
#define SW 19 // 핀 매치, SW는 A5(D19)핀<br />
#define GO 0 // stopFlag의 GO 상태</p>
<p>int count; // 현재 카운트다운 값(초기값 = 300(초))<br />
int stopFlag = GO; // 스위치가 눌려졌는지 판단하는 플래그<br />
byte digit[10] = {0x3F, 0&#215;06, 0x5B, 0x4F, 0&#215;66, 0x6D, 0x7D, 0&#215;27, 0x7F, 0x6F}; // 숫자 0, 1, 2, …, 9 까지의 10개에 대한 LED 디스플레이 어레이<br />
byte fnd[4]; // byte = unsigned char</p>
<p>void setup()<br />
{<br />
int i;</p>
<p>for (i=FND_A; i&lt;=FND_DP; i++)// 핀 번호가 연속적으로 할당되어 있으므로 가능<br />
pinMode(i, OUTPUT); // FND 데이터는 pin2 ~ 9 까지 모두 출력<br />
for (i=FND_COM0; i&lt;=FND_COM3; i++) // 핀 번호가 연속적으로 할당되어 있으므로 가능<br />
pinMode(i, OUTPUT); // FND 선택신호는 pin10 ~ 13 까지 모두 출력<br />
pinMode(SW, INPUT); // SW 선택신호는 pin19 로 입력<br />
count = 300; // 카운트다운 초기값, 300초=5분<br />
}</p>
<p>void loop()<br />
{<br />
int min10, min1, sec10, sec1, i;</p>
<p>min10 = (count/60)/10; // 분의 10자리는 분 값을 10으로 나눈 몫 값<br />
min1 = (count/60)%10; // 분의 1자리는 분 값을 10으로 나눈 나머지 값<br />
sec10 = (count%60)/10; // 초의 10자리는 초 값을 10으로 나눈 몫 값<br />
sec1 = (count%60)%10; // 초의 1자리는 초 값을 10으로 나눈 나머지 값<br />
for (i=0; i&lt;100; i++) // 1초 동안 현재 시간을 FND에 디스플레이 (100번 x 10ms = 1초)<br />
{<br />
displayFnd(min10, min1, sec10, sec1); // FND 디스플레이 함수, 1번 실행시간은 약 10ms<br />
if (digitalRead(SW) == 0) // 스위치를 눌려졌으면<br />
stopFlag = ~stopFlag; // STOP이면 GO, GO면 STOP으로 상태 변경, 스위치를 누를 때마다 상태가 변경(toggle)됨<br />
}<br />
if ((count != 0) &amp;&amp; (stopFlag == GO))<br />
count&#8211;; // 카운트가 0이 아니고 GO 상태이면 카운트 1 감소하고, 그렇지 않으면 카운트 정지!!!<br />
}</p>
<p>void displayFnd(int val1, int val2, int val3, int val4) // FND 디스플레이 함수, 1번 실행시간은 약 100ms<br />
{<br />
int i, j, k, l;</p>
<p>fnd[3] = digit[val1]; // 10분 단위 값에 해당되는 FND 디스플레이 값<br />
fnd[2] = digit[val2] | 0&#215;80; // 1분 단위 값에 해당되는 FND 디스플레이 값<br />
// 소수점이 찍히므로 0&#215;80(dp) 을 OR 해 줌<br />
fnd[1] = digit[val3]; // 10초 단위 값에 해당되는 FND 디스플레이 값<br />
fnd[0] = digit[val4]; // 1초 단위 값에 해당되는 FND 디스플레이 값<br />
for (i=0; i&lt;=3; i++) // 각 FND에 대하여<br />
{<br />
for (k=0; k&lt;=3; k++)<br />
{<br />
if (k==i)<br />
digitalWrite(k+10, LOW); // 정해진 FND만 선택하여 활성화시킴<br />
else<br />
digitalWrite(k+10, HIGH); // 대응되지 않은 FND는 비활성화시킴<br />
}<br />
for (j=0; j&lt;=7; j++) // 지정된 FND내의 각 LED에 대하여<br />
{<br />
if (fnd[i] &amp; (1&lt;&lt;j))<br />
digitalWrite(j+2, HIGH); // 표시하고 싶은 숫자에 대응되는 핀만 ON<br />
else<br />
digitalWrite(j+2, LOW); // 대응되지 않은 핀은 OFF<br />
}<br />
delay(2.5); // 대기 시간 = 2.5ms, loop 실행 시간 = 2.5 x 4 = 10 ms<br />
}<br />
}</p>
</div>
displayFND( ) 함수 내에서 stopFlag를 체크하는 부분이 있는데, 이것은 스위치를 언제 누를 지 예측하기 어렵기 때문에 디스플레이하는 중에 지속적으로 체크하기 위하여 이 함수 내에 넣은 것이고, 스위치를 누를 때마다 정지와 진행을 반복하기 위하여 상태가 GO인 경우는 상태를 STOP으로, 상태가 STOP인 경우는 상태가 GO가 되도록 프로그램한 것입니다. 동일한 스위치를 누르는데, 누를 때마다 실행하는 동작이 달라져야 한다면, 이것은 보통 상태(state)를 정해서 처리하는 것이 편리하기 때문이지요. 상태(state) 처리의 개념은 조금은 어려운 개념이지만 많이 사용되는 개념이므로 추후 기회가 되면 한 번 더 자세하게 설명하도록 하겠습니다. (참고로, 스위치를 누르는 동작이 잘 안될 수도 있는데, 이것은 바운싱(bouncing) 현상에 의한 것입니다. 스위치 접점이 떨어졌다 붙었다 하는 것인데, 이것도 개념이 조금 어려우므로 일단 그냥 넘어갑니다. 안되면 한 번 더 누르는 것으로 …)<br />
전체적으로 프로그램이 살짝 어려운 부분이 있고 길어졌지만, 코딩마다 코멘트를 넣었으니 차근차근 보시면 이해가 되실 거라고 믿습니다.<br />
자, 이제 실행시켜 보겠습니다.</p>
<p>성공일까요? 예, 당근 성공이지요. 왜냐하면 사실은 코딩 ▶ 컴파일 ▶ 업로드 ▶ 결과체크 ▶ 에러!!! ▶ … 수정 ▶ … ▶ 또 수정 ▶ … 이렇게 해서 다 잘되는 것 확인하고 올린 프로그램이니까요. 저도 한 번에 성공할 수는 없습니다.</p>
<p><img class="size-full wp-image-29720 aligncenter" alt="31 아두이노 DIY 21" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-21.jpg" width="602" height="358" /></p>
<p>1개를 완성하였으니, 일단 잠깐 휴식을 취하고, 잠시 후에 2번째 DIY에 도전해 보겠습니다. 모두 10분간 휴식~!</p>
<p><span style="color: #ffffff; font-size: medium; background-color: #008000;"><strong>   ■ 아날로그 신호    </strong></span></p>
<p>두번째 DIY 작품을 만들기 위하여는 아날로그에 대한 이해가 필요하므로 이것에 대하여 간단히 먼저 알아본 후 진행하겠습니다.<br />
아날로그(analog)는 디지털(digital)에 대응되는 말로, 연속적으로 변화하는 양을 일컫는 말입니다.<br />
디지털이 0과 1로 대변되는 것이고, 칼로 무 자르듯이 이것 아니면 저것, 양 아니면 음, 합격 아니면 탈락과 같이 똑 떨어지는 개념을 설명하는 단어라면, 아날로그는 0.7과 같이 똑 떨어지지 않고, 이것도 아니고 저것도 아니며, 조건부 합격 같이 딱 부러지게 구분하기 어렵고 경계가 모호한 개념을 설명하는 단어지요.<br />
그림으로 그려보면 아래와 같이 되는데… 뭔가 디지털은 인공적이고 딱딱한 느낌이, 아날로그는 자연적이고 부드러운 느낌이 난다고나 할까요?</p>
<table style="width: 620px;" border="0">
<tbody>
<tr>
<td style="text-align: center;"><img class="alignnone size-full wp-image-29721" alt="31 아두이노 DIY 22" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-22.jpg" width="204" height="91" /></td>
<td><img class="alignnone size-full wp-image-29722 aligncenter" alt="31 아두이노 DIY 23" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-23.jpg" width="180" height="90" /></td>
</tr>
<tr>
<td style="text-align: center;">디지털</td>
<td style="text-align: center;">아날로그</td>
</tr>
</tbody>
</table>
<p>우리는 0, 1로 대표되는 디지털기기인 아두이노를 가지고 지금 놀고 있는데, 그렇다면 위와 같은 아날로그 값을 디지털 값을 이용하여 어떻게 표현할 수 있을지 생각해 보겠습니다?</p>
<p>아래 그림에서 빨강색으로 표시되어 있는 아날로그 값은 1비트의 디지털 값으로 나타낸다면 1이됩니다. 0 아니면 1로 표현해야 하니까 이렇게 되겠지요? 회색으로 표시된 범위에 있는 아날로그 값은 모두 디지털로 표현되었을 때 1이 되는 것이지요.</p>
<p><img class="size-full wp-image-29723 aligncenter" alt="31 아두이노 DIY 24" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-24.jpg" width="273" height="241" /><br />
이것을, 2비트의 디지털 값으로 나타낸다면 어떻게 될까요? 2비트면 4개의 단계로 나눌 수 있으니까 11이 되겠네요.</p>
<p><img class="size-full wp-image-29725 aligncenter" alt="31 아두이노 DIY 26" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-26.jpg" width="280" height="243" /></p>
<p>계속해서, 3비트의 디지털 값으로 이것을 나타낸다면? 예. 당근 110이 되겠습니다.<br />
눈치채셨겠지만 아날로그를 표현하는 디지털의 비트 수를 많이 사용하면 사용할수록 보다 정확하게 아날로그 값을 디지털로 표현할 수 있으며, 당연히 오차의 범위가 줄어듭니다. 하지만 디지털의 비트 수를 무한정 크게 할 수는 없으므로 적정한 선(8비트, 10비트, 12비트, 16비트, 24비트 등)에서 선택하게 됩니다.</p>
<p><span style="color: #ffffff; font-size: medium; background-color: #008000;"><strong>   ■ 아두이노의 아날로그 입력     </strong></span></p>
<p>그러면 아두이노는 어떤 아날로그 처리 능력을 가지고 있을까요? 예, 아두이노는 A0~A5 핀으로 입력된 0~5V 사이의 아날로그 입력(전압)을 10비트로 표현할 수 있는 능력을 내장하고 있습니다. 예를 들어 0V의 전압값을 갖는 신호를 아두이노는 0000000000 값으로 표현하고 5V의 전압값을 갖는 신호는 1111111111 값으로 표현합니다. 0V~5V 사이의 입력을 0~1023까지 1024 단계의 디지털 값으로 표현하는 것입니다. 1V는 1024/5 값에 해당되므로 임의의 값 XV에 해당되는 값은 X*1024/5 의 디지털 값이 되는 것이므로, 간단히 말해서 입력된 아날로그값에 1024/5 값을 곱해주면 변환된 디지털 값을 아래와 같이 구할 수 있겠습니다.</p>
<table style="width: 620px;" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>A0~A5 핀으로 입력된 아날로그 값</td>
<td>변환된 디지털 값 (10비트)</td>
</tr>
<tr>
<td>0 V</td>
<td>1024/5 * 0 = 0</td>
</tr>
<tr>
<td>5 V</td>
<td>1024/5 * 5 = 1024 ▶ 1023<br />
(1023이 최대이므로 5V는 1023으로 처리)</td>
</tr>
<tr>
<td>2.5 V</td>
<td>1024/5 * 2.5 = 512</td>
</tr>
<tr>
<td>4.5 V</td>
<td>1024/5 * 4.5 = 921.6 ▶ 921 (정수값으로만 표현되므로)</td>
</tr>
</tbody>
</table>
<p>이번에는 반대로 10비트로 변환된 디지털 값의 실제 아날로그값은 얼마인지를 구해 보겠습니다.</p>
<p>디지털로 표현된 1의 값이 5/1024 V를 나타내므로 Y라는 디지털 값을 가진 신호의 원래 아날로그값은 5/1024 * Y V가 되어 아래와 같이 되겠습니다.</p>
<table style="width: 620px;" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>디지털 값</td>
<td>10진수</td>
<td>아날로그 값</td>
<td>실제 아날로그 값(범위)</td>
</tr>
<tr>
<td>0000000000</td>
<td>0</td>
<td>5/1024 * 0 = 0</td>
<td>5/1024 * 0 이상 ~ 5/1024 * 1 미만</td>
</tr>
<tr>
<td>1111111111</td>
<td>1023</td>
<td>5/1024 * 1023<br />
= 4.995</td>
<td>5/1024 * 1023 이상 ~<br />
5/1024 * 1024 미만 (5 포함)</td>
</tr>
<tr>
<td>1000000000</td>
<td>512</td>
<td>5/1024 * 512 = 2.5</td>
<td>5/1024 * 512 이상 ~<br />
5/1024 * 513 미만</td>
</tr>
<tr>
<td>0000000100</td>
<td>8</td>
<td>5/1024 * 8 = 0.039</td>
<td>5/1024 * 8 이상 ~ 5/1024 * 9 미만</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><span style="font-size: medium; color: #ffffff; background-color: #008000;"><strong>   ■ 디지털 전압계     </strong></span></p>
<p>이제 기초 준비가 되었으니 2번째 DIY 작품을 만들어 볼 시간입니다. 이번에는 건전지나 리튬전지 등의 전압을 측정하여 FND에 디스플레이해 주는 디지털 전압계를 만들어 보겠습니다. 기능 규격부터 먼저 정확하게 정의하고 회로 설계와 스케치 프로그램으로 넘어가는 것이 좋겠네요.</p>
<p><strong>[기능 규격]</strong></p>
<p>· A5로 입력되는 아날로그 전압을 측정하여 이것을 4-digit FND에 소수 둘째자리까지 표현한다. 물론, 소수점도 표시한다.<br />
· FND는 오른쪽 정렬 형태로 나타낸다. 즉, 가장 왼쪽의 FND는 사용하지 않고 2~4번째에 값을 표시한다.<br />
· 측정 주기 즉, FND의 디스플레이 업데이트 주기는 약 0.5초로 한다.</p>
<p>A5의 아날로그값을 읽어서 이것을 전압값으로 소수 둘째자리까지 변환한 후 정수 부분은 왼쪽에서 2번째 FND에 표현하고(소수점 포함), 소수 첫째자리 숫자는 3번째 FND에, 소수 둘째자리는 3번째 FND에 표현하면 될 것 같습니다. 즉, 크게 2단계로 나누어서 1단계는 변환된 전압값의 각 자리에 맞는 숫자를 구하고, 2단계는 이 숫자를 FND에 디스플레이하면 되겠네요. 각 단계별로 세부적인 해결책을 찾아봅시다.</p>
<p><strong>[회로 연결]</strong></p>
<p>FND.의 연결은 카운트다운 계수기에서 스위치 회로만 제거한 후, 측정하고자 하는 건전지의 (+)극을 아두이노의 A5핀에, 건전지의 (-)극을 아두이노의 GND핀에 연결하면 되겠습니다. 아래와 같이 되겠네요.</p>
<p><img alt="31 아두이노 DIY 27" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-27.jpg" width="425" height="485" /></p>
<p><strong>[알고리즘]</strong></p>
<p>준비가 되었으니 스케치 프로그램을 어떻게 작성하여야 할지 알고리즘을 작성해 보겠습니다.<br />
우리는 디지털 값을 출력할 때 digitalWirte( ) 함수를 사용하였고, 디지털 값을 입력할 때는 digitalRead( ) 함수를 사용하였습니다. 이번에는 아날로그 값을 입력하여야 하므로… 예, 맞습니다. analogRead( ) 함수를 사용하겠습니다. 이 함수는 아날로그값을 0~1023까지의 디지털 값으로 바꿔주는 함수이며, 아래와 같은 형태를 갖습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>analogRead(pin)<br />
pin : 아날로그 입력핀 번호에 해당하는 숫자<br />
return값 : 0~1023까지의 정수</p>
</div>
<p>analogRead( ) 함수를 이용하여 읽어온 건전지의 전압은 0~1023까지의 값이므로 이것을 실제 아날로그 값인 0~5까지의 값인 X.YZ 형태의 숫자로 치환하여 이것을 FND에 순서대로 디스플레이하면 되겠네요 숫자가 5를 넘지 않으므로 첫번째 FND는 항상 0을 디스플레이하면 되겠죠?<br />
FND에 디스플레이할 숫자를 구하는 방법만 조금 더 상세하게 설명하면 다음과 같습니다.</p>
<p style="padding-left: 30px;">· 아날로그 값(A0)을 전압값(anal_vol)으로 바꾸는 방법<br />
: anal_vol = A0 / 1024.0 * 5.0<br />
· anal_vol에서 정수 부분을 추출하는 방법<br />
: (anal_vol)을 float에서 int로 형 변환<br />
· anal_vol에서 소수 첫째 자리를 추출하는 방법<br />
: (anal_vol * 10)을 int로 형 변환 후 10으로 나눈 나머지를 선택<br />
· anal_vol에서 소수 둘째 자리를 추출하는 방법<br />
: (anal_vol * 100)을 int로 형 변환 후 10으로 나눈 나머지를 선택</p>
<p>FND에 디스플레이할 숫자가 정해진 상태에서 이것을 디스플레이하는 방법은 [카운트다운 계수기]를 스케치할 때 사용한 displayFND( ) 함수를 그대로 사용하면 되니 실제로 새로 프로그램할 양은 얼마 되지 않습니다.<br />
자, 그러면 이제 모든 준비가 끝났으니 위의 사항을 종합하여 스케치 작성에 들어가 봅시다. 혼자 하실 수 있는 분은 스스로 작성해 보시구요.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#define FND_A 2 // 핀 매치, A는 2번핀<br />
#define FND_DP 9 // 핀 매치, DP는 9번핀<br />
#define FND_COM0 10 // 핀 매치, COM0(가장 오른쪽 FND)는 10번핀<br />
#define FND_COM3 13 // 핀 매치, COM3(가장 오른쪽 FND)는 13번핀<br />
#define VOLTAGE 5 // 핀 매치, VOLTAGE는 A5핀</p>
<p>byte digit[10] = {0x3F, 0&#215;06, 0x5B, 0x4F, 0&#215;66, 0x6D, 0x7D, 0&#215;27, 0x7F, 0x6F}; // 숫자 0, 1, 2, …, 9 까지의 10개에 대한 LED 디스플레이 어레이<br />
byte fnd[4]; // byte = unsigned char</p>
<p>void setup()<br />
{<br />
int i;</p>
<p>for (i=FND_A; i&lt;=FND_DP; i++) // 핀 번호가 연속적으로 할당되어 있으므로 가능<br />
pinMode(i, OUTPUT); // FND 데이터는 pin2 ~ 9 까지 모두 출력<br />
for (i=FND_COM0; i&lt;=FND_COM3; i++) // 핀 번호가 연속적으로 할당되어 있으므로 가능<br />
pinMode(i, OUTPUT); // FND 선택신호는 pin10 ~ 13 까지 모두 출력<br />
}</p>
<p>void loop()<br />
{<br />
int anal_val, vol_int, vol_pri1, vol_pri2, i;<br />
float voltage;</p>
<p>anal_val = analogRead(VOLTAGE); // 입력된 아날로그 측정 값(0~1023)<br />
voltage = anal_val / 1024.0 * 5.0; // 변환된 전압 값 (0.0 ~ 4.99)<br />
vol_int = (int)(voltage); // 전압값의 정수 부분 숫자 (0~4), 형변환<br />
vol_pri1 = (int)(voltage * 10) % 10; // 전압값의 소수 첫째자리 숫자 (0~9), 형변환<br />
vol_pri2 = (int)(voltage * 100) % 10; // 전압값의 소수 둘째자리 숫자 (0~9), 형변환<br />
for (i=0; i&lt;50; i++) // 0.5초 동안 현재 시간을 FND에 디스플레이 (50번 x 10ms = 1초)<br />
displayFnd(0, vol_int, vol_pri1, vol_pri2); // FND의 가장 왼쪽값은 0으로 디스플레이하고, 오른쪽 3개 값은 측정값을 디스플레이 (숫자 전달)<br />
}</p>
<p>void displayFnd(int val1, int val2, int val3, int val4) // FND 디스플레이 함수, 1번 실행시간은 약 100ms<br />
{<br />
int i, j, k, l;</p>
<p>fnd[3] = digit[val1]; // 10자리 정수 값에 해당되는 FND 디스플레이 값<br />
fnd[2] = digit[val2] | 0&#215;80; // 1자리 정수 값에 해당되는 FND 디스플레이 값<br />
// 소수점이 찍히므로 0&#215;80(dp) 을 OR 해 줌<br />
fnd[1] = digit[val3]; // 소수 첫째자리 값에 해당되는 FND 디스플레이 값<br />
fnd[0] = digit[val4]; // 소수 둘째자리 값에 해당되는 FND 디스플레이 값<br />
for (i=0; i&lt;=3; i++) // 각 FND에 대하여<br />
{<br />
for (k=0; k&lt;=3; k++)<br />
{<br />
if (k==i)<br />
digitalWrite(k+10, LOW); // 정해진 FND만 선택하여 활성화시킴<br />
else<br />
digitalWrite(k+10, HIGH); // 대응되지 않은 FND는 비활성화시킴<br />
}<br />
for (j=0; j&lt;=7; j++) // 지정된 FND내의 각 LED에 대하여<br />
{<br />
if (fnd[i] &amp; (1&lt;&lt;j))<br />
digitalWrite(j+2, HIGH); // 표시하고 싶은 숫자에 대응되는 핀만 ON<br />
else<br />
digitalWrite(j+2, LOW); // 대응되지 않은 핀은 OFF<br />
}<br />
delay(2.5); // 총 대기 시간 = 2.5ms, loop 실행 시간 = 2.5 x 4 = 10 ms<br />
}<br />
}<br />
</div>
<p>아주 간단하지요? 이제 업로드해서 결과를 확인해 보겠습니다.<br />
결과 확인!</p>
<p><img class="alignnone size-full wp-image-29727" alt="31 아두이노 DIY 28" src="http://www.ntrexgo.com/wp-content/uploads/2015/07/31-아두이노-DIY-28.jpg" width="602" height="417" /></p>
<p>조금 사용한 AA 건전지 1개를 측정한 값이 1.4V 근처값이 나오므로 제대로 측정이 되는 것 같습니다. 정확하게 동작하는지를 확인하기 위하여 A5 핀을 VCC(+5V)에 연결하여 5.00 또는 4.99 값이 나타나고, GND 핀에 연결하여 0.00 또는 0.01 정도의 값이 나타나는지도 확인하면 더욱 완벽한 확인이 되겠지요. 제대로 나오는 것을 보니 이번 것은 누워서 떡먹기로 성공한 것 같습니다.<br />
뭐, 살다보면 어려운 날도 있고 쉬운 날도 있고&#8230; 흥망성쇠(興亡盛衰)… 새옹지마(塞翁之馬)…<br />
자, 오늘은 여기까지입니다. FND를 이용한 DIY는 전체적으로 연결선도 조금 복잡하고 프로그램도 조금 어려웠던 것 같은데… 함께한 여러분이 수고 많이 하셨습니다. 모두 다 피곤한 듯하니 오늘은 군소리 말고 빨리 사라져야겠네요. 그럼 다음 강의 때까지 모두 안녕~~~~ 휘리릭~~~</p>
<div class="symple-box green none" style="text-align:left; width:100%;"> 
[과제-FND-1]
1/100초 마다 숫자가 1씩 올라가서 최대 99.99초까지 시간을 잴 수 있는 초시계를 만들어 보세요.</p>
</div>
<div class="symple-box green none" style="text-align:left; width:100%;"> 
[과제-FND-2]
가변저항을 움직임에 따라 0.00~5.00까지의 값이 순차적으로 출력되도록 하는 디지털전압계 회로를 꾸미고 가변저항을 움직이면서 값이 변하는지 확인해 보세요.</p>
</div>
<p>&nbsp;</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
[해답-FND-1]
void loop()<br />
{<br />
int sec10, sec1, ms100, ms10, i;</p>
<p>sec10 = (count/100)/10; // 분의 10자리는 분 값을 10으로 나눈 몫 값<br />
sec1 = (count/100)%10; // 분의 1자리는 분 값을 10으로 나눈 나머지 값<br />
ms100 = (count%100)/10; // 초의 10자리는 초 값을 10으로 나눈 몫 값<br />
ms10 = (count%100)%10; // 초의 1자리는 초 값을 10으로 나눈 나머지 값<br />
displayFnd(sec10, sec1, ms100, ms10); // FND 디스플레이 함수, 1번 실행시간은 약 10ms(1/100초)<br />
if (count == 10000) // 99.99 다음은 00.00<br />
count = 0;<br />
else<br />
count++; // 1/100초 증가<br />
}</p>
<p>· loop( ) 함수 외의 코딩은 [디지털 전압계] 스케치와 동일하므로 생략!<br />
</div>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
[해답-FND-2]
디지털전압계 회로에서 가변저항의 3 단자를 한쪽 끝은 5V, 다른 한쪽 끝은 GND에 연결하고 중간의 \ 단자는 아두이노 아날로그 입력핀인 A5에 연결함</p>
<p>· 다른 회로 연결은 [디지털 전압계] 회로 연결과 동일하고, 스케치는 그대로 사용<br />
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/29614/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[28호]자동차 번호 표시기 만들기</title>
		<link>http://www.ntrexgo.com/archives/27577</link>
		<comments>http://www.ntrexgo.com/archives/27577#comments</comments>
		<pubDate>Thu, 01 Jan 2015 09:50:39 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[28호]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=27577</guid>
		<description><![CDATA[디바이스마트 매거진 28호 &#124; 한 대의 차량으로 가족이나 직장 등 여러 사람이 운행하는 경우에는 매번 다른 전화번호를 적어두어야 하니 불편할 수 있다. 운행하는 사람이 바뀌더라도 전화번호를 메모리 해두었다가 쉽게 교체할 수 있고 주차난이 가장 극심한 저녁때 가독성까지 높여주니 일석이조인 주차번호 표시판을 만들어보자.]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27663" alt="28 PTB" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB.jpg" width="620" height="341" /></a></p>
<p><span style="font-size: medium"><strong>엄마, 아빠, 내 전화번호를 쉽게 바꾸자!</strong></span></p>
<p><span style="color: #008000"><strong><span style="font-size: x-large">자동차 번호 표시기 만들기</span></strong></span></p>
<p>&nbsp;</p>
<p style="text-align: right">글 | 이민주 객원기자 itstyle@itstyle.kr</p>
<p>1997년 자동차 천만대 시대가 열린 이후 17년이 지난 지금 자동차 등록대수는 인구 2.5명당 1대꼴이며 2014년 말에 2000만 대를 돌파한다고 한다. 급속도로 도시화가 되고 인구가 밀집되면서 도시에는 출퇴근 시간만 되면 교통난에 몸살을 앓고 있다. 주차난 역시 마찬가지.<br />
도시에서는 자유롭게 주차할 수 있는 곳이 적으며 팍팍해진 인심까지 더해져 남의 집 앞 또는 상가에 정차했다가는 견인되거나 불법 주정차 고지서를 받기 마련이다. 그래서 임시로 정차했거나 다른 차를 막은 상태로 주차한 경우 등 차를 이동해 주어야 할 상황을 위해 전화번호를 남기는데 대충 우편봉투에 전화번호를 적어 대시 보드에 올려놓거나 아크릴판 위에 스티커를 붙여 유리에 부착해놓는 경우가 많다.<br />
또한 한 대의 차량으로 가족이나 직장 등 여러 사람이 운행하는 경우에는 매번 다른 전화번호를 적어두어야 하니 불편할 수 있다. 운행하는 사람이 바뀌더라도 전화번호를 메모리 해두었다가 쉽게 교체할 수 있고 주차난이 가장 극심한 저녁때 가독성까지 높여주니 일석이조인 주차번호 표시판! <em>Do It Yourself~!</em></p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>품명</td>
<td>종류·용도</td>
<td>필요 수량</td>
<td>단가</td>
<td>합계</td>
</tr>
<tr>
<td>ATMEGA8A-PU</td>
<td>CPU</td>
<td>1</td>
<td>1,700</td>
<td>1,870</td>
</tr>
<tr>
<td>MBI5026CN</td>
<td>LED 정전류 제어</td>
<td>1</td>
<td>1,500</td>
<td>1,650</td>
</tr>
<tr>
<td>LM2576-5.0</td>
<td>5V 공급</td>
<td>1</td>
<td>800</td>
<td>880</td>
</tr>
<tr>
<td>IRFD9110PBF</td>
<td>LED 공통선 제어</td>
<td>4</td>
<td>1,000</td>
<td>4,400</td>
</tr>
<tr>
<td>RING COIL 15파이(100uH)</td>
<td>전원리플방지</td>
<td>1</td>
<td>320</td>
<td>352</td>
</tr>
<tr>
<td>Mono Cap 0.1uF Y5V 50VMono Cap 0.1uF Y5V 50V</td>
<td>전원 리플 방지</td>
<td>4</td>
<td>30</td>
<td>132</td>
</tr>
<tr>
<td>Ceramic 22pF, 50V</td>
<td>주파수 리플 방지</td>
<td>2</td>
<td>15</td>
<td>33</td>
</tr>
<tr>
<td>RS232 실드케이블-4C(1M) + 미니수축튜브(사은품)</td>
<td>전원 연결</td>
<td>2</td>
<td>720</td>
<td>1,584</td>
</tr>
<tr>
<td>X-TAL 7.3728M (ATS Type) Fundamental</td>
<td>크리스탈</td>
<td>1</td>
<td>190</td>
<td>209</td>
</tr>
<tr>
<td>1/8W 5% Axial Resistor 223J (22KΩ)</td>
<td>전류제한, 저항</td>
<td>8</td>
<td>10</td>
<td>88</td>
</tr>
<tr>
<td>1/8W 5% Axial Resistor 681J (680Ω)</td>
<td>전류제한, 저항</td>
<td>2</td>
<td>10</td>
<td>22</td>
</tr>
<tr>
<td>1/8W 5% Axial Resistor 471J (470Ω)</td>
<td>전류제한, 저항</td>
<td>2</td>
<td>10</td>
<td>22</td>
</tr>
<tr>
<td>S-5462ASR2/C</td>
<td>전화번호 표시</td>
<td>4</td>
<td>1,300</td>
<td>5,720</td>
</tr>
<tr>
<td>NTC-20KGJG</td>
<td>온도측정</td>
<td>1</td>
<td>250</td>
<td>275</td>
</tr>
<tr>
<td>원통평면 투명 LED 3파이-녹색</td>
<td>녹색 LED</td>
<td>1</td>
<td>10</td>
<td>11</td>
</tr>
<tr>
<td>원통평면형-3파이 투명 LED(빨강)</td>
<td>적색 LED</td>
<td>1</td>
<td>10</td>
<td>11</td>
</tr>
<tr>
<td>1N4004</td>
<td>역전류 보호</td>
<td>3</td>
<td>12</td>
<td>40</td>
</tr>
<tr>
<td>1N4148</td>
<td>LED 역전류 보호</td>
<td>2</td>
<td>12</td>
<td>26</td>
</tr>
<tr>
<td>1N5819</td>
<td>쇼티키 다이오드</td>
<td>1</td>
<td>50</td>
<td>55</td>
</tr>
<tr>
<td>5267-04 (색상옵션)</td>
<td>전원 커넥터</td>
<td>1</td>
<td>70</td>
<td>77</td>
</tr>
<tr>
<td>5264-04 (색상옵션)</td>
<td>전원 커넥터</td>
<td>1</td>
<td>60</td>
<td>66</td>
</tr>
<tr>
<td>5264용클림프</td>
<td>전원 커넥터</td>
<td>2</td>
<td>30</td>
<td>66</td>
</tr>
<tr>
<td>CDS 빛 감지 센서 초소형 9P5-C</td>
<td>디밍 기능</td>
<td>1</td>
<td>250</td>
<td>275</td>
</tr>
<tr>
<td> DC인체감지센서모듈 NT0061</td>
<td>움직임 감지</td>
<td>1</td>
<td>8,100</td>
<td>8,910</td>
</tr>
<tr>
<td>ITS-1105-11mm</td>
<td>누름버튼</td>
<td>1</td>
<td>50</td>
<td></td>
</tr>
<tr>
<td>퓨즈 5&#215;20-1A</td>
<td>과전류 보호</td>
<td>2</td>
<td>70</td>
<td></td>
</tr>
<tr>
<td>퓨즈홀더 FH-201 (빨강색)</td>
<td>과전류 보호</td>
<td>1</td>
<td>500</td>
<td></td>
</tr>
<tr>
<td>RIC-DIP-28핀(좁은타입)</td>
<td>IC 소켓</td>
<td>1</td>
<td>400</td>
<td></td>
</tr>
<tr>
<td>RIC-DIP-24핀(좁은타입)</td>
<td>IC 소켓</td>
<td>2</td>
<td>340</td>
<td></td>
</tr>
<tr>
<td>NS-USB2UART03 (USB to UART 통신 모듈)</td>
<td>통신모듈</td>
<td>1</td>
<td>7,500</td>
<td></td>
</tr>
<tr>
<td>2T 암적(반투명) 아크릴</td>
<td>전면 화면 필터</td>
<td>1</td>
<td>2,300</td>
<td></td>
</tr>
<tr>
<td>2T 포맥스(검정색)</td>
<td>제품 케이스</td>
<td>1</td>
<td>1,300</td>
<td></td>
</tr>
</tbody>
</table>
<p>※ 가격은 변동될 수 있습니다.<br />
※ 차량에 부착하기 위해 필요한 흡착고무, 지지대 등은 별도 준비하시기 바랍니다.</p>
<p>&nbsp;</p>
<p><span style="color: #ffffff;font-size: large;background-color: #ff0000"><strong>경고</strong></span></p>
<p><span style="color: #ff0000"><strong>자동차 용품을 자작할 경우 고온에 의해 만든 제품이 변형될 수 있으며 이물질이나 불량한 납땜, 차량 진동 등의 이유로 쇼트에 의해 차량 고장이나 화재가 발생하여 인적 물적 손해가 발생할 수 있다. 이러한 이유로 사고가 발생할 경우 보험금 지급이 거부당할 수 있으며 잡지사와 필자는 책임이 없으니 참고하도록 한다. 한 여름 뙤약볕에 자주 주차하는 경우 사용을 권장하지 않고, 이 경우 LCD로 된 제품(LCD로 만들어진 제품은 시중에 많다)이 더 적합할 수 있다.</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-2.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27665" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-2.jpg" width="620" height="412" /></a><br />
<span style="color: #008000"><strong>부품 목록</strong></span><br />
조립에 필요한 재료들이다. 유리에 부착할 때 필요한 흡착고무(또는 재사용 접착테이프 등)는 별도로 준비해야 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-3.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27666" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-3.jpg" width="620" height="412" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-4.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27667" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-4.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>PCB 자르기</strong></span><br />
만들어진 제품의 디자인을 구상하고 4자리 7-세그먼트 4개 크기에 맞추어 톱이나 기판 전용 절단기를 이용해 기판을 자른다.<br />
기판의 테두리가 거칠기 때문에 끌(야스리)이나 사포로 문질러 부드럽게 마무리한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-5.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27668" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-5.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>7세그먼트 삽입</strong></span><br />
잘라진 기판에 4자리 7-세그먼트를 삽입한다. 4자리 7-세그먼트를 4개 사용하였고 총 16자리를 표시하므로 전화번호를 충분히 표시할 수 있다. 7-세그먼트 크기가 너무 작으면 전화번호를 보기가 어려운데, 디바이스마트에서 판매하는 S-5462ASR2/C는 2~3M 거리에서도 충분히 볼 수 있는 크기라 사용하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-6.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27669" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-6.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>납땜하기</strong></span><br />
부품을 삽입할 때마다 납땜한다. 기판과 부품이 밀착되도록 손으로 고정한 상태에서 부품 양 끝을 납땜하여 고정한 후 나머지를 납땜하면 부품이 기판에서 떠있는 현상을 줄일 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-7.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27670" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-7.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>커넥터 삽입</strong></span><br />
자동차 용품은 한번 설치하면 탈거할 때 까지 탈부착할 일이 없어 저렴하고 3개핀 이상 연결할 수 있는 일반적인 몰렉스를 이용하였다.<br />
전원으로는 상시전원과 KEY ON전원, 접지 3가지 전선이 인입되어야 사용 가능하며, 서로 쇼트되지 않도록 주의한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-8.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27671" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-8.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>다이오드 삽입</strong></span><br />
전원이 거꾸로 흐르는 것을 방지하기 위해 다이오드를 삽입한다. LED와 레귤레이터에서도 다이오드가 사용된다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-9.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27672" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-9.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>레귤레이터 삽입</strong></span><br />
자동차는 12V 또는 24V를 사용하므로 5V를 공급하기 위해 5V 레귤레이터를 사용하였는데 스위칭 방식으로 발열이 적고 쉽게 구할 수 있는 LM2576-5.0 레귤레이터를 사용하였다. 다리 간격이 1.27mm로 매우 좁으므로 다리를 벌리거나 서로 다른 길이로 접어 기판에 끼우도록 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-10.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27673" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-10.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>인덕터 삽입</strong></span><br />
레귤레이터는 링 타입을 사용하였는데, 높이가 높아 기판을 2층으로 쌓기 어려움으로 눕혀 사용하거나 SMD타입의 인덕터를 사용한다.<br />
차량의 경우 운행할 때 진동에 의해 부품이 손상되는 경우가 많으므로 진동에 의해 움직이지 않도록 고정을 잘 하도록 한다. 고정할 때에는 내열성 테이프나 내열성 접착제 또는 물리적인 고정방법을 권장하며 실리콘은 녹아내릴 수 있으므로 이용하지 않아야 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-11.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27674" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-11.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전해콘덴서 삽입</strong></span><br />
전해 콘덴서를 삽입한다. LED를 제어할 때 순간 많은 전류를 소모할 수 있으므로 470uF이상의 용량을 사용한다.<br />
105℃콘덴서를 사용하여 고온에서도 잘 견디도록 하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-12.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27675" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-12.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>IC소켓 삽입</strong></span><br />
마이크로컨트롤러, LED드라이버와 같은 IC들을 쉽게 교체할 수 있도록 IC소켓을 사용하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-13.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27676" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-13.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>세라믹콘덴서 삽입</strong></span><br />
IC, 크리스탈과 가깝게 세라믹콘덴서를 달아준다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-14.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27677" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-14.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>크리스탈 삽입</strong></span><br />
7.3728MHz 크리스탈을 사용하였다. UART-USB컨버터를 이용해 전화번호를 수정할 것인데, UART 통신할 때 통신속도(baudrate)의 오차가 0%를 만들기 위해서는 7.3728MHz, 14.7456MHz와 같은 크리스탈을 사용하는 것이 좋다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-15.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27678" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-15.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>트렌지스터 삽입</strong></span><br />
P채널 FET를 드라이브하기 위해서 NPN트렌지스터를 사용하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-16.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27679" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-16.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>FET 삽입</strong></span><br />
포토커플러처럼 생겼지만 이러한 4pin DIP 모양으로 FET가 나오고 있다. FET가 4개가 사용되었는데 16개의 FND 중 4개씩 제어해준다. 1/4duty로 동작하도록 하여 밝게 동작한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-17.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27680" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-17.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>USB2UART 핀헤더 납땜하기</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-18.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27681" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-18.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>USB2UART 삽입</strong></span><br />
USB-UART 변환기를 기판에 고정할 수 있도록 핀헤더를 납땜하고 기판에 고정한다. PC에 접속하여 전화번호를 변경하거나 몇 가지 메시지 선택, 화면 전환효과 등을 설정할 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-19.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27682" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-19.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>텍트 스위치 삽입</strong></span><br />
텍트 스위치를 삽입한다. 여러 개의 전화번호를 저장할 수 있는데 스위치를 누를 때마다 전화번호를 바꿀 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-20.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27683" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-20.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>LED 삽입</strong></span><br />
LED를 삽입한다. 녹색과 적색 LED를 삽입하였다. 두 가지 LED로 상태를 알 수 있도록 하였다.</p>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td></td>
<td>녹색</td>
<td>적색</td>
</tr>
<tr>
<td>점등</td>
<td>KEY ON(운행, 대기상태)</td>
<td>해당 없음</td>
</tr>
<tr>
<td>빠르게 점멸</td>
<td>센서 감지 중(전화번호 표시)</td>
<td>과열 보호동작</td>
</tr>
<tr>
<td>느리게 점멸</td>
<td>작동 중(절전, 대기 상태)</td>
<td>과 방전 보호동작</td>
</tr>
<tr>
<td>소등</td>
<td>이상</td>
<td>정상</td>
</tr>
</tbody>
</table>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-21.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27684" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-21.jpg" width="620" height="412" /></a></p>
<p>&nbsp;</p>
<p><span style="color: #008000"><strong>서미스터 삽입</strong></span><br />
서미스터를 삽입한다. 서미스터는 온도에 따라 저항 값이 바뀌는 특성이 있다. 일정 온도(영상 65℃)가 올라가면 자동으로 작동이 멈추도록 프로그램 하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-22.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27685" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-22.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>배선하기 1</strong></span><br />
모든 부품을 삽입했으면 배선을 해준다.<br />
점프선이나 테프론 선의 피복을 벗겨 연결해주고 전원의 경우 굵게 연결해주도록 한다. 차량의 경우 진동이 심하여 배선이 움직이면 합선될 수 있으므로 잘 고정시키도록 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-23.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27686" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-23.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>배선하기 2</strong></span><br />
직접 연결하기 어려운 곳은 점퍼 선을 연결한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-24.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27687" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-24.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>배선하기 3</strong></span><br />
7세그먼트 부분과 메인 기판 부분 역시 테프론 선으로 연결한다. (여유 있게 배선하고 반으로 접어 사용한다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-25.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27688" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-25.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>적외선 센서 납땜</strong></span><br />
적외선 센서는 커넥터의 위치가 측면으로 향해 있어 케이스에 넣기 나쁨으로 직접 납땜하여 붙였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-26.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27689" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-26.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전선 피복 처리</strong></span><br />
차량 메인에서 전원을 따와야 하는데 필자는 운전을 거의 하지 않고 야외에 주차하는 경우가 없어 열 받지 않을 것이라 생각해 RS-232C통신용 케이블을 사용하였다. 만약 야외 주차가 많을 것으로 생각된다면 가급적 내열성이 있는 케이블을 사용하도록 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-27.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27690" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-27.jpg" width="620" height="444" /></a></p>
<p><span style="color: #008000"><strong>아크릴, 포멕스 자르기 1</strong></span><br />
케이스 제작에 필요한 아크릴 및 포멕스를 자른다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-28.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27691" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-28.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>아크릴, 포멕스 자르기 2</strong></span><br />
아크릴은 전용 커터칼로 흠집을 내 부러뜨려 잘라낸다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-29.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27692" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-29.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>접착제 바르기</strong></span><br />
센서가 전면에 튀어나오도록 할 예정이고 아크릴에 직접 부착하기 위해 순간접착제를 발랐다. (실리콘, 글루건은 열에 의해 녹을 수 있다.)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-30.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27693" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-30.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전면 아크릴에 센서 부착하기</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-31.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27694" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-31.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>펜형 접착제 이용하기</strong></span><br />
포멕스를 접을 수 없으므로 각 면끼리 잘라낸 후 붙인다. 이때도 순간접착제를 사용한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-32.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27695" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-32.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>몰렉스 조립하기</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-33.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27696" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-33.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>몰렉스 조립하기2</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-34.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27697" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-34.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>몰렉스 완성</strong></span><br />
몰렉스에 끼울 전선에 클렘프를 끼우고 제품에 끼울 수 있도록 만든다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-35.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27698" alt="28 PTB (35)" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-35.jpg" width="620" height="349" /></a></p>
<p><span style="color: #008000"><strong>시중에 파는 다양한 흡착고무들</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-36.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27699" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-36.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>흡착고무에 철사 끼우기</strong></span><br />
차량 유리에 부착하기 위해서는 흡착고무가 가장 편한 방법인 것 같다. 주변 천원마트나 다이소 같은 곳에서 흡착고무를 팔고 있으니 구매해 사용한다. 본체와의 고정은 디바이스마트에서 판매중인 “절연전선HIV”를 사용하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-37.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27700" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-37.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>퓨즈라인 연결하기</strong></span><br />
메인 전원에는 퓨즈를 삽입하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-38.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27701" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-38.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전원 따오기</strong></span><br />
차량 전체를 뜯어 전선에서 직접 연결하긴 사실상 어렵다. 퓨즈박스를 뜯어 전원을 빼오는 방법을 생각하였다. 전원은 두곳에서 따와야 한다. 상시 전원(BATTERY+)와 운행 전원(KEY ON) 두 개 모두 필요하다. 상시 전원에 연결해야만 시동을 껐을 때 차량 번호를 표시할 수 있는 것이고 시동을 켰을 때 반대로 제품의 전원을 꺼주기 위해 KEY ON전원도 필요한 것이다. 운행여부와 관계없이 항상 켜지길 원한다면 BATTERY+전원만 연결하면 된다. 못찾겠다면 사진처럼 멀티메터로 찍어보고 알아야만 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-39.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27702" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-39.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전원 따오기 2</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-40.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27703" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-40.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전원 따오기 3</strong></span><br />
퓨즈 다리에 전선을 묶은 뒤 퓨즈박스에 꽂으면 연결된다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-41.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27704" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-41.jpg" width="620" height="412" /></a></p>
<p><span style="color: #008000"><strong>전선 처리하기</strong></span><br />
전선이 눈에 거슬리면 안되므로 차량 몰딩 처리된 부분이나 틈에 넣어 깔끔하게 처리한다. 참고로 전선을 따오는 방법부터 처리하는 방법들은 “블랙박스 설치하는 법”, “하이패스 전원 연결” 등의 키워드로 검색하면 많은 도움을 받을 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-42.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27705" alt="28 PTB (42)" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-42.jpg" width="620" height="372" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-43.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27706" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-43.jpg" width="620" height="412" /></a></p>
<p>&nbsp;</p>
<p><strong style="color: #008000">유리에 부착하기</strong></p>
<p>사진 촬영을 위해 중간에 붙였지만 상단이나 하단 구석에 부착하도록 한다. 습기가 없도록 하고 가급적 실내가 따뜻한 상태에서 붙이는 것이 더욱 견고하게 부착되게 된다.</p>
<p><span style="color: #ffffff;background-color: #ff0000"><strong>결과</strong></span></p>
<p><span style="color: #ffffff;background-color: #ff0000"><strong><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-44.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27707" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-44.jpg" width="620" height="78" /></a></strong></span><br />
<span style="color: #008000"><strong>전화번호 표시</strong></span><br />
전화번호가 표시된 모습이다. 최대 10개까지 저장할 수 있고 고정 표시는 물론 메시지와 함께 교차 표시하면서 다양한 화면 전환 효과를 적용할 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-45.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27708" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-45.jpg" width="620" height="76" /></a></p>
<p><span style="color: #008000"><strong>메시지 1</strong></span><br />
현재 4가지 문장(인사말 등)을 넣어두었으며 이 중 원하는 문장을 골라 메시지 표시 기능도 갖는다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-46.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27709" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-46.jpg" width="620" height="74" /></a></p>
<p><span style="color: #008000"><strong>메시지 2</strong></span><br />
잠시 주차중일 때 전화번호와 함께 운전자의 미안한 마음도 전달할 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27663" alt="28 PTB" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB.jpg" width="620" height="341" /></a></p>
<p><span style="color: #008000"><strong>설치모습 1</strong></span><br />
차량 유리 상단에 설치한 모습이다. 상단은 자외선 차단용도로 생각되는 청색 코팅이 되어있어 빛 밝기가 떨어지고 적외선 센서가 움직임을 잘 감지하지 못하였다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-1.jpg" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27664" alt="28 PTB (1)" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-PTB-1.jpg" width="620" height="372" /></a></p>
<p><span style="color: #008000"><strong>설치모습 2</strong></span><br />
아래쪽에 설치했을 때에는 비교적 양호하게 움직임이 감지되었다. 그러나 차량 실내에서 봤을 때 거추장스러웠다. 룸밀러 바로 아래 설치하는 것이 보기 좋고 움직임 감지 센서의 성능도 좋아진 것 같다.</p>
<p><span style="color: #ffffff;background-color: #ff0000"><strong>참조1. 프로그램 굽기</strong></span><br />
AVR Studio 4.19버전을 이용해 프로그램을 구워보았다. 필자의 홈페이지 itstyle.kr/34628에서 zip파일을 내려받아 hex파일을 확인한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-000-MCU확인하기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27710" alt="참조1-000-MCU확인하기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-000-MCU확인하기-602x620.png" width="602" height="620" /></a></p>
<p><span style="color: #008000"><strong>MCU확인하기</strong></span><br />
ISP를 통해 MCU와 접속한 후 ATmega8A를 선택한 후 Read Signature를 눌러 칩이 올바른지 확인한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-001-MCU프로그램-굽기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27711" alt="참조1-001-MCU프로그램 굽기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-001-MCU프로그램-굽기-602x620.png" width="602" height="620" /></a></p>
<p><span style="color: #008000"><strong>MCU프로그램 굽기</strong></span><br />
[...] 버튼을 눌러 HEX파일을 불러온 후 Program을 누른다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-002-퓨즈비트-설정하기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27712" alt="참조1-002-퓨즈비트 설정하기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-002-퓨즈비트-설정하기-602x620.png" width="602" height="620" /></a></p>
<p><span style="color: #008000"><strong>퓨즈비트 설정하기</strong></span><br />
EESAVE, Brown-out detect at 4.0V, BODEN, Ext. Crystal High Freq.; Start-up time : 258CK, 4mS를 선택한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-003-프로그램-다운로드-하는-모습.jpg" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27713" alt="OLYMPUS DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조1-003-프로그램-다운로드-하는-모습-620x411.jpg" width="620" height="411" /></a></p>
<p><span style="color: #008000"><strong>프로그램 다운로드 하는 모습</strong></span><br />
제품과 PC를 연결하여 프로그램 다운로드 중인 모습. 처음 전원 인가 시 버튼을 누른 상태에서 인가하면 LED 테스트 모드로 진입하여 결선이 올바른지 검사한다.</p>
<p><span style="color: #ffffff;background-color: #ff0000"><strong>참조2. USB드라이버 설치하기</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-001-USB드라이버설치1.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27714" alt="참조2-001-USB드라이버설치1" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-001-USB드라이버설치1-620x451.png" width="620" height="451" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 1</strong></span><br />
장치관리자에서 “?” 물음표 뜬 항목의 우측 버튼을 클릭하여 “속성”을 누른다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-002-USB드라이버설치2.png" rel="lightbox[27577]"><img class="alignnone size-full wp-image-27715" alt="참조2-002-USB드라이버설치2" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-002-USB드라이버설치2.png" width="479" height="430" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 2</strong></span><br />
드라이버 업데이트를 눌러 설치모드로 들어간다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-003-USB드라이버설치3.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27716" alt="참조2-003-USB드라이버설치3" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-003-USB드라이버설치3-620x449.png" width="620" height="449" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 3</strong></span><br />
수동으로 설치하기(컴퓨터에서 드라이버 소프트웨어 찾아보기)를 누른다. 이 때 USB드라이버는 디바이스마트 쇼핑몰에서 다운로드 받을 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-004-USB드라이버설치4.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27717" alt="참조2-004-USB드라이버설치4" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-004-USB드라이버설치4-620x578.png" width="620" height="578" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 4</strong></span><br />
다운받은 USB드라이버를 압축해제 후 설치경로로 지정한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-005-USB드라이버설치5.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27718" alt="참조2-005-USB드라이버설치5" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-005-USB드라이버설치5-620x449.png" width="620" height="449" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 5</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-006-USB드라이버설치6.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27719" alt="참조2-006-USB드라이버설치6" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조2-006-USB드라이버설치6-620x451.png" width="620" height="451" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 6</strong></span><br />
정상적으로 설치된 모습.</p>
<p><strong><span style="color: #ffffff;background-color: #ff0000">참조 3. 설정 변경하기</span></strong><br />
USB드라이버 설치 후에는 PC와 접속할 수 있다. 전용 소프트웨어까지 만들기는 어렵기 때문에 명령프롬포트 형식으로 접속할 수 있다. 하이퍼터미널이나 PUTTY, 시리얼포트 테스트 프로그램같은 접속 프로그램을 이용한다. 네트워크나 랜장비 관리하는 사람이라면 익숙하겠지만 그렇지 않은 사람들은 생소할 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-000-명령-사용하기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27720" alt="참조3-000-명령 사용하기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-000-명령-사용하기-620x433.png" width="620" height="433" /></a></p>
<p><span style="color: #008000"><strong>USB드라이버설치 1</strong></span><br />
‘?’ 물음표나 help라고 치면 명령어 종류를 볼 수 있다.</p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>data n</td>
<td>저장된 전화번호를 보거나 수정, 삭제할 수 있다.</td>
</tr>
<tr>
<td>dimm &lt;type&gt;</td>
<td>화면 밝기조절 기능이다. &lt;type&gt;에 auto를 넣으면 주변 환경에 따라 자동 조정된다. manual nnn(0~255)을 누르면 설정된 밝기로 동작한다.</td>
</tr>
<tr>
<td>dimm &lt;type&gt;</td>
<td>voltage &lt;type&gt; : 승용차의 경우 12V, 버스나 트럭의 경우 24V를 쓰는 경우가 있으므로 차량 전원 상황에 맞게 &lt;type&gt;에 12 또는 24를 입력한다. (다른 type을 넣으면 Retry!가 표시된다.)</td>
</tr>
<tr>
<td>message &lt;type&gt;</td>
<td>4가지 메시지 중 한가지를 선택할 수 있다.</td>
</tr>
<tr>
<td>effect &lt;type&gt;</td>
<td>3가지 화면 전환효과 및 랜덤 모드 중 선택할 수 있다.</td>
</tr>
<tr>
<td>timer</td>
<td>센서가 감지된 후 자동으로 꺼지는 시간을 선택할 수 있으며 항상 켜놓는 것도 가능하다.</td>
</tr>
</tbody>
</table>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-001-전화번호-변경하기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27721" alt="참조3-001-전화번호 변경하기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-001-전화번호-변경하기-620x433.png" width="620" height="433" /></a></p>
<p><span style="color: #008000"><strong>전화번호 변경하기</strong></span></p>
<p>data 0을 누르면 0~9번째 메모리 중 0번째 메모리의 전화번호가 표시된다. data 0 012345-6789를 입력하면 0번째 메모리에 전화번호가 변경된다. 특수문자는 ‘-’와 ‘.’ 만 입력 가능하다. 특수문자 포함 최대 16자 까지 입력가능하다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-002-밝기조정하기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27722" alt="참조3-002-밝기조정하기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-002-밝기조정하기-620x433.png" width="620" height="433" /></a></p>
<p><span style="color: #008000"><strong>밝기 조정하기</strong></span><br />
화면 밝기 조절 기능을 사용하는 모습이다. 자동모드의 경우 전면에 붙은 CdS에 의해 LED의 휘도를 조절한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-003-전압보호설정하기.png" rel="lightbox[27577]"><img class="alignnone size-large wp-image-27723" alt="참조3-003-전압보호설정하기" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/참조3-003-전압보호설정하기-620x433.png" width="620" height="433" /></a></p>
<p><span style="color: #008000"><strong>전압 보호 설정하기</strong></span><br />
차량 배터리 전압에 맞춰 타입을 선택한다. (24V차량이 12V로 설정하면 과방전 보호기능을 받을 수 없고, 12V차량이 24V로 설정하면 항상 과방전 상태로 표시된다.)</p>
<p><span style="color: #ffffff"><strong><span style="background-color: #ff0000">참조 4. 회로도</span></strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/28-디바이스마트-매거진-PTB-주차번호표시판_회로도원고용.pdf">주차번호표시판_회로도</a></p>
<p><strong><span style="color: #ffffff;background-color: #ff0000">저자 소개</span></strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2015/01/저자-소개.jpg" rel="lightbox[27577]"><img class="alignnone  wp-image-27726" alt="저자 소개" src="http://www.ntrexgo.com/wp-content/uploads/2015/01/저자-소개.jpg" width="237" height="246" /></a></p>
<p>제작·사진·글 | 이민주 객원기자<br />
현재 www.itstyle.kr를 운영중</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/27577/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[25호]탁상용 미세먼지 농도측정 및 온도계 만들기</title>
		<link>http://www.ntrexgo.com/archives/25925</link>
		<comments>http://www.ntrexgo.com/archives/25925#comments</comments>
		<pubDate>Tue, 05 Aug 2014 04:32:34 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[blog-posts]]></category>
		<category><![CDATA[DIY 실험실]]></category>
		<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[25호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[농도측정]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[미세먼지]]></category>
		<category><![CDATA[온도계]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=25925</guid>
		<description><![CDATA[디바이스마트 매거진 25호 &#124; 냄새가 없고 눈에 보이지 않아 무관심하기 쉬운 미세먼지 농도! 실용성을 높이기 위해 온도기능을 추가하였고 수치와 함께 색 변화를 제공하여 현재의 상태를 직관적으로 인식하게 해주었다. 우리 집의 청결상태는 어떠할까? 내 방의 온도는 얼마일까? 한번쯤 궁금했던 사람들은 저렴하게 탁상용 미세먼지 농도측정 및 온도계를 만들어 보자.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/999E_결과물미세먼지-농도가-높아-붉게-표시된-모습.jpg" rel="lightbox[25925]"><img class="size-medium wp-image-26112 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/999E_결과물미세먼지-농도가-높아-붉게-표시된-모습-300x199.jpg" width="300" height="199" /></a></p>
<p style="text-align: center"><span style="font-size: large;color: #000080">우리 집의 미세먼지농도는 어느 정도일까?</span></p>
<p style="text-align: center"><span style="color: #0000ff"><strong><span style="font-size: x-large">탁상용 미세먼지 농도측정 및 온도계 만들기</span></strong></span></p>
<p style="text-align: center">
<p style="text-align: center">글/그림 | 이민주 객원기자 itstyle@itstyle.kr</p>
<p>&nbsp;</p>
<p>새 집으로 이사 가본 사람들이나 새로운 가구가 집에 들어왔을 때 이상한 냄새가 나 건강상 문제 또는 불쾌감을 느껴본 적 있을 것이다. 이러한 용어를 새집증후군이라 하며 이 현상은 시간이 지날수록 사라지지만 중국 황사의 영향이나 집밖에 지나는 차량들 때문에 미세먼지는 시간이 지나도 사라지지 않는다.<br />
특히 냄새가 없고 눈에 보이지 않아 무관심하기 쉬운 미세먼지 농도! 실용성을 높이기 위해 온도기능을 추가하였고 수치와 함께 색 변화를 제공하여 현재의 상태를 직관적으로 인식하게 해주었다. 우리 집의 청결상태는 어떠할까? 내 방의 온도는 얼마일까? 한번쯤 궁금했던 사람들은 저렴하게 탁상용 미세먼지 농도측정 및 온도계를 만들어 보자.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/20140611_212709.jpg" rel="lightbox[25925]"><img class="wp-image-26113 aligncenter" alt="20140611_212709" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/20140611_212709.jpg" width="496" height="349" /></a></p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td>검색어</td>
<td>용도</td>
<td>단가</td>
<td>수량</td>
<td>총가격</td>
</tr>
<tr>
<td></td>
<td>NEROINO UNO R3-2</td>
<td>스케치 업로드</td>
<td> 22,000</td>
<td> 1</td>
<td> 24,200</td>
</tr>
<tr>
<td>U</td>
<td>ATMEGA328P-PU</td>
<td>UNO 수리용</td>
<td> 4,200</td>
<td>1</td>
<td>4,620</td>
</tr>
<tr>
<td>U</td>
<td>MC14094BCPG</td>
<td>7세그먼트 포트 확장</td>
<td>540</td>
<td>2</td>
<td>1,188</td>
</tr>
<tr>
<td>U</td>
<td>LM35DZ</td>
<td>온도 측정</td>
<td>1,100</td>
<td>1</td>
<td>1,210</td>
</tr>
<tr>
<td>U</td>
<td>먼지센서(케이블포함) GP2Y1010AU0F [SEN0144]</td>
<td>미세먼지농도 측정</td>
<td>19,000</td>
<td>1</td>
<td>20,900</td>
</tr>
<tr>
<td>LED</td>
<td>WCN1-0080RG-C21</td>
<td> 디스플레이</td>
<td>1,000</td>
<td>3</td>
<td>3,300</td>
</tr>
<tr>
<td>XT</td>
<td>X-TAL 16M (ATS Type) Fundamental</td>
<td> 클럭 공급</td>
<td>190</td>
<td>1</td>
<td>209</td>
</tr>
<tr>
<td>C</td>
<td>E/C 25V 100uF (85℃)</td>
<td> 전원 안정화</td>
<td>60</td>
<td>1</td>
<td>66</td>
</tr>
<tr>
<td>C</td>
<td>Mono Cap 0.1uF Y5V 50V</td>
<td> 전원 안정화</td>
<td>30</td>
<td>1</td>
<td>33</td>
</tr>
<tr>
<td>C</td>
<td>Ceramic 18pF, 50V</td>
<td> 클럭 안정화</td>
<td>15</td>
<td>2</td>
<td>33</td>
</tr>
<tr>
<td>Q</td>
<td>2SC1815</td>
<td> 7세그먼트 제어</td>
<td>50</td>
<td>3</td>
<td>165</td>
</tr>
<tr>
<td>R</td>
<td>1/4W 5% Axial Resistor 151J (150Ω)</td>
<td> LED 전류제한</td>
<td>10</td>
<td>8</td>
<td>88</td>
</tr>
<tr>
<td>R</td>
<td>1/4W 5% Axial Resistor 221J (220Ω)</td>
<td> LED 전류제한</td>
<td>10</td>
<td>7</td>
<td>77</td>
</tr>
<tr>
<td>R</td>
<td>1/4W 5% Axial Resistor 222J (2.2KΩ)</td>
<td> 트렌지스터 제어</td>
<td>10</td>
<td>3</td>
<td>33</td>
</tr>
<tr>
<td></td>
<td>아답터 (정전압) DC 5V / 2A [P9581]</td>
<td> 전원</td>
<td>5,800</td>
<td>1</td>
<td>6,380</td>
</tr>
<tr>
<td></td>
<td>PCB서포트 플라스틱 F-50mm</td>
<td> 케이스</td>
<td>135</td>
<td>2</td>
<td>297</td>
</tr>
<tr>
<td></td>
<td>PCB서포트용 육각나사 -5mm</td>
<td>케이스</td>
<td>38</td>
<td>2</td>
<td>84</td>
</tr>
<tr>
<td></td>
<td>2T 스모그(투명) 아크릴 옵션:285&#215;285(mm)</td>
<td>케이스</td>
<td>2,300</td>
<td>1</td>
<td>2,530</td>
</tr>
<tr>
<td></td>
<td>핀헤더소켓 Single 1&#215;20 Straight(2.0mm)</td>
<td>7세그먼트 고정</td>
<td>780</td>
<td>2</td>
<td>1,716</td>
</tr>
</tbody>
</table>
<p><span style="color: #ff0000"> ※가격은 변경될 수 있습니다.</span></p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/002_핀해더-준비.jpg" rel="lightbox[25925]"><img class="wp-image-26075 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/002_핀해더-준비.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>핀헤더 준비</strong></span><br />
이번 프로젝트에서는 3개의 7-세그먼트를 사용하는데 시각적 효과를 극대화하기 위하여 RED와 GREEN LED가 함께 내장된 투톤 7-세그먼트를 이용할 것이다. 안타깝게도 디바이스마트에서 판매하는 투톤 7-세그먼트는 핀 간격이 2mm로 2.54mm 홀 간격을 갖는 일반 기판과 맞지 않는다. 따라서 2mm 핀헤더를 끼워 7-세그먼트가 정렬되도록 할 것이다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/003_핀해더를-세그먼트와-결합하기.jpg" rel="lightbox[25925]"><img class="wp-image-26076 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/003_핀해더를-세그먼트와-결합하기.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>핀헤더를 세그먼트와 결합하기</strong></span><br />
핀헤더 길이가 부족하므로 부족한 부분은 잘라서 끼울 것이다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/004_기판-자르기.jpg" rel="lightbox[25925]"><img class="wp-image-26077 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/004_기판-자르기.jpg" width="496" height="330" /></a> <strong><span style="color: #0000ff">기판 자르기</span></strong><br />
7-세그먼트에 2mm 핀헤더를 끼운다.<br />
7-세그먼트 다리 사이에 끼워넣을 수 있는 크기의 기판을 잘라 만든다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/005_IC소켓-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26078 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/005_IC소켓-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>IC소켓 삽입</strong></span><br />
잘라진 기판에 IC소켓을 삽입한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/006_기판에-납땜.jpg" rel="lightbox[25925]"><img class="wp-image-26079 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/006_기판에-납땜.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>기판에 납땜</strong></span><br />
기판을 뒤집어 납땜한다. 앞으로 부품을 삽입한 후에는 납땜하여 부품을 고정한다. 납땜할 때에는 인두가 충분히 달궈진 후 사용하는데, 기판 동판에 인두팁을 대어 열을 충분히 전달하고 납을 밀어넣은 후 재빨리 떼어내야 깔끔하게 납땜이 된다. 너무 오래 대면 동판이 떨어질 수 있으므로 주의한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/007_레치IC소켓-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26080 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/007_레치IC소켓-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>레치IC소켓 삽입</strong></span><br />
아두이노 UNO를 이용할 것인데 GPIO가 13개라 7-세그먼트와 센서, 시리얼포트를 사용하기에는 턱없이 부족하다. 따라서 7-세그먼트 부분에 MC14094 IC를 사용하였다. 4094가 없다면 74HC595 같은 부품을 사용하여도 무방하다(기능은 비슷하지만 핀 배열이 다르다).</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/008_크리스탈-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26081 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/008_크리스탈-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>크리스탈 삽입</strong></span><br />
아두이노 UNO의 하드웨어를 그대로 사용할 것이므로 16MHz크리스탈을 사용한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/009_DC젝-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26082 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/009_DC젝-삽입.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>DC젝 삽입</strong></span><br />
5V전원을 사용할 수 있도록 DC어댑터 잭을 삽입한다. 필요에 따라 USB나 다른 포트로 변경하여도 좋다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/010_전해콘덴서-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26083 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/010_전해콘덴서-삽입.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>전해콘덴서 삽입</strong></span><br />
전원 안정화를 위해 전해콘덴서를 삽입하였다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/011_세라믹모노리딕콘덴서-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26084 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/011_세라믹모노리딕콘덴서-삽입.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>세라믹(모노리딕)콘센서 삽입</strong></span><br />
전원 잡음을 개선하기 위해 세라믹콘덴서를 삽입하였다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/012_UART통신용-핀해더-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26085 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/012_UART통신용-핀해더-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>UART통신용 핀헤더 삽입</strong></span><br />
UART통신용 핀헤더를 삽입한다. 단순 UART통신을 위한 것이 아닌 프로그램을 업로드하기 위한 포트이다. 참고로 사진에는 3PIN을 장착했지만 실제 필요한 핀 수는 4PIN이었다. (Ground, Reset, UART Tx, UART Rx)</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/013_LM35DZ온도센서-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26086 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/013_LM35DZ온도센서-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>LM35DZ온도센서 삽입</strong></span><br />
제품의 실용성을 극대화 하기 위하여 온도센서를 삽입하였다. 온도와 미세먼지 농도가 5초씩 교차하여 표시될 것이다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/014A_저항-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26087 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/014A_저항-삽입.jpg" width="496" height="330" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/014B_저항-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26088 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/014B_저항-삽입.jpg" width="496" height="330" /></a> <span style="color: #0000ff"><strong>저항 삽입</strong></span><br />
7-세그먼트에 흐르는 전류량을 제어하기 위해 저항을 달았다. RED부분에는 220옴, GREEN부분에는 150옴을 사용하였는데 일반적으로 RED가 더 밝기 때문에 더 높은 저항값을 사용하였다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/015_기판-배선.jpg" rel="lightbox[25925]"><img class="wp-image-26089 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/015_기판-배선.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>기판 배선</strong></span><br />
부품 삽입이 끝났다면 배선작업을 한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/016_점퍼선-배선.jpg" rel="lightbox[25925]"><img class="wp-image-26090 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/016_점퍼선-배선.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>점퍼선 배선</strong></span><br />
배선할 수 없는 곳은 점퍼선을 사용한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/017A_MCU삽입하기아두이노UNO에서-MCU분리.jpg" rel="lightbox[25925]"><img class="wp-image-26091 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/017A_MCU삽입하기아두이노UNO에서-MCU분리.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>MCU삽입하기(아두이노UNO에서 MCU분리)</strong></span><br />
아두이노 UNO에서 ATmega328p를 분리한다. 이 MCU에는 부트로더가 내장되어 시리얼통신으로 프로그램을 업로드 할 수 있다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/017B_MCU삽입하기.jpg" rel="lightbox[25925]"><img class="wp-image-26092 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/017B_MCU삽입하기.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>MCU삽입하기</strong></span><br />
계속해서 MCU를 새로 제작된 미세먼지측정기에 삽입한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/018_스케치-업로드를-위해-UART배선.jpg" rel="lightbox[25925]"><img class="wp-image-26093 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/018_스케치-업로드를-위해-UART배선.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>스케치 업로드를 위해 UART배선</strong></span><br />
아두이노 UNO 보드(MCU가 제거된)와 새로 제작된 미세먼지측정기 메인보드와 UART, RESET, GND를 연결한 후 아두이노 스케치프로그램에서 업로드한다. 프로그램을 수정할 필요가 없다면 이 과정에서 업로드를 완료하여도 된다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/019_기판-결합.jpg" rel="lightbox[25925]"><img class="wp-image-26094 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/019_기판-결합.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>기판결합</strong></span><br />
7세그먼트 부분에 메인보드와 결합한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/020_트렌지스터-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26095 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/020_트렌지스터-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>트렌지스터 삽입</strong></span><br />
필자가 메인보드를 작게 만들어 공간이 부족해 7-세그먼트 부분에 트랜지스터를 연결하였다. (기판을 좀 더 넓게 만든다면 기판에 트랜지스터를 끼우도록 한다.)</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/021_기판과-세그먼트-배선-작업.jpg" rel="lightbox[25925]"><img class="wp-image-26096 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/021_기판과-세그먼트-배선-작업.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>기판과 세그먼트 배선 작업</strong></span><br />
메인보드와 세그먼트와 테프론선 또는 일반 연선을 이용하여 배선을 한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/022_먼지센서-와이어-연결.jpg" rel="lightbox[25925]"><img class="wp-image-26097 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/022_먼지센서-와이어-연결.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>먼지센서 와이어 연결</strong></span><br />
먼지센서 와이어를 메인보드에 연결한다. (참고로 먼지센서 커넥터가 포함된 제품은 해외제품으로 배송이 오래걸릴 수 있으며, 국내 재고 제품은 커넥터를 별도로 구매해야 한다.)</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/023A_완성된-모습전면.jpg" rel="lightbox[25925]"><img class="wp-image-26098 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/023A_완성된-모습전면.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>완성된 모습(전면) </strong></span><br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/024B_완성된-모습후면.jpg" rel="lightbox[25925]"><img class="wp-image-26099" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/024B_완성된-모습후면.jpg" width="496" height="330" /></a><br />
<span style="color: #0000ff"><strong>완성된 모습(후면) </strong></span><br />
케이스를 제외한 완성된 모습이다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/025A_스케치-업로드하기.jpg" rel="lightbox[25925]"><img class="wp-image-26100 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/025A_스케치-업로드하기.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>스케치 업로드하기</strong></span><br />
7-세그먼트가 연결이 완료되었으니 스케치 프로그램을 이용해 프로그램을 업로드하고 필요한 경우 주석을 참고하여 수정한다. (프로그램은 itstyle.kr/34233에서 다운로드 받을 수 있으며 회로도와 부품목록도 함께 제공된다.)</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/025B_스케치-업로드하기.jpg" rel="lightbox[25925]"><img class="wp-image-26101 aligncenter" alt="025B_스케치 업로드하기" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/025B_스케치-업로드하기.jpg" width="434" height="521" /></a><span style="color: #0000ff"><strong>스케치 업로드하기</strong></span><br />
다운받은 프로그램을 스케치 캔버스에 붙여놓고 빨간색 업로드 버튼을 누르면 컴파일을 진행한 후 업로드가 진행된다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/026_아크릴-자르기.jpg" rel="lightbox[25925]"><img class="wp-image-26102 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/026_아크릴-자르기.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>아크릴 자르기</strong></span><br />
전면 케이스 제작을 위해 아크릴을 잘랐다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/027_아크릴-구멍-뚫기.jpg" rel="lightbox[25925]"><img class="wp-image-26103 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/027_아크릴-구멍-뚫기.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>아크릴 구멍 뚫기</strong></span><br />
자연적으로 공기가 통하도록하여 미세먼지가 측정되게 구멍을 뚫었다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/028A_먼지센서-부착.jpg" rel="lightbox[25925]"><img class="wp-image-26104 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/028A_먼지센서-부착.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>먼지센서 부착</strong></span><br />
먼지센서를 부착하기 위해 비닐을 때어낸 후,</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/028B_먼지센서-부착.jpg" rel="lightbox[25925]"><img class="wp-image-26105 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/028B_먼지센서-부착.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>먼지센서 부착</strong></span><br />
실리콘이나 다른 접착제를 이용해 아크릴에 부착한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/029_세그먼트-부착.jpg" rel="lightbox[25925]"><img class="wp-image-26106 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/029_세그먼트-부착.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>세그먼트 부착</strong></span><br />
세그먼트도 같은 방법으로 부착한다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/030_서포터-삽입.jpg" rel="lightbox[25925]"><img class="wp-image-26107 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/030_서포터-삽입.jpg" width="496" height="330" /></a><span style="color: #0000ff"><strong>서포터 삽입</strong></span><br />
서포터를 아크릴에 끼워 45도 기울여져 세워지도록 만들었다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/999A_아두이노로-제작한-미세먼지농도계.jpg" rel="lightbox[25925]"><img class="wp-image-26108 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/999A_아두이노로-제작한-미세먼지농도계.jpg" width="496" height="330" /></a><strong><span style="color: #0000ff">아두이노로 제작한 미세먼지농도계</span></strong><br />
처음 미세먼지센서를 테스트하기 위해 만든 미세먼지농도측정기다.</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/999B_결과물가정집-책상-위에서-미세먼지농도-측정중.jpg" rel="lightbox[25925]"><img class="wp-image-26109 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/999B_결과물가정집-책상-위에서-미세먼지농도-측정중.jpg" width="496" height="262" /></a><strong><span style="color: #0000ff">결과물(가정집 책상 위에서 미세먼지농도 측정중)</span></strong><br />
가정집에서는 40~60㎍/㎥정도 수치에서 값이 변동하였다. (기본 프로그램 기준으로 40㎍/㎥ 이하는 녹색, 41~80㎍/㎥는 녹황색, 81~120㎍/㎥는 황색, 121㎍/㎥ 이상은 적색으로 표시한다.)</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/999C_결과물가정집-거실에서-온도측정-중.jpg" rel="lightbox[25925]"><img class="wp-image-26110 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/999C_결과물가정집-거실에서-온도측정-중.jpg" width="496" height="275" /></a><span style="color: #0000ff"><strong>결과물(가정집 거실에서 온도측정 중)</strong></span><br />
온도측정기능을 제공하므로 온도를 볼 수 있다. (기본 프로그램 기준으로 20℃ 이하는 녹색, 21~25℃는 녹황색, 26~28℃는 황색, 29℃ 이상은 적색으로 표시한다.)</p>
<p style="text-align: center"><a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/999D_결과물컴퓨터방에서-미세먼지-측정.jpg" rel="lightbox[25925]"><img class="wp-image-26111 aligncenter" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/999D_결과물컴퓨터방에서-미세먼지-측정.jpg" width="496" height="287" /></a><span style="color: #0000ff"><strong>결과물(컴퓨터방에서 미세먼지 측정)</strong></span><br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/999E_결과물미세먼지-농도가-높아-붉게-표시된-모습.jpg" rel="lightbox[25925]"><img class="alignnone  wp-image-26112" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/999E_결과물미세먼지-농도가-높아-붉게-표시된-모습.jpg" width="496" height="330" /></a><br />
<span style="color: #0000ff"><strong>결과물(미세먼지 농도가 높아 붉게 표시된 모습)</strong></span><br />
인위적으로 먼지를 불어 붉게 표시되고 있는 모습이다.</p>
<p style="text-align: center">RED와 RED+GREEN, GREEN 3가지 색을 낼 수 있을 것으로 보이지만 RED와 GREEN의 시프트레지스터 IC의 Enable단자는 아두이노 프로그램 내에서 analogWrite로 처리되므로 사실 더 많은 색상을 낼 수 있다.<br />
그러나 실제로는 4가지 정도만 명확하게 구분할 수 있어 4단계로 나누었다.</p>
<table class="aligncenter" style="border-color: #0c09a4;border-width: 1px;width: 617px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong><span style="color: #ffffff;font-size: medium;background-color: #0000ff">부록 01 &#8211; USB드라이버 업데이트 하기</span></strong></p>
<p>아두이노UNO는 부트로더가 내장된 전용의 스케치 프로그램과 USB 드라이버 설치가 필요하다.www.arduino.cc 에서 전용 스케치 프로그램 및 USB드라이버(함께 Zip으로 제공됨)를 다운받는다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기001.png" rel="lightbox[25925]"><img class="wp-image-26115" alt="부록A_드라이버업데이트하기001" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기001-620x451.png" width="496" height="361" /></a><br />
“장치관리자”에서 인식되지 않은 Arduino Uno를 선택해 “드라이버 소프트웨어 업데이트”를 누른다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기002.png" rel="lightbox[25925]"><img class="wp-image-26116" alt="부록A_드라이버업데이트하기002" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기002-620x454.png" width="496" height="363" /></a><br />
수동 설치를 해야 하는데 이를 위해 “컴퓨터에서 드라이버 소프트웨어 찾아보기”를 누른다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기003.png" rel="lightbox[25925]"><img class="wp-image-26117" alt="부록A_드라이버업데이트하기003" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기003-620x454.png" width="496" height="363" /></a><br />
다운받은 스케치 및 USB드라이버 압축을 풀고 해당 경로를 지정한다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기004.png" rel="lightbox[25925]"><img class="wp-image-26118" alt="부록A_드라이버업데이트하기004" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기004-620x455.png" width="496" height="364" /></a><br />
설치 동의가 필요한 경우 동의 및 설치를 눌러준다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기005.png" rel="lightbox[25925]"><img class="wp-image-26119" alt="부록A_드라이버업데이트하기005" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록A_드라이버업데이트하기005-620x454.png" width="496" height="363" /></a><br />
드라이버 설치가 완료되었다.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table style="border-color: #0c09a4;border-width: 1px;width: 617px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-size: medium"><strong><span style="color: #ffffff;background-color: #0000ff">부록 02 &#8211; 포트번호 확인하기</span></strong></span><br />
스케치 프로그램에서 업로드하기 위해서는 시리얼포트(가상)를 지정해주어야 한다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록B_포트번호-확인하기001.png" rel="lightbox[25925]"><img class="alignnone  wp-image-26071" alt="부록B_포트번호 확인하기001" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록B_포트번호-확인하기001-620x451.png" width="496" height="361" /></a><br />
아두이노 UNO가 지정된 COM포트 번호를 확인하기 위해서는 “장치관리자”에 우선 들어가서 확인할 수 있다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록B_포트번호-확인하기002.png" rel="lightbox[25925]"><img class="alignnone  wp-image-26072" alt="부록B_포트번호 확인하기002" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록B_포트번호-확인하기002.png" width="350" height="420" /></a><br />
시리얼포트를 장치관리자에서 본 COM포트번호와 동일하게 위치한다.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table style="border-color: #0c09a4;border-width: 1px;width: 617px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="color: #ffffff;font-size: medium;background-color: #0000ff"><strong>부록 03 &#8211; 아두이노UNO 수리하기</strong></span><br />
이번 DIY에서는 아두이노 부트로더가 올려진 MCU를 이용하기 위해, 그리고 프로그램 업로드 편리성을 위해 범용으로 가장 많이 사용하는 아두이노 UNO보드를 사용하였다.<br />
그러나 MCU만 제거하여 사용하게 되면 MCU가 제거된 아두이노UNO는 활용할 곳이 없어지고 그밖에 MCU가 고장이 나더라도 새 MCU를 끼워 대처할 수 있는 방법이다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록C_아두이노-수리하기1.jpg" rel="lightbox[25925]"><img class="alignnone  wp-image-26073" alt="SAMSUNG DIGITAL CAMERA" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록C_아두이노-수리하기1-620x369.jpg" width="496" height="295" /></a><br />
새로운 MCU ATmega328을 아두이노 UNO에 삽입한 뒤 ISP프로그래머를 장착한다. mkII나 패러럴타입 ISP모두 작동한다.<br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록C_아두이노-수리하기2.png" rel="lightbox[25925]"><img class="alignnone  wp-image-26074" alt="부록C_아두이노 수리하기2" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록C_아두이노-수리하기2.png" width="372" height="305" /></a><br />
아두이노 스케치를 실행한 뒤 도구-&gt;부트로더 굽기를 누르면 새로운MCU에 부트로더가 업로드된다. 만약 인식되지 않는다면 도구-&gt;프로그래머에서 자신이 사용하는 ISP의 타입이 선택되어 있는지 확인한다.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table style="border-color: #0c09a4;border-width: 1px;width: 617px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="color: #ffffff;font-size: medium;background-color: #0000ff"><strong>부록 04 &#8211; ATmega328 아두이노UNO 핀맵</strong></span><br />
<a href="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록D_ATmega328-아두이노UNO-핀맵.jpg" rel="lightbox[25925]"><img class="alignnone  wp-image-26114" alt="부록D_ATmega328 아두이노UNO 핀맵" src="http://www.ntrexgo.com/wp-content/uploads/2014/07/부록D_ATmega328-아두이노UNO-핀맵.jpg" width="480" height="314" /></a><br />
아두이노는 AVR을 기반으로 하지만 스케치에서 프로그램할 때 PORTX와 같이 레지스터명을 전혀 몰라도 된다. 디지털 포트번호에 digitalWrite또는 digitalRead와 같은 동작으로 해당 포트를 마음대로 조작할 수 있으며 analogWrite명령 한줄로 PWM도 사용할 수 있다. 따라서 아두이노UNO에서 ATmega328을 분리해 사용하는 경우 헷갈릴 수 있어 옆의 그림을 첨부한다.<br />
스케치 프로그램에서 업로드하기 위해서는 시리얼포트(가상)를 지정해주어야 한다.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table style="border-color: #0c09a4;border-width: 1px;width: 617px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="color: #ffffff;font-size: medium;background-color: #0000ff"><strong>부록 05 &#8211; 회로도</strong></span></p>
<div id='wpdm_file_12' class='wpdm_file wpdm-only-button'><h3>[25호]탁상용 미세먼지 농도측정 및 온도계 만들기 회로도</h3><div class='cont'><div class='btn_outer'><div class='btn_outer_c' style='background-image: url(http://www.ntrexgo.com/wp-content/plugins/download-manager/icon/file_extension_pdf.png);'><a class='btn_left  ' rel='12' title='[25호]탁상용 미세먼지 농도측정 및 온도계 만들기 회로도' href='http://www.ntrexgo.com/?wpdmact=process&did=MTIuaG90bGluaw=='  >Download</a><span class='btn_right'>&nbsp;</span></div></div><div class='clear'></div></div></div></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table style="border-color: #0c09a4;border-width: 1px;width: 617px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-size: medium"><strong><span style="color: #ffffff;background-color: #0000ff">저자소개</span></strong></span></p>
<table style="width: 500px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><img class="wp-image-1420 aligncenter" alt="15ledpovleeminju" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15ledpovleeminju-179x300.jpg" width="107" height="180" /></td>
<td>제작·사진·글 | 이민주 객원기자<br />
www.itstyle.kr 운영자</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/25925/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[15호]흔드는 LED POV를 만들어 보자!</title>
		<link>http://www.ntrexgo.com/archives/1334</link>
		<comments>http://www.ntrexgo.com/archives/1334#comments</comments>
		<pubDate>Thu, 25 Oct 2012 02:05:14 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[15호]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[Projects to build]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=1334</guid>
		<description><![CDATA[디바이스마트 매거진 15호 &#124;  홍보횽과를 극대화 할 수 있고 이목을 사로잡을 수 있는 LED POV를 소개한다. ]]></description>
				<content:encoded><![CDATA[<table>
<tbody>
<tr>
<td>
<table style="width: 600px">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2153.jpg" rel="lightbox[1334]"><img class="wp-image-1385 aligncenter" alt="_LHJ2153" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2153-620x326.jpg" width="620" height="326" /></a>&nbsp;</p>
<h3 style="text-align: left"><strong><span style="font-size: 1.5em"><span style="color: #33cccc">흔드는 LED POV를 만들어 보자!</span></span></strong></h3>
<p style="padding-left: 450px;text-align: center"><strong></strong>                 이민주 객원기자</p>
<p>2000년대 초반 부동산 사무실 같은 일부 가게에서만 사용되던 LED 전광판이 지금은 대부분의 가게에서 사용되고 있다.</p>
<p>전광판의 경우 워낙 저렴하게 많이 보급이 되면서 사람들의 이목을 더 이상 끌 수 없다. 이 외에도 콘서트에서 야광 봉을 흔들거나 공사현장에서 안전 봉을 흔드는 모습을 보면서 필자는 새로운 제품을 생각해 보았다.</p>
<p>홍보효과를 극대화 할 수 있고 이목을 사로잡을 수 있는 LED POV를 소개한다.</p>
<div class="symple-accordion">
<h3 class="symple-accordion-trigger"><a href="#">하드웨어</a></h3><div>
<table style="width: 600px">
<tbody>
<tr>
<td>사용될 부품들이다. LED 같은 부품의 경우 원하는 종류 또는 크기로 바꾸어 사용하여도 좋다. 다만 LED 사양에 따라 IT1402주변에 붙는 저항의 크기를 달리 사용해야할 수 있다는 점에 주의하자. 공구는 인두, 납, 니퍼 등 기본적인 공구를 준비한다.<a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1389" alt="15LedPov" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov-620x343.jpg" width="558" height="309" /></a><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovcomponent.jpg" rel="lightbox[1334]"><img class="alignnone size-large wp-image-1416" alt="16ledpovcomponent" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovcomponent-360x620.jpg" width="360" height="620" /></a>1. 회로도이다. LED가 대부분의 공간을 차지한다. IC와 IC주변 부품들은 가깝게 설계하고 가속도 센서 방향에 주의하자.&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov회로도.pdf">15LedPov회로도 다운로드</a></p>
<p>&nbsp;</p>
<p>2. 기판을 알맞은 크기로 절단한다. 흔드는 POV를 만들 것이므로 한 손에 잡기 편하도록 길게 만드는 것이 좋다. LED 드라이버, LED가 부착될 것을 감안해 넓이도 적절히 조정한다. 필자는 폭을 16홀의 크기로 제작하였다.</p>
<p><img class="alignnone  wp-image-1390" alt="15LedPov1" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov1-620x465.jpg" width="558" height="419" /></p>
<p>3. 32개의 RGB LED가 사용되는데 이 LED들은 손쉽게 제어할 수 있도록 시프트레지스터 IC를 이용하였다. 전류제한 기능이 있어 저항의 개수도 획기적으로 줄일 수 있는데, 아쉽게도 IC의 크기가 매우 작아 납땜하기 어렵다. 크기를 고려하고 납땜도 자신이 있다면 에나멜 선으로 직접 납땜하고, 납땜에 자신이 없다면 변환기판을 이용하자.</p>
<p><img class="alignnone  wp-image-1391" alt="15LedPov2" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov2-620x465.jpg" width="558" height="419" /></p>
<p>4. 기판에 부착할 수 있도록 핀 헤더를 끼우고 납땜을 한다.<br />
핀 헤더가 기판과 수직으로 세워지도록 끼워야 하는데, 수직이 되지 않으면 기판에 끼우기 매우 번거로워진다. 한쪽 끝을 살짝 납땜하고 납을 녹인 상태에서 수직으로 맞춘 뒤 나머지도 납땜하면 된다.</p>
<p><img class="alignnone  wp-image-1392" alt="15LedPov3" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov3-620x465.jpg" width="558" height="419" /></p>
<p>5. 우리가 사용하는 변환기판은 주변소자를 붙일 수 있도록 만들어져 매우 편리한데, 세라믹콘덴서와 저항은 이 변환기판에 부착한다.</p>
<p><img class="alignnone  wp-image-1336" alt="15LedPov4" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov4-620x465.jpg" width="558" height="419" /></p>
<p>6.만들어두었던 메인기판에 부착한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov5.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1337" alt="15LedPov5" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov5-620x465.jpg" width="558" height="419" /></a></p>
<p>7.기판에 부품을 끼우면 바로 납땜한다. 기판에 완전히 밀착되도록 손으로 고정하고 한쪽 끝을 납땜하고 나머지도 납땜한다. 일반적인 부품도 다리를 구부리지 않고 납땜해야 나중에 교체하기가 쉽고 다른 패턴에 영향을 주지 않는다.</p>
<p><img class="alignnone  wp-image-1338" alt="15LedPov6" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov6-620x465.jpg" width="558" height="419" /></p>
<p>8. SD카드 소켓을 부착할 것인데, SD카드를 삽입/제거할 때 납땜면에 무리가 가지 않도록 내열성 양면 테이프를 이용해 먼저 고정하도록 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov7.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1339" alt="15LedPov7" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov7-620x465.jpg" width="558" height="419" /></a></p>
<p>9.양면 테이프로 기판에 완전히 고정하고 납땜한다. PCB고정용 서포터가 있는 경우 니퍼로 제거한다. 인쇄기판을 제작할 경우에만 홀을 뚫어 사용하기 때문이다.</p>
<p><img class="alignnone  wp-image-1340" alt="15LedPov8" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov8-620x465.jpg" width="558" height="419" /></p>
<p>10.리드스위치를 부착하고 납땜한다. 리드스위치는 POV를 자전거 바퀴에 부착할 경우 자동으로 회전속도를 감지해 표시 지연 속도를 결정할 수 있도록 해준다.</p>
<p><img class="alignnone  wp-image-1341" alt="15LedPov9" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov9-620x465.jpg" width="558" height="419" /></p>
<p>11.메인 MCU를 부착할 예정인데, 핀 간격이 좁아 그대로 기판에 올릴 경우 쇼트가 될 수 있다. 따라서 내열성 양면 테이프를 이용해 IC를 고정한다. 내열 테이프가 가격이 비싼 편인데, 필자는 예전에 종이 테이프를 이용해 절연을 한 적이 있었다. 양면 테이프가 잘 벗겨지지 않는다면 칼을 이용한다.</p>
<p><img class="alignnone  wp-image-1342" alt="15LedPov10" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov10-620x465.jpg" width="558" height="419" /></p>
<p>12. IC방향을 확인해 부착한다.</p>
<p><img class="alignnone  wp-image-1343" alt="15LedPov11" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov11-620x465.jpg" width="558" height="419" /></p>
<p>13. 크리스탈을 부착한다. 16MHz를 사용했지만, POV는 시간적인 개념을 잘 사용하지 않으므로 퓨즈비트 설정 시 내부 RC오실레이터 8MHz를 선택해도 큰 차이점을 사용자는 느낄 수가 없다. 단, 자전거 모드를 이용할 경우는 반드시 16MHz의 크리스탈을 이용하는 것이 고속주행 시 유리하다.</p>
<p><img class="alignnone  wp-image-1344" alt="15LedPov12" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov12-620x465.jpg" width="558" height="419" /></p>
<p>14. 가속도 센서를 부착한다. 흔드는 방향에 따라 표시 방향을 달리 해준다. 또한, 이미지를 표시하는 도중 방향을 바꾸면 즉시 진행을 멈추고 표시했던 위치에서 반대로 이미지를 표시해준다. 이  때문에 사용자는 특별히 신경을 쓰지 않고 마구 흔들어도 이것을 보는 사람들은 최대한 일정한 위치에 메시지가 떠 있는 것처럼 느끼게 해준다. 자전거 모드와 핸드 모드는 수동으로 선택할 수 있지만 자동모드로 선택한 경우 원심력이 감지되면 자동으로 자전거 모드로 전환해 준다.</p>
<p><img class="alignnone  wp-image-1345" alt="15LedPov13" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov13-620x465.jpg" width="558" height="419" /></p>
<p>&nbsp;</p>
<p>15. 기판을 뒤집어 24pin 충전 잭을 부착한다. 리튬폴리머 배터리를 이용하는데 별도의 충전회로는 마련하지 않았고 스마트폰에 밀려 사용되지 않는 24pin 표준 충전기를 이용해 충전하도록 할 것이다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov14.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1346" alt="15LedPov14" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov14-620x404.jpg" width="558" height="364" /></a><img class="alignnone  wp-image-1347" alt="15LedPov15" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov15-620x465.jpg" width="558" height="419" /></p>
<p>16. 레귤레이터 IC를 부착한다. SD카드에 정전압을 공급하는 역할을 한다.</p>
<p><img class="alignnone  wp-image-1348" alt="15LedPov16" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov16-620x465.jpg" width="558" height="419" /></p>
<p>&nbsp;</p>
<p>17. LED를 차례로 삽입한다. LED 다리의 간격이 좁으므로 벌려야 한다.</p>
<p><img class="alignnone  wp-image-1349" alt="15LedPov17" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov17-620x427.jpg" width="558" height="384" /><img class="alignnone  wp-image-1350" alt="15LedPov18" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov18-620x323.jpg" width="558" height="291" /></p>
<p>18. IC에서부터 LED까지 리드선으로 연결한다.</p>
<p><img class="alignnone  wp-image-1351" alt="15LedPov19" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov19-620x358.jpg" width="558" height="322" /></p>
<p>&nbsp;</p>
<p>19. MCU와 주변 IC, 가까운 거리는 에나멜선을 이용했다.</p>
<p><img class="alignnone  wp-image-1352" alt="15LedPov20" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov20-620x465.jpg" width="558" height="419" /><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov21.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1353" alt="15LedPov21" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov21-620x465.jpg" width="558" height="419" /></a></p>
<p>20. 휴대용으로 사용될 예정이므로 리튬폴리머 배터리를 부착할 예정이다. 기판에 그대로 붙이면 흠집이 나거나 배터리팩이 구멍이 날 수 있으므로 스폰지나 두툼한 종이를 배터리 기판면에 부착한다.</p>
<p><img class="alignnone  wp-image-1354" alt="15LedPov22" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov22-620x465.jpg" width="558" height="419" /></p>
<p>21. 배터리 커넥터를 사용하지 않을 예정이다. 기판 홀 간격과 배터리 몰렉스 핀 간격도 안 맞지만, 많은 LED를 ON/OFF할 것인데 오래 쓰면 커넥터 접촉저항이 생겨 LED가 갑자기 ON되는 경우 MCU가 리셋 될 수 있다. 두 선을 동시에 자르게 되면 쇼트가 날 수있으므로 한 선씩 잘라낸다.</p>
<p><img class="alignnone  wp-image-1355" alt="15LedPov23" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov23-620x465.jpg" width="558" height="419" /></p>
<p>22. LED에 캡을 씌운다. 직진성이 있는 LED의 빛을 분산시키고 커지게 만들어 적은 LED로 더 크게 메시지를 전달할 수 있다.</p>
<p><img class="alignnone  wp-image-1356" alt="15LedPov24" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov24-620x465.jpg" width="558" height="419" /></p>
<p>23. 별도의 케이스를 만들지 않을 것이므로 수축튜브를 이용해 외관을 처리했다. 외부의 오염물질을 차단하고 간단한 생활방수 역할까지 해준다.</p>
<p><img class="alignnone  wp-image-1357" alt="15LedPov25" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov25-620x465.jpg" width="558" height="419" /></p>
<p>24. 수축튜브를 수축할 때 필자는 전기버너를 이용했다. 직접 불에 닿을 경우에는 그을림이 생기고 열이 올바르게 전달되지 않아 모양이 이상해지므로 열풍기나 전기버너 등을 이용한다. 매우 뜨거우니 조심하자.</p>
<p><img class="alignnone  wp-image-1358" alt="15LedPov26" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov26-620x465.jpg" width="558" height="419" /></p>
<p>25. ISP단자를 PC와 연결한다. 사진은 LED 테스트 프로그램을 넣고 돌린 것.</p>
<p><img class="alignnone  wp-image-1359" alt="15LedPov27" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPov27-620x414.jpg" width="558" height="373" /></td>
</tr>
</tbody>
</table>
</div>
<h3 class="symple-accordion-trigger"><a href="#">소프트웨어</a></h3><div>
<table>
<tbody>
<tr>
<td>1. Atmel Studio 6.0을 이용해 프로그램을 다운로드 받아보겠다. HEX파일만 불러 다운로드 할 것이므로 ISP종류에 따라 AVR Studio 4.xx버전이나 PonyProg등 다른 소프트웨어를 사용해도 무방하다. Atmel Studio 6.0기준으로 Tools -&gt; Device Programming을 누른다.<a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf000.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1372" alt="15LedPovf000" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf000-620x361.jpg" width="558" height="325" /></a>2. Tool에는 인식된 ISP장치를 선택한다.(사전에 전용 드라이버를 설치해야 한다) 필자는 mkII를 사용하므로 이것을 선택했다. Device는 사용하는 MCU를 선택하는 것인데, ATmega32A를 선택한다. Interface는 ISP모드로 선택하고 Apply를 누르면 인식이 될 것이다. Device Signature에 Read를 눌러 올바르게 인식되는지 확인한다. Memories항목을 눌러 Flash 경로에 handpov.hex를 선택한다.<a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf001.jpg" rel="lightbox[1334]"><img alt="15LedPovf001" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf001-620x531.jpg" width="558" height="478" /></a>&nbsp;</p>
<p>3. LED테스트용 프로그램은 ledtest.hex이다. Erase device before programming과 Verify Flash after programming을 체크한다. Program버튼을 누르면 자동으로 다운로드가 진행된다. 초기 EEPROM은 0xff이므로 올바르지 않은 EEPROM으로 간주되면 자동으로 초기화시켜주므로 신경쓰지 않아도 된다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf002.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1374" alt="15LedPovf002" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf002-620x531.jpg" width="558" height="478" /></a></p>
<p>4. 그림과 같이 선택한다. 외부 크리스탈, BOD리셋(2.7V)을 선택한다. EESAVE는 차후 펌웨어 업그레이드시 설정값 초기화를 원하지 않으면 체크한다. 만약 EEPROM맵이 바뀌거나 EEPROM을 더 사용하게 되면 불가피하게 자동 초기화될 수 있다. 확신이 서지 않으면 Fuse Register값에 High=0xC1, Low=0xBF값이 표시되는지 확인하고 Auto Read, Verify after programming을 선택하고 Program을 누르면 끝이다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf003.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1375" alt="15LedPovf003" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovf003-620x531.jpg" width="558" height="478" /></a></p>
<p>5. 시작-&gt;모든 프로그램-&gt;보조 프로그램-&gt;그림판을 눌러 &#8220;그림판&#8221;을 실행한다. 가로 96픽셀, 세로 16픽셀로 고정하고 배율을 최대인 800%로 하여 편집하기 쉽도록 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg000.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1377" alt="15LedPovimg000" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg000-620x282.jpg" width="558" height="254" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
※참고사항※<br />
· 96x16px와 48x16px만 사용할 수 있는데, 자동으로 감지하며, 96x16px인 경우 8색(적/녹/청/청록/황/자/백/소등)만 지원한다. 48&#215;16인 경우 두 배 많은 16색을 지원한다.<br />
· BMP파일로 저장하여야 하는데, 두 가지 모두 16색으로 저장해도 SD에서 읽을 때 픽셀 수에 따라 자동으로 변환, 처리한다.<br />
· 매번 SD카드에서 데이터를 읽어 LED로 뿌려주기엔 부담이 되므로 내부 RAM으로 데이터를 옮겨 LED에 표시하는데, 메모리 부족으로 고해상도에서는 적은 색상만을 지원하도록 제한하였다.<br />
· 48&#215;16의 경우 색상별로 2단계로 밝기 조절이 되므로 차후 더 많은 색상을 지원할 예정이다.<br />
</div>
<p>&nbsp;</p>
<p>6. 색 편집을 눌러 순수한 적색/녹색/황색 등 단색을 추가한다. 예를 들면 적색은 빨강 칸에 255, 녹색 칸에 0, 파랑칸에 0을 입력한다. 황색은 빨강 칸에 255, 녹색 칸에 255, 파랑 칸에 0을 입력하면 된다. 16색으로 저장하고 싶어 어두운 적색, 어두운 황색 등 으로 저장하고 싶은 경우 해당 색상을 255대신 128로 바꾸면 된다. 사이의 값을 지정해도 어차피 16색으로 저장하게 되므로 자동으로 변환이 되겠지만 의도하지 않게 엉뚱한 색상으로 바뀔 수 있으므로 미리 지정해 필요한 색만 사용하는 것이다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg000b.png" rel="lightbox[1334]"><img class="alignnone  wp-image-1378" alt="15LedPovimg000b" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg000b.png" width="484" height="283" /></a></p>
<p>7. LED는 검정색으로 했을 때 소등되므로 절전을 위해 배경을 검정색으로 바꾼다. 색채우기 도구를 눌러 한 번에 배경을 검정색으로 바꿀 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg001.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1379" alt="15LedPovimg001" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg001-620x282.jpg" width="558" height="254" /></a></p>
<p>8. 보통 문자와 그림 모두 있을 때 정보 전달이 탁월하다고 한다. 태극무늬를 넣을 예정인데 정석적인 방법대로 왼쪽에는 로고를 만들고 오른쪽으로는 글씨를 입력하고자 한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg002.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1380" alt="15LedPovimg002" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg002-620x282.jpg" width="558" height="254" /></a></p>
<p>9. 텍스트 영역은 도구창에서 &#8220;텍스트 입력&#8221;도구를 이용해 입력하면 편리하다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg003.png" rel="lightbox[1334]"><img class="alignnone  wp-image-1381" alt="15LedPovimg003" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg003-620x282.png" width="558" height="254" /></a></p>
<p>10. 반드시 BMP파일로 저장한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg004.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1382" alt="15LedPovimg004" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg004-620x282.jpg" width="558" height="254" /></a></p>
<p>11. 단 16색으로 저장하여야 하며 파일명은 0.bmp~9.bmp로 10개까지만 저장이 가능하다. 별도의 폴더 생성 없이 SD카드 루트디렉토리에 저장한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg005.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1383" alt="15LedPovimg005" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15LedPovimg005-620x382.jpg" width="558" height="344" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<p>※FND 표시 및 설명※</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps.jpg" rel="lightbox[1334]"><img class="alignnone size-full wp-image-1409" alt="16ledpovdps" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps.jpg" width="194" height="102" /></a></p>
<p>·전원 OFF상태에서는 버튼만 누르면 자동으로 현재 동작 모드를 잠시 표시한 후 해당 기능으로 동작하는데, 핸드 모드로 동작할 경우는 &#8220;H&#8221;가, 자전거 모드로 동작할 경우 &#8220;b&#8221;가 표시된다.<br />
·&#8221;A&#8221;로 선택된 경우 자동모드이므로 원심력이 감지되면 자동으로 자전거 모드로 동작한다.<br />
·현재에는 Hand모드만 지원하며, 펌웨어 업그레이드를 통해 자전거 모드도 지원할 예정이다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps2.jpg" rel="lightbox[1334]"><img class="alignnone size-full wp-image-1410" alt="16ledpovdps2" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps2.jpg" width="417" height="97" /></a></p>
<p>·선택된 이미지의 번호 10가지를 표시한다.</p>
<p>·버튼을 누를 때 마다 번호가 증가하고 해당 번호의 이미지 파일이 로드된다.<br />
·해당 번호의 이미지가 저장되어있지 않거나 열 수 없으면 자동으로 다음 번호로 스킵 한다.<br />
·SD에서 저장된 파일이 MCU의 RAM으로 로드될 때에는 Dot가 잠시 점등한다.<br />
·파일이 없는 경우 &#8220;-&#8221;표시가 점등되며, 배터리가 부족한 경우 &#8220;L&#8221;과 숫자가 교차되며 표시된다.<br />
·버튼을 길게 누르면 &#8220;H&#8221;,&#8221;b&#8221;,&#8221;A&#8221;를 표시하며 모드변경을 할 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps5.jpg" rel="lightbox[1334]"><img class="alignnone size-full wp-image-1413" alt="16ledpovdps5" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps3.jpg" width="283" height="97" /></a></p>
<p>·SD카드가 없는 경우 이러한 표시가 된다.<br />
·현재에는 SDHC카드도 인식하지 못한다.<br />
·E가 표시된다면 무조건 문제가 있다는 뜻이고, 오류 번호(종류)와 함께 0.5sec씩 교차 표시한다.<br />
·SD카드를 올바르게 삽입하고 버튼을 누르면 리셋 되고 정상 동작한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps4.jpg" rel="lightbox[1334]"><img class="alignnone size-full wp-image-1412" alt="16ledpovdps4" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps4.jpg" width="282" height="98" /></a></p>
<p>·SD카드 포맷이 틀리다는 것을 의미한다.<br />
·새로운 SD카드를 삽입하고 버튼을 누르면 리셋 된다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps5.jpg" rel="lightbox[1334]"><img class="alignnone size-full wp-image-1413" alt="16ledpovdps5" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/16ledpovdps5.jpg" width="283" height="97" /></a></p>
<p>·배터리가 부족하여 켜질 수 없음을 의미하고, 충전 후 사용해야 한다.</p>
<p>&nbsp;</p>
<p>※전원 및 충전 방법※</p>
<p>충전기는 TTA 표준 24 PIN을 휴대폰 충전기를 사용한다. 요즘 스마트폰에 밀려 버려지는 24PIN 충전기를 활용하였지만, 보통 이 충전기는 450mA만 출력하므로 충전속도가 오래걸린다. 약 4시간~5시간 정도의 충전시간이 소요된다. 일부 고급형 24 PIN충전기(PDA, PMP 등에 사용하도록 만들어진)는 최대 900mA까지 출력되는데, 이 경우 충전시간은 2시간 정도이다.<br />
흔들림이 감지되지 않거나 버튼을 누르지 않은 상태에서 30초 정도 방치하면 자동으로 Sleep모드로 진입한다. Sleep상태에서는 약 2~3주간 배터리가 서서히 방전되므로 사용하기 전날에는 반드시 충전한다.<br />
</div>
<p>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<h3 class="symple-accordion-trigger"><a href="#">완성작</a></h3><div>
<table>
<tbody>
<tr>
<td>■ 실행 결과 모습 ■<a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2147.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1384" alt="_LHJ2147" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2147-620x287.jpg" width="558" height="258" /></a>▶ 런던올림픽 전에 이것을 만들었다면 응원도구로도참 좋았을 것이라 생각한다.<a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2153-2.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1386" alt="_LHJ2153-2" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2153-2-620x300.jpg" width="558" height="270" /></a>&nbsp;</p>
<p>▶ 디바이스마트 로고도 간단히 만들어 표시할 수 있다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2157.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1387" alt="_LHJ2157" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2157-620x331.jpg" width="558" height="298" /></a></p>
<p>▶ 하나 만들어 둔다면 안전용품 대용으로도 사용할 수 있어 실용적이다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2163.jpg" rel="lightbox[1334]"><img class="alignnone  wp-image-1388" alt="_LHJ2163" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/LHJ2163-620x331.jpg" width="558" height="298" /></a></p>
<p>▶ 어두운 밤에 무지개도 만들어낼 수 있다.</p>
<p>&nbsp;</p>
<p>이목을 끌고 싶은 학교 축제 주점, 색다른 것이 필요한 콘서트 관람객, 주차업무를 하는 사람들은 하나쯤 만들어보자.</p>
</div>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table style="width: 550px">
<tbody>
<tr>
<td width="219"><img class="wp-image-1420 aligncenter" alt="15ledpovleeminju" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/15ledpovleeminju-179x300.jpg" width="107" height="180" /></td>
<td width="246"><strong>기자소개</strong><br />
제작 / 사진 / 글<br />
이민주 객원 기자<br />
현재 원주 한라대학교 전기전자 공학과를 재학중이며,<br />
개인 홈페이지 <a title="동영상과 추가 이미지를 보실 수 있습니다." href="http://www.itstyle.kr" target="_blank">http://www.itstyle.kr</a> 운영중.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/1334/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
