<?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; sesne hat</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/sesne-hat/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>[38호]라즈베리파이 SENSE HAT 리뷰</title>
		<link>http://www.ntrexgo.com/archives/31932</link>
		<comments>http://www.ntrexgo.com/archives/31932#comments</comments>
		<pubDate>Sun, 25 Sep 2016 05:30:01 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[특집]]></category>
		<category><![CDATA[38호]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[sesne hat]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[라즈베리파이]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=31932</guid>
		<description><![CDATA[디바이스마트 매거진 38호 &#124; 한마디로 Sense HAT 보드는 라즈베리파이보드 기반에서 현존하는 어지간한 센서는 모두 장착된 올인원 쉴드보드 정도라고 보면 틀리지 않을 듯합니다.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/Cap-2016-12-08-10-23-45-719.jpg" rel="lightbox[31932]"><img class="alignnone size-large wp-image-32190" alt="Cap 2016-12-08 10-23-45-719" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/Cap-2016-12-08-10-23-45-719-620x294.jpg" width="620" height="294" /></a></p>
<p><span style="font-size: medium;background-color: #800080;color: #ffffff"><strong>라즈베리파이 SENSE HAT 리뷰</strong></span></p>
<p><span style="font-size: xx-large"><strong>우주정거장으로 날아 간</strong></span></p>
<p><span style="font-size: xx-large"><strong>라즈베리파이 Sense HAT</strong></span></p>
<p style="text-align: right">글 | 금강초롱 blog.naver.com/crucian2k3</p>
<p style="text-align: left">
<p style="text-align: left">우리는 누군가가 순발력과 재치가 있어 다른 사람에게 일종의 기쁨 내지는 편안함을 선사한다면 ‘그 사람 참 센스가 있더라’라는 칭찬성 멘트를 일상에서 사용하곤 합니다.</p>
<p>이번에는 이러한 의미로 흔히 사용하곤 하는 센스(Sense : 감각)와 알파벳 대문자로 HAT(hat : 모자, 머리)라는 키워드가 붙은 보드라 조금은 어색함을 느끼며 리뷰를 시작하게 되었습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-1.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32136" alt="38 sr 금강초롱 (1)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-1.jpg" width="542" height="304" /></a></p>
<p>HAT가 그냥 모자를 의미하지는 않을듯하여 잠시 찾아보니 Hardware Attached on Top(HAT : 업보드, 쉴드 보드 등)의 머리글자를 따서 HAT를 만들었음을 알 수 있었습니다. 그냥 멀티센서쉴드 정도로 명명하면 누구나 쉽게 이해 할 수 있지 않을까 생각도 듭니다만 아두이노 진영에서 사용하는 쉴드라는 용어는 가급적 쓰고 싶지 않았을 수도 있고 아두이노는 이탈리아 태생이고 라즈베리파이는 잉글랜드 태생이라 문화적인 차이에 기인하기도 한 것으로 여겨집니다.<br />
한마디로 Sense HAT 보드는 라즈베리파이보드 기반에서 현존하는 어지간한 센서는 모두 장착된 올인원 쉴드보드 정도라고 보면 틀리지 않을 듯합니다.</p>
<p>필자가 느끼는 아쉬움을 거론한다면 바이브레이션모터와 피에조스피커를 꼽을 수 있을 것입니다. 만일 Sense HAT에 진동과 사운드를 발생시킬 수 있는 소자가 추가가 되었더라면 더욱 크게 히트치지 않았을까 생각을 해봤습니다.</p>
<p>여러분~ 이제 이 센스쟁이 모자(?)와 즐거운 여행을 떠나 볼까요?</p>
<p>이 글은 (주)엔티렉스의 지원을 받아 작성하게 되었습니다.</p>
<p>라즈베리파이의 파이는 파이썬에서 따왔을 만큼 파이썬 언어와 관련이 깊습니다. 파이썬으로 작성된 센스햇 라이브러리와 gcc 기반에서 작성된 예제를 차근차근 실행시켜 보면서 이 보드가 어떤 재미난(?) 일을 할 수 있는지를 살펴보도록 하겠습니다.<em id="__mceDel"><br />
</em></p>
<p><span style="color: #800080"><strong>1. 개요</strong></span></p>
<table style="width: 620px" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center">구분</td>
<td style="text-align: center">I2C Addr.</td>
<td>성능(기능)</td>
</tr>
<tr>
<td style="text-align: center">MCU</td>
<td style="text-align: center">0&#215;46</td>
<td>ATtiny88</td>
</tr>
<tr>
<td style="text-align: center">자이로스코프</td>
<td style="text-align: center">0x1C</td>
<td>LSM9DS1, 각도측정센서 : ±245/500/2000dps</td>
</tr>
<tr>
<td style="text-align: center">가속도계</td>
<td style="text-align: center">0x1C</td>
<td>LSM9DS1, 선형가속센서 : ±-2/4/8/16g</td>
</tr>
<tr>
<td style="text-align: center">지자기센서</td>
<td style="text-align: center">0x6A</td>
<td>LSM9DS1, Magnetic Sensor: ± 4/8/12/16gauss</td>
</tr>
<tr>
<td style="text-align: center">기압센서</td>
<td style="text-align: center">0x5C</td>
<td>LPS25H, 260 &#8211; 1260hPa absolute range</td>
</tr>
<tr>
<td style="text-align: center">온도센서</td>
<td style="text-align: center">0x5F</td>
<td>HTS221, ± 2degC in the 0-65 degC</td>
</tr>
<tr>
<td style="text-align: center">습도센서</td>
<td style="text-align: center">0x5F</td>
<td>HTS221, 20-80%Rh의 범위 내에서 정확도 +/- 4.5%, 15-40degC의 범위 내에서 정확도 +/- 0.5degC</td>
</tr>
<tr>
<td style="text-align: center">디스플레이 모듈</td>
<td style="text-align: center">0&#215;46</td>
<td>LED2472G, 8&#215;8 LED matrix display</td>
</tr>
<tr>
<td style="text-align: center">조이스틱</td>
<td style="text-align: center">0&#215;46</td>
<td>ALPS SKRHABE010, 소형 5 button joystick</td>
</tr>
</tbody>
</table>
<p>Sense HAT 보드는 Atmel사(현재는 Microchip사(PIC)에 인수합병 됨)의 8비트 MCU인 ATtiny88을 기반으로 설계되어졌으며 일반적으로 사용되는 거의 모든 종류의 센서가 총망라 되어 있습니다. 모션센서는 MPU6050등 6축으로 구성된 칩이 하비일렉트로닉스 시장에서는 널리 사용됩니다만 이 보드에서는 ST Microelectronics의 LSM9DS1을 사용하여 9축 정보를 제공하는 등 차별화를 시도하고 있는 점이 이채롭습니다.<br />
각각의 센서에 대한 정보를 살펴보는 것이 Sense HAT 보드를 이해하는데 상당한 도움이 될 듯하며 우선 총괄적인 부분을 살펴보면 아래와 같습니다.<br />
이제 이 글을 읽는 독자님들이 궁금해 할 각각의 센서를 개략적으로 살펴보도록 하겠습니다.</p>
<p><span style="color: #81499e"><strong>1.1. 9축 모션센서</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-2.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32138" alt="38 sr 금강초롱 (2)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-2.jpg" width="259" height="247" /></a><br />
● 모델명 : LSM9DS1<br />
● 칩벤더 : ST Microelectronics사<br />
● 주요 기능<br />
· 3축 가속도계, 3축 자이로, 3축 지자계 센서<br />
· ±2/±4/±8/±16g 선형가속계 감도<br />
· ±4/±8/±12/±16가우스 지자계 센서 감도<br />
· ±245/±500/±2000dps angular rate full scale<br />
· 16-bit 데이터 출력<br />
· SPI / I2C serial 인터페이스<br />
· Analog 부문 공급전압 1.9V to 3.6V<br />
· “Always-on” eco power mode down to 1.9mA<br />
· Programmable interrupt generators<br />
· 온도센서 내장<br />
· Embedded FIFO<br />
· 위치, 움직임 감지 함수 내장<br />
· 휴대기기를 위한 저전력소모 기능 내장</p>
<p>일전에도 다룬바 있는 Genuino 101 보드에서도 모션센서를 내장하고 있기는 합니다만 가속도계와 자이로센서로 구성된 6축을 채용하고 있습니다.<br />
Sense HAT에 내장된 9축 모션센서는 피치, 롤, 요 정보를 제대로 출력해 줄 수 있으므로 쿼드콥터, 밸런싱로봇, 게임기 등등 움직임이 수반되는 기기에 응용해 볼 수 있을 것으로 봅니다.</p>
<p><span style="color: #81499e"><strong>1.2. 기압센서</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-3.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32140" alt="38 sr 금강초롱 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-3.jpg" width="254" height="177" /></a><br />
● 모델명 : LPS25H<br />
● 칩벤더 : ST Microelectronics사<br />
● 주요 기능<br />
· 절대기압 범위 260 to 1260hPa<br />
· 고 분해능 모드 : 1Pa RMS<br />
· 저 소비전력 : (저 분해능 모드)4μA, (고 분해능 모드)25μA<br />
· 과압성능(High overpressure capability) : 20x full scale<br />
· 내장 온도보정 기능<br />
· Embedded 24-bit ADC<br />
· Selectable ODR from 1Hz to 25Hz<br />
· SPI and I²C 인터페이스<br />
· 동작전압 : 1.7 to 3.6V<br />
· 충격성능(High shock survivability) : 10,000g</p>
<p>Sense HAT을 활용하여 대기 중 온도, 습도, 기압 정보를 얻어와 날씨정보를 표시하거나 고도정보를 표시하는 용도로 응용이 가능할 듯합니다.<br />
흔히 사용되지 않는 기압센서를 이번 기회에 라즈베리파이 유저들이 간편하게 접근해 볼 수 있도록 세심한 배려를 해둠에 감사할 따름입니다.</p>
<p><span style="color: #81499e"><strong>1.3. 온습도센서</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-4.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32142" alt="38 sr 금강초롱 (4)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-4.jpg" width="254" height="186" /></a><br />
● 모델명 : HTS221<br />
● 칩벤더 : ST Microelectronics사<br />
● 주요 기능<br />
· 상대습도측정 범위 : 0 to 100%<br />
· 온도측정범위 : -40 to +120°C<br />
· 전원공급 : 1.7 to 3.6V<br />
· 소비전력 : 2μA @ 1Hz ODR<br />
· Selectable ODR from 1Hz to 12.5Hz<br />
· 고감도 rH : 0.004% rH/LSB<br />
· 습도정밀도 : ± 3.5% rH, 20 to +80% rH<br />
· 온도정밀도 : ± 0.5°C, 15 to +40°C<br />
· 온습도 데이터 출력 : 16-bit<br />
· SPI and I²C 인터페이스<br />
· 제조자 보정 후 출고<br />
· 패키지사이즈 : Tiny 2 x 2 x 0.9mm</p>
<p>취미전자 등에 흔히 사용하는 DHT-xx 시리즈에 비해 넓은 온습도 측정범위를 가진 칩이 장착되어져 있습니다. 이 칩이 제공해주는 기능을 활용해 라즈베리파이로 에어컨, 자동제어 등의 실험을 해볼 수 있을 것으로 예상해 봅니다.</p>
<p><span style="color: #81499e"><strong>1.4. RGB 고휘도 LED 모듈</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-5.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32144" alt="38 sr 금강초롱 (5)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-5.jpg" width="254" height="353" /></a><br />
● 모델명 : CLP6R-FKW<br />
● 칩벤더 : CREE사<br />
● 주요 기능<br />
· 사이즈(mm) : 6.0 x 5.0<br />
· 주파장(Dominant Wavelength) : Red (610 &#8211; 625nm), Green (514 &#8211; 534nm), Blue (460 &#8211; 480nm)<br />
· 광도(Luminous Intensity, mcd) : Red (450 &#8211; 1800), Green (710 &#8211; 1800), Blue (280 &#8211; 710)<br />
· 가시각 : 120 degree</p>
<p>풀칼라 표현이 가능한 RGB 고휘도 LED모듈로 Sense HAT에는 8행 8열, 즉 64개가 실장되어 있습니다. 매우 밝고 반응속도도 빠르며 픽셀마다 RGB 독립 혹은 혼합색 표현이 가능하므로 각종 정보 표출이나 게임 등에 재미난 활용가치가 있을 것으로 봅니다.<br />
다만 ATtiny88에 의해 다이나믹 제어를 하고 있으므로 전체적인 리프레시 타임은 한계가 있습니다.<br />
보다 효과적인 LED 통제를 위해 LED2472G 8채널 FULL COLOR LED 드라이버를 사용하고 있으며 컬럼 라인은 래치를 사용하여 MCU가 직접 제어를 하는 방식으로 설계되어 있습니다.</p>
<p><span style="color: #81499e"><strong>1.5. 5버튼 조이스틱</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-6.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32146" alt="38 sr 금강초롱 (6)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-6.jpg" width="546" height="226" /></a><br />
● 모델명 : SKRHABE010<br />
● 칩벤더 : ALPS사<br />
● 주요 기능 : 4방향키 + center push 스위치<br />
● 스위치 내부구조</p>
<p><span style="color: #800080"><strong>2. Hello World에 도전하기</strong></span></p>
<p><span style="color: #81499e"><strong>2.1. 기본환경</strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-7.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32148" alt="38 sr 금강초롱 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-7.jpg" width="545" height="219" /></a></p>
<p>우선 실험을 진행하기 위해서는 라즈베리파이3와 Sense HAT을 결합하고 여기에 라즈비안(운영체제)까지 깔려있는 상태여야 합니다.<br />
라즈베리파이3를 사용한다면 와이파이모듈이 기본적으로 내장되어 있으므로 외부에서 간단히 접속할 수 있습니다.<br />
와이파이 동글을 끼우지 않아도 되고 RJ45 잭을 꽂지 않아도 이더넷 환경이 만들어 진다는 것은 대단한 강점이라고 볼 수 있겠습니다.<br />
여기까지의 상황에 대한 준비는 전월호(36호)의 ‘라즈베리파이를 활용한 인터넷 라디오 &amp; 게임머신 작업기’편에서 다뤘으므로 참고하시기 바랍니다.<br />
※ 필자의 블로그 참조 :<br />
<a href="http://blog.naver.com/crucian2k3/220788282079" target="_blank">http://blog.naver.com/crucian2k3/220788282079</a></p>
<p>자, Tera Term을 띄워 라즈베리파이에 접속해 들어갑니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-8.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32150" alt="38 sr 금강초롱 (8)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-8.jpg" width="548" height="315" /></a></p>
<p>SSH가 지원이 되는 터미널프로그램이라면 어떤 것이든 상관없습니다.<br />
· 접속 아이디와 비밀번호 : pi / raspberry</p>
<p>이렇게 접속한 후 보여지는 첫 화면은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-34.jpg" rel="lightbox[31932]"><img class="alignnone  wp-image-32193" alt="38 sr 금강초롱 (34)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-34-620x278.jpg" width="558" height="250" /></a></p>
<p><span style="color: #81499e"><strong>2.2. Sense HAT API 설치</strong></span><br />
우선 라즈베리파이에 API(이하 라이브러리)가 설치되어 있어야 합니다.<br />
공식 설치소개 페이지는 아래 주소를 참고 합니다.<br />
<a href="https://www.raspberrypi.org/documentation/hardware/sense-hat/" target="_blank">https://www.raspberrypi.org/documentation/hardware/sense-hat/</a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>$ sudo apt-get update<br />
$ sudo apt-get install sense-hat<br />
$ sudo reboot</p>
</div>
<p>이 라이브러리가 설치되면 자이로스코프, 가속도계, 지자기센서, 온도센서, 습도센서, 기압센서, 조이스틱 등을 자유롭게 접근할 수 있습니다.</p>
<p>이렇게 라이브러리를 설치한 후에 시험 삼아 Hello.py를 작성해 봅니다.<br />
작성된 파일에 chmod 755 hello.py를 하여 실행파일로 만들어 줍니다.<br />
파이썬으로 만들어진 파일을 실행을 시킬 때는 ./hello.py를 칩니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p><span style="color: #3366ff">pi@raspberrypi:~/examples/crucian2k3 $ cat hello.py</span><br />
#!/usr/bin/python</p>
<p>from sense_hat import SenseHat<br />
sense = SenseHat()<br />
sense.show_message(“Hello world!”)</p>
<p><span style="color: #3366ff">pi@raspberrypi:~/examples/crucian2k3 $ chmod 755 hello.py</span><br />
<span style="color: #3366ff"> pi@raspberrypi:~/examples/crucian2k3 $ ls -al</span><br />
total 12<br />
drwxr-xr-x 2 pi pi 4096 Aug 31 22:27 .<br />
drwxr-xr-x 6 pi pi 4096 Aug 31 22:22 ..<br />
-rwxr-xr-x 1 pi pi 105 Aug 31 22:27 hello.py<br />
<span style="color: #3366ff">pi@raspberrypi:~/examples/crucian2k3 $</span></p>
</div>
<p>동작하고 있는 장면은 아래와 같습니다.<br />
‘Hello World’가 우에서 좌로 살짝 빠르게 스크롤 됩니다.<br />
이처럼 스크롤이 일어나는 것은 Sense HAT 내부에 ATtiny88이 올려져 있기 때문입니다. 라즈베리파이 SOC는 ‘뿌려져라’라는 명령을 I2C 채널을 통해 ATtiny88로 보내고, MCU에서는 후처리를 알아서 담당하는 방식입니다. 일종의 역할분담입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-9.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32152" alt="38 sr 금강초롱 (9)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-9.jpg" width="542" height="310" /></a><br />
아래는 Tera Term에서 명령을 내리는 모든 과정을 캡처한 것입니다.<br />
여기서</p>
<p><span style="color: #3366ff">$ ls -al hello.py</span>는 hello.py가 실행이 가능한 상태인 755 퍼미션이 들어가 있는지 보는 것입니다.</p>
<p><span style="color: #3366ff">$ cat hello.py</span>는 hello.py에 무슨 내용이 담겨져 있는지 리스팅 해보는 것입니다.</p>
<p><span style="color: #3366ff">$ ./hello.py</span>는 리눅스 등 유닉스 기반의 OS에서는 실행할 때 실행파일명과 경로를 반드시 명기해야 하며 ./는 현재 경로를 의미 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-10.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32154" alt="38 sr 금강초롱 (10)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-10.jpg" width="542" height="315" /></a></p>
<p>여기까지는 잘 따라 오셨나요?<br />
일단 Hello Word에 성공하였다면 Sense HAT을 갖고 놀고, 즐길 수 있는 만반의 준비가 끝났다고 볼 수 있습니다.<br />
사실 이러한 제품을 구상하고 만드는 사람이 어렵지 쓰는 사람은 그저 그 분들의 노고에 감사해하며 잘 써주면 그만일 듯합니다.</p>
<p><span style="color: #800080"><strong>3. Sense HAT 학습을 위한 재단의 배려</strong></span></p>
<p>이제부터 Sense HAT을 학습에 어떻게 이용할 수 있는지를 살펴보도록 하겠습니다.<br />
라즈베리파이 재단에서는 가르치는 선생님을 위한 페이지, 공부하고자 하는 학생을 위한 페이지, 그리고 활용할 수 있는 실습코너 등을 준비해 놓고 있습니다.<br />
정말 어지간한 정성이 아니고선 보기 힘든 싸이트라고 생각 됩니다.<br />
필자는 모든 코너를 따라가며 실행해 보았습니다.<br />
정말 감탄이 절로 나올 정도로 잘 만들어져 있음을 알 수 있었습니다.<br />
이 글을 읽는 독자님들도 한번쯤 방문해 보실 것을 강력히 권합니다.<br />
우측 상단에 ‘<strong>Help / Teach / Learn / Make</strong>’ 가 메인 링크입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-11.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32156" alt="38 sr 금강초롱 (11)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-11.jpg" width="542" height="330" /></a><br />
<a href="https://www.raspberrypi.org/learning/getting-started-with-the-sense-hat/" target="_blank">https://www.raspberrypi.org/learning/getting-started-with-the-sense-hat/</a><br />
재단에서 신경 써서 만들어 놓은 것 중에 시뮬레이터라는 것도 있습니다.<br />
라즈베리파이보드와 Sense HAT을 갖고 있지 않더라도 간단한 실험을 여기에서 해볼 수 있습니다. 크롬웹브라우져에서는 별 탈 없이 구동되나 인터넷익스플로러 상에서는 약간의 문제가 있어 보입니다. 아래는 Rainbow.py를 구동시켜본 장면입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-12.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32158" alt="38 sr 금강초롱 (12)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-12.jpg" width="542" height="334" /></a></p>
<p><span style="color: #800080"><strong>4. Sense HAT 활용을 위한 API 접근</strong></span></p>
<p>Sense HAT으로 뭔가를 해보고자 한다면 라즈베리파이 재단에서 공개한 API에 대해 학습해 보는 것이 순서일 듯합니다.<br />
API는 일종의 라이브러리라고 이해해도 무방하며 이 역시 파이썬으로 제작이 되어 있습니다. 아래 주소에서 최신판에 대한 확인이 가능합니다.</p>
<p>https://github.com/RPi-Distro/python-sense-hat</p>
<p>이 API는 Sense HAT이 가지고 있는 모든 종류의 센서를 비롯하여 조이스틱까지를 핸들링 할 수 있도록 파이선 기반으로 작성되어 있으며, 파이선 자체가 워낙 가독성이 좋으므로 언어를 잘 몰라도 어떻게 동작이 되는지를 짐작해 보는데 큰 무리는 없다고 봅니다.<br />
프로그램은 sense_hat.py에 본격적으로 기술되어 있습니다.<br />
이장에서 언급하는 API는 아래 주소를 참조 하였습니다.</p>
<p>https://pythonhosted.org/sense-hat/api/</p>
<p><span style="color: #81499e"><strong>4.1. LED 매트릭스 핸들링과 관련된 API(라이브러리)</strong></span><br />
LED 매트릭스는 RGB 색상을 가지는 LED가 8*8로 배열되어 있으며 ATtiny88 AVR에 의해 제어됩니다. 포드절약을 위해 다이나믹 디스플레이 방식을 사용함에 따라 한번에 8개의 LED가 점등한 후 나머지는 소등하는 방식으로 바르게 반복하여 원하는 글자나 문양을 표현해 낼 수 있습니다.<br />
만일 라즈베리파이 메인 SOC에게 이 일을 시키면, LED 매트릭스에 글자 표시하느라 다른 일을 제대로 할 수 없을 것입니다.</p>
<p><span style="color: #a37acc"><strong>4.1.1. set_rotation</strong></span><br />
● 기능 : 라즈베리파이를 거꾸로 사용하거나 옆으로 사용하여야 하는 상황에서 이미지의 방향을 회전시킬 수 있는 기능을 제공합니다.<br />
이 함수는 인자를 2개 갖습니다. 첫 번째 인자는 회전하는 각도를 담고 두 번째 인자는 갱신시킬 것인지를 결정하며, 만일 두 번째 인자를 생략하면 작동으로 True가 입력되어 갱신이 일어납니다. 이러한 기능은 아래 함수에서 똑같이 적용됩니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-3.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32141" alt="38 sr 금강초롱 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-3.png" width="542" height="257" /></a></p>
<p>● 예제 코드</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat<br />
sense = SenseHat()<br />
sense.set_rotation(180)<br />
# 다른 방법으로 이렇게 할 수도 있음<br />
sense.rotation = 180<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.2. flip_h</strong></span><br />
● 기능 : LED 매트릭스에 표출된 이미지를 수평방향으로 반전시킵니다.<br />
반전된 RGB 값이 들어 있는 목록정보가 리턴됩니다.<br />
파라메터에 값을 넣지 않으면 True가 자동으로 입력되어 리프레시가 일어납니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-7.png" rel="lightbox[31932]"><img alt="38 sr 금강초롱 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-7.png" width="541" height="143" /></a></p>
<p>&nbsp;</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python<br />
from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.flip_h()</p>
</div>
<p><span style="color: #a37acc"><strong>4.1.3. flip_v</strong></span><br />
● 기능 : LED 매트릭스에 표출된 이미지를 수직방향으로 반전시킵니다.<br />
반전된 RGB 값이 들어 있는 목록정보가 리턴됩니다.<br />
파라메터에 값을 넣지 않으면 True가 자동으로 입력되어 리프레시가 일어납니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-4.png" rel="lightbox[31932]"><img alt="38 sr 금강초롱 (4)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-4.png" width="542" height="144" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.flip_v()<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.4. set_pixels</strong></span><br />
● 기능 : 화소값의 64바이트 길이를 갖는 리스트에 기반하여 LED매트릭스 행렬을 업데이트 합니다. 이 함수는 리턴값이 없습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-8.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32151" alt="38 sr 금강초롱 (8)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-8.png" width="541" height="111" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()</p>
<p>X = [255, 0, 0] # Red<br />
O = [255, 255, 255] # White</p>
<p>question_mark = [<br />
O, O, O, X, X, O, O, O,<br />
O, O, X, O, O, X, O, O,<br />
O, O, O, O, O, X, O, O,<br />
O, O, O, O, X, O, O, O,<br />
O, O, O, X, O, O, O, O,<br />
O, O, O, X, O, O, O, O,<br />
O, O, O, O, O, O, O, O,<br />
O, O, O, X, O, O, O, O<br />
]
<p>sense.set_pixels(question_mark)<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.5. get_pixels</strong></span><br />
64바이트의 RGB정보가 포함된 목록이 리턴됩니다.<br />
픽셀리스트에 담겨진 정보가 RGB565 포맷 즉 R:5, G:6, B:5로 됨에 따라 컬러비트 손실이 발생됨에 유의해야 합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
pixel_list = sense.get_pixels()</p>
</div>
<p><span style="color: #a37acc"><strong>4.1.6. set_pixel</strong></span><br />
● 기능 : x, y로 지정된 픽셀의 색좌표를 설정 할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-9.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32153" alt="38 sr 금강초롱 (9)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-9.png" width="541" height="267" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()</p>
<p># examples using (x, y, r, g, b) //각각의 좌표와 r,g,b를 넣는 방법<br />
sense.set_pixel(0, 0, 255, 0, 0)<br />
sense.set_pixel(0, 7, 0, 255, 0)<br />
sense.set_pixel(7, 0, 0, 0, 255)<br />
sense.set_pixel(7, 7, 255, 0, 255)</p>
<p>red = (255, 0, 0)<br />
green = (0, 255, 0)<br />
blue = (0, 0, 255)</p>
<p># examples using (x, y, pixel) // 튜플로 엮어서 한방에 넣는 방법이 있음<br />
sense.set_pixel(0, 0, red)<br />
sense.set_pixel(0, 0, green)<br />
sense.set_pixel(0, 0, blue)</p>
</div>
<p><span style="color: #a37acc"><strong>4.1.7. get_pixel</strong></span><br />
● 기능 : 지정된 좌표의 픽셀의 r,g,b 값을 반환합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-10.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32155" alt="38 sr 금강초롱 (10)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-10.png" width="541" height="106" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
top_left_pixel = sense.get_pixel(0, 0)<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.8. load_image</strong></span><br />
● 기능 : 8*8로 구성된 rgb 이미지를 LED 매트릭스에 표시합니다.<br />
rgb로 변환되어 표출된 픽셀값을 반환합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-11.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32157" alt="38 sr 금강초롱 (11)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-11.png" width="541" height="134" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
invader_pixels = sense.load_image(“space_invader.png”, redraw=False)<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.9. clear</strong></span><br />
● 기능 : LED 매트릭스를 단일 색상으로 정리합니다. 기본적으로는 블랭크(아무것도 없는 상태, off)로 만들어 줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-12.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32159" alt="38 sr 금강초롱 (12)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-12.png" width="541" height="227" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat<br />
from time import sleep</p>
<p>sense = SenseHat()</p>
<p>red = (255, 0, 0)</p>
<p>sense.clear() # no arguments defaults to off<br />
sleep(1)<br />
sense.clear(red) # passing in an RGB tuple<br />
sleep(1)<br />
sense.clear(255, 255, 255) # passing in r, g and b values of a colour<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.10. show_message</strong></span><br />
● 기능 : 오른쪽에서 왼쪽으로 스크롤되는 텍스트 메시지를 보여줍니다. 배경화면의 색상을 지정해줄 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-13.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32161" alt="38 sr 금강초롱 (13)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-13.png" width="541" height="210" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.show_message(“One small step for Pi!”, text_colour=[255, 0, 0])<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.11. show_letter</strong></span><br />
● 기능 : LED 매트릭스에 하나의 문자를 표출합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-14.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32163" alt="38 sr 금강초롱 (14)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-14.png" width="541" height="139" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>import time<br />
from sense_hat import SenseHat</p>
<p>sense = SenseHat()</p>
<p>for i in reversed(range(0,10)):<br />
sense.show_letter(str(i))<br />
time.sleep(1)<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.12. low_light</strong></span><br />
● 기능 : Sense HAT을 어두운 환경에서 사용 시 조도를 낮춰서 사용할 수 있도록 해줍니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>import time<br />
from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.clear(255, 255, 255)<br />
sense.low_light = True<br />
time.sleep(2)<br />
sense.low_light = False</p>
</div>
<p><strong><span style="color: #a37acc">4.1.13. gamma</span></strong><br />
● 기능 : 고급사용자를 위한 기능입니다. 일반 유저는 위의 low_light 정도만 사용해도 문제가 없습니다.<br />
Sense HAT 파이선API는 리눅스프레임 버퍼로 데이터가 넘어갈 때 565포맷으로 변환을 시키며 이 값이 LED 매트릭스 제어용 MCU인 AtTiny88 AVR로 전달됩니다.<br />
감마테이블이 이 값이 변환되는 과정에 관여하는 것으로서 0~31사이의 값으로 정의되어 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-15.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32165" alt="38 sr 금강초롱 (15)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-15.png" width="541" height="117" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>import time<br />
from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.clear(255, 127, 0)</p>
<p>print(sense.gamma) # 현재의 감마 값<br />
time.sleep(2)</p>
<p>sense.gamma = reversed(sense.gamma) # 감마 값을 반전 시켜 봄<br />
print(sense.gamma)<br />
time.sleep(2)</p>
<p>sense.low_light = True # low_light 함수를 적용해봄<br />
print(sense.gamma) # 이때 감마값이 어떻게 변화하는지를 관찰<br />
time.sleep(2)</p>
<p>sense.low_light = False<br />
</div>
<p><span style="color: #a37acc"><strong>4.1.14. gamma_reset</strong></span><br />
● 기능 : 감마 룩업테이블을 원위치 시켜줍니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>import time<br />
from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.clear(255, 127, 0)<br />
time.sleep(2)<br />
sense.gamma = [0] * 32 # Will turn the LED matrix off<br />
time.sleep(2)<br />
sense.gamma_reset()</p>
</div>
<p><span style="color: #81499e"><strong>4.2. 환경센서(습도, 온도, 기압)용 API(라이브러리)</strong></span><br />
Sense HAT에는 별로 흔치 않은 기압센서가 장착되어져 있습니다.<br />
이 센서를 활용하여 날씨, 고도 등 재미난 어플리케이션을 만들어 볼 수 있을 듯 합니다.<br />
또한 온습도센서는 매우 컴팩트하여 과연 잘 동작 될 수 있을까 의문이 들기도 하지만 라즈베리파이를 활용하여 온실이나 실내 환경제어에도 응용해 볼 수 있는 방법을 제시해 주는데 부족함이 없으리라 봅니다.</p>
<p><span style="color: #a37acc"><strong>4.2.1. get_humidity</strong></span><br />
● 기능 : 습도 센서에서 상대 습도의 비율을 가져옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-16.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32167" alt="38 sr 금강초롱 (16)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-16.png" width="541" height="75" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
humidity = sense.get_humidity()<br />
print(“Humidity: %s %%rH” % humidity)</p>
<p># alternatives<br />
print(sense.humidity)<br />
</div>
<p><strong><span style="color: #a37acc">4.2.2. get_temperature</span></strong><br />
● 기능 : 습도센서에서 섭씨의 현재 온도 값을 얻어 옵니다.<br />
내부적으로 get_temperature_from_humidity() 함수를 호출함</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-17.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32169" alt="38 sr 금강초롱 (17)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-17.png" width="541" height="75" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
temp = sense.get_temperature()<br />
print(“Temperature: %s C” % temp)</p>
<p># alternatives<br />
print(sense.temp)<br />
print(sense.temperature)<br />
</div>
<p><span style="color: #a37acc"><strong>4.2.3. get_temperature_from_humidity</strong></span><br />
● 기능 : 습도센서에서 섭씨의 현재 온도 값을 얻어옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-18.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32171" alt="38 sr 금강초롱 (18)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-18.png" width="541" height="75" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
temp = sense.get_temperature_from_humidity()<br />
print(“Temperature: %s C” % temp)<br />
</div>
<p><span style="color: #a37acc"><strong>4.2.4. get_Temperature_from_pressure</strong></span><br />
● 기능 : 압력 센서에서 섭씨의 현재 온도를 가져옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-19.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32173" alt="38 sr 금강초롱 (19)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-19.png" width="541" height="75" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
temp = sense.get_temperature_from_pressure()<br />
print(“Temperature: %s C” % temp)<br />
</div>
<p><span style="color: #a37acc"><strong>4.2.5. get_pressure</strong></span><br />
● 기능 : 압력 센서에서 밀리바의 현재 압력을 가져옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-20.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32175" alt="38 sr 금강초롱 (20)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-20.png" width="541" height="75" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
pressure = sense.get_pressure()<br />
print(“Pressure: %s Millibars” % pressure)</p>
<p># alternatives<br />
print(sense.pressure)<br />
</div>
<p><span style="color: #81499e"><strong>4.3. IMU Sensor API(라이브러리)</strong></span><br />
IMU(관성측정유닛) 센서는 X, Y, Z축을 측정할 수 있는 3종의 센서로 되어 있습니다. 이렇게 3종의 센서를 사용하여 9축의 모션센싱 기능을 수행할 수 있습니다.</p>
<p>· 자이로스코프<br />
· 가속도계<br />
· 지자기센서(나침반)</p>
<p><span style="color: #a37acc"><strong>4.3.1. set_imu_config</strong></span><br />
● 기능 : 자이로스코프, 가속도계, 지자기센서를 활성화시킬지 비활성화시킬지를 설정합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-21.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32177" alt="38 sr 금강초롱 (21)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-21.png" width="541" height="155" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
sense.set_imu_config(False, True, False) # gyroscope only<br />
</div>
<p><span style="color: #a37acc"><strong>4.3.2. get_orientation_radians</strong></span><br />
● 기능 : 피치, 롤, 요축의 정보로부터 라디안을 얻어옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-23.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32179" alt="38 sr 금강초롱 (23)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-23.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
orientation_rad = sense.get_orientation_radians()<br />
print(“p: {pitch}, r: {roll}, y: {yaw}”.format(**orientation_rad))</p>
<p># alternatives<br />
print(sense.orientation_radians)</p>
</div>
<p><span style="color: #a37acc"><strong>4.3.3. get_orientation_degrees</strong></span><br />
● 기능 : 피치, 롤, 요축의 정보로부터 각도를 얻어옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-24.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32180" alt="38 sr 금강초롱 (24)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-24.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
orientation = sense.get_orientation_degrees()<br />
print(“p: {pitch}, r: {roll}, y: {yaw}”.format(**orientation))</p>
</div>
<p><span style="color: #a37acc"><strong>4.3.4. get_orientation</strong></span><br />
● 기능 : get_orientation_degrees()와 동일한 기능을 수행합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-23.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32179" alt="38 sr 금강초롱 (23)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-23.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
orientation = sense.get_orientation()<br />
print(“p: {pitch}, r: {roll}, y: {yaw}”.format(**orientation))</p>
<p># alternatives<br />
print(sense.orientation)</p>
</div>
<p><span style="color: #a37acc"><strong>4.3.5. get_compass</strong></span><br />
● 기능 : 자이로스코프와 가속도계가 set_imu_config에서 disable 되면 지자기센서로부터 북쪽방위 정보를 얻어올 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-25.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32181" alt="38 sr 금강초롱 (25)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-25.png" width="541" height="74" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
north = sense.get_compass()<br />
print(“North: %s” % north)</p>
<p># alternatives<br />
print(sense.compass)<br />
</div>
<p><span style="color: #a37acc"><strong>4.3.6. get_compass_raw</strong></span><br />
● 기능 : 원시 x, y, z축 자력계 데이를 출력합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-26.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32182" alt="38 sr 금강초롱 (26)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-26.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
raw = sense.get_compass_raw()<br />
print(“x: {x}, y: {y}, z: {z}”.format(**raw))</p>
<p># alternatives<br />
print(sense.compass_raw)<br />
</div>
<p><span style="color: #a37acc"><strong>4.3.7. get_gyroscope</strong></span><br />
● 기능 : set_imu_config에서 지자기센서, 가속도 센서를 사용하지 않도록 하면 자이로스코프 센서를 사용하여 현재 방향정보를 가져올 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-27.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32183" alt="38 sr 금강초롱 (27)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-27.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
gyro_only = sense.get_gyroscope()<br />
print(“p: {pitch}, r: {roll}, y: {yaw}”.format(**gyro_only))</p>
<p># alternatives<br />
print(sense.gyro)<br />
print(sense.gyroscope)</p>
</div>
<p><span style="color: #a37acc"><strong>4.3.8. get_gyroscope_raw</strong></span><br />
● 기능 : 원시 x, y, z축 자이로스코프 데이터를 가져옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-28.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32184" alt="38 sr 금강초롱 (28)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-28.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
raw = sense.get_gyroscope_raw()<br />
print(“x: {x}, y: {y}, z: {z}”.format(**raw))</p>
<p># alternatives<br />
print(sense.gyro_raw)<br />
print(sense.gyroscope_raw)</p>
</div>
<p><span style="color: #a37acc"><strong>4.3.9. get_accelerometer</strong></span><br />
● 기능 : set_imu_config에서 지자기센서, 자이로스코프를 사용하지 않도록 하면 가속도계만으로 현재 방향 정보를 얻어올 수 있습니다.</p>
<p><del><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-29.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32185" alt="38 sr 금강초롱 (29)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-29.png" width="541" height="88" /></a></del></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
accel_only = sense.get_accelerometer()<br />
print(“p: {pitch}, r: {roll}, y: {yaw}”.format(**accel_only))</p>
<p># alternatives<br />
print(sense.accel)<br />
print(sense.accelerometer))<br />
</div>
<p><span style="color: #a37acc"><strong>4.3.10. get accelerometer_raw</strong></span><br />
● 기능 : x, y, z축의 가속도계 원시데이터를 가져옵니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-31.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32187" alt="38 sr 금강초롱 (31)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-31.png" width="541" height="88" /></a></p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
raw = sense.get_accelerometer_raw()<br />
print(“x: {x}, y: {y}, z: {z}”.format(**raw))</p>
<p># alternatives<br />
print(sense.accel_raw)<br />
print(sense.accelerometer_raw)</p>
</div>
<p><span style="color: #81499e"><strong>4.4. 조이스틱관련 API(라이브러리)</strong></span><br />
조이스틱은 손잡이도 없이 좀 빈약하게 붙어 있습니다.<br />
조이스틱과 관련된 라이브러리는 stick.py에 파이썬으로 짜여져 있습니다.</p>
<p><span style="color: #a37acc"><strong>4.4.1. InputEvent</strong></span><br />
조이스틱의 이벤트는 튜플로 반환되며 아래와 같은 3가지 형태가 있습니다.<br />
· timestamp : 이벤트가 발생한 시간으로, “초”<br />
· direction : 조이스틱이 이동한 방향으로, 문자열로 구성, “up, “down”, left”, right”, “push” 등<br />
· action : 발생한 상황에 대한 문자열 “pressed”, “released”, “held”</p>
<p><span style="color: #a37acc"><strong>4.4.2. wait_for_event</strong></span><br />
● 기능 : 조이스틱 이벤트가 발생할 때까지 대기합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat<br />
from time import sleep</p>
<p>sense = SenseHat()<br />
event = sense.stick.wait_for_event()<br />
print(“The joystick was {} {}”.format(event.action, event.direction))<br />
sleep(0.1)<br />
event = sense.stick.wait_for_event()<br />
print(“The joystick was {} {}”.format(event.action, event.direction))<br />
</div>
<p>조이스틱을 한쪽 방향으로 전환시켜 제대로 동작되는 지를 확인코자 하는 경우의 예제</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat<br />
from time import sleep</p>
<p>sense = SenseHat()<br />
event = sense.stick.wait_for_event()<br />
print(“The joystick was {} {}”.format(event.action, event.direction))<br />
sleep(0.1)<br />
event = sense.stick.wait_for_event(emptybuffer=True)<br />
print(“The joystick was {} {}”.format(event.action, event.direction))<br />
</div>
<p><span style="color: #a37acc"><strong>4.4.3. get_events</strong></span><br />
● 기능 : 이벤트의 목록을 튜플로 출력합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat</p>
<p>sense = SenseHat()<br />
while True:<br />
for event in sense.stick.get_events():<br />
print(“The joystick was {} {}”.format(event.action, event.direction))<br />
</div>
<p><span style="color: #a37acc"><strong>4.4.4. direction_up, direction_left, direction_right, direction_down, direction_middle, direction_any</strong></span><br />
● 기능 : 조이스틱을 움직인 방향을 추적하는 이벤트로 활용됩니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#!/usr/bin/python</p>
<p>from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED<br />
from signal import pause</p>
<p>x = 3<br />
y = 3<br />
sense = SenseHat()</p>
<p>def clamp(value, min_value=0, max_value=7):<br />
return min(max_value, max(min_value, value))</p>
<p>def pushed_up(event):<br />
global y<br />
if event.action != ACTION_RELEASED:<br />
y = clamp(y &#8211; 1)</p>
<p>def pushed_down(event):<br />
global y<br />
if event.action != ACTION_RELEASED:<br />
y = clamp(y + 1)</p>
<p>def pushed_left(event):<br />
global x<br />
if event.action != ACTION_RELEASED:<br />
x = clamp(x &#8211; 1)</p>
<p>def pushed_right(event):<br />
global x<br />
if event.action != ACTION_RELEASED:<br />
x = clamp(x + 1)</p>
<p>def refresh():<br />
sense.clear()<br />
sense.set_pixel(x, y, 255, 255, 255)</p>
<p>sense.stick.direction_up = pushed_up<br />
sense.stick.direction_down = pushed_down<br />
sense.stick.direction_left = pushed_left<br />
sense.stick.direction_right = pushed_right<br />
sense.stick.direction_any = refresh<br />
refresh()<br />
pause()<br />
</div>
<p>여기까지 라즈베리파이 재단에서 발표한 API를 살펴 봤습니다.<br />
필자가 느끼는 소감은 한마디로 ‘지극정성’이 들어가 있는 프로젝트란 생각이 들 정도입니다. 맛보기가 아니라 이 제품을 활용하여 무엇인가를 실제로 만들어 볼 수 있도록 준비를 다 해 놨습니다.<br />
한걸음 더 나아가 배우고자 하는 사람을 위한 페이지, 가르치고자 하는 페이지를 만들어 줄 정도니 그 정성 대단하다 아니할 수 없을듯합니다.<br />
<strong></strong></p>
<p><span style="color: #800080"><strong>5. API를 활용한 실제 실험 결과</strong></span></p>
<p><span style="color: #81499e"><strong>5.1 실험환경 준비</strong></span><br />
위의 2.2에서 API를 설치하고 나면 다음과 같은 프로그램이 쭉~ 설치가 되어 있습니다. 우선 제대로 된 테스트를 하기위해 몇 가지 사전 준비를 합니다.<br />
인스톨이 끝나고 나면 아래 주소에 파일이 들어가 있습니다.<br />
<span style="text-decoration: underline">/usr/src/sense-hat/examples</span></p>
<p>이 파일 들을 pi의 홈디렉토리로 복사합니다.<br />
<span style="text-decoration: underline">cp /usr/src/sense-hat/examples ~/ -a</span></p>
<p>여기에 소개되어 있는 프로그램들은 C, C++로 짜여져 있으며 각 디렉토리에서 컴파일을 하여야 실행을 해볼 수 있습니다.<br />
컴파일은 간단하여 해당 디렉토리에서 make를 하는 것만으로 간단히 끝납니다.<br />
API간 전체적인 구성은 아래와 같습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-32.png" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32188" alt="38 sr 금강초롱 (32)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-32.png" width="541" height="319" /></a></p>
<p><span style="color: #81499e"><strong>5.2. 파이선으로 작성된 기본예제 실험</strong></span><br />
우선 디렉토리를 python-sense-hat으로 이동합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-13.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32160" alt="38 sr 금강초롱 (13)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-13.jpg" width="541" height="72" /></a></p>
<p>컬러 패턴을 보내는 예제와 스네이크바이트의 라즈베리파이향 게임을 하는 장면입니다. 스네이크바이트는 전설과도 같은 게임이라고 생각합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-14.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32162" alt="38 sr 금강초롱 (14)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-14.jpg" width="541" height="283" /></a></p>
<p>다음으로 무지개와 흐르는 문자를 표시해 봤습니다.</p>
<p>화면에 표출되는 영상이 다이나믹디스플레이 방식이므로 사진에 잘 찍히지 않을 수도 있습니다만 육안으로 보는데는 별 지장이 없습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-15.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32164" alt="38 sr 금강초롱 (15)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-15.jpg" width="541" height="281" /></a></p>
<p>실행을 할 때는 아래와 같이 경로가 명확히 지정되어져야 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-16.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32166" alt="38 sr 금강초롱 (16)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-16.jpg" width="541" height="58" /></a></p>
<p>첫 번째 실험으로 사용한 color_cycle.py는 다음과 같이 짜여져 있음을 알 수 있습니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>pi@raspberrypi:~/examples/python-sense-hat $ cat colour_cycle.py</p>
<p>#!/usr/bin/python<br />
import time<br />
from sense_hat import SenseHat // SenseHat API를 로드한다.<br />
sense = SenseHat()<br />
r = 255<br />
g = 0<br />
b = 0<br />
msleep = lambda x: time.sleep(x / 1000.0)<br />
def next_colour(): // next_colour 라는 함수를 선언한다.<br />
global r<br />
global g<br />
global b<br />
if (r == 255 and g &lt; 255 and b == 0):<br />
g += 1<br />
if (g == 255 and r &gt; 0 and b == 0):<br />
r -= 1<br />
if (g == 255 and b &lt; 255 and r == 0):<br />
b += 1<br />
if (b == 255 and g &gt; 0 and r == 0):<br />
g -= 1<br />
if (b == 255 and r &lt; 255 and g == 0):<br />
r += 1<br />
if (r == 255 and b &gt; 0 and g == 0):<br />
b -= 1<br />
while True: // 실제 실행이 일어나는 부분이다.<br />
sense.clear([r, g, b])<br />
msleep(2)<br />
next_colour() // 위에서 작성한 함수를 호출한다.</p>
<p>pi@raspberrypi:~/examples/python-sense-hat $<br />
</div>
<p><span style="color: #81499e"><strong>5.3. IMU 실험</strong></span><br />
RTIMULib 디렉토리에서 9축 모션센서의 동작 상태를 실험해 볼 수 있습니다. 파이썬 프로그램은 당연히 라이브러리는 위에서 언급한 것으로 짜여져 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-18.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32170" alt="38 sr 금강초롱 (18)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-18.jpg" width="541" height="586" /></a></p>
<p>다음으로는 C++언어 기반으로 짜여진 예제입니다.<br />
pi@raspberrypi:~/examples/RTIMULib/RTIMULibDrive로 이동한 후<br />
make를 하면 실행파일인 RTIMULibDrive를 얻을 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-19.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32172" alt="38 sr 금강초롱 (19)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-19.jpg" width="541" height="346" /></a></p>
<p>실행하는 방법은 파이썬과 동일 합니다.<br />
pi@raspberrypi:~/examples/RTIMULib/RTIMULibDrive $ ./RTIMULibDrive라고 치면 됩니다.<br />
화면 하단부에 Sample rate, roll, pitch, yaw의 값이 보입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-20.jpg" rel="lightbox[31932]"><img class="alignnone size-full wp-image-32174" alt="38 sr 금강초롱 (20)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-20.jpg" width="541" height="337" /></a></p>
<p>라즈베리파이를 움직이면 이에 추종하여 롤, 피치, 요 값이 변하는 것을 확인할 수 있습니다. 이 정보를 균형로봇이나 쿼드콥터 등에 응용해 볼 수 있을 것 같습니다.</p>
<p>위 실험의 소스코드는 라이브러리를 이용하는 방식으로 비교적 간단합니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p><span style="color: #008000">pi@raspberrypi:~/examples/RTIMULib/RTIMULibDrive $ cat RTIMULibDrive.cpp</span></p>
<p><span style="color: #008000">////////////////////////////////////////////////////////////////////////////</span><br />
<span style="color: #008000"> //</span><br />
<span style="color: #008000"> // This file is part of RTIMULib</span><br />
<span style="color: #008000"> //</span><br />
<span style="color: #008000"> // Copyright (c) 2014-2015, richards-tech, LLC</span><br />
<span style="color: #008000"> //</span><br />
<span style="color: #008000"> // Permission is hereby granted, free of charge, to any person obtaining a copy of</span><br />
<span style="color: #008000"> // this software and associated documentation files (the “Software”), to deal in</span><br />
<span style="color: #008000"> // the Software without restriction, including without limitation the rights to use,</span><br />
<span style="color: #008000"> // copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the</span><br />
<span style="color: #008000"> // Software, and to permit persons to whom the Software is furnished to do so,</span><br />
<span style="color: #008000"> // subject to the following conditions:</span><br />
<span style="color: #008000"> //</span><br />
<span style="color: #008000"> // The above copyright notice and this permission notice shall be included in all</span><br />
<span style="color: #008000"> // copies or substantial portions of the Software.</span><br />
<span style="color: #008000"> //</span><br />
<span style="color: #008000"> // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,</span><br />
<span style="color: #008000"> // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A</span><br />
<span style="color: #008000"> // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span><br />
<span style="color: #008000"> // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</span><br />
<span style="color: #008000"> // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</span><br />
<span style="color: #008000"> // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></p>
<p>#include “RTIMULib.h”</p>
<p>int main()<br />
{<br />
int sampleCount = 0;<br />
int sampleRate = 0;<br />
uint64_t rateTimer;<br />
uint64_t displayTimer;<br />
uint64_t now;</p>
<p><span style="color: #008000">// Using RTIMULib here allows it to use the .ini file generated by RTIMULibDemo.</span><br />
<span style="color: #008000"> // Or, you can create the .ini in some other directory by using:</span><br />
<span style="color: #008000"> // RTIMUSettings *settings = new RTIMUSettings(“&lt;directory path&gt;”, “RTIMULib”);</span><br />
<span style="color: #008000"> // where &lt;directory path&gt; is the path to where the .ini file is to be loaded/saved</span></p>
<p>RTIMUSettings *settings = new RTIMUSettings(“RTIMULib”);</p>
<p>RTIMU *imu = RTIMU::createIMU(settings);</p>
<p>if ((imu == NULL) || (imu-&gt;IMUType() == RTIMU_TYPE_NULL)) {<br />
printf(“No IMU found\n”);<br />
exit(1);<br />
}</p>
<p><span style="color: #008000">// This is an opportunity to manually override any settings before the call IMUInit</span><br />
<span style="color: #008000"> // set up IMU</span></p>
<p>imu-&gt;IMUInit();</p>
<p><span style="color: #008000">// this is a convenient place to change fusion parameters</span></p>
<p>imu-&gt;setSlerpPower(0.02);<br />
imu-&gt;setGyroEnable(true);<br />
imu-&gt;setAccelEnable(true);<br />
imu-&gt;setCompassEnable(true);</p>
<p><span style="color: #008000">// set up for rate timer</span></p>
<p>rateTimer = displayTimer = RTMath::currentUSecsSinceEpoch();</p>
<p><span style="color: #008000">// now just process data</span></p>
<p>while (1) {<br />
<span style="color: #008000">// poll at the rate recommended by the IMU</span></p>
<p>usleep(imu-&gt;IMUGetPollInterval() * 1000);</p>
<p>while (imu-&gt;IMURead()) {<br />
RTIMU_DATA imuData = imu-&gt;getIMUData();<br />
sampleCount++;</p>
<p>now = RTMath::currentUSecsSinceEpoch();</p>
<p><span style="color: #008000">// display 10 times per second</span></p>
<p>if ((now &#8211; displayTimer) &gt; 100000) {<br />
printf(“Sample rate %d: %s\r”, sampleRate, RTMath::displayDegrees(“”, imuData.fusionPose));<br />
fflush(stdout);<br />
displayTimer = now;<br />
}</p>
<p><span style="color: #008000">// update rate every second</span></p>
<p>if ((now &#8211; rateTimer) &gt; 1000000) {<br />
sampleRate = sampleCount;<br />
sampleCount = 0;<br />
rateTimer = now;<br />
}<br />
}<br />
}<br />
}</p>
<p>pi@raspberrypi:~/examples/RTIMULib/RTIMULibDrive $<br />
</div>
<p><span style="color: #800080"><strong>6. 마무리</strong></span></p>
<p>Sense HAT은 라즈베리파이재단에서 Astro Pi Mission의 일부로 제작되어 실제 우주정거장에 보내진 제품입니다. 아래 사진 속 QR코드로 확인 가능합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/Cap-2016-12-08-11-17-15-048.jpg" rel="lightbox[31932]"><img class="alignnone size-large wp-image-32194" alt="Cap 2016-12-08 11-17-15-048" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/Cap-2016-12-08-11-17-15-048-620x363.jpg" width="620" height="363" /></a></p>
<p>그래서 그런지도 모르겠습니다만 매우 정성이 들어간 설명이 존재하고, 예제프로그램과 API 역시 섬세하게 만들어졌음을 알 수 있었습니다.<br />
학교 등 교육기관에서 컴퓨터 프로그래밍과 센서가 융복합된 과제와 학습을 진행하는데 더할 나위 없이 좋은 제품이 아닐까하는 생각이 듭니다.<br />
위에서도 언급을 한 바가 있습니다만, Sense HAT을 가르치는 자를 위한 별도의 페이지와 Sense HAT을 배우고자하는 이를 위한 페이지 그리고 Sense HAT을 활용하여 창의적인 무엇인가를 해보는 프로젝트를 위한 페이지로 구성된 것 자체가 필자에게는 적잖은 신선함으로 다가왔습니다.<br />
마치 모범답안을 보는 그런 느낌마저 들었습니다.<br />
더군다나 라즈베리파이보드와 Sense HAT이 없이도 학습을 해 볼 수 있는 시뮬레이션 웹싸이트까지 준비해 놓고 있으므로, 이 정도면 제대로 준비해두었다 아니할 수 없을 듯합니다.<br />
이번 리뷰를 진행하는 기간 동안 극강(?)의 회사업무와 숨이 막히는 폭염이 겹쳐서 살짝 고전은 하였습니다만, 이런 훌륭한 제품을 접할 기회가 있었다는 점 하나만으로도 충분히 보람있는 시간이 아니었나 생각됩니다.<br />
다음 편에서는 라즈베리파이와 아두이노의 한계를 뛰어넘는 강력한 컴퓨팅파워를 자랑하는 ‘LattePanda’ 최신형보드에 대해 집중적으로 살펴보려 합니다.<br />
감사합니다.</p>
<p><span style="color: #800080"><strong>7. 참고자료</strong></span><br />
1. 라즈베리파이 가이드<br />
<a href="https://www.raspberrypi.org/learning/astro-pi-guide/" target="_blank">https://www.raspberrypi.org/learning/astro-pi-guide/</a><br />
2. API레퍼런스<br />
<a href="http://pythonhosted.org/sense-hat/api/" target="_blank">http://pythonhosted.org/sense-hat/api/</a><br />
3. 파이선에서 지원하는 센스헷 설치 페이지<br />
<a href="https://pythonhosted.org/sense-hat/" target="_blank">https://pythonhosted.org/sense-hat/</a><br />
4. 센스햇 예제<br />
<a href="https://github.com/RPi-Distro/python-sense-hat/blob/master/examples/README.md" target="_blank">https://github.com/RPi-Distro/python-sense-hat/blob/master/examples/README.md</a><br />
5. 아스트로파이 페이지의 예제프로그램<br />
<a href="https://astro-pi.org/get-involved/program-the-sense-hat/python/" target="_blank">https://astro-pi.org/get-involved/program-the-sense-hat/python/</a><br />
6. 원디하나님 블로그<br />
<a href="http://windy.luru.net/1863" target="_blank">http://windy.luru.net/1863</a><br />
7. 우주정거장 실험 관련 영상물<br />
<a href="https://astro-pi.org/updates/coding-challenges-update/" target="_blank">https://astro-pi.org/updates/coding-challenges-update/</a><br />
8. Sense HAT 시뮬레이터 주소<br />
<a href="//www.raspberrypi.org/learning/getting-started-with-the-sense-hat/worksheet/" target="_blank">https://www.raspberrypi.org/learning/getting-started-with-the-sense-hat/worksheet/</a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-33.png" rel="lightbox[31932]"><img class="alignnone  wp-image-32189" alt="38 sr 금강초롱 (33)" src="http://www.ntrexgo.com/wp-content/uploads/2016/09/38-sr-금강초롱-33.png" width="430" height="197" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/31932/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
