<?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; ARS</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/ars/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>아두이노에서 NT-ARSv1의 데이터를 받는 예제</title>
		<link>http://www.ntrexgo.com/archives/18397</link>
		<comments>http://www.ntrexgo.com/archives/18397#comments</comments>
		<pubDate>Mon, 16 Sep 2013 02:08:14 +0000</pubDate>
		<dc:creator>NTRexLAB</dc:creator>
				<category><![CDATA[--응용예제]]></category>
		<category><![CDATA[blog-posts]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ARS]]></category>
		<category><![CDATA[NT-ARSv1]]></category>
		<category><![CDATA[아두이노]]></category>
		<category><![CDATA[예제]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=18397</guid>
		<description><![CDATA[NT-ARSv1의 출력 데이터를 아두이노에서 해석하는 예제입니다. Roll, Pitch와 그 각속도 이렇게 4개의 값중에서 사용자가 선택할 수 있으며, 출력된 데이터는 문자열이 아니라 double형의 숫자로 받도록 했습니다. 이미 예전에 [바로가기]에서 NT-ARSv1의 데이터를 받는 부분을 다루었는데요. 당시에는 단순히 값을 한 번 확인하는 것과 아두이노와 ARS와의 연결에 대한 부분을 다루었다면 이번에는 약간 함수화를 했습니다. 기본적으로 하드웨어적인 연결은 [바로가기]와 같으니 먼저 읽고 넘어오시기 바랍니다.
&#160;

&#160;
일단 오늘 보여드릴 예제는 몇몇개의 함수로 구현되어 있어서 함수별로 하나씩 확인해보도록 하겠습니다.
[crayon-69e139a8132f6132273000/]
먼저 getARSresultAtOnce() 함수입니다. 이 함수는 NT-ARSv1의 데이터를 STRING의 형태로 저장하는 것이 목적입니다. 여러가지 형태로 다양하게 사용하실려면 이 함수만 사용하신 다음 간편하게 응용하시면 됩니다. 함수이름에도 나타나 있지만, ARS의 &#60;CAO&#62;명령을 사용합니다. 만약 사용자가 &#60;CAH&#62;명령을...]]></description>
				<content:encoded><![CDATA[<p>NT-ARSv1의 출력 데이터를 아두이노에서 해석하는 예제입니다. Roll, Pitch와 그 각속도 이렇게 4개의 값중에서 사용자가 선택할 수 있으며, 출력된 데이터는 문자열이 아니라 double형의 숫자로 받도록 했습니다. 이미 예전에 [<a href="http://www.ntrexgo.com/archives/17654" target="_blank">바로가기</a>]에서 NT-ARSv1의 데이터를 받는 부분을 다루었는데요. 당시에는 단순히 값을 한 번 확인하는 것과 아두이노와 ARS와의 연결에 대한 부분을 다루었다면 이번에는 약간 함수화를 했습니다. 기본적으로 하드웨어적인 연결은 [<a href="http://www.ntrexgo.com/archives/17654" target="_blank">바로가기</a>]와 같으니 먼저 읽고 넘어오시기 바랍니다.</p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/08/0011.jpg" rel="lightbox[18397]"><img class="aligncenter size-large wp-image-17655" alt="001" src="http://www.ntrexgo.com/wp-content/uploads/2013/08/0011-620x527.jpg" width="620" height="527" /></a></p>
<p>&nbsp;</p>
<p>일단 오늘 보여드릴 예제는 몇몇개의 함수로 구현되어 있어서 함수별로 하나씩 확인해보도록 하겠습니다.</p><pre class="crayon-plain-tag">String getARSresultAtOnece() {
  String outputValuesOfARS = "";

  Serial1.print("&lt;CAO&gt;");

  delay(2);

  while (Serial1.available()) {
    char incomingChar = Serial1.read();
    outputValuesOfARS += incomingChar;
  }

  return outputValuesOfARS;
}</pre><p>
먼저 getARSresultAtOnce() 함수입니다. 이 함수는 NT-ARSv1의 데이터를 STRING의 형태로 저장하는 것이 목적입니다. 여러가지 형태로 다양하게 사용하실려면 이 함수만 사용하신 다음 간편하게 응용하시면 됩니다. 함수이름에도 나타나 있지만, ARS의 &lt;CAO&gt;명령을 사용합니다. 만약 사용자가 &lt;CAH&gt;명령을 사용하고자 하시면 이후 코딩을 다르게 작성하셔야합니다. 그리고 6번 행의 delay문은 &lt;CAO&gt;명령을 하달한 다음 바로 시리얼 데이터를 읽도록 해버리면 미처 데이터가 도착하기 전에 지나가버립니다. 그래서 적절한 시간만큼 기다리라고 해둔겁니다. 물론 데이터가 실제로 들어올때까지 기다리라는 조건문을 넣어둘 수도 있지만, 그러면 또한 여러가지 이유로 실제 데이터가 도착하지 않는 에러 상황이 발생했을때, 대응하는 코딩을 해야하기도 하고, 이 글은 NT-ARSv1을 아두이노에서 간편히 사용하실 분들을 위한 부분이라 그냥 단순하게 delay문으로 처리했습니다.</p>
<p>실제 핵심은 8번에서 11번행입니다. 아두이노는 데이터를 시리얼 통신으로 쓸때는 String 변수를 사용하는 것이 가능하지만, 받을때는 char형만 가능하므로 위 코드처럼 받은 하나의 문자를 누적해서 저장하게 됩니다. 여기서도 에러에 대한 방어는 빠져 있는데요. &#8220;&gt;&#8221;라는 문자가 눈에 보이는 마지막문자이고, 실제로는 캐리지리턴이 같이 들어옵니다만, 여하튼 제대로 하나의 데이터가 다 들어왔는지 체크하실려면 저 부분에 &#8220;&gt;&#8221;라는 문자가 들어왔는지를 확인할 필요가 있습니다. 또한 콤마&#8221;,&#8221;가 3개가 들어왔는지까지 카운팅하시면 에러방어대책은 충분할 것입니다만, 지금은 예제거든요^^</p>
<p>이제 위의 getARSresultAtOnce() 함수를 사용해서 roll값을 받는 부분을 별도로 getRollAngle()이라는 함수로 만들었습니다.</p><pre class="crayon-plain-tag">double getRollAngle() {
  String outputValuesOfARS = getARSresultAtOnece();

  int firstComma = outputValuesOfARS.indexOf(',');

  String rollAngleST = outputValuesOfARS.substring(1, firstComma);
  double rollAngle = rollAngleST.toInt() * 0.001;

  return rollAngle;
}</pre><p>
getARSresultAtOnce()의 결과 데이터가 &lt;roll, pitch, roll_vel, pitch_vel&gt;의 형태로 저장되는데요. 이 결과에서 roll데이터만 추출하는 것입니다. 먼저 4번행에서 아두이노의 String 클래스에서 지원하는 indexOf()라는 함수를 이용해서 콤마(,)의 위치를 찾고, 5번행에서 substring()함수를 이용해서 roll데이터 부분만 추출합니다. 아직까지는 String 형태이므로 7번행에서 toInt()함수를 이용해서 숫자의 형태로 변환합니다. 그리고 NT-ARSv1은 내부적으로 1000이 곱해서 출력되므로, 다시 0.001로 나눠줍니다. 이렇게 하면 radian단위의 각도로 roll을 얻을 수 있습니다.</p><pre class="crayon-plain-tag">double getPitchAngle() {
  String outputValuesOfARS = getARSresultAtOnece();

  int firstComma = outputValuesOfARS.indexOf(',');
  int secondComma = outputValuesOfARS.indexOf(',', firstComma+1);

  String pithchAngleST = outputValuesOfARS.substring(firstComma+1, secondComma);
  double pitchAngle = pithchAngleST.toInt() * 0.001;

  return pitchAngle;
}</pre><p>
그 다음은 getPitchAngle()함수로 별 설명이 없어도 알 수 있으실 테지만, 두번째 데이터인 Pitch를 추출하는 함수입니다. getRollAngle() 함수와 다른 점은 Pitch 데이터는 첫 번째 콤마(,) 부터 두번째 콤마 사이에 있는 데이터이기 때문에 4번 5번행처럼 첫째 두번째 콤마를 찾아야합니다. 그리고 나머지는 동일합니다. 이런 원리로 NT-ARSv1의 세번째 네번째 데이터인 각각의 각 속도도 추출할 수 있습니다. 이제 전체 코드를 보여드리면,</p><pre class="crayon-plain-tag">// 2013.09.16 NTRexLAB.
// NT-ARSv1 example
// ARDUINO MEGA ADK. ARDUINO IDE 1.0.5

void setup() {
  // initialize serial and serial1 communications at 115200 bps:
  Serial.begin(115200);
  Serial1.begin(115200);
}

void loop() {

  double rad2degree = 180/3.141592;

  double rollAngle = getRollAngle();
  Serial.print(" Roll Angle is ");
  Serial.print(rollAngle*rad2degree);
  Serial.println(" degree.");

  double pitchAngle = getPitchAngle();
  Serial.print(" Pitch Angle is ");
  Serial.print(pitchAngle*rad2degree);
  Serial.println(" degree.");

  double rollAngVel = getRollAngVel();
  Serial.print(" Roll Angular velocity is ");
  Serial.print(rollAngVel*rad2degree);
  Serial.println(" degree/second.");

  double pitchAngVel = getPitchAngVel();
  Serial.print(" Pitch Angular velocity is ");
  Serial.print(pitchAngVel*rad2degree);
  Serial.println(" degree/second.");

  while(true);
}

// Getting output data of NT-ARSv1 after "&lt;CAO"&gt; commander.
// The resulting data is stored in the form of a String.
String getARSresultAtOnece() {
  String outputValuesOfARS = "";

  Serial1.print("&lt;CAO&gt;");

  delay(2);

  while (Serial1.available()) {
    char incomingChar = Serial1.read();
    outputValuesOfARS += incomingChar;
  }

  return outputValuesOfARS;
}

double getRollAngle() {
  String outputValuesOfARS = getARSresultAtOnece();

  int firstComma = outputValuesOfARS.indexOf(',');

  String rollAngleST = outputValuesOfARS.substring(1, firstComma);
  double rollAngle = rollAngleST.toInt() * 0.001;

  return rollAngle;
}

double getPitchAngle() {
  String outputValuesOfARS = getARSresultAtOnece();

  int firstComma = outputValuesOfARS.indexOf(',');
  int secondComma = outputValuesOfARS.indexOf(',', firstComma+1);

  String pithchAngleST = outputValuesOfARS.substring(firstComma+1, secondComma);
  double pitchAngle = pithchAngleST.toInt() * 0.001;

  return pitchAngle;
}

double getRollAngVel() {
  String outputValuesOfARS = getARSresultAtOnece();

  int firstComma = outputValuesOfARS.indexOf(',');
  int secondComma = outputValuesOfARS.indexOf(',', firstComma+1);
  int thirdComma = outputValuesOfARS.indexOf(',', secondComma+1);

  String rollAngVelST = outputValuesOfARS.substring(secondComma+1, thirdComma);
  double rollAngVel = rollAngVelST.toInt() * 0.001;

  return rollAngVel;
}

double getPitchAngVel() {
  String outputValuesOfARS = getARSresultAtOnece();

  int firstComma = outputValuesOfARS.indexOf(',');
  int secondComma = outputValuesOfARS.indexOf(',', firstComma+1);
  int thirdComma = outputValuesOfARS.indexOf(',', secondComma+1);

  String pithchAngVelST = outputValuesOfARS.substring(thirdComma+1, outputValuesOfARS.length() - 3);
  double pithchAngVel = pithchAngVelST.toInt() * 0.001;

  return pithchAngVel;
}</pre><p>
38번행 이후는 위에서 쭈욱 설명드린 그대로 입니다. 다시 한번 말씀드리지만 NT-ARSv1을 아두이노에서 사용하기 위한 하나의 예제로 발생할 수 있는 에러나 예외상황에 대한 대비는 없습니다.^^.</p>
<p>그리고, 11번부터 36번행은 이렇게 추출된 데이터를 사용한 것일 뿐입니다. 이 예제는 [<a href="http://www.ntrexgo.com/archives/17654" target="_blank">바로가기</a>]와 같은 하드웨어적인 연결을 가지기 때문에 ADK MEGA 보드를 사용했습니다. 그래서 ARS와의 연결은 Serial1에 PC와는 Serial에 연결되어 있으며 두 통신 속도는 모두 115200으로 세팅되어 있습니다. 출력되는 각도는 함수를 설명드릴때 했지만 라디안(radian)단위이기 때문에 눈으로 쉽게 확인하게 하기위해 degree로 변환해서 보여줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/09/001.jpg" rel="lightbox[18397]"><img class="aligncenter size-full wp-image-18402" alt="001" src="http://www.ntrexgo.com/wp-content/uploads/2013/09/001.jpg" width="530" height="406" /></a></p>
<p>이렇게 해서 시리얼 모니터로 출력하면 위 그림과 같은 결과를 얻을 수 있습니다. 이제 NT-ARSv1을 아두이노에서 핸들링하고자 하시는 분들께 하나의 예제를 보여드린듯 합니다.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/18397/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>아두이노에서 NT-ARSv1의 데이터 받기</title>
		<link>http://www.ntrexgo.com/archives/17654</link>
		<comments>http://www.ntrexgo.com/archives/17654#comments</comments>
		<pubDate>Fri, 30 Aug 2013 07:10:33 +0000</pubDate>
		<dc:creator>NTRexLAB</dc:creator>
				<category><![CDATA[--응용예제]]></category>
		<category><![CDATA[blog-posts]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ARS]]></category>
		<category><![CDATA[NT-ARSv1]]></category>
		<category><![CDATA[아두이노]]></category>
		<category><![CDATA[예제]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=17654</guid>
		<description><![CDATA[아두이노 Arduino MEGA ADK에서 NT-ARSv1데이터를 받아서 각도(degree)로 환산하는 예제 코드입니다. 아두이노로 저희 NT-ARSv1를 다룰려고 하시는 분들께 도움이 될 수 있으면 좋겠습니다.
우리 연구소에서는 아주 예전에 Pitch와 Roll각도를 받을 수 있는 NT-ARSv1[바로가기]이라는 저가의 ARS 모듈을 출시했었습니다.

&#160;
오늘은 여러 유저들께서 자주 요청하시던 아두이노에서 이 ARS의 데이터를 받는 예제를 공개할려고 합니다. 일단, 이 글에서 테스트 되는 아두이노 보드는 Arduino MEGA ADK[판매 페이지 바로가기]입니다.  왜 MEGA ADK 버젼을 사용했냐면, 저는 PC에서 데이터를 확인하고 싶었기 때문에 ARS와 시리얼 통신으로 연결될 여분의 시리얼 포트가 더 필요했기 때문입니다. Arduino MEGA ADK는 총 4개의 시리얼 포트를 가지고 있어서 선정했구요.
그런데 연결하다보니 약간의 문제를 만났네요. 어떤 문제냐면, NT-ARSv1의 시리얼통신 출력은 RS232신호로 나온다는...]]></description>
				<content:encoded><![CDATA[<p>아두이노 Arduino MEGA ADK에서 NT-ARSv1데이터를 받아서 각도(degree)로 환산하는 예제 코드입니다. 아두이노로 저희 NT-ARSv1를 다룰려고 하시는 분들께 도움이 될 수 있으면 좋겠습니다.</p>
<p>우리 연구소에서는 아주 예전에 Pitch와 Roll각도를 받을 수 있는 NT-ARSv1[<a href="http://www.ntrexgo.com/archives/1611" target="_blank">바로가기</a>]이라는 저가의 ARS 모듈을 출시했었습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/08/0021.jpg" rel="lightbox[17654]"><img class="aligncenter size-full wp-image-17656" alt="002" src="http://www.ntrexgo.com/wp-content/uploads/2013/08/0021.jpg" width="228" height="215" /></a></p>
<p>&nbsp;</p>
<p>오늘은 여러 유저들께서 자주 요청하시던 아두이노에서 이 ARS의 데이터를 받는 예제를 공개할려고 합니다. 일단, 이 글에서 테스트 되는 아두이노 보드는 Arduino MEGA ADK[<a href="http://devicemart.co.kr/goods/view.php?seq=34406" target="_blank">판매 페이지 바로가기</a>]입니다.  왜 MEGA ADK 버젼을 사용했냐면, 저는 PC에서 데이터를 확인하고 싶었기 때문에 ARS와 시리얼 통신으로 연결될 여분의 시리얼 포트가 더 필요했기 때문입니다. Arduino MEGA ADK는 총 4개의 시리얼 포트를 가지고 있어서 선정했구요.</p>
<p>그런데 연결하다보니 약간의 문제를 만났네요. 어떤 문제냐면, NT-ARSv1의 시리얼통신 출력은 RS232신호로 나온다는 겁니다. 만약 UNO나 MEGA ADK의 기본 시리얼 포트에 연결한다면 문제가 없는데, 이 시리얼포트는 PC와의 연결및 모니터링으로 남겨두면, MEGA ADK의 나머지 시리얼포트는 UART신호로, 즉 TTL 레벨의 신호를 받는 포트들입니다. 그래서 할 수 없이 ILX232칩 처럼 RS232신호와 UART 신호를 변환하는 기능이 부가적으로 필요합니다. 직접 구현해도 되지만, LK EMBEDDED라는 회사의 변환모듈 URS232라는 모델[<a href="http://devicemart.co.kr/goods/view.php?seq=1075379" target="_blank">판매페이지 바로가기</a>]을 그냥 사용했습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/08/0041.jpg" rel="lightbox[17654]"><img class="aligncenter size-large wp-image-17658" alt="004" src="http://www.ntrexgo.com/wp-content/uploads/2013/08/0041-620x427.jpg" width="620" height="427" /></a></p>
<p>그러나 이 아이도 약간 이상합니다. 판매페이지에서 이 회사가 제시하는 연결 포트들의 핀맵은 약간 혼돈이 올 수 있습니다. 일단</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/08/0031.jpg" rel="lightbox[17654]"><img class="aligncenter size-full wp-image-17657" alt="003" src="http://www.ntrexgo.com/wp-content/uploads/2013/08/0031.jpg" width="396" height="201" /></a></p>
<p>NT-ARSv1의 핀맵을 보면, 2번 3번의 TX, RX가 있습니다. 이걸 URS232라는 모듈의 RS의 RX, TX단자에 연결합니다. 이건 정상^^. 아래 연결도를 보시면</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/08/0011.jpg" rel="lightbox[17654]"><img class="aligncenter size-large wp-image-17655" alt="001" src="http://www.ntrexgo.com/wp-content/uploads/2013/08/0011-620x527.jpg" width="620" height="527" /></a></p>
<p>왜 Fritzing에서 사용자 지정 부품 만들기가 이리도 잘 안되는 걸까요..ㅠㅠ 그래서 그냥 메모지로 URS232와 NT-ARSv1을 표현했습니다. 제가 위에서 혼돈이 있을 수 있다는 것은 URS232의 TTL측 TX는 아두이노 ADK의 TX1에, URS232의 TTL측 RX는 ADK의 RX1에 연결해야합니다. 약간 혼돈스러워서 URS232모듈에서 사용하고 있는 ILX232N이라는 칩의 데이터시트와 비교해 보니, 이 모듈의 TTL측 핀맵에서 TTL_RX라고 표기되어 있는 부분은 실제로 output of recieve data 단자였습니다. 아무튼 어떤 이윤지는 몰라도 모듈 제조사는 이렇게 표현했네요. 그래서 위 그림처럼 결선하시면 아두이노 ADK 보드와 NT-ARSv1과의 연결을 위해 URS232를 사용할 수 있습니다. 이제 준비는 되었구요.</p>
<p>오늘의 목적인 NT-ARSv1의 데이터를 Arduino에서 읽기 위해 Arduino IDE에서 작성한 예제 코드를 보여드리면</p><pre class="crayon-plain-tag">// initialize each variables
char incomingByte = 0;
int resultValues = 0;
int consideringMinusSign = 1;
int selectingValuesFromARS = 0;

// The output values of NT-ARSv1 are 1000 times in radians
float scaleFactorOfARS = 0.001;
float rad2degree = 180 / 3.141592;

float rollAngle = 0;
float pitchAngle = 0;
float rollVel = 0;
float pitchVel = 0;

void setup() {
  // initialize serial and serial1 communications at 115200 bps:
  Serial.begin(115200); 
  Serial1.begin(115200);
}

void loop() {
  // Command to ARS for getting result via serial communication
  // ex) &lt;CAO&gt; : to get values one time.
  // ex) &lt;CAH&gt; : to get values continuesly.
  // ex) &lt;CAE&gt; : to stop getting values.
  Serial1.write(Serial.read());

  if (Serial1.available() &gt; 0) {
    incomingByte = Serial1.read();

    // Operation minus sign.
    if (incomingByte == '-') {
      consideringMinusSign = -1;
    }

    if (incomingByte &gt;= '0' &amp;&amp; incomingByte &lt;= '9') {
      resultValues = resultValues*10 + incomingByte - '0';
    }
    if (incomingByte == ',' || incomingByte == '&gt;') {
      //Serial.println("Your Command is : " + userCommander);

      resultValues = resultValues * consideringMinusSign;
      consideringMinusSign = 1;
      selectingValuesFromARS += 1;

      switch(selectingValuesFromARS) {
        case 1 :
          // getting roll angle as degree
          rollAngle = resultValues * scaleFactorOfARS * rad2degree;
          Serial.println(" ========================= ");
          Serial.print(" Roll Degree = ");
          Serial.println(rollAngle);
          break;
        case 2 :
          // getting pitch angle as degree
          pitchAngle = resultValues * scaleFactorOfARS * rad2degree;
          Serial.print(" Pitch Degree = ");
          Serial.println(pitchAngle);
          break;
        case 3 :
          // getting roll anglular velocity as degree
          rollVel = resultValues * scaleFactorOfARS * rad2degree;
          Serial.print(" Roll Vel. Degree = ");
          Serial.println(rollVel);
          break;
        case 4 :
          // getting pitch anglular velocity as degree
          pitchVel = resultValues * scaleFactorOfARS * rad2degree;
          Serial.print(" Pitch Vel. Degree = ");
          Serial.println(pitchVel);
          Serial.println(" ========================= ");      
          break;
      }
      resultValues = 0;
    }
    if (incomingByte == '&gt;') {
      selectingValuesFromARS = 0;
    }
  }
}</pre><p>
입니다.</p>
<p>해당 코드에 대한 설명을 잠시 드리면, 먼저 사용자가 Arduino IDE의 시리얼모니터링을 켜서 테스트한다면, ARS의 명령을 입력하도록 하고 있습니다. 23번부터 26번행까지 설명되어 있지만, &lt;CAO&gt;라고 입력하면 데이터를 한 번 출력해 줍니다.</p>
<p>NT-ARSv1은 출력되는 데이터의 형식이 괄호로 쌓여서 &lt;roll 각, pitch 각, roll 각속도, pitch 각속도&gt;의 형태로 됩니다. 거기다 시리얼 통신으로 텍스트로 날라왔으니 문자입니다. 또 자릿수도 생각하고 부호도 생각해야합니다. 그 부분을 고려하는 코드들입니다. 그리고, 확인을 위해 각각 해당값을 출력하고 있구요. 이미 아두이노를 사용하고 계신 분들이라면 손쉽게 NT-ARSv1을 아두이노에서 사용하실 수 있을 것입니다.</p>
<p>위 코드를 실행하고,</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/08/0051.jpg" rel="lightbox[17654]"><img class="aligncenter size-large wp-image-17659" alt="005" src="http://www.ntrexgo.com/wp-content/uploads/2013/08/0051-620x557.jpg" width="620" height="557" /></a></p>
<p>시리얼모니터도구에서 &lt;CAO&gt; 라고 괄호포함해서 입력하면, 위 그림과 같은 출력을 볼 수 있습니다. 아두이노 예제는 앞으로도 많이 다뤄서 도움이 되도록 하겠습니다.^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/17654/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NT-ARSv1 절대 각도를 얻는 센서</title>
		<link>http://www.ntrexgo.com/archives/1611</link>
		<comments>http://www.ntrexgo.com/archives/1611#comments</comments>
		<pubDate>Sun, 07 Apr 2013 00:00:45 +0000</pubDate>
		<dc:creator>NTRexLAB</dc:creator>
				<category><![CDATA[Etc.Modules]]></category>
		<category><![CDATA[ARS]]></category>
		<category><![CDATA[가속도]]></category>
		<category><![CDATA[각도측정]]></category>
		<category><![CDATA[센서]]></category>
		<category><![CDATA[자이로]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=1611</guid>
		<description><![CDATA[공간상에서 물체의 기울어진 각도, 기울기를 측정하고 싶으시다면, 저희의 NT-ARSv1을 추천합니다. 저가의 MEMS형 자이로센서와 가속도센서를 융합하여 2축 각도를 측정하도록 설계가 되었습니다.
각도를 측정할 만한 센서들은 많이 있습니다. 그중에서 자이로센서와 가속도센서가 많이 이용되는데요. 왜 이 둘을 융합해야할까요. 만약 고급의 고가의 센서를 사용한다면 문제는 없습니다. 그러나 저가의 MEMS형 센서를 사용한다면, 자이로나 가속도세서를 하나만 사용해서는 문제가 생깁니다.
자이로센서를 이용하는 경우는 적분이라는 문제가 생깁니다. 자이로센서의 출력은 각속도이기떄문에 각도를 얻기 위해서는 적분해야하거든요. 문제는 이 적분이 그리 아름답지 않다는 것이 문제입니다. 작은 오차라도 적분이 시작되면, 이후 결과에 누적으로 영향을 미치기 때문입니다. [관련글]
가속도센서를 사용하는 경우 자이로처럼 적분에 대한 부담은 없습니다. 그러나, 가속도센서가 회전중심충에서 직선방향으로는 움직이지 않아야한다는 전제가 필요합니다. 만약 가속도센서가...]]></description>
				<content:encoded><![CDATA[<p>공간상에서 물체의 기울어진 각도, 기울기를 측정하고 싶으시다면, 저희의 NT-ARSv1을 추천합니다. 저가의 MEMS형 자이로센서와 가속도센서를 융합하여 2축 각도를 측정하도록 설계가 되었습니다.</p>
<div class="symple-box blue none" style="text-align:center; width:100%;"> 
<strong>자이로센서와 가속도센서를 왜 융합하는가?</strong><br />
</div>
<p>각도를 측정할 만한 센서들은 많이 있습니다. 그중에서 자이로센서와 가속도센서가 많이 이용되는데요. 왜 이 둘을 융합해야할까요. 만약 고급의 고가의 센서를 사용한다면 문제는 없습니다. 그러나 저가의 MEMS형 센서를 사용한다면, 자이로나 가속도세서를 하나만 사용해서는 문제가 생깁니다.</p>
<p>자이로센서를 이용하는 경우는 적분이라는 문제가 생깁니다. 자이로센서의 출력은 각속도이기떄문에 각도를 얻기 위해서는 적분해야하거든요. 문제는 이 적분이 그리 아름답지 않다는 것이 문제입니다. 작은 오차라도 적분이 시작되면, 이후 결과에 누적으로 영향을 미치기 때문입니다. [<a href="http://pinkwink.kr/75" target="_blank">관련글</a>]
<p>가속도센서를 사용하는 경우 자이로처럼 적분에 대한 부담은 없습니다. 그러나, 가속도센서가 회전중심충에서 직선방향으로는 움직이지 않아야한다는 전제가 필요합니다. 만약 가속도센서가 회전뿐만 아니라 병진운동까지 한다면, 추정한 각도에는 문제가 발생합니다. [<a href="http://pinkwink.kr/73" target="_blank">관련글</a>]
<p>그래서 일반적으로 낮은 금액에서 원하는 성능을 얻기 위해서는 자이로센서와 가속도센서를 융합하여 필터를 설계합니다.</p>
<div class="symple-box blue none" style="text-align:center; width:100%;"> 
<strong>ARS는 무엇인가?</strong><br />
</div>
<p>자이로센서와 가속도센서를 융햡하여 각도를 추정할때, 흔히 공간상의 3개 자세중에서, z축 중심의 회전인 yaw를 제외하고, pitch와 roll을 측정하는 장비를 ARS라고 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/0011.jpg" rel="lightbox[1611]"><img class="alignnone size-full wp-image-1614 aligncenter" alt="001" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/0011.jpg" width="432" height="314" /></a></p>
<p>ARS를 만들기 위해서는 3축 가속도 센서와 2축 자이로센서에 추가로 자이로의 온도특성을 보정하기 위한 온도센서, 3개의 센서를 융합하고 필터를 설계하기 위한 MCU가 포함됩니다. 만약, Yaw까지 측정한다면, 흔히 AHRS라고 부릅니다.</p>
<div class="symple-box red none" style="text-align:center; width:100%;"> 
<strong>NT-ARSv1</strong><br />
</div>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/000.jpg" rel="lightbox[1611]"><img class="alignnone size-full wp-image-1613 aligncenter" alt="000" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/000.jpg" width="650" height="425" /></a></p>
<p>위에서 보시다시피, 저희 NT-ARSv1은 90내의 pitch와 roll을 검출합니다. 동적상태에서 에러는 2도이내, 정적상태 에러는 0.5도 이내입니다. 분해능은 0.001radian입니다. 저희 센서 모듈은 각속도 500도/sec이내, 가속도값 1.5g이내에서 동작하도록 설계되어있습니다. 또한, 29.6mm*31.4mm*10mm의 아주 작은 사이즈를 가지고 있습니다. 그리고, 통신방식은 RS232와 CAN통신을 지원합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/0021.jpg" rel="lightbox[1611]"><img class="size-full wp-image-1615 aligncenter" alt="002" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/0021.jpg" width="407" height="314" /></a></p>
<p>통신명령은 위와 같이 해당 통신환경에서 명령을 주시면, 결과가 전송되어옵니다.</p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/0031.jpg" rel="lightbox[1611]"><img class="size-full wp-image-1612 aligncenter" alt="003" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/0031.jpg" width="407" height="448" /></a></p>
<p>저희 제품의 커넥터 핀맵입니다.</p>
<p style="text-align: center;">
<object width="480" height="360">
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie" value="http://www.youtube.com/v/pSEV5lmoeUk?autoplay=0&loop=0&rel=0" />
<param name="wmode" value="transparent">
<embed src="http://www.youtube.com/v/pSEV5lmoeUk?autoplay=0&loop=0&rel=0" type="application/x-shockwave-flash" wmode="transparent" allowfullscreen="true" allowscriptaccess="always" width="480" height="360">
</embed>
</object>


<div class="symple-box blue none" style="text-align:center; width:100%;"> 
<strong>기타 제공 사항</strong><br />
</div>
<div id="symple-tab-40" class="symple-tabs"><ul class="ui-tabs-nav symple-clearfix"><li><a href="#symple-tab-%ed%80%b5%eb%a9%94%eb%89%b4%ec%96%bc">퀵메뉴얼</a></li><li><a href="#symple-tab-%eb%a9%94%eb%89%b4%ec%96%bc">메뉴얼</a></li><li><a href="#symple-tab-pc%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8">PC프로그램</a></li><li><a href="#symple-tab-%ec%8b%9c%eb%a6%ac%ec%96%bc%ed%86%b5%ec%8b%a0%ec%98%88%ec%a0%9c">시리얼통신예제</a></li><li><a href="#symple-tab-%ed%95%98%ec%9d%b4%ed%8d%bc%ed%84%b0%eb%af%b8%eb%84%90%ec%97%b0%ea%b2%b0">하이퍼터미널연결</a></li></ul>
<div id="symple-tab-%ed%80%b5%eb%a9%94%eb%89%b4%ec%96%bc" class="tab-content">
제품 퀵 메뉴얼</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/NT-ARSv1_퀵최종.pdf">NT-ARSv1_퀵(최종)</a><br />
</div>
<div id="symple-tab-%eb%a9%94%eb%89%b4%ec%96%bc" class="tab-content">
전체메뉴얼</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/NT-ARSv1메뉴얼_데이터시트최종.pdf">NT-ARSv1메뉴얼_데이터시트(최종)</a><br />
</div>
<div id="symple-tab-pc%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8" class="tab-content">
PC프로그램</p>
<p>Win-7용</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/NT-ARS_software_1.zip">NT-ARS_software_1</a></p>
</div>
<div id="symple-tab-%ec%8b%9c%eb%a6%ac%ec%96%bc%ed%86%b5%ec%8b%a0%ec%98%88%ec%a0%9c" class="tab-content">
시리얼 통신예제</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/NT-ARSv1_exampleAVR.zip">NT-ARSv1_example(AVR)</a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/NT-ARSv1_RS232.zip">NT-ARSv1_RS232</a></p>
</div>
<div id="symple-tab-%ed%95%98%ec%9d%b4%ed%8d%bc%ed%84%b0%eb%af%b8%eb%84%90%ec%97%b0%ea%b2%b0" class="tab-content">
RS232와 하이퍼터미널 연결 예제</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/RS-232확인-하이퍼터미널-2.pdf">RS-232확인-하이퍼터미널-2</a><br />
</div>
</div>
<div class="symple-box red none" style="text-align:center; width:100%;"> 
<a href="http://devicemart.co.kr/goods/view.php?seq=29642" target="_blank"><strong>판매페이지 바로가기</strong></a><br />
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/1611/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
