<?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; diy</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/diy/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>[65호] 레트로 감성을 겨냥한 DIY 아케이드 조이스틱 세트 7종 출시</title>
		<link>http://www.ntrexgo.com/archives/39997</link>
		<comments>http://www.ntrexgo.com/archives/39997#comments</comments>
		<pubDate>Sun, 25 Apr 2021 02:25:26 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[65호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[아케이드]]></category>
		<category><![CDATA[오락]]></category>
		<category><![CDATA[조이스틱]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=39997</guid>
		<description><![CDATA[디바이스마트 매거진 65호ㅣ레트로 감성을 겨냥한 DIY 아케이드 조이스틱 세트 7종 출시]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/06/조이스틱.png" rel="lightbox[39997]"><img class="aligncenter size-medium wp-image-39998" alt="조이스틱" src="http://www.ntrexgo.com/wp-content/uploads/2021/06/조이스틱-300x239.png" width="300" height="239" /></a></p>
<p>&nbsp;</p>
<p><span style="color: #ffffff; background-color: #333333;">SMG</span></p>
<p><span style="font-size: x-large;"><strong>레트로 감성을 겨냥한 DIY 아케이드 조이스틱 세트 7종 출시</strong></span></p>
<p>&nbsp;</p>
<p>최근 집에서 보내는 시간이 많아짐에 따라 DIY 활동이나, 간편하게 할 수 있는 콘솔게임의 인기가 커지고 있다. 어린 시절 오락실 게임을 해본 사람이라면 익숙할 조이스틱 제품이 디바이스마트에 새롭게 등록되었다. 단일 조이 스틱 모듈뿐만 아니라 레트로 감성이 넘치는 나만의 조이스틱 게임패드를 만들 수 있는 조이스틱 세트 상품도 함께 만나 볼 수 있다. DIY 아케이드 조이스틱 세트는 스위치 컨트 롤 보드, 조이스틱, 아케이드 버튼 소형, 중형, 각종 연결 케이블로 구성되어 있으며, 가격대는 2만 원대로 저렴하게 판매된다. 5만 원~10 만 원대 고가의 조이스틱 패드가 비싸 구매가 망설여졌던 유저라면 직접 DIY 해보며 가성비 넘치는 나만의 조이스틱 패드를 만들어보길 바란다.</p>
<p>색상은 검정, 빨강, 파랑, 녹색, 핑크, 흰색, 노랑 총 7가지 색상을 지원하며, 이 제품의 가장 큰 장점은 컨트롤 보드가 함께 들어가 있어 PC와 연결하여 손쉽게 제어가 가능하다는 점 이다. USB 4PIN 케이블을 통해 PC에 연결하고, 5PIN 조이스틱 케이블로 조이스틱에 연결하고 버튼들도 각각 연결해주면 각 버튼, 조이스틱이 동작하는지 바로 확인이 가능하다. 기존에 조이스틱을 컨트롤 하기 위해 다른 프로그램을 한 번 더 써야 했던 번거로움을 해소해준 다. 현재 디바이스마트에서는 이 상품을 활용하여 완전체 게임장치를 구성중에 있으니 레트로 게임기를 선호하는 고객분들은 기대해도 좋을 듯 하다.</p>
<p>&nbsp;</p>
<p><a href="https://www.devicemart.co.kr/goods/search?keyword_log_flag=Y&amp;start_price=&amp;end_price=&amp;search_text=DIY+%EC%95%84%EC%BC%80%EC%9D%B4%EB%93%9C+%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1+%EC%84%B8%ED%8A%B8"><span style="color: #0000ff;"><strong>레트로 감성을 겨냥한 DIY 아케이드 조이스틱 세트 7종 출시</strong></span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/39997/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[64호]레트로디세이(Retrodyssey)</title>
		<link>http://www.ntrexgo.com/archives/39455</link>
		<comments>http://www.ntrexgo.com/archives/39455#comments</comments>
		<pubDate>Mon, 22 Feb 2021 00:00:10 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[64호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[RETRODYSSEY]]></category>
		<category><![CDATA[게임기]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[레트로]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=39455</guid>
		<description><![CDATA[디바이스마트매거진 64호 &#124; Odyssey x86으로 여러 가지를 개발하고 싶어 하는 개발자뿐만 아니라, 콘솔 게임에 대한 추억을 가지고 있는 일반인들도 함께 즐길 수 있도록 레트로디세이를 구성하였다.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-555.png" rel="lightbox[39455]"><img class="alignnone size-large wp-image-39500" alt="64 ptb 레트로디세이 (555" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-555-620x192.png" width="620" height="192" /></a></p>
<p><strong>Odyssey 미니PC로 만들어본 DIY 콘솔 게임장치</strong></p>
<p><span style="font-size: x-large;color: #ff6600"><strong>레트로디세이(Retrodyssey)</strong></span></p>
<p>글 | 성균관대학교(IWMYS) 임혁수, 김현목, 허재호, 이형욱</p>
<p>&nbsp;</p>
<p><span style="color: #ff6600"><strong>1. 작품 개요</strong></span><br />
Odyssey x86으로 여러 가지를 개발하고 싶어 하는 개발자뿐만 아니라, 콘솔 게임에 대한 추억을 가지고 있는 일반인들도 함께 즐길 수 있도록 레트로디세이를 구성하였습니다. Window PC에서 개인이 좋아하는 온라인 게임(STEAM)을 콘솔로 플레이할 수 있으며, Window PC와 Arduino GPIO의 결합이라는 Odyssey x86의 장점을 확인할 수 있는 프로젝트입니다.<br />
또한, 외관을 레트로 디자인으로 설계하여 과거에 대한 향수를 느끼며 추억하는 어른과, 뉴트로에 빠진 젊은이들의 흥미를 끌어 낼 수 있도록 디자인했습니다.</p>
<p><span style="color: #ff9900"><strong>1.1. 관련 시장의 성장</strong></span></p>
<p>아지는 현대인들을 위한, Window용 콘솔 장치의 시장성도 성장하리라 예측합니다. 따라서 Odyssey x86 미니 PC로 DIY 콘솔 게임 장치에 대한 사람들의 욕구를 자극하고자 합니다.<br />
“한국콘텐츠진흥원이 발간한 2020 대한민국 게임백서에 따르면 2019년 국내 게임 시장규모는 15조 5,750억 원이다. 이 중 2019년 콘솔 게임 시장 매출은 6,946억 원을 기록했고 점유율은 4.5%다. 2018년 대비 매출액은 1,660억 원 늘었고, 성장률은 31.4%에 달했다. 어마어마한 성장세다.“(동아일보, 2020.12.23, 조광민)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-2.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39462" alt="64 ptb 레트로디세이 (2)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-2.png" width="620" height="293" /></a></p>
<p><span style="color: #ff9900"><strong>1.2. ODYSSEY x86 만의 장점 극대화</strong></span><br />
이 작품은 Window 운영체제와 아두이노를 내장한 오디세이(Odyssey) 보드로 제작되었습니다. 인터넷을 통해 스팀(Steam)을 비롯한 플랫폼에서 게임을 다운로드받아 플레이할 수 있으며, 조이스틱과 8개의 버튼을 개인별 취향에 맞게 설정할 수 있습니다. 이는 Window와 Arduino가 결합된, 오디세이 만의 장점을 극대화한 활용법입니다.</p>
<p><span style="color: #ff6600"><strong>2. 작품 설명</strong></span><br />
이 작품은 1개의 조이스틱과 8개의 버튼으로 구성되어 있습니다. 조이스틱은 마우스와 키보드로 전환되어 사용될 수 있습니다. 8개의 버튼은 각각 키보드 버튼과 매핑(Mapping) 되어 있습니다. 제품과 함께 제공되는 GUI 프로그램을 이용해 매핑된 키보드 버튼을 바꿀 수 있습니다. 자신의 STEAM 최애 게임을 콘솔로 즐겨보세요!<br />
(※ 최애 : 최고로 애정한다. 가장 사랑함)</p>
<p><span style="color: #ff9900"><strong>2.1. 주요 동작 및 특징</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-1.jpg" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39459" alt="64 ptb 레트로디세이 (1)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-1.jpg" width="620" height="406" /></a></p>
<p><span style="color: #cc99ff"><strong>2.1.1. 레트로 감성의 디자인</strong></span><br />
어릴 적 오락실 게임기와 닌X도의 게임기를 떠올리게 하는 바로 그 디자인입니다. 게임을 즐기지 않더라도 인테리어 용품으로도 인기만점! 이제 하나씩 만드는 과정을 살펴보도록 하겠습니다!</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-2.jpg" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39461" alt="64 ptb 레트로디세이 (2)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-2.jpg" width="620" height="339" /></a></p>
<p><span style="color: #cc99ff"><strong>2.1.2. 조이스틱과 버튼을 키보드와 마우스로 이용</strong></span><br />
조이스틱을 A0와 A1 아날로그 입력으로 설정합니다. 조이스틱의 x축 y축의 가변저항이 기울어짐을 측정해, 아날로그값을 전달합니다. 이 데이터를 기반으로 마우스 움직임 (Mouse.move()) 또는, 키보드 방향키(←↑→↓)를 움직입니다.<br />
또한, 키보드의 경우 (Keyboard.press())를 이용하여, 버튼이 입력되면 키의 입력을 설정합니다. 또한, count 변수를 설정해 키보드를 꾹 누를 때 발생하는 반복 입력의 경우도 대처합니다. 모든 경우가 키보드와 동일하게 작동합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-3.png" rel="lightbox[39455]"><img class="alignnone size-large wp-image-39464" alt="64 ptb 레트로디세이 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-3-546x620.png" width="546" height="620" /></a></p>
<p><span style="color: #cc99ff"><strong>2.1.3. 일반인을 위한 GUI를 이용한 키 매핑</strong></span><br />
게임의 경우 모든 키가 동일하지 않습니다. 그래서 저희 컨트롤러는 여러 게임에 호환하여 적용할 수 있도록 키를 설정합니다. 저희는 코드에 익숙하지 않은 사람들도 쉽게 사용할 수 있도록 Qt creator를 사용해 GUI 인터페이스를 만들었습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-5.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39468" alt="64 ptb 레트로디세이 (5)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-5.png" width="212" height="227" /></a></p>
<p>사용자는 GUI 환경에서 A부터 Z까지 25개의 알파벳과 ‘ESC’, ‘TAB’ 2개 특수키, 총 27개의 키를 게임기 버튼에 할당할 수 있습니다. 사용자는 슬라이드를 사용하거나 직접 해당하는 글자를 타이핑한 후(단, 이때 모든 글자는 대문자로 쓰여야 합니다.) ‘DEVICEMART’ 버튼을 클릭하면 해당 정보를 오디세이 x86으로 시리얼 통신을 통해 보낼 수 있는데 이를 통해 게임기의 키 셋업을 마칠 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-6.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39470" alt="64 ptb 레트로디세이 (6)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-6.png" width="620" height="399" /></a></p>
<p><strong style="color: #ff9900">2.2. 전체 시스템 구성</strong></p>
<p>오디세이에서 Steam 게임을 구동합니다. 그리고 조이스틱과 버튼으로 키의 입력을 받습니다. 키를 변경하고 싶으면 qt 배포판 GUI를 실행하여 키를 커스텀합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-7.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39472" alt="64 ptb 레트로디세이 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-7.png" width="620" height="376" /></a></p>
<p><strong style="color: #ff9900">2.3. 개발 환경(개발 언어, Tool, 사용 시스템 등)</strong></p>
<p>아래는 사용한 부품목록입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-8.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39474" alt="64 ptb 레트로디세이 (8)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-8.png" width="620" height="325" /></a></p>
<p><span style="color: #cc99ff"><strong>2.3.1. Hardware(외관 설계)</strong></span></p>
<p>Autodesk Inventor 2020, Autodesk Fusion 360을 사용했습니다. 하드웨어 설계를 위해 사용합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-9.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39475" alt="64 ptb 레트로디세이 (9)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-9.png" width="620" height="91" /></a></p>
<p><span style="color: #cc99ff"><strong>2.3.2. Hardware(Odyssey x86)</strong></span></p>
<p>Arduino IDE 1.8.1 버전을 사용했습니다. 오디세이 x86으로 windows 운영체제에서 아두이노 IDE를 사용하기 위해서는 초기 세팅 과정을 거쳐야 합니다.<br />
1단계) 파일 &#8211; 환경설정 &#8211; 추가적인 보드매니저 추가하기 아래 URL을 보드매니저에 추가해줍니다. https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json<br />
2단계) 보드 매니저 추가하기. 툴 &#8211; 보드 &#8211; 보드매니저에서 “Seeeduino Zero” 설치<br />
3단계) 보드와 포트를 Seeeduino Zero로 선택해주세요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-10.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39476" alt="64 ptb 레트로디세이 (10)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-10.png" width="620" height="350" /></a></p>
<p><span style="color: #cc99ff"><strong>2.3.3. GUI용 qt 프로그래밍 작성 &#8211; QT creator , C++</strong></span></p>
<p>Qt creator는 GUI 프로그램을 개발할 때 많이 사용되는 프레임워크입니다. 저희는 Qt creator 5.15.2 버전을 사용했습니다. 사용자는 Qt creator를 설치하지 않더라도 저희가 만든 파일중 ‘Retrodyssey_성균관대(IWMYS)/소스코드/qt배포판’ 안에 있는 ‘retrodyssey’ 폴더(또는 압축파일)을 다운로드 받아 손쉽게 GUI 인터페이스를 사용할 수 있습니다.</p>
<p><span style="background-color: #ffffff;color: #3366ff"><strong>  <a title="첨부자료 이동" href="https://blog.naver.com/no1_devicemart/222244126252" target="_blank"><span style="background-color: #ffffff;color: #3366ff">qt 배포판은 디바이스마트 블로그 해당 게시글 첨부자료에서 확인하실 수 있습니다.</span></a>  </strong></span></p>
<p>&nbsp;</p>
<p><strong>2.3.3.1 GUI 환경의 코드를 개인적으로 수정하고 싶은 경우</strong><br />
Qt creator는 https://www.qt.io/ 에서 다운로드 할 수 있습니다. Qt creator을 설치한다면 GUI를 위해 작성한 코드의 세부구조를 개인이 원하는 대로 수정하거나 기능을 추가할 수 있습니다. 아래는 Qt 공식 홈페이지에서 설치파일을 다운받는 과정입니다. 설치파일을 실행하는 경우, Qt creator의 버전만 5.15.2 버전으로 설정해주고 나머지는 디폴트 상태로 설정한 후 다운로드 받으면 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-12.png" rel="lightbox[39455]"><img class="alignnone  wp-image-39478" alt="64 ptb 레트로디세이 (12)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-12-528x620.png" width="620" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-13.png" rel="lightbox[39455]"><img class="alignnone size-large wp-image-39479" alt="64 ptb 레트로디세이 (13)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-13-620x252.png" width="620" height="252" /></a><br />
작성한 코드는 ‘Retrodyssey_성균관대(IWMYS)/소스코드/qt’ 에 들어있는 ‘seedcontroller’ 폴더 안에 들어 있으며 해당 폴더(‘seedcontroller’)를 ‘로컬디스크/Users/사용자명/문서’로 옮기거나 해당 사용자의 qt 파일이 저장되는 경로로 옮기면 코드를 수정할 수 있습니다. 아래는 경로의 예시입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-14.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39480" alt="64 ptb 레트로디세이 (14)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-14.png" width="615" height="161" /></a></p>
<p><strong>  <a title="첨부자료 이동" href="https://blog.naver.com/no1_devicemart/222244126252" target="_blank">qt 배포판은 디바이스마트 블로그 해당 게시글 첨부자료에서 확인하실 수 있습니다.</a>  </strong></p>
<p><strong>2.3.3.2 배포한 GUI 환경을 그대로 사용하고 싶은 경우</strong><br />
만약 가볍게 구현해보고자 하는 사람이라면 저희가 배포한 배포 파일 ‘Retrodyssey_성균관대(IWMYS)/소스코드/qt배포판’ 안에 있는 ‘retrodyssey’ 폴더를 다운로드 받는다면 GUI 인터페이스를 사용할 수 있습니다. ‘retrodyssey’ 폴더 안에는 qt배포판 실행을 위한 여러 라이브러리가 들어 있는데 이들 중 ‘seedcontroller’을 실행하면, 게임 실행을 위한 키 설정을 할 수 있습니다.<br />
게임기 키 설정을 위해서는 우선 오디세이 x86보드에 우선 아두이노 코드가 올라가 있어야 합니다. 아두이노 코드가 보드에 올라가 있다면, 다음으로 오디세이 x86보드와 통신하기 위해, USB 포트 번호를 설정해주어야 합니다. 배포판의 경우, ‘COM8’의 포트와 연결되도록 만들어져 있으므로 다음과 같은 과정을 거쳐 포트명을 ‘COM8’로 바꿔줘야 합니다.</p>
<p>1단계) 장치 관리자에서 아두이노와 연결된 포트를 찾아 선택해줍니다.<br />
2단계) ‘포트 설정’에서 고급 탭을 선택합니다.<br />
3단계) 포트명을 ‘COM8’로 바꿔줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-15.png" rel="lightbox[39455]"><img class="alignnone size-large wp-image-39481" alt="64 ptb 레트로디세이 (15)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-15-620x378.png" width="620" height="378" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-16.png" rel="lightbox[39455]"><img class="alignnone size-large wp-image-39482" alt="64 ptb 레트로디세이 (16)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-16-620x317.png" width="620" height="317" /></a></p>
<p>그렇게 포트설정을 끝냈다면 이후 다운로드 받은 ‘retrodyssey’ 폴더 안의 ‘seedcontroller’ 파일을 실행해 원하는 키보드 정보를 입력하고 ‘DEVICEMART’버튼을 눌러주면 게임기 키 설정을 할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-26.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39492" alt="64 ptb 레트로디세이 (26)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-26.png" width="620" height="371" /></a></p>
<p><span style="color: #ff6600"><strong>3. 단계별 제작 과정</strong></span><br />
<span style="color: #ff9900"><strong>3.1. 3D 본체 설계</strong></span><br />
모델링을 함에 있어서 게임기의 모습을 부각시키기 위해 노력했습니다. 디자인적 측면에서 버튼과 조이스틱이 둥글다는 공통점을 가지고 있어, 버튼과 조이스틱이 차지하는 부분은 둥근 원으로 디자인하였습니다. 또한 게임기를 떠올릴 때, 강력하게 대비대는 빨간색과 파란색으로 색깔을 입혔으며 메인 프레임의 모든 색상은 이를 부각할 수 있는 하얀색으로 디자인했습니다. 수치와 설계 부분에 있어서는 Inventor를 이용하여 진행했습니다.<br />
부품 구성은 메인 프레임 각각 좌, 우 부분과 조이스틱이 들어가는 부분과 고정시켜주는 부분 마지막으로 버튼 6개를 담을 버튼 프레임으로 구성 되어있습니다. 전체적인 모습은 다음과 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-18.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39484" alt="64 ptb 레트로디세이 (18)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-18.png" width="620" height="515" /></a></p>
<p>조이스틱과 버튼을 설치할 프레임들은 공통적으로 메인프레임에 안정적으로 거치될 수 있는 것을 목표로 했습니다. 그 결과 위아래의 지름을 다르게 하여, 걸칠 수 있게 설계하였습니다.<br />
조이스틱을 담을 파트와 받침 부분은 조이스틱을 움직이는 과정에서 흔들림이 없이 고정되어야 하므로 나사 연결방식을 채택하였습니다. 이는 M1.2 나사를 사용하도록 설계하였고 고정하는 구멍은 총 4개로 설계되었습니다.<br />
오디세이를 담을 메인프레임의 설계는 두 손을 올려 장시간 게임을 함에 있어서 무리가 가지 않도록 높이를 10cm로 설계하였습니다. 이는 버튼과 조이스틱 등을 오디세이와 연결할 때 많은 회로가 메인프레임 내부에서 엉키지 않게 하려는 부분도 고려한 수치입니다.<br />
그보다도 가장 많이 신경을 쓴 부분은 단연 오디세이가 들어가는 부분입니다.<br />
이 제품의 가장 중요한 것은 오디세이입니다. 오디세이가 어떤 식으로도 손상이 가면 안 되기 때문에, 오디세이를 단단하게 고정해줄 나사의 위치를 선정하는 것부터, 발열 해소를 위해 팬이 들어가는 공간을 특히나 신경 써 설계하였습니다. 발열 해소를 하지 못한다면, 기능의 저하와 손상으로 직결되는 부분이니 반드시 고려 해야 했습니다.<br />
그 결과 팬이 바닥과 충분한 거리로 떨어져 있고, 바닥엔 직사각형으로 여러 구멍을 뚫어 설계를 진행하였습니다. 위의 설명의 설계 이미지는 다음과 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-19.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39485" alt="64 ptb 레트로디세이 (19)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-19.png" width="620" height="212" /></a></p>
<p>또한, 메인 윗 파트와 연결하는 부분을 원 지름을 가로질러 설계를 하였는데 이는 M3나사를 사용하도록 설계했습니다. 추가로 메인 프레임에서 HDMI 케이블이나 다른 여러 선들을 연결하기 위한 공간을 설계한 것 또한 볼 수 있습니다. 자세한 사진은 다음과 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-20.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39486" alt="64 ptb 레트로디세이 (20)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-20.png" width="620" height="189" /></a></p>
<p>최종 설계 부품들은 다음과 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-21.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39487" alt="64 ptb 레트로디세이 (21)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-21.png" width="620" height="349" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-22.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39488" alt="64 ptb 레트로디세이 (22)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-22.png" width="620" height="216" /></a></p>
<p>그리고 추가로 Odyssey x86 전용 게임기라는 것을 나타내기 위해, 디바이스마트와 seeed의 로고를 삽입하였습니다. 아래 별표 분에 꽂아주면 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-23.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39489" alt="64 ptb 레트로디세이 (23)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-23.png" width="620" height="216" /></a></p>
<p>그리고 조이스틱 부분도 설계하였습니다. 2가지 모델로 설계하였으나, 일반 조이스틱 모듈을 사용하는 경우, 조이스틱은 추가하지 않는 게 좋습니다. 지렛대의 원리로 인해 힘점이 작용점보다 멀어지게 되어, 조이스틱 특유의 탄성을 느끼기 힘들어집니다. 저희 팀이 시연할 때도 제거하고 플레이하였습니다. 좌측 조이스틱은 M3 규격의 나사로 조립하면 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-3.jpg" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39463" alt="64 ptb 레트로디세이 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-3.jpg" width="620" height="385" /></a></p>
<p><span style="color: #ff9900"><strong>3.2. 조이스틱 및 버튼 회로 연결</strong></span><br />
조이스틱 모듈과 버튼을 오디세이의 GPIO에 연결하여 줍니다. 이때, 버튼은 풀다운 저항을 사용하여, 값이 튀지 않도록 해줍니다. 내부 연결 회로를 제작한 후, 가조립하여 작동여부를 확인합니다. 먼저 아래 회로도에 따라 연결합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-24.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39490" alt="64 ptb 레트로디세이 (24)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-24.png" width="620" height="376" /></a></p>
<p>이후 가조립하여 테스트합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-4.jpg" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39465" alt="64 ptb 레트로디세이 (4)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-4.jpg" width="620" height="559" /></a></p>
<p>아래는 각종 부품 연결상태를 확대한 모습입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-5.jpg" rel="lightbox[39455]"><img class="alignnone  wp-image-39467" alt="64 ptb 레트로디세이 (5)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-5-504x620.jpg" width="620" /></a></p>
<p><span style="color: #ff9900"><strong>3.3. 오디세이 x86 코드 작성</strong></span><br />
우리는 Odyssey의 동작에서 크게 3가지 부분을 고려해야 합니다.<br />
1. qt와의 시리얼통신<br />
2. 조이스틱 조작<br />
3. 버튼 동작</p>
<p>해당 코드와 함께 살펴보겠습니다. 코드는 soo_odyssey.ino와 soo_odyssey_h의 헤더파일로 구성됩니다. 헤더파일에는 주로 하기 기능 구현을 위해 제작한 함수들이 담겨있습니다. 큰 흐름은 soo_odyssey.ino를 보며 확인하시면 됩니다.</p>
<p><span style="color: #cc99ff"><strong>3.3.1. [soo_retrodyssey.ino]</strong></span><br />
키보드 버튼에 연결된 GPIO를 저장합니다. 저는 D2~D9가 버튼으로 동작하고 있습니다. 그리고 key라는 배열에 우리가 버튼을 눌렀을 때, 입력될 키를 보관합니다. Received 배열은 qt와의 시리얼 통신으로 받아올 데이터를 저장합니다. qt는 바꿀 버튼의 ID 1개와, 해당 버튼에 매핑될 ASCII 데이터 2개를 송신합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>//PART0. 변수 선언<br />
#include &#8220;Keyboard.h&#8221;<br />
#include &#8220;Mouse.h&#8221;<br />
#include &#8220;soo_retrodyssey.h&#8221;</p>
<p>// 키보드 GPIO 세팅<br />
const int button1 = 2; //노1<br />
const int button2 = 3; //노2<br />
const int button3 = 4; //노3<br />
const int button4 = 5; //핑1<br />
const int button5 = 6; //핑2<br />
const int button6 = 7; //핑3<br />
const int button7 = 8; //검1<br />
const int button8 = 9; //검2</p>
<p>// 버튼의 중복입력을 방지하는 버퍼로 쓰일 배열입니다.<br />
int button1_state[2] = {0,0};<br />
int button2_state[2] = {0,0};<br />
int button3_state[2] = {0,0};<br />
int button4_state[2] = {0,0};<br />
int button5_state[2] = {0,0};<br />
int button6_state[2] = {0,0};<br />
int button7_state[2] = {0,0};<br />
int button8_state[2] = {0,0};</p>
<p>// ASCII 번호로 누를 키의 정보를 입력합니다. 8개의 버튼에 해당합니다.<br />
int key[8] = {97, 98, 99, 100, 101, 102, 1, 2};//기본세팅 a,b,c,d,e,f,TAB,ESC<br />
int received[24] = {0,};<br />
</div>
아래는 마우스 컨트롤을 위한 변수 선언입니다. 여기서 joystick_judger는 조이스틱을 방향키로 사용할지 마우스로 사용할지 선택할 수 있게 해줍니다. joystick_judger에는 D13에 연결된 스위치의 값이 저장될 겁니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>// 마우스세팅<br />
const int xAxis = A0; // x축 기울기를 읽습니다.<br />
const int yAxis = A1; // y축 기울기를 읽습니다.<br />
// 조이스틱을 마우스로 사용할지, 키보드로 사용할지 판단하는 GPIO입니다.<br />
const int joystick_judger = 13;<br />
bool mouse_or_arrow = false; //true: 마우스, false:화살표<br />
//const int mouseButton = 12; //조이스틱의 버튼을 사용하실 분은 주석을 해제하면 됩니다. 저는 사용하지 않았습니다.<br />
</div>
<p>간단하게 셋업을 진행합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void setup() {<br />
//디지털핀을 세팅합니다.<br />
pinMode(button1, INPUT);<br />
pinMode(button2, INPUT);<br />
pinMode(button3, INPUT);<br />
pinMode(button4, INPUT);<br />
pinMode(button5, INPUT);<br />
pinMode(button6, INPUT);<br />
pinMode(button7, INPUT);<br />
pinMode(button8, INPUT);<br />
pinMode(joystick_judger, INPUT); //마우스 혹은 화살표</p>
<p>//시리얼과 마우스 키보드를 사용합니다.<br />
Serial.begin(9600);<br />
Mouse.begin();<br />
Keyboard.begin();</p>
<p>//시리얼 통신을 시작합니다.<br />
Serial.begin(9600);<br />
Serial.println(&#8220;setup finished&#8221;);<br />
}</p>
</div>
<p>메인 코드의 시작입니다. qt로부터 수신한 시리얼 데이터를 received 배열에 저장합니다. qt는 키매핑에 대한 데이터(바꿀 키 ID 1개와 매핑할 데이터 2개)를 시리얼로 전송합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void loop() {<br />
//PART1. 시리얼 통신<br />
//Qt로부터 시리얼 데이터를 수신합니다.<br />
int i =0;<br />
while(Serial.available()&gt; 0){<br />
received[i] = Serial.read();<br />
i++;<br />
}</p>
</div>
<p>이제 키보드를 다룹니다. 첫번째, select_key 함수는 qt에서 받은 데이터를 저장한 received 배열의 데이터를 해석해, key 배열에 저장해 매핑합니다. 두번째, Key_press_once 함수는 중복 키 입력을 방지하는 코드입니다. 이 코드로 인해, 버튼을 꾹 누르면 키보드를 꾹 눌렀을 때와 동일하게 버튼이 작동합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>//PART2. 키보드<br />
//시리얼 데이터를 바탕으로, 키를 매핑하는 함수입니다.<br />
select_key(received, key);<br />
//<br />
//키를 누릅니다.<br />
key_press_once(button1, button1_state, key[0]);//노1<br />
key_press_once(button2, button2_state, key[1]);//노2<br />
key_press_once(button3, button3_state, key[2]);//노3<br />
key_press_once(button4, button4_state, key[3]);//핑1<br />
key_press_once(button5, button5_state, key[4]);//핑2<br />
key_press_once(button6, button6_state, key[5]);//핑3<br />
key_press_once(button7, button7_state, key[6]);//검1<br />
key_press_once(button8, button8_state, key[7]);//검2</p>
</div>
<p>조이스틱의 동작에 관한 코드입니다. joystick_judger로부터 조이스틱을 마우스로 사용할지, 방향키로 사용할지, 판단합니다. arrow_key는 마우스를 키보드 방향키로 사용하기 위해, 제작한 함수입니다. 추가로 딜레이는 조금만 주는 편이 좋습니다. 딜레이를 길게 주면, 키 입력이 무시될 가능성이 큽니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>//PART2. 조이스틱<br />
//조이스틱의 동작여부를 판단합니다.<br />
//D13번 키가 high면 조이스틱이 마우스로 동작, low면 화살표로 동작<br />
if (digitalRead(joystick_judger) == LOW) mouse_or_arrow = false;<br />
if (digitalRead(joystick_judger) == HIGH) mouse_or_arrow = true;</p>
<p>//조이스틱으로 마우스 혹은 키보드 화살표를 제어합니다.<br />
if (mouse_or_arrow) Mouse.move((int)readAxis(A0), (int)-readAxis(A1), 0);<br />
if (!mouse_or_arrow) arrow_key((int)readAxis(A0), (int)-readAxis(A1));</p>
<p>//조이스틱의 버튼을 클릭하는 함수입니다. 사용하지는 않지만 만들어봤습니다.<br />
//mouse_press(mouseButton);</p>
<p>//혹시 눌려져 있는 버튼이 있다면 종료합니다.<br />
Keyboard.releaseAll();<br />
delay(5);<br />
}</p>
</div>
<p><span style="color: #cc99ff"><strong>3.3.2. [soo_retrodyssey.h]</strong></span><br />
조이스틱과 버튼 제어를 위해 직접 제작한 함수입니다. 코드는 살펴보셔도 좋고, 아니면 그 기능만 살펴보셔도 좋습니다. 헤더파일의 함수 기능을 요약해 보았습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-25.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39491" alt="64 ptb 레트로디세이 (25)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-25.png" width="620" height="234" /></a></p>
<p>&nbsp;</p>
<p><strong style="color: #ff9900">3.4. GUI용 qt 프로그래밍 작성</strong></p>
<p>qt creator를 사용하기 위해 총 10개의 함수를 사용하였습니다. 게임기 셋업을 할 때, 슬라이드를 사용하기 위해 8개의 버튼에 해당하는 8개의 ‘on_slidernumber_valueChanged()’를 만들었으며, 슬라이드를 사용하거나 타이핑을 통해 입력한 키보드정보(A ~ Z, 25개의 알파벳과 ESC, TAB 2개의 특수키)를 읽어 아스키코드로 바꿔주는 ‘on_pushButton_clicker()’ 함수와 오디세이x86 보드와 연결된 상태에서 값을 전송해주는 ‘updateButton()’ 함수를 만들었습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-26.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39492" alt="64 ptb 레트로디세이 (26)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-26.png" width="620" height="371" /></a></p>
<p>이후 원하는 키보드를 설정하기 위해 UI환경에서 게임기의 자판 배열에 맞춰 왼쪽의 목록에서 ‘Line Edit’ 위젯과 ‘Vertical Scroll Bar’ 위젯을 사용해 입력 인터페이스를 만듭니다. 이후 키보드 값을 한번에 시리얼 통신으로 전송하기 위해 ‘Push Button’ 버튼을 사용합니다.</p>
<p><span style="color: #ff9900"><strong>3.5. 최종 조립</strong></span><br />
1단계) 밑판 위에 오디세이 보드를 고정시켜줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-6.jpg" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39469" alt="64 ptb 레트로디세이 (6)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-6.jpg" width="620" height="313" /></a></p>
<p>2단계) 회로도에 맞게, 오디세이와 조이스틱 모듈 버튼을 연결합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-27.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39493" alt="64 ptb 레트로디세이 (27)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-27.png" width="620" height="323" /></a></p>
<p>3단계) 밑판의 나사선에 맞춰 윗판을 올린 후 M3 나사로 고정시킵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-7.jpg" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39471" alt="64 ptb 레트로디세이 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-7.jpg" width="620" height="325" /></a></p>
<p>4단계) 원판(붉은색, 파란색)을 삽입하고, 로고(디바이스마트와 seeed 로고)도 끼워줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-28.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39494" alt="64 ptb 레트로디세이 (28)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-28.png" width="620" height="325" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-8.jpg" rel="lightbox[39455]"><img alt="64 ptb 레트로디세이 (8)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-8.jpg" width="620" height="325" /></a></p>
<p>5단계) 완성된 게임기의 모습입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-29.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39495" alt="64 ptb 레트로디세이 (29)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-29.png" width="620" height="317" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-30.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39496" alt="64 ptb 레트로디세이 (30)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-30.png" width="620" height="320" /></a></p>
<p>그래서 이게 진짜, 되는 거야? 라고 하시는 분들을 위해 작동영상도 준비해봤습니다. 작품 시연은 아래 QR코드로 확인해주세요.</p>
<p><a title="시 연 영 사" href="//youtu.be/atN5hFQRGno" target="_blank"><span style="text-decoration: underline">시연 영상 보러가기</span></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-31.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39497" alt="64 ptb 레트로디세이 (31)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-31.png" width="620" height="385" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-32.png" rel="lightbox[39455]"><img class="alignnone size-full wp-image-39498" alt="64 ptb 레트로디세이 (32)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-32.png" width="620" height="231" /></a></p>
<p>&nbsp;</p>
<p><span style="color: #ff6600"><strong>4. 기타</strong></span><br />
<span style="color: #ff9900"><strong>4.1. 소스코드</strong></span><br />
<span style="color: #cc99ff"><strong>4.1.1. odyssey x86 코드</strong></span><br />
soo_retrodyssey.ino</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>//PART0. 변수 선언<br />
#include &#8220;Keyboard.h&#8221;<br />
#include &#8220;Mouse.h&#8221;<br />
#include &#8220;soo_retrodyssey.h&#8221;</p>
<p>// 키보드 GPIO 세팅<br />
const int button1 = 2; //노1<br />
const int button2 = 3; //노2<br />
const int button3 = 4; //노3<br />
const int button4 = 5; //핑1<br />
const int button5 = 6; //핑2<br />
const int button6 = 7; //핑3<br />
const int button7 = 8; //검1<br />
const int button8 = 9; //검2</p>
<p>// 버튼의 중복입력을 방지하는 버퍼로 쓰일 배열입니다.<br />
int button1_state[2] = {0,0};<br />
int button2_state[2] = {0,0};<br />
int button3_state[2] = {0,0};<br />
int button4_state[2] = {0,0};<br />
int button5_state[2] = {0,0};<br />
int button6_state[2] = {0,0};<br />
int button7_state[2] = {0,0};<br />
int button8_state[2] = {0,0};</p>
<p>// ASCII 번호로 누를 키의 정보를 입력합니다. 8개의 버튼에 해당합니다.<br />
int key[8] = {97, 98, 99, 100, 101, 102, 1, 2};//기본세팅 a,b,c,d,e,f,TAB,ESC<br />
int received[24] = {0,};</p>
<p>// 마우스세팅<br />
const int xAxis = A0; // x축 기울기를 읽습니다.<br />
const int yAxis = A1; // y축 기울기를 읽습니다.<br />
// 조이스틱을 마우스로 사용할지, 키보드로 사용할지 판단하는 GPIO입니다.<br />
const int joystick_judger = 13;<br />
bool mouse_or_arrow = false; //true: 마우스, false:화살표<br />
//const int mouseButton = 12; //조이스틱의 버튼을 사용하실 분은 주석을 해제하면 됩니다. 저는 사용하지 않았습니다.<br />
void setup() {<br />
//디지털핀을 세팅합니다.<br />
pinMode(button1, INPUT);<br />
pinMode(button2, INPUT);<br />
pinMode(button3, INPUT);<br />
pinMode(button4, INPUT);<br />
pinMode(button5, INPUT);<br />
pinMode(button6, INPUT);<br />
pinMode(button7, INPUT);<br />
pinMode(button8, INPUT);<br />
pinMode(joystick_judger, INPUT); //마우스 혹은 화살표</p>
<p>//시리얼과 마우스 키보드를 사용합니다.<br />
Serial.begin(9600);<br />
Mouse.begin();<br />
Keyboard.begin();<br />
//시리얼 통신을 시작합니다.<br />
Serial.begin(9600);<br />
Serial.println(&#8220;setup finished&#8221;);<br />
}</p>
<p>void loop() {<br />
//PART1. 시리얼 통신<br />
//Qt로부터 시리얼 데이터를 수신합니다.<br />
int i =0;<br />
while(Serial.available()&gt; 0){<br />
received[i] = Serial.read();<br />
i++;<br />
}</p>
<p>//PART2. 키보드<br />
//시리얼 데이터를 바탕으로, 키를 매핑하는 함수입니다.<br />
select_key(received, key);<br />
//<br />
//키를 누릅니다.<br />
key_press_once(button1, button1_state, key[0]);//노1<br />
key_press_once(button2, button2_state, key[1]);//노2<br />
key_press_once(button3, button3_state, key[2]);//노3<br />
key_press_once(button4, button4_state, key[3]);//핑1<br />
key_press_once(button5, button5_state, key[4]);//핑2<br />
key_press_once(button6, button6_state, key[5]);//핑3<br />
key_press_once(button7, button7_state, key[6]);//검1<br />
key_press_once(button8, button8_state, key[7]);//검2<br />
//PART2. 조이스틱<br />
//조이스틱의 동작여부를 판단합니다.<br />
//D13번 키가 high면 조이스틱이 마우스로 동작, low면 화살표로 동작<br />
if (digitalRead(joystick_judger) == LOW) mouse_or_arrow = false;<br />
if (digitalRead(joystick_judger) == HIGH) mouse_or_arrow = true;</p>
<p>//조이스틱으로 마우스 혹은 키보드 화살표를 제어합니다.<br />
if (mouse_or_arrow) Mouse.move((int)readAxis(A0), (int)-readAxis(A1), 0);<br />
if (!mouse_or_arrow) arrow_key((int)readAxis(A0), (int)-readAxis(A1));</p>
<p>//조이스틱의 버튼을 클릭하는 함수입니다. 사용하지는 않지만 만들어봤습니다.<br />
//mouse_press(mouseButton);</p>
<p>//혹시 눌려져 있는 버튼이 있다면 종료합니다.<br />
Keyboard.releaseAll();<br />
delay(5);<br />
}<br />
</div>
<p>soo_retrodyssey.h</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>// 중복키 설정입니다.<br />
#define FIRST_KEY_DELAY 5 //첫 키입력후, 둘째 키 입력까지 기다리는 정도입니다.<br />
#define MAX_TOGGLE 8 //중복입력 속도를 조절합니다.</p>
<p>//Qt에서 수신한 내용을 ASCII로 저장합니다.<br />
int special_key(int a, int b){<br />
if((a==50) &amp;&amp;(b==54)){<br />
return 1;<br />
}<br />
if((a==50) &amp;&amp;(b==55)){<br />
return 2;<br />
}<br />
return a+49;<br />
}</p>
<p>//Function for 시리얼통신<br />
void select_key(int button_call[], int button_data[]){<br />
//키매핑하는 함수입니다.<br />
for(int i=0;i&lt;24;i++){<br />
switch(button_call[i]-96){<br />
case 1: button_data[6]=special_key(button_call[i+1],button_call[i+2]); break; //검1<br />
case 2: button_data[7]=special_key(button_call[i+1],button_call[i+2]); break; //검2<br />
case 3: button_data[3]=special_key(button_call[i+1],button_call[i+2]); break; //핑1<br />
case 4: button_data[4]=special_key(button_call[i+1],button_call[i+2]); break; //핑2<br />
case 5: button_data[5]=special_key(button_call[i+1],button_call[i+2]); break; //핑3<br />
case 6: button_data[0]=special_key(button_call[i+1],button_call[i+2]); break; //노1<br />
case 7: button_data[1]=special_key(button_call[i+1],button_call[i+2]); break; //노2<br />
case 8: button_data[2]=special_key(button_call[i+1],button_call[i+2]); break; //노3<br />
}<br />
}<br />
}</p>
<p>//조이스틱의 기울기를 읽고 각 축별 -1, 0 ,1을 반환합니다..<br />
int readAxis(int thisAxis) {<br />
int reading = analogRead(thisAxis);<br />
int range = 8;<br />
reading = map(reading, 0, 1023, 0, range);<br />
int distance = reading &#8211; (range / 2);</p>
<p>if (abs(distance) &lt; (range / 2)) {<br />
distance = 0;<br />
}<br />
return distance;<br />
}</p>
<p>//조이스틱으로 화살표를 동작합니다.<br />
void arrow_key( int x_line, int y_line){<br />
if (x_line &gt; 0) Keyboard.press(KEY_RIGHT_ARROW);<br />
if (x_line &lt; 0) Keyboard.press(KEY_LEFT_ARROW);<br />
if (y_line &lt; 0) Keyboard.press(KEY_UP_ARROW);<br />
if (y_line &gt; 0) Keyboard.press(KEY_DOWN_ARROW);<br />
}</p>
<p>//조이스틱으로 마우스 클릭을 하는 함수입니다. 저는 사용하지 않았습니다.<br />
void mouse_press(int mouse_button){<br />
if (digitalRead(mouse_button) == HIGH) {<br />
if (!Mouse.isPressed(MOUSE_LEFT)) Mouse.press(MOUSE_LEFT);<br />
}<br />
else {<br />
if (Mouse.isPressed(MOUSE_LEFT)) Mouse.release(MOUSE_LEFT);<br />
}<br />
}</p>
<p>//키보드를 누르는 코드입니다.<br />
//버튼이 꾹 눌릴경우에 대한, 중복키 설정을 하는 코드입니다.<br />
void key_press_once(const int key_name, int pre_state[], char data){<br />
if (*pre_state &gt; MAX_TOGGLE){<br />
*pre_state = 0;<br />
}<br />
if (digitalRead(key_name) == LOW){<br />
*pre_state = 0;<br />
pre_state[1] = 0;<br />
}<br />
if ((digitalRead(key_name) == HIGH) &amp;&amp;(*pre_state == 0)){<br />
if ((pre_state[1] == 0) || (pre_state[1] &gt; FIRST_KEY_DELAY )){<br />
if(data==1){<br />
Keyboard.press(KEY_TAB);<br />
}<br />
else if(data==2){<br />
Keyboard.press(KEY_ESC);<br />
}<br />
else{<br />
Keyboard.press(data);<br />
}<br />
}<br />
*pre_state = 1;<br />
pre_state[1] += 1;<br />
}<br />
if ((digitalRead(key_name) == HIGH) &amp;&amp;(*pre_state != 0)){<br />
*pre_state = *pre_state +1;<br />
}<br />
}<br />
</div>
<p><span style="color: #cc99ff"><strong>4.1.2. Qt creator 코드</strong></span></p>
<p>seedcontroller.pro</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>QT += core gui serialport // 아두이노 연결<br />
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets<br />
CONFIG += c++11<br />
SOURCES += \<br />
main.cpp \<br />
dialog.cpp<br />
HEADERS += \<br />
dialog.h<br />
FORMS += \<br />
dialog.ui<br />
qnx: target.path = /tmp/$${TARGET}/bin<br />
else: unix:!android: target.path = /opt/$${TARGET}/bin<br />
!isEmpty(target.path): INSTALLS += target<br />
</div>
<p>dialog.h</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#ifndef DIALOG_H<br />
#define DIALOG_H<br />
#include &lt;QDialog&gt;<br />
#include &lt;QSerialPort&gt; // 시리얼 통신을 위한 라이브러리<br />
#include &lt;QString&gt; // QString 자료형 사용을 위한 라이브러리</p>
<p>QT_BEGIN_NAMESPACE<br />
namespace Ui { class Dialog; }<br />
QT_END_NAMESPACE</p>
<p>class Dialog : public QDialog<br />
{<br />
Q_OBJECT<br />
public:<br />
Dialog(QWidget *parent = nullptr);<br />
~Dialog();<br />
private slots:<br />
void updateButton(QString); //시리얼 통신을 통해 아두이노로 값 전달<br />
void on_pushButton_clicked(); //키보드 정보를 유니코드 값으로 변환<br />
void on_slider1_valueChanged(int value); //게임기에 키보드 정보 할당<br />
void on_slider2_valueChanged(int value);<br />
void on_slider3_valueChanged(int value);<br />
void on_slider4_valueChanged(int value);<br />
void on_slider5_valueChanged(int value);<br />
void on_slider6_valueChanged(int value);<br />
void on_slider7_valueChanged(int value);<br />
void on_slider8_valueChanged(int value);</p>
<p>private:<br />
Ui::Dialog *ui; // UI 사용을 위한 객체 생성<br />
QSerialPort *arduino; // 시리얼 포트 연결을 위한 객체 생성<br />
QString arduino_port_name; // 아두이노 포트 정보를 저장할 변수<br />
bool arduino_is_available; // 아두이노가 연결되었는지 확인하는 변수<br />
};<br />
#endif // DIALOG_H<br />
</div>
<p>dialog.cpp</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#include &#8220;dialog.h&#8221;<br />
#include &#8220;ui_dialog.h&#8221;<br />
#include &lt;QSerialPort&gt;<br />
#include &lt;QSerialPortInfo&gt;<br />
#include &lt;QDebug&gt;<br />
#include &lt;QtWidgets&gt;</p>
<p>Dialog::Dialog(QWidget *parent)<br />
: QDialog(parent)<br />
, ui(new Ui::Dialog)<br />
{<br />
ui-&gt;setupUi(this);<br />
arduino_is_available = true;<br />
arduino_port_name = &#8220;COM5&#8243;; // 포트 지정<br />
arduino = new QSerialPort;<br />
if(arduino_is_available)<br />
{<br />
// 아두이노와 시리얼 포트 연결을 위한 설정<br />
arduino-&gt;setPortName(arduino_port_name);<br />
arduino-&gt;open(QSerialPort::WriteOnly);<br />
arduino-&gt;setBaudRate(QSerialPort::Baud9600);<br />
arduino-&gt;setDataBits(QSerialPort::Data8);<br />
arduino-&gt;setParity(QSerialPort::NoParity);<br />
arduino-&gt;setStopBits(QSerialPort::OneStop);<br />
arduino-&gt;setFlowControl(QSerialPort::NoFlowControl);<br />
}<br />
else<br />
{<br />
// 에러 확인<br />
QMessageBox::warning(this, &#8220;Port error&#8221;, &#8220;Cannot connect to Arduino!!!&#8221;);<br />
}<br />
}</p>
<p>Dialog::~Dialog()<br />
{<br />
if (arduino-&gt;isOpen())<br />
{<br />
arduino-&gt;close();<br />
}<br />
delete ui;<br />
}</p>
<p>void Dialog::updateButton(QString command)<br />
{<br />
if(arduino-&gt;isWritable())<br />
{<br />
arduino-&gt;write(command.toStdString().c_str());<br />
}<br />
else<br />
{<br />
qDebug() &lt;&lt; &#8220;Cannot write to serial!&#8221;;<br />
}<br />
}</p>
<p>void Dialog::on_pushButton_clicked()<br />
{<br />
//버튼에 적힌 값을 읽은 후, 그 값이 TAB 이면 26, ESC 이면 27,<br />
//나머지 키보드(알파벳)이면 0 ~ 25의 값을 아두이노로 보낸다.<br />
QString one = ui-&gt;value_label1-&gt;text();<br />
if(one == &#8220;TAB&#8221;)<br />
{<br />
int a = 91;<br />
Dialog::updateButton(QString(&#8220;a%1&#8243;).arg(a-65));<br />
}<br />
else if(one == &#8220;ESC&#8221;)<br />
{<br />
int a = 92;<br />
Dialog::updateButton(QString(&#8220;a%1&#8243;).arg(a-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; one.length(); i++)<br />
{<br />
int one1 = one.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;a%1&#8243;).arg(one1-65));<br />
}<br />
}</p>
<p>QString two = ui-&gt;value_label2-&gt;text();<br />
if(two == &#8220;TAB&#8221;)<br />
{<br />
int b = 91;<br />
Dialog::updateButton(QString(&#8220;b%1&#8243;).arg(b-65));<br />
}<br />
else if(two == &#8220;ESC&#8221;)<br />
{<br />
int b = 92;<br />
Dialog::updateButton(QString(&#8220;b%1&#8243;).arg(b-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; two.length(); i++)<br />
{<br />
int two1 = two.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;b%1&#8243;).arg(two1-65));<br />
}<br />
}<br />
QString three = ui-&gt;value_label3-&gt;text();<br />
if(three == &#8220;TAB&#8221;)<br />
{<br />
int c = 91;<br />
Dialog::updateButton(QString(&#8220;c%1&#8243;).arg(c-65));<br />
}<br />
else if(three == &#8220;ESC&#8221;)<br />
{<br />
int c = 92;<br />
Dialog::updateButton(QString(&#8220;c%1&#8243;).arg(c-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; three.length(); i++)<br />
{<br />
int three1 = three.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;c%1&#8243;).arg(three1-65));<br />
}<br />
}</p>
<p>QString four = ui-&gt;value_label4-&gt;text();<br />
if(four == &#8220;TAB&#8221;)<br />
{<br />
int d = 91;<br />
Dialog::updateButton(QString(&#8220;d%1&#8243;).arg(d-65));<br />
}<br />
else if(four == &#8220;ESC&#8221;)<br />
{<br />
int d = 92;<br />
Dialog::updateButton(QString(&#8220;d%1&#8243;).arg(d-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; four.length(); i++)<br />
{<br />
int four1 = four.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;d%1&#8243;).arg(four1-65));<br />
}<br />
}</p>
<p>QString five = ui-&gt;value_label5-&gt;text();<br />
if(five == &#8220;TAB&#8221;)<br />
{<br />
int e = 91;<br />
Dialog::updateButton(QString(&#8220;e%1&#8243;).arg(e-65));<br />
}<br />
else if(five == &#8220;ESC&#8221;)<br />
{<br />
int e = 92;<br />
Dialog::updateButton(QString(&#8220;e%1&#8243;).arg(e-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; five.length(); i++)<br />
{<br />
int five1 = five.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;e%1&#8243;).arg(five1-65));<br />
}<br />
}</p>
<p>QString six = ui-&gt;value_label6-&gt;text();<br />
if(six == &#8220;TAB&#8221;)<br />
{<br />
int f = 91;<br />
Dialog::updateButton(QString(&#8220;f%1&#8243;).arg(f-65));<br />
}<br />
else if(six == &#8220;ESC&#8221;)<br />
{<br />
int f = 92;<br />
Dialog::updateButton(QString(&#8220;f%1&#8243;).arg(f-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; six.length(); i++)<br />
{<br />
int six1 = six.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;f%1&#8243;).arg(six1-65));<br />
}<br />
}<br />
QString seven = ui-&gt;value_label7-&gt;text();<br />
if(seven == &#8220;TAB&#8221;)<br />
{<br />
int g = 91;<br />
Dialog::updateButton(QString(&#8220;g%1&#8243;).arg(g-65));<br />
}<br />
else if(seven == &#8220;ESC&#8221;)<br />
{<br />
int g = 92;<br />
Dialog::updateButton(QString(&#8220;g%1&#8243;).arg(g-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; seven.length(); i++)<br />
{<br />
int seven1 = seven.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;g%1&#8243;).arg(seven1-65));<br />
}<br />
}</p>
<p>QString eight = ui-&gt;value_label8-&gt;text();<br />
if(eight == &#8220;TAB&#8221;)<br />
{<br />
int h = 91;<br />
Dialog::updateButton(QString(&#8220;h%1&#8243;).arg(h-65));<br />
}<br />
else if(eight == &#8220;ESC&#8221;)<br />
{<br />
int h = 92;<br />
Dialog::updateButton(QString(&#8220;h%1&#8243;).arg(h-65));<br />
}<br />
else<br />
{<br />
for (int i=0; i &lt; eight.length(); i++)<br />
{<br />
int eight1 = eight.at(i).unicode();<br />
Dialog::updateButton(QString(&#8220;h%1&#8243;).arg(eight1-65));<br />
}<br />
}<br />
}</p>
<p>//슬라이드를 움직인 정도(0 ~ 27)를, A ~ Z, TAB, ESC 로 바꿔 QLabelEdit 출력<br />
void Dialog::on_slider1_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label1-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label1-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label1-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider2_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label2-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label2-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label2-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider3_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label3-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label3-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label3-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider4_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label4-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label4-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label4-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider5_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label5-&gt;se tText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label5-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label5-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider6_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label6-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label6-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label6-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider7_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label7-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label7-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label7-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}<br />
void Dialog::on_slider8_valueChanged(int value)<br />
{<br />
int nvalue = value+65;<br />
if (nvalue == 91)<br />
{<br />
ui-&gt;value_label8-&gt;setText(&#8220;TAB&#8221;);<br />
}<br />
else if (nvalue == 92)<br />
{<br />
ui-&gt;value_label8-&gt;setText(&#8220;ESC&#8221;);<br />
}<br />
else<br />
{<br />
ui-&gt;value_label8-&gt;setText(QString(value+65));<br />
qDebug() &lt;&lt; value;<br />
}<br />
}</p>
</div>
<p>main.cpp</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#include &#8220;dialog.h&#8221;<br />
#include &lt;QApplication&gt;<br />
#include &lt;QPixmap&gt;</p>
<p>int main(int argc, char *argv[])<br />
{<br />
QApplication a(argc, argv);<br />
Dialog w;<br />
w.setFixedSize(750, 450);<br />
w.setWindowTitle(&#8220;DEVICEMART &amp;&amp; SEED GAME MACHINE SETTING&#8221;);<br />
w.show();<br />
return a.exec();<br />
}</p>
</div>
<p><span style="color: #ff9900"><strong>4.2. 참고문헌</strong></span></p>
<p>https://www.donga.com/news/It/article/all/20201223/104607777/1</p>
<p>&nbsp;</p>
<p><a title="제품 상세 보러가기" href="https://www.devicemart.co.kr/goods/view?no=12527976" target="_blank"><img class="alignnone size-full wp-image-39499" alt="64 ptb 레트로디세이 (33)" src="http://www.ntrexgo.com/wp-content/uploads/2021/02/64-ptb-레트로디세이-33.png" width="620" height="389" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/39455/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[61호]음성으로 제어하는 간접등 만들기</title>
		<link>http://www.ntrexgo.com/archives/38614</link>
		<comments>http://www.ntrexgo.com/archives/38614#comments</comments>
		<pubDate>Wed, 26 Aug 2020 00:00:07 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[제품 리뷰]]></category>
		<category><![CDATA[프로젝트]]></category>
		<category><![CDATA[61호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[간접등]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[따라하기]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[무작정]]></category>
		<category><![CDATA[음성인식]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=38614</guid>
		<description><![CDATA[디바이스마트매거진 61호 &#124; 디바이스마트 매거진 구독자분들이 이러한 4차 산업혁명 시대에 빠질 수 없는 사물인터넷, 스마트홈에 대한 개념을 이해하고 생각해볼 수 있는 시간을 갖고, 코로나19로 지친 심신을 원하는 장소의 간접등을 설치하는 과정을 통해 기분을 전환해보는건 어떨까 하여 이번 프로젝트를 소개해드리게 되었습니다. ]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-1.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38908" alt="61 ptb 음성간접등 (1)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-1-620x234.png" width="620" height="234" /></a></p>
<p><span style="background-color: #333399; color: #ffffff;"><strong>  아두이노 DIY 무작정 따라하기 (중·고급편)  </strong></span></p>
<p><span style="font-size: xx-large; color: #333399;"><strong>음성으로 제어하는 간접등 만들기 </strong></span></p>
<p><span style="font-size: small;"><strong>음성인식 모듈을 활용하여 내 목소리로 간접등을 끄고 켜고 스마트한 나만의 공간 만들기!</strong></span></p>
<p style="text-align: right;">글 | 디바이스마트 정대진, 박진아</p>
<p>&nbsp;</p>
<p>스마트 스피커로 집안을 제어하거나, 집안의 전기 사용량, 온·오프 등을 앱으로 관리할 수 있게 만들어주는 사물인터넷, 스마트 홈에 대한 관심이 날로 높아지며 일상생활에 많은 변화를 주고 있습니다.<br />
그렇다면 스마트 홈이란 정확히 무엇일까요? 스마트 홈은 사물인터넷 등을 이용해서 가정 내의 시스템들을 자동/원격으로 조작 가능한 환경을 구축한 것을 의미합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
사물인터넷은 유무형의 객체들이 다양한 방식으로 서로 연결되어 개별 객체들이 제공하지 못했던 새로운 서비스를 제공할 수 있게 됨을 말합니다.<br />
</div>
디바이스마트 매거진 구독자분들이 이러한 4차 산업혁명 시대에 빠질 수 없는 사물인터넷, 스마트홈에 대한 개념을 이해하고 생각해볼 수 있는 시간을 갖고, 코로나19로 지친 심신을 원하는 장소의 간접등을 설치하는 과정을 통해 기분을 전환해보는건 어떨까 하여 이번 프로젝트를 소개해드리게 되었습니다.<br />
저희는 사무실이라는 공간적 제약이 있었기에 이번 프로젝트는 회의실 화이트보드위에 간접등을 설치하고 음성 인식 모듈을 통해 음성으로 불 켜짐과 꺼짐을 제어해 보았습니다. 집에서 따라하실 분은 신발장 하부나, 책상아래, 주요 장식장 등 원하는 위치에 설치해보고 따라하는 시간을 가져보시기 바랍니다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
Tip : LED 스트립 길이가 짧아 확장이 필요하다면 18AWG × 2C, 24AWG × 2C 규격의 전선을 구매 후 납땜하여 사용이 가능합니다. 확장한 전선을 깔끔하게 처리하고 싶으신 경우에는 케이블타이와 케이블타이 마운트를 필요한 수량만큼 구매하여 사용하시길 권장합니다.<br />
</div>
<p><span style="color: #0000ff;"><strong>1. 음성 제어 간접등 만들기에 필요한 제품소개</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-2.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38910" alt="61 ptb 음성간접등 (2)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-2-620x448.png" width="620" height="448" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-3.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38912" alt="61 ptb 음성간접등 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-3-620x444.png" width="620" height="444" /></a></p>
<p>필수 준비물 제품은 각 각 한개씩 사용하였으며, 프로젝트에 사용되는 모든 제품은 디바이스마트에서 구매가 가능하오니 디바이스마트 검색창에 상품번호를 입력해보시기 바랍니다.</p>
<div class="symple-box blue none" style="text-align:left; width:100%;"> 
Tip : LED 스트립 길이가 짧아 확장이 필요하다면 18AWG × 2C, 24AWG × 2C 규격의 전선을 구매 후 납땜하여 사용이 가능합니다. 확장한 전선을 깔끔하게 처리하고 싶으신 경우에는 케이블타이와 케이블타이 마운트를 필요한 수량만큼 구매하여 사용하시길 권장합니다.<br />
</div>
<p><span style="color: #0000ff;"><strong>2. 음성인식 모듈에 명령어 세팅하기</strong></span><br />
가장 먼저 이번 프로젝트에서 제일 중요한 음성인식 모듈에 간접등을 음성으로 끄고, 켤 수 있도록 음성 명령어를 세팅해주도록 하겠습니다.</p>
<p><span style="color: #33cccc;"><strong>2.1. 음성 인식 모듈 연결하기</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-4.png" rel="lightbox[38614]"><img class="alignnone size-full wp-image-38914" alt="61 ptb 음성간접등 (4)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-4.png" width="250" height="219" /></a></p>
<p>이번에 사용한 음성 인식 모듈은 최대 15개의 음성 명령어를 저장할 수 있습니다.<br />
음성 명령은 3개의 그룹으로 나뉘며, 각 5개의 음성 명령이 저장되기에 그룹 별로 음성 명령어를 모듈에 저장 한 후, 사용할 그룹을 선택해야 합니다.<br />
음성인식 모듈을 PC와 연결하기 위해서 위와 같이 USB to TTL 컨버터와 모듈을 연결해야 합니다. 이때 Rx와 Tx가 교차되어 연결해야 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-5.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38916" alt="61 ptb 음성간접등 (5)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-5-620x154.png" width="620" height="154" /></a><br />
연결 도식표는 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-6.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38918" alt="61 ptb 음성간접등 (6)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-6-620x249.png" width="620" height="249" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-7.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38920" alt="61 ptb 음성간접등 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-7-620x400.png" width="620" height="400" /></a></p>
<p>음성 인식 모듈과 USB to TTL 컨버터를 연결한 후 PC USB포트에 USB to TTL 컨버터를 꽂아주면 PC의 장치관리자에서 포트 번호를 확인 할 수 있습니다. 저희는 포트 번호가 COM22입니다.</p>
<p><span style="color: #33cccc;"><strong>2.2. 음성인식 모듈에 명령어 저장하기</strong></span><br />
음성 인식 모듈의 데이터 시트에서는 PC와의 연결 할 때, AccessPort라는 시리얼 통신 프로그램 사용을 권하고 있지만 다른 시리얼 통신 프로그램을 사용해도 가능합니다. 이 프로젝트에서는 음성 인식 모듈의 데이터 시트에 권장하는 AceesPort라는 프로그램을 사용하며 음성 인식 명령어를 녹음하는 방법에 대해 알려드리겠습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-8.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38921" alt="61 ptb 음성간접등 (8)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-8-620x400.png" width="620" height="400" /></a></p>
<p>프로그램은 http://www.sudt.com/en/ap/download.htm에서 다운로드 받으실 수 있습니다.<br />
프로그램 다운로드 페이지를 보시면 오른쪽 하단에 있는 AccessPort137.zip을 확인할 수 있습니다. 클릭해서 다운받아준 후, 압축을 해제하면 AccessPort.exe파일이 있습니다. 해당 프로그램을 실행시켜줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-9.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38922" alt="61 ptb 음성간접등 (9)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-9-620x191.png" width="620" height="191" /></a></p>
<p>AccessPort 프로그램을 실행 시킨 후, 왼쪽 상단에 있는 노란색과 초록색의 톱니바퀴 모양의 Configuration 아이콘을 눌러줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-10.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38923" alt="61 ptb 음성간접등 (10)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-10-620x480.png" width="620" height="480" /></a></p>
<p>그럼 Options 창이 뜹니다. 여기서 USB to TTL 컨버터와 연결된 Port 번호를 입력하고, Baud Rate는 9600으로 맞춰줍니다. Send display는 Hex format으로 Receive display는 Char Format으로 설정해준후 OK 버튼을 눌러줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-11.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38924" alt="61 ptb 음성간접등 (11)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-11-620x224.png" width="620" height="224" /></a></p>
<p>이 후 원래창 아래쪽에 Hex 명령어로 ‘AA36’을 Send 버튼을 통해 보내주었을 때, Common Mode라는 답변이 온다면, 제대로 연결된 것입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-12.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38925" alt="61 ptb 음성간접등 (12)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-12-620x162.png" width="620" height="162" /></a></p>
<p>Hex 명령어로 ‘AA11’을 보내면, 음성 명령어 녹음이 시작됩니다. 음성 인식 모듈의 마이크에 대고 명령어를 녹음해주시면 됩니다. 각 명령의 길이는 최대 1300ms(1.3초)이므로, 짧은 단어로 명령을 넣는게 좋습니다. 녹음을 시작하면, 한 그룹의 5가지 음성 명령 녹음을 끝내기 전까지 녹음 과정을 멈출 수 없는점 유의해 주시기 바랍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-13.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38926" alt="61 ptb 음성간접등 (13)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-13-620x539.png" width="620" height="539" /></a></p>
<p>START 라는 답변이 오면 명령어를 녹음해주시면 됩니다. No Voice, Different등을 통해 이전 녹음과 다른지, 녹음이 되고 있는지 확인이 가능합니다. Finish one이 나오면 1개의 명령어가 녹음되었다는 뜻입니다. 순차적으로 5개가 모두 녹음 완료되면, Group 1 finish라는 답변이 옵니다.<br />
저희의 경우에는 불켜, 꺼줘, 하나, 둘, 셋 5가지를 녹음한 후 아두이노를 통해 ‘불켜’, ‘꺼줘’ 명령어만 사용하여 간접등을 제어하였습니다. 실제로 하나, 둘, 셋 같은 단어가 인식률이 더 좋았으며 파동을 인식하는 모듈이기에 불켜와 같은 문장을 명령어로 설정할 경우 똑같은 음정으로 명령어를 발음하여야 인식이 더 잘되는점 참고해서 원하는 명령어를 입력해보시기 바랍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-14.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38927" alt="61 ptb 음성간접등 (14)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-14-620x172.png" width="620" height="172" /></a></p>
<p>이 후 Hex 명령어로 ‘AA21’을 보내주면, Group1 Imported라는 답변이 옵니다. 첫번째 그룹의 5개의 명령어 입력이 끝났습니다.<br />
이 프로그램에서 사용 가능한 명령어 리스트는 아래와 같으며, 이외의 추가적인 명령어는 QR코드에 관련자료 Voice_Recognize_manual.pdf를 참고하시기 바랍니다.<br />
Delete Group 1 &#8211; 0xAA01<br />
Delete Group 2 &#8211; 0xAA02<br />
Delete Group 3 &#8211; 0xAA03<br />
Delete All Groups &#8211; 0xAA04<br />
Record Group 1 &#8211; 0xAA11<br />
Record Group 2 &#8211; 0xAA12<br />
Record Group 3 &#8211; 0xAA13<br />
Import Group 1 &#8211; 0xAA21<br />
Import Group 2 &#8211; 0xAA22<br />
Import Group 3 &#8211; 0xAA23<br />
<span style="color: #ff9900;">Switch Common Mode &#8211; 0xAA36</span><br />
<span style="color: #ff9900;"> Switch Compact Mode &#8211; 0xAA37</span></p>
<p>Common Mode는 음성 명령값을 ‘Result:11’과 같은 ASCII 코드 값으로 전달해 주지만, Compact Mode는 음성 명령값을 ‘11’과 같은 Hex값으로 전달해줍니다.<br />
따라서 처음 PC와 음성 인식 모듈을 연결하여, 음성 명령을 녹음 할 때는 Common Mode(AA36)를 사용하여 녹음하고 이후 아두이노등의 플랫폼에서 사용 할때는 Compact Mode(AA37)로 사용해야 합니다.</p>
<div class="symple-box blue none" style="text-align:left; width:100%;"> 
Tip : 음성 명령어는 녹음할 때 사용자의 목소리 위주로 인식하기 때문에, 다른 사람이 명령어를 넣으면 제대로 작동하지 않을 수 있습니다.<br />
</div>
<p><span style="color: #0000ff;"><strong>3. 하드웨어 구성 하기</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-15.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38928" alt="61 ptb 음성간접등 (15)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-15-594x620.png" width="594" height="620" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-16.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38929" alt="61 ptb 음성간접등 (16)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-16-620x286.png" width="620" height="286" /></a></p>
<p>회로도와 상세연결도식표를 보며 아두이노를 브레드보드, 음성인식 모듈, 릴레이모듈에 연결해줍니다.<br />
저희는 회의실에 실제로 장착하는데 편리하고자 음성 인식 키트를 구매하면 같이 오는 케이스에 구멍을 뚫고 모든 하드웨어를 넣어 정리해주었으나 필수적인 작업은 아닙니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-17.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38930" alt="61 ptb 음성간접등 (17)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-17-620x368.png" width="620" height="368" /></a></p>
<div class="symple-box blue none" style="text-align:left; width:100%;"> 
Tip : 하드웨어 전체를 케이스에 넣게될 경우엔 아두이노에 코딩 작업을 하기 어려워지니 케이스에 넣기 전에 코딩작업을 먼저 진행하시길 권장드립니다.<br />
</div>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-1.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38907" alt="61 ptb 음성간접등 (1)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-1-620x368.jpg" width="620" height="368" /></a></p>
<p>전선의 경우, LED 스트립 설치 시 전선길이가 부족했기에 안내해드렸던 추가전선과 LED 스트립선을 납땜, 수축튜브를 활용하여 연결해주었습니다.<br />
작업이 완료된 LED 스트립은 항상 불이 켜져있는 상태가 아닌 아두이노에서 신호를 주었을 때만 불이 들어와야 하기 때문에 중간에 릴레이를 거쳐서 DC잭에 연결하여 줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-18.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38931" alt="61 ptb 음성간접등 (18)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-18-620x285.png" width="620" height="285" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-2.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38909" alt="61 ptb 음성간접등 (2)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-2-620x377.jpg" width="620" height="377" /></a></p>
<p>DC잭에서 출력되는 전압은 아두이노의 VIN핀, GND로 연결하여 아두이노에 전원을 공급해주고, 또한 릴레이를 거쳐 LED스트립에 전원을 공급해 줍니다. LED스트립의 플러스 선(빨간선)은 다이렉트로 DC잭의 플러스 선으로 연결해주고, LED스트립의 마이너스 선(검정선)은 릴레이의 NO(Normal Open)단자에 연결해줍니다. 또 릴레이의 COM(Common)단자에는 DC잭의 마이너스 선으로 연결해주면 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-3.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38911" alt="61 ptb 음성간접등 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-3-620x364.jpg" width="620" height="364" /></a></p>
<p>전원 어댑터와 연결된 DC 잭을 통해 아두이노와 LED 스트립에 전원을 공급하게 됩니다. 또 릴레이 모듈과 음성 인식 모듈에도 5V를 인가해줘야 하기 때문에 아두이노의 5V 출력 핀에서 브레드 보드를 통해 전원을 나눠서 공급할 수 있게 연결을 해줬습니다.<br />
저희는 전선처리를 더욱 깔끔하게 하기위해 필수사항은 아니나 DC 잭에 연결하는 전선앞을 펜홀단자로 작업 후에 연결하였습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-4.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38913" alt="61 ptb 음성간접등 (4)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-4-620x467.jpg" width="620" height="467" /></a></p>
<p>완성된 모습은 위와 같습니다. 점퍼선들로 복잡해 보이지만 회로도를 보고 따라서 천천히 작업하다보면 쉽게 하실 수 있습니다.</p>
<p><span style="color: #0000ff;"><strong>4. 아두이노 설치 및 소스코드 업로드하기</strong></span><br />
하드웨어까지 완료되었다면 이제 음성으로 LED 스트립이 잘 제어될 수 있게 코딩작업을 진행해보도록 하겠습니다. 앞서 말씀드렸듯이 작업과정에 따라 하드웨어 구성보다 코딩작업이 먼저 진행되어도 무관함합니다.<br />
<strong></strong></p>
<p><span style="color: #33cccc;"><strong>4.1. 아두이노 통합개발환경(IDE)</strong></span><br />
아두이노 IDE(Integrated Development Environment)는 아두이노 프로그램을 작성하고 컴파일할 수 있는 통합 개발 환경입니다. 아두이노 공식 홈페이지에서 무료로 제공하고 있어서 편리하게 사용할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-19.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38932" alt="61 ptb 음성간접등 (19)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-19-620x438.png" width="620" height="438" /></a></p>
<p><span style="color: #33cccc;"><strong>4.2. 아두이노 통합개발환경(IDE) 설치</strong></span><br />
아두이노 통합환경은 아두이노 공식 홈페이지(https://www.arduino.cc)에서 다운 받을 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-20.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38933" alt="61 ptb 음성간접등 (20)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-20-620x350.png" width="620" height="350" /></a></p>
<p>아두이노 공식 홈페이지에 접속하신 후 SOFTWARE-DOWNLOADS를 클릭해 주세요. Download the Arduino IDE 부분에서 각자 운영체제의 알맞은 버전의 파일을 선택해서 다운받으시면 됩니다. 제가 다운로드 받을 시점에서 최신 버전은 1.8.13입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-21.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38934" alt="61 ptb 음성간접등 (21)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-21-620x313.png" width="620" height="313" /></a></p>
<p>파일을 선택하시면 아두이노 소프트웨어에 대한 기부를 권하는 창이 뜹니다. 기부를 하지 않으시려면 JUST DOWNLOAD를 클릭하시면 다운로드 됩니다.</p>
<p><span style="color: #33cccc;"><strong>4.3. 아두이노 통합개발환경(IDE) 기본 세팅</strong></span><br />
IDE를 사용하는 방법에 대해 알려드리겠습니다.<br />
IDE 환경에서 아두이노 보드(Board)와 포트(Port)를 맞춰줘야 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-22.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38935" alt="61 ptb 음성간접등 (22)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-22-620x514.png" width="620" height="514" /></a></p>
<p>보드를 선택하는 방법은 메뉴바 &#8211; 툴 &#8211; 보드 &#8211; Arduino Uno 보드를 선택해 주면 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-23.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38936" alt="61 ptb 음성간접등 (23)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-23-620x514.png" width="620" height="514" /></a></p>
<p>포트 선택하는 방법은 메뉴바 &#8211; 툴 &#8211; 포트에서 아두이노에 해당하는 COM 포트를 선택해 주면 됩니다.</p>
<p><span style="color: #33cccc;"><strong>4.4. 소스코드 업로드하기</strong></span><br />
이번 프로젝트에 사용 할 소스코드 전체는 아래와 같습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>/*<br />
www.devicemart.co.kr<br />
Voice Recognition Module test<br />
*/</p>
<p>#include &lt;SoftwareSerial.h&gt;<br />
SoftwareSerial mySerial(2, 3);<br />
int relay= 7;<br />
byte voice_recogn= 0;</p>
<p>void setup()<br />
{<br />
Serial.begin(9600);<br />
mySerial.begin(9600);<br />
Serial.println(&#8220;wait settings are in progress&#8221;);<br />
pinMode(relay, OUTPUT);<br />
delay(1000);<br />
mySerial.write(0xAA);<br />
mySerial.write(0&#215;37);<br />
delay(1000);<br />
mySerial.write(0xAA);<br />
mySerial.write(0&#215;12);<br />
Serial.println(&#8220;The settings are complete&#8221;);<br />
}</p>
<p>void loop()<br />
{<br />
while(mySerial.available())<br />
{<br />
Serial.println(&#8220;voice input&#8221;);<br />
voice_recogn=mySerial.read();<br />
switch(voice_recogn)<br />
{<br />
case 0&#215;11:<br />
digitalWrite(relay,HIGH);<br />
Serial.println(&#8220;relay turn on&#8221;);<br />
break;</p>
<p>case 0&#215;12:<br />
digitalWrite(relay,LOW);<br />
Serial.println(&#8220;relay turn off&#8221;);<br />
break;</p>
<p>case 0&#215;13:<br />
//<br />
break;</p>
<p>case 0&#215;14:<br />
//<br />
break;</p>
<p>case 0&#215;15:<br />
//<br />
break;</p>
<p>}<br />
}<br />
}<br />
</div>
<p>업로드 하는 방법은 아두이노 IDE 툴에서 보드와 포트가 정확히 선택되었는지 확인하신 후, 위쪽 오른편에 있는 화살표 모양을 클릭해 주시면 업로드가 진행됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-24.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38937" alt="61 ptb 음성간접등 (24)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-24-620x452.png" width="620" height="452" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-25.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38938" alt="61 ptb 음성간접등 (25)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-25-600x620.png" width="600" height="620" /></a></p>
<p>업로드가 완료되면 아래편에 업로드 완료라고 표시가 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-26.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38939" alt="61 ptb 음성간접등 (26)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-26-620x160.png" width="620" height="160" /></a></p>
<p>소스 코드에 대해 설명드리겠습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#include &lt;SoftwareSerial.h&gt;<br />
SoftwareSerial mySerial(2, 3);<br />
int relay= 7;<br />
byte voice_recogn= 0;<br />
</div>
<p>음성 인식 모듈과 아두이노를 Serial 통신으로 연결하여 사용하기 위해, 소프트웨어 시리얼 라이브러리를 포함시키고, 디지털 2번핀 3번핀을 각각 Rx핀 Tx핀으로 할당시켜주는 코드입니다. 릴레이를 제어하기 위해 디지털 7번핀에 relay 변수를 선언하고, 음성을 인식하기 위한 변수 voice_recogn를 초기값 0으로 선언해주었습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void setup()<br />
{<br />
Serial.begin(9600);<br />
mySerial.begin(9600);<br />
Serial.println(&#8220;wait settings are in progress&#8221;);<br />
pinMode(relay, OUTPUT);<br />
delay(1000);<br />
mySerial.write(0xAA);<br />
mySerial.write(0&#215;37);<br />
delay(1000);<br />
mySerial.write(0xAA);<br />
mySerial.write(0&#215;12);<br />
Serial.println(&#8220;The settings are complete&#8221;);<br />
}<br />
</div>
<p>보드에 전원이 들어왔을 때 혹은 리셋 되었을 때 한번만 동작하는 Setup()함수에 작성해야 할 내용입니다. Serial.begin()함수와 mySerial.begin()함수를 9600보오 레이트로 통신 속도로 설정해줍니다. relay 변수를 출력모드로 설정해주고, Serial통신으로 연결된 음성 인식 모듈에 명령어를 넣어 Compact Mode로 설정, Group2에 연결된 명령어를 가져와 줍니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>void loop()<br />
{<br />
while(mySerial.available())<br />
{<br />
Serial.println(&#8220;voice input&#8221;);<br />
voice_recogn=mySerial.read();<br />
switch(voice_recogn)<br />
{<br />
case 0&#215;11:<br />
digitalWrite(relay,HIGH);<br />
Serial.println(&#8220;relay turn on&#8221;);<br />
break;</p>
<p>case 0&#215;12:<br />
digitalWrite(relay,LOW);<br />
Serial.println(&#8220;relay turn off&#8221;);<br />
break;</p>
<p>case 0&#215;13:<br />
//<br />
break;</p>
<p>case 0&#215;14:<br />
//<br />
break;</p>
<p>case 0&#215;15:<br />
//<br />
break;<br />
}<br />
}<br />
}<br />
</div>
<p>loop()함수에 들어가는 내용은 아두이노에 전원이 들어가 있는 한 계속 반복됩니다.<br />
처음 While(mySerial.availble())을 통해 음성 인식 모듈로 음성이 인식되면 voice_recogn변수에 음성 인식 모듈을 통해 읽은 데이터를 저장하고, 저장한 명령어가 맞다면 switch 문을 통해 동작을 제어 할 수 있습니다. 이번 예제에서는 음성 인식 모듈로 릴레이를 on/off만 제어하기 때문에 1번 그룹의 case 0&#215;11(명령어1), case 0&#215;12(명령어2)만 사용하여 릴레이를 on/off하는 동작을 제어하였고, 사용하지 않을 명령어 case 0&#215;13(명령어3), case 0&#215;14(명령어4), case 0&#215;15(명령어5)는 주석처리(//) 하였습니다.</p>
<p><span style="color: #0000ff;"><strong>5. 불키고, 끄고 확인하고 완성하기</strong></span></p>
<p><span style="color: #0000ff;"><strong><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-5.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38915" alt="61 ptb 음성간접등 (5)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-5-620x405.jpg" width="620" height="405" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-6.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38917" alt="61 ptb 음성간접등 (6)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-6-620x256.jpg" width="620" height="256" /></a></strong></span></p>
<p>하드웨어 구성과 코딩작업이 완료된 후에는 LED 스트립은 필요한 장소에 부착합니다.<br />
LED스트립은 원하는 길이 만큼 컷팅이 가능하며 뒷면이 접착식으로 되어 원하는 장소에 부착이 간편합니다. 설치가 완료되고 나면 전원을 공급한 후 입력한 명령어에 따라 불이 켜지고 꺼짐을 확인해봅니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-7.jpg" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38919" alt="61 ptb 음성간접등 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-7-620x408.jpg" width="620" height="408" /></a></p>
<p>완성된 모습입니다. 회의실 한편이 은은한 조명으로 멋스러워졌습니다.</p>
<p><span style="background-color: #ffff00;"><strong>만일 명령어를 말했을때 불이 들어오지 않는다면?</strong></span></p>
<p><span style="color: #ff6600;"><strong>1. LED 스트립과 릴레이가 제대로 동작하는지 확인해 보세요.</strong></span><br />
음성 인식에 대한 코드는 사용하지 않고, 1초마다 릴레이를 On/Off하는 아래 소스코드를 아두이노에 직접 업로드 해줍니다. 이를 통해 LED가 켜졌다 꺼졌다를 반복하는지를 보며 릴레이와 LED스트립이 제대로 동작하는지 확인할 수 있습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
Box Content<br />
</div>
<p>이 코드를 사용해서 릴레이가 제대로 동작하지 않는다면 배선을 다시 한번 점검해보시거나 모듈의 불량을 의심하여 모듈을 교체해줍니다.</p>
<p><strong><span style="color: #ff6600;">2. 음성인식 모듈이 제대로 작동하는지 확인해 보아야합니다.</span></strong></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-27.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38940" alt="61 ptb 음성간접등 (27)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-27-510x620.png" width="510" height="620" /></a></p>
<p>아두이노와 연결했을 때 아두이노 시리얼 모니터를 통해 음성인식 모듈에 명령어가 제대로 인식되고 있는지 확인 가능합니다.<br />
아두이노 IDE에서 오른쪽 위에 있는 시리얼 모니터 버튼을 클릭해주세요.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-28.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38941" alt="61 ptb 음성간접등 (28)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-28-620x133.png" width="620" height="133" /></a></p>
<p>아두이노에서 음성 인식 모듈에 명령어를 불러오기가 끝나면 위 화면과 같이 ‘The settings are complete’라고 출력이 됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-29.png" rel="lightbox[38614]"><img class="alignnone size-large wp-image-38942" alt="61 ptb 음성간접등 (29)" src="http://www.ntrexgo.com/wp-content/uploads/2020/08/61-ptb-음성간접등-29-620x354.png" width="620" height="354" /></a></p>
<p>음성을 인식해 주면 아래와 같이 ‘voice input’이라는 글자가 출력이 되고, 첫번째와 두번째 명령어를 인식하면 ‘relay turn on/off’로 글자가 출력이 됩니다.<br />
모듈이 제대로 작동하는데도 명령어를 인식하지 못한다면 더쉽고 명확한 단어로 명령어를 변경하시거나 녹음한 음정과 똑같은 음정으로 발음해보시기 바랍니다. 모듈이 제대로 작동하지 않는다면 모듈의 불량을 의심하여 모듈을 교체하기시 바랍니다.<br />
자, 이제 모든 과정이 끝났습니다. 구독자 분들이 이번 프로젝트를 함께하며 음성인식 기능과 사물인터넷에 대해 조금이나마 쉽게 생각할 수 있는 기회가 되셨길 바라며 다음에도 더 쉽고 재미난 프로젝트로 찾아뵙도록 하겠습니다!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/38614/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[57호]나만의 이미지 인식 장치, Google AIY Vision Full Kit 출시</title>
		<link>http://www.ntrexgo.com/archives/37579</link>
		<comments>http://www.ntrexgo.com/archives/37579#comments</comments>
		<pubDate>Wed, 04 Dec 2019 02:08:19 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[blog-posts]]></category>
		<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[57호]]></category>
		<category><![CDATA[AIY Vision]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[이미지 인식장치]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=37579</guid>
		<description><![CDATA[디바이스마트매거진 57호 &#124; 구글에서 나만의 이미지 인식 장치, Google AIY Vision Full Kit 출시]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="http://www.devicemart.co.kr/data/goods/1/2019/11/_tmp_919b2c7aa48db17bc85dcff12cfa136f5672large.jpg?1580782224452" /></p>
<p><span style="background-color: #000000; color: #ffffff;"><strong>Google </strong></span></p>
<p><span style="font-size: x-large;"><strong>나만의 이미지 인식 장치, Google AIY Vision Full Kit 출시</strong></span></p>
<p>인공지능 프로젝트 개발에 관심이 있지만, 어디서부터 시작해야 하는지 고민하는 메이커 들을 위해 구글이 AIY 프로젝트인 메이커 DIY 인공지능 키트를 제작하였다. AIY란 인공지능<br />
을 뜻하는 AI와 소비자가 원하는 물건을 직접 만들 수 있는 DIY (Do it Yourself)의 합성어로 자신의 AI 인공지능 제품을 직접 개발해 볼 수 있는 프로젝트를 의미한다. AIY 첫 번째 프로젝트는 이전에 소개하였던 Voice Kit로 라즈베리파이에 마이크와 스피커 를 장착하고 구글 음성인식 대화 사용자 인터 페이스 기능을 통해 스마트한 스피커를 만들 수 있는 제품이었다. 이번에 소개하는 제품은 AIY 두 번째 프로 젝트로 라즈베리파이 제로 W, 라즈베리파이 카메라, SD카드를 이용하여 구동되는 물체를 보고 식별할 수 있는 이미지 인식 AI 개발을위한 Vision Kit이다. 이전과 달리 라즈베리파이 제로버전 제품이 키트와 함께 제공되며, 카메라로 촬영되는 영 상 속에 물체를 인식할 수 있고, 응용 시 카 메라가 얼굴을 따라가는 기능을 구현해 낼 수 있는 특징이 있다. 이 외에도, 메인(VisionBonnet) 기판은 인텔의 비전 프로세서 모비디우스(Movidius) MA2450 가 탑재돼 있으며, 카메라에서 신경망(CNN) 모 델을 가동할 수 있다. 소프트웨어는 텐서플로 우(TensorFlow) 기반 3종류의 신경망 모델을 포함하며 카메라 RGB 버튼의 색상 전환 등에 사용하기 위한 Python API도 제공된다. 구글의 AIY 프로젝트 제품들은 디바이스마 트에서 바로 만나 볼 수 있다.</p>
<p><a href="http://www.devicemart.co.kr/goods/view?no=12379084"><span style="color: #0000ff;">Google AIY Vision Full Kit 보러가기 </span></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/37579/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[56호]특별한 날을 더 즐겁게 만들어줄 할로윈 LED 호박램프 만들기 세트</title>
		<link>http://www.ntrexgo.com/archives/37546</link>
		<comments>http://www.ntrexgo.com/archives/37546#comments</comments>
		<pubDate>Thu, 03 Oct 2019 08:30:17 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[56호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[LED 호박램프]]></category>
		<category><![CDATA[YwRobot]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[할로윈]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=37546</guid>
		<description><![CDATA[디바이스마트매거진 56호 &#124; 특별한 날을 더 즐겁게 만들어줄 할로윈 LED 호박램프 만들기 세트 출시]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="https://lh3.googleusercontent.com/b438ilbR_x-TFk7Mj8sFrRy-_LM0JK2_qpe15yODSS8k_FO5vfHj5C2Iw039Ok0hA_jv_RrcVMNKosy6LCypO99u5wCC4BqP_GtJfKE_D8lREKk0TZd8Qdx7XCU6HropUx9oB9gd" width="356" height="334" /></p>
<p><span style="color: #ffffff; background-color: #000000;"><strong>YwRobot </strong></span></p>
<p><strong><span style="font-size: x-large;">특별한 날을 더 즐겁게 만들어줄 할로윈 LED 호박램프 만들기 세트</span></strong></p>
<p>10월이면 떠오르는 축제 중 하나가 바로 할로 윈이다. 미국 전역에서 매년 10월 31일에 다양한 분장을 하고 즐기는 축제로, 할로윈 축제에 대한 관심과 인기가 꾸준히 증가하고 있다. 우리나라에서도 과거와 달리 할로윈데이를 즐 기는 사람들이 많아지면서 다양한 할로윈 소품 들이 출시되고 있다. 디바이스마트에서 가장 인기 있는 독점브랜드 인 YwRobot에서 할로윈을 겨냥한 LED 모듈을 이용한 호박램프 만들기 세트를 출시했다. 작고 귀여운 디자인, 3D 프린터로 출력한 PLA재질의 호박램프 세트는 할로윈 하루를 위한 소 품이 아닌 각종 액세서리 보관함으로도 활용할 수 있다. 호박램프, 조명용 LED 모듈, CR2032 코인 배 터리로 구성된 LED 호박램프 세트로 다가오는 할로윈 분위기를 만끽해보자. 현재 디바이스마트 에서 다양한 종류의 할로윈 소품을 구매할 수 있 다.</p>
<p><a href="http://www.devicemart.co.kr/goods/view?no=12170772">LED 호박램프 만들기 세트 보러가기</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/37546/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[56호]내가 직접 만드는 DIY 음주 측정 키트 출시!</title>
		<link>http://www.ntrexgo.com/archives/37524</link>
		<comments>http://www.ntrexgo.com/archives/37524#comments</comments>
		<pubDate>Thu, 03 Oct 2019 07:30:53 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[56호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[아두이노]]></category>
		<category><![CDATA[음주측정 키트]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=37524</guid>
		<description><![CDATA[디바이스마트매거진 56호 &#124; 디바이스마트에서 내가 직접 만드는 DIY 음주 측정 키트가 출시되었다.]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="https://lh6.googleusercontent.com/lsbyb_YjF3FFVtDH485vJFU6E_BrLd3wMHnJ4P6Z4wpMIsIjQ_rZB_E1cgNEUIUm35ai2kmlIvsPj_KzzOWZMVzX3OeAabcMj5-AytSHQ0bESYk1E1kt5drkEXhcGj97m2rpJYQi" width="374" height="373" /></p>
<p><strong><span style="color: #ffffff; background-color: #000000;">디바이스마트</span></strong></p>
<p><strong><span style="font-size: x-large;">내가 직접 만드는 DIY 음주 측정 키트 출시!</span></strong></p>
<p>많은 메이커들이 스스로 만드는 재미와 성 취감 덕분에 DIY 키트로 눈길을 돌리고 있다. 디바이스마트는 이에 발맞춰 아두이노 DIY 키트 시리즈를 제작하며 어렵게만 느껴진 기 술들을 더 쉽고 재미있게 접할 수 있도록 아 두이노 음주 측정 키트를 출시했다. 본 제품은 교육, 체험, 원리 이해를 위해 구 성된 제품으로 아두이노와 Digit shield, 알코 올 측정 센서로 구성되었다. 알코올 측정 센 서가 측정한 값을 세븐세그먼트를 통해 확인 하며 일정 수치에 다다르면 부저가 울리는 원 리이다. 최근 음주 운전 처벌기준이 강화되면서 많 은 사람이 음주측정기에 대한 관심이 커지고 있다. 아두이노 음주 측정 키트는 실제 음주 측정 장비와는 다른 제품이지만, DIY 키트를 만들어보며 음주 측정 원리 이해는 물론 음주<br />
Product 운전에 대한 경각심을 고취할 수 있는 계기가 될 수 있을 것이다. 현재 오직 디바이스마트에서만 판매하고 있 는 제품으로, 예제소스를 포함한 상세한 정보 는 사이트를 통해 확인할 수 있다.</p>
<p>제품 구성</p>
<p>· Arduino Uno (R3) 호환보드</p>
<p>· Arduino Digit Shield</p>
<p>· MQ-3 아두이노 알코올 센서 모듈</p>
<p>· 테스트[CH254] 소켓 점퍼 케이블 40P (칼라) (M/F) 10cm</p>
<p>· 5V 능동 부저 [FQ-011]
<p>· LCD 서포트 황동 2.5파이M-5mm</p>
<p>· LCD 서포트 황동 2.5파이 F-6mm</p>
<p><a href="http://www.devicemart.co.kr/goods/view?no=12232871"><span style="color: #0000ff;">음주측정 키트 보러가기 </span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/37524/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[53호]일상 속 미세먼지 차단, 가정용 공기청정기 DIY 키트 출시</title>
		<link>http://www.ntrexgo.com/archives/36669</link>
		<comments>http://www.ntrexgo.com/archives/36669#comments</comments>
		<pubDate>Tue, 02 Apr 2019 07:01:51 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[53호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[공기청정기]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=36669</guid>
		<description><![CDATA[디바이스마트매거진 53호 &#124; 디바이스마트에서는 가정용 공기청정기 DIY 키트를 출시했다.]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="https://lh3.googleusercontent.com/MkhU_I4YRhosglMijc08KmuIz7OtMDuDB8WWSo42z4VFIJg4teWeUSSoDI-8tgzccKl51ez-drTJQyAGX4xbwle3lFdX02DkobhXVI2Hln7PxAbUXtmyjJU81B4zzKf9DehZ_UOM" width="304" height="304" /></p>
<p><strong><span style="color: #ffffff; background-color: #000000;">(주)엔티렉스</span></strong></p>
<p><span style="font-size: x-large;"><strong>일상 속 미세먼지 차단, 가정용 공기청정기 DIY 키트 출시</strong></span></p>
<p>사계절 내내 미세먼지가 일상이 되면서 미세 먼지 관련 용품이 불티나게 팔리고 있다. 특히 생활 공간 속에서 미세먼지에 대응하는 제품 으로 공기청정기가 필수 가전제품으로 떠오르 고 있다. (주)엔티렉스에서는 소비자들이 공기 청정기를 직접 만들어볼 수 있는 DIY 공기청정 기 키트를 출시해 뜨거운 반응을 이끌어내고 있다. 이 제품은 H12 등급으로 미세먼지를 0.5 ㎛~1㎛(마이크로미터, 1/100만) 크기 미세먼지 및 유해 물질을 거를 수 있는 샤오미 미에 어 호환 헤파필터(추가구매 필요)를 기반으로 구성되어 있으며, 이 필터에 직접 결합하는 디 퓨저 팬은 60㎡/hr의 넉넉한 풍량과 저소음 구 동이 장점이다. 별도의 외장 케이스가 없는 등 기존 완제품 공기청정기와는 비교할 수 없으 나 간단하게 드라이버와 펜치를 활용해 구성 품 하나하나 직접 조립해 볼 수 있다는 장점과 저렴한 가격(필터 포함 46,000원)이라는 강력 한 무기로 출시되자마자 디바이스마트 종합 인기순위 1위에 오르는 등 뜨거운 반응을 보이고 있다. 제품에 대한 더욱 자세한 내용과 구매는 디바이스마트 홈페이지에서 확인할 수 있다.</p>
<p><a href="http://www.devicemart.co.kr/goods/view?no=10895759"><span style="color: #0000ff;">가정용 공기청정기 DIY 키트 보러가기</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/36669/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[52호]고전 게임의 추억을 되살리는 게임 DIY, SUPERPI CASE J &amp; MEGAPI CASE M</title>
		<link>http://www.ntrexgo.com/archives/36522</link>
		<comments>http://www.ntrexgo.com/archives/36522#comments</comments>
		<pubDate>Fri, 01 Feb 2019 00:00:07 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[52호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[고전게임]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[메가파이]]></category>
		<category><![CDATA[슈퍼파이]]></category>
		<category><![CDATA[케이스]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=36522</guid>
		<description><![CDATA[디바이스마트매거진 52호 &#124; Retroflag에서는 고전 게임기를 재해석한 디자인의 케이스로 퀄리티가 높은 라즈베리파이 호환 SUPERPi CASE J와 MEGAPi CASE M을 선보였다. ]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="http://www.devicemart.co.kr/data/goods/1/2018/12/10824362_tmp_7cdaa1f5107f1d0ba182df2cdfb740dd1276large.jpg" width="600" height="600" /></p>
<p><img alt="" src="http://www.devicemart.co.kr/data/goods/1/2019/01/_tmp_29cbc4043f5900100023b0d90b8996b57900large.jpeg?1561366598321" width="600" height="600" /></p>
<p>&nbsp;</p>
<p><span style="color: #ffffff; background-color: #000000;"><b>Retroflag</b></span></p>
<p><strong><span style="font-size: x-large;">고전 게임의 추억을 되살리는 게임 DIY, SUPERPi CASE &amp; MEGAPi CASE M</span></strong></p>
<p>Retroflag에서는 고전 게임기를 재해석한 디자인의 케이스로 퀄리티가 높은 라즈베리파이 호환 SUPERPi CASE J와 MEGAPi CASE M을 선보였다. 디자인뿐만 아니라 여러 가지 특징을 자랑하는데, 첫번째로 Retroflag에서 제공하는 전원 스크립트를 통해 보다 안전하게 전원 및 리셋 제어가 가능하다. 이 케이스로는 슈퍼패미컴 버튼을 사용해 터미널 접속을 하지 않아도 정상 셧다운을 실행시킬 수 있어 매우 편리하다. 두번째로 측면에 확장 포트가 있어 유선 인터넷을 연결하거나 USB 주변장치 추가가 가능하고 사용하지 않을 때에는 전용 커버로 덮어둘 수 있어 보호가 용이하여 후면에는 전원, HDMI, 3.5mm strereo 포트가 후면에 설계되어 있어 선정리가 용이하고 게임팩의 추억을 되살리는 설계로 게임기의 팩 삽입부에 메모리를 수납할 수 있어 공간 활용에 보다 효율적이다. 전체적으로 라즈베리파이 외부 인터페이스를 슈퍼패미컴의 스타일로 잘 구현해 가격 대비 퀄리티가 우수해 추천한다. 제품명에서 알 수 있듯이 MEGAPi CASE M은 유명한 Sega의 콘솔인 16비트 메가드라이브에서 영감을 얻어 그대로 구현한 케이스이다. MD1이라고 불리우는 초기의 메가드라이브의 크기를 줄여 완성도가 높은 디자인을 자랑한다. 또한 SUPERPi CASE J와 마찬가지로 MEGAPi CASE M도 전원 스크립트를 통해 안전한 전원 및 리셋 제어, 케이스를 열지 않고도 SD 카드 및 다른 모든 포트에 쉽게 접근이 가능하며 고급 기능을 내장하고 있어 편리하다. 디바이스마트에서 더욱 자세한 설명을 확인할 수 있으며 구매도 가능하다.</p>
<p><a href="http://www.devicemart.co.kr/goods/view?no=10824362"><span style="color: #0000ff;">SUPERPI CASE J 라즈베리파이 레트로 st [JCASE] 제품 보러가기</span></a></p>
<p><a href="http://www.devicemart.co.kr/goods/view?no=10826209"><span style="color: #0000ff;">라즈베리파이 MEGAPi CASE-M 레트로 메가드라이브st 게임기 DIY 케이스 제품 보러가기</span></a></p>
<p>&nbsp;</p>
<p><img class="aligncenter" alt="" src="http://www.devicemart.co.kr/data/editor/goods/1/2018/12/10824362_15505494423697.jpg" width="600" height="2395" /></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2019/06/screencapture-devicemart-co-kr-goods-view-2019-06-24-18_08_44.png" rel="lightbox[36522]"><img class="aligncenter size-full wp-image-36524" alt="screencapture-devicemart-co-kr-goods-view-2019-06-24-18_08_44" src="http://www.ntrexgo.com/wp-content/uploads/2019/06/screencapture-devicemart-co-kr-goods-view-2019-06-24-18_08_44.png" width="783" height="2696" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/36522/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[47호]전 연령대에 적합한 DIY 로봇키트 SUNFOUDER 원격제어 4족 보행 로봇</title>
		<link>http://www.ntrexgo.com/archives/35187</link>
		<comments>http://www.ntrexgo.com/archives/35187#comments</comments>
		<pubDate>Tue, 10 Apr 2018 00:00:40 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[프로덕트 뉴스]]></category>
		<category><![CDATA[47호]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[NEWS]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=35187</guid>
		<description><![CDATA[디바이스마트매거진 47호 &#124; 오픈 소스 로봇, 항공기 모델 및 스마트 기기등의 제품을 제조해 STEM 교육에 중점을 둔 기업 SUNFOUDER에서 DIY 원격제어 4족 보행 로봇키트를 출시했다.]]></description>
				<content:encoded><![CDATA[<p><span style="color: #ffffff;background-color: #000000"><strong>  SUNFOUDER  </strong></span></p>
<p><span style="font-size: x-large"><strong>전 연령대에 적합한 DIY 로봇키트 </strong></span></p>
<p><span style="font-size: x-large"><strong>SUNFOUDER 원격제어 4족 보행 로봇</strong></span></p>
<p>오픈 소스 로봇, 항공기 모델 및 스마트 기기등의 제품을 제조해 STEM 교육에 중점을 둔 기업 SUNFOUDER에서 DIY 원격제어 4족 보행 로봇키트를 출시했다.</p>
<p>아두이노, 서보 및 무선 모듈을 사용하는 방법뿐만 아니라 Arduino용 로봇 키트에는 원격 제어 기능이 있는 로봇을 만드는 데 필요한 모든 것이 포함되어 있다.<br />
이 키트는 각 제품에 대해 간단하고 쉬운 학습을 위한 상세한 매뉴얼, 코드, 회로도, 드라이브 등 다운로드 관련 자료를 함께 제공하기 때문에 프로그래밍을 보다 쉽게 할 수 있다. DIY 4족 보행 로봇키트는 5mm 두께의 목재 플레이트로 제작되어 12개의 서보를 사용하여 4개의 다리를 유연하게 제어할 수 있다. DIY 로봇 키트를 제작해보는 과정 자체가 흥미로운 경험을 제공하므로 이 과정을 통해 자동화, 임베디드 시스템, 기계 엔지니어링, IoT 등 다양한 분야를 학습할 수 있다.<br />
자신만의 DIY 로봇 키트를 제작해보고 싶다면 SUNFOUDER의 DIY 원격제어 4족 보행 로봇키트가 좋은 출발점이 될 수 있을 것이다. 제품에 대한 더 자세한 정보는 디바이스마트 홈페이지(http://www.devicemart.co.kr)에서 확인할 수 있다.</p>
<p><strong>제품 구성</strong><br />
· 1 Set x 목재 플레이트<br />
· 1 Set x 나사<br />
· 2 x nRF24l01 모듈<br />
· 2 x SunFounder 나노보드<br />
· 1 x 리모컨<br />
· 1 x 서보 컨트롤 보드<br />
· 2 x 18650 배터리홀더<br />
· 12 x SunFounder 서보<br />
· 1 x USB 데이터케이블<br />
· 1 x 와이어 하네스 튜브 (80cm)<br />
· 1 x 리본(50cm)<br />
· 1 x 보정 차트(calibration chart)<br />
· 1 x 스크류드라이버</p>
<p><img alt="" src="http://www.devicemart.co.kr/skin/fogoods/large/1377434_4.jpg" /></p>
<p>&nbsp;</p>
<p><a href="http://www.devicemart.co.kr/1377434#" target="_blank">원격제어 4족보행 로봇 V2.0 Remote Control Crawling Quadruped Robot Model V2.0 [CZ0097] 제품 구매하러 가기</a></p>
<p><a href="http://www.devicemart.co.kr/goods/brand.php?seq=2137" target="_blank">SUNFOUDER 제품군 구경하러 가기</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/35187/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
	</channel>
</rss>
