<?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>infoalive labs &#187; serproxy</title>
	<atom:link href="http://labs.infoalive.com/tag/serproxy/feed" rel="self" type="application/rss+xml" />
	<link>http://labs.infoalive.com</link>
	<description>プロダクトの紹介とTipsのまとめサイト</description>
	<lastBuildDate>Fri, 04 Nov 2011 10:15:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>ネットワークラジコンをコントロール</title>
		<link>http://labs.infoalive.com/tips/109</link>
		<comments>http://labs.infoalive.com/tips/109#comments</comments>
		<pubDate>Tue, 15 Sep 2009 04:14:57 +0000</pubDate>
		<dc:creator>o2</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[avetanabt]]></category>
		<category><![CDATA[bluecove]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[RS-232]]></category>
		<category><![CDATA[serproxy]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[WiiRemoteJ]]></category>
		<category><![CDATA[wrj4P5]]></category>
		<category><![CDATA[ラジアン]]></category>
		<category><![CDATA[ラジコン]]></category>
		<category><![CDATA[組み込み系]]></category>
		<category><![CDATA[車]]></category>

		<guid isPermaLink="false">http://labs.infoalive.com/?p=109</guid>
		<description><![CDATA[昨晩Macからネットワークを経由し、ラジコン(組み込みLinuxに繋がったArduino)を操作できました。 ネットワークからArduinoを操作するのに、「Serial Proxy」を使いました。 「Serial Pr [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F109"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F109&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>昨晩Macからネットワークを経由し、ラジコン(組み込みLinuxに繋がったArduino)を操作できました。</p>
<p>ネットワークからArduinoを操作するのに、「Serial Proxy」を使いました。</p>
<p>「Serial Proxy」を使うことで、ストリームからシリアルの制御が可能となります。</p>
<p>Linuxへのインストールは簡単</p>
<ol>
<li>Arduino公式サイトのダウンロードページの一番下にある「Serial Proxy」のソース版をダウンロード<a href="http://www.arduino.cc/en/Main/Software" target="_blank">http://www.arduino.cc/en/Main/Software</a></li>
<li>make</li>
<li>serproxy.cfgを設定。comm_baud=9600、serial_device1=/dev/ttyUSB0に設定</li>
<li>./serproxy を実行</li>
</ol>
<p>あとはProcessingのコードをストリーム用に修正。</p>
<p>以下は実際に利用したWiiハンドルからネットワーク越しにラジコンを操作するコードです。</p>
<p># ハンドル周りに角度変更後の値から±5～10度の遊びを加えると操作しやすくなります（たぶん</p>
<p><code><br />
import lll.wrj4P5.*;<br />
import lll.Loc.*;<br />
import processing.net.*;</code></p>
<p>float i = 0.0;<br />
float angle = 0.0;<br />
int kakudo = 0;<br />
int old_kakudo = 0;</p>
<p>Wrj4P5 wii;<br />
LinkedList p = new LinkedList();<br />
Client client;</p>
<p>void setup() {</p>
<p style="padding-left: 30px;">size(300,300,P3D);</p>
<p style="padding-left: 30px;">wii=new Wrj4P5(this).connect();</p>
<p style="padding-left: 30px;">client = new Client(this, &#8220;10.0.2.2&#8243;, 5331);</p>
<p style="padding-left: 30px;">smooth();</p>
<p style="padding-left: 30px;">rectMode(CENTER);</p>
<p>}</p>
<p>void draw() {</p>
<p style="padding-left: 30px;">if (wii.isConnecting()) return;</p>
<p style="padding-left: 30px;">stroke(32);</p>
<p style="padding-left: 30px;">fill(255);</p>
<p style="padding-left: 30px;">ellipse(width/2, height/2, width/1.6, width/1.6);</p>
<p style="padding-left: 30px;">translate(width/2,height/2);</p>
<p style="padding-left: 30px;">rotate( atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) );</p>
<p style="padding-left: 30px;">fill(0);</p>
<p style="padding-left: 30px;">rect(0,0,width/2,height/7);</p>
<p style="padding-left: 30px;">angle = atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) * 180 / PI;</p>
<p style="padding-left: 30px;">if (angle &gt; 0) {</p>
<p style="padding-left: 60px;">kakudo = int(angle) -90;</p>
<p style="padding-left: 60px;">kakudo = 180 &#8211; kakudo;</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">if (angle &lt; 0) {</p>
<p style="padding-left: 60px;">kakudo = int(angle) * -1 -90;</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">kakudo = int(kakudo * 0.1) * 10;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 65 &amp;&amp; kakudo &lt;= 115) kakudo = 90;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 115 &amp;&amp; kakudo &lt;= 135) kakudo = 115;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 135) kakudo = 135;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 45 &amp;&amp; kakudo &lt;= 65) kakudo = 65;</p>
<p style="padding-left: 30px;">if (kakudo &lt;= 45) kakudo = 45;</p>
<p style="padding-left: 30px;">if (old_kakudo != kakudo){</p>
<p style="padding-left: 60px;">old_kakudo = kakudo;</p>
<p style="padding-left: 60px;">client.write(str(kakudo) + &#8220;s\n&#8221;);</p>
<p style="padding-left: 60px;">println(client.read());</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<p>void buttonPressed(RimokonEvent evt,int rid){</p>
<p style="padding-left: 30px;">if (evt.wasPressed(evt.TWO)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;255w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">if (evt.wasPressed(evt.ONE)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;150w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p>}<br />
void buttonReleased(RimokonEvent evt,int rid){</p>
<p style="padding-left: 30px;">if (evt.wasReleased(evt.TWO)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;0w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">if (evt.wasReleased(evt.ONE)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;0w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<p>以上です。</p>
<p>「Serial Proxy」を使うとFlashなどからもArduinoの操作が可能となります。何が出来るか想像するだけでご飯が３杯は食べれます。もっと？</p>
<p>Arduinoを始めてからここまで２週間かかりました。Amazonの商品発送が9/1なので間違いないです。</p>
<p>平日は仕事しながら家で開発してましたので結構疲れました。</p>
<p>次回はラジコンを操作している動画のアップを予定してます。 # Serial Proxyとの通信に不具合があるので調整中です。</p>
<p>おまけ：Processing 1.0.7 を利用することでMacの64bitでもwiiリモコンを操作できました。</p>
<g:plusone href="http://labs.infoalive.com/tips/109"></g:plusone>]]></content:encoded>
			<wfw:commentRss>http://labs.infoalive.com/tips/109/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

