<?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>橋本商会 &#187; Arduino</title>
	<atom:link href="http://shokai.org/blog/archives/tag/arduino/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Sun, 20 May 2012 10:50:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>serial-socket-gateway</title>
		<link>http://shokai.org/blog/archives/5398</link>
		<comments>http://shokai.org/blog/archives/5398#comments</comments>
		<pubDate>Thu, 04 Nov 2010 16:12:39 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[EventMachine]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[serial-socket-gateway]]></category>
		<category><![CDATA[SerialPort]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5398</guid>
		<description><![CDATA[よくある シリアル通信 &#60;=&#62; TCP Socket する物を作った。 しばらく使ってて特に問題なかったので、使い方とか書いておく。 Mac OSX LeopardとUbuntu 9.04,と10.04とWi [...]]]></description>
			<content:encoded><![CDATA[<p>
よくある シリアル通信 &lt;=&gt; TCP Socket する物を作った。<br />
しばらく使ってて特に問題なかったので、使い方とか書いておく。<br />
Mac OSX LeopardとUbuntu 9.04,と10.04とWindows XPで動作した。<br />
<br />
普通のsocketなので大抵のプログラム言語から使えるし、少なくとも10個ぐらいのプログラムを下にぶらさげてマイコンと通信させられる。<br />
最近はコレでsocket化したシリアルデバイスにJRubyで作ったGUIをつないで色々やってる。<br />
<br />
<br />
■ソースコード<br />
githubにある<br />
<a href="http://github.com/shokai/serial-socket-gateway">http://github.com/shokai/serial-socket-gateway</a><br />
<br />
<br />
■インストール<br />
<pre>
git clone git://github.com/shokai/serial-socket-gateway.git<br />
</pre>
<br />
中のserial-socket-gatewayがそれ。Rubyで書かれている。<br />
単体のファイルで動くので、そのまま /usr/local/bin/ とか適当なパスの通っているディレクトリに cp すればいいと思います<br />
<br />
<br />
■必要なgemのインストール<br />
ruby-serialportとeventmachineを使っているのでそれぞれインストールする。<br />
<br />
<pre>
gem install eventmachine ArgsParser<br />
</pre>
<br />
<br />
ruby-serialportは0.7が動かなかったので、俺は0.6を使っている。MacやUbuntuはソースからビルドしてインストーｒうする<br />
<pre>
wget http://rubyforge.org/frs/download.php/72/ruby-serialport-0.6.tar.gz<br />
tar -zxvf ruby-serialport-0.6.tar.gz<br />
cd ruby-serialport-0.6<br />
ruby extconf.rb<br />
make<br />
sudo make install<br />
</pre>
<br />
<br />
Windowsは、<a href="http://rubyforge.org/tracker/download.php/61/321/9924/1800/ruby-serialport-0.6.0-mswin32-gem.zip">http://rubyforge.org/tracker/download.php/61/321/9924/1800/ruby-serialport-0.6.0-mswin32-gem.zip</a>からwindows用のバイナリ（gem）を持ってきて、解凍してインストール。<br />
<pre>
gem install serialport-0.6.0-mswin32.gem<br />
</pre>
<br />
<br />
■起動<br />
Arduino等をMacに接続すると /dev/ の下に、tty.usbなんとかというデバイスができているはず。<br />
<pre>
serial-socket-gateway /dev/tty.usbserial-A7006Rqn<br />
</pre>
デバイス名を引数に渡して起動。<br />
<br />
<br />
接続してみる。telnetでok<br />
<pre>
telnet localhost 8782<br />
</pre>
デフォルトで8782番portで起動している。port番号はソースの上の方をいじれば変えられる。<br />
<br />
<br />
■通信の仕様<br />
改行(¥n)区切りで、1行毎に通信している。改行が来るまで送受信しない。<br />
<br />
<br />
■サンプルプログラム Arduinoから送信<br />
こんなかんじでADコンバータで電圧測って、Serial.println()を使って末尾に改行を付けて9600bpsパリティなしストップビット1で送信。<br />
<pre class="prettyprint">
int ad_pin = 0;<br />
<br />
void setup(){<br />
  Serial.begin(9600);<br />
}<br />
<br />
void loop(){<br />
  int ad = analogRead(ad_pin);<br />
  Serial.println(ad);<br />
}<br />
</pre>
<br />
<br />
■サンプルプログラム Rubyで受信<br />
間にserial-socket-gatewayを挟んでシリアルデバイスと通信する。<br />
<br />
<pre class="prettyprint">
require 'socket'<br />
s = TCPSocket.open("192.168.1.100", 8782)<br />
<br />
loop do<br />
  res = s.gets<br />
  if res.to_s.size > 0<br />
    puts res<br />
  end<br />
end<br />
</pre>
serial-socket-gatewayはclientとの接続が切れていないか確認する為に、たまに空文字列を送ってくる。<br />
受信した文字列の長さを見て無視してください<br />
<br />
送信は<br />
<pre class="prettyprint">
s.puts "abc abc"<br />
</pre>
rubyのputsは末尾に改行(¥n)が付く。<br />
<br />
<br />
<br />
■サンプルプログラム Rubyで送受信を同時に<br />
標準入力をserial-socket-gatewayにそのまま送る。こういうのeventmachineでやると楽だね<br />
<pre class="prettyprint">
#!/usr/bin/env ruby<br />
require 'rubygems'<br />
require 'socket'<br />
require 'eventmachine'<br />
<br />
HOST = 'localhost'<br />
PORT = 8782<br />
<br />
begin<br />
  s = TCPSocket.open(HOST, PORT)<br />
rescue => e<br />
  STDERR.puts e<br />
  exit 1<br />
end<br />
<br />
EventMachine::run do<br />
  EventMachine::defer do<br />
    loop do<br />
      res = s.gets<br />
      exit unless res<br />
      if res.to_s.size > 0<br />
        puts res<br />
      end<br />
    end<br />
  end<br />
<br />
  EventMachine::defer do<br />
    loop do<br />
      s.puts gets<br />
    end<br />
  end<br />
end<br />
</pre>
<br />
<br />
eventmachineが便利！！<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5398/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BeagleBoard(Ubuntu9.04)とArduinoやmoxaを接続し、シリアル通信でやりとりする</title>
		<link>http://shokai.org/blog/archives/4617</link>
		<comments>http://shokai.org/blog/archives/4617#comments</comments>
		<pubDate>Mon, 20 Jul 2009 17:58:10 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[BeagleBoard]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[PhysicalComputing]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4617</guid>
		<description><![CDATA[BeagleBoardはTIの作ったオープンソースハードウェア。こっそり春頃からいじっていたんだけど書いてなかった。 スペックに難はあるが、ディスプレイとサウンド出力つきの組み込み環境が俺でも作れるのは魅力。作品のレベル [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://beagleboard.org/">BeagleBoard</a>はTIの作ったオープンソースハードウェア。こっそり春頃からいじっていたんだけど書いてなかった。<br />
スペックに難はあるが、ディスプレイとサウンド出力つきの組み込み環境が俺でも作れるのは魅力。作品のレベルをプロダクトに近い所まで引き上げられる。<br />
<br />
最近CRESTでのプロジェクト用にARM版Ubuntu9.04をbuildしてインストールして、Arduinoと接続する所までやったので書いておこう。<br />
<br />
今はApache2とruby1.8.7（いずれもaptでインストールした）を使って、外付けしたArduinoとmoxaからデータを読み取っている。とりあえず大学院棟の明るさをCdSで取得してwebに公開している → <a href="http://shokai-b.mag.keio.ac.jp/light">http://shokai-b.mag.keio.ac.jp/light</a><br />
<br />
<br />
<a href="http://www.flickr.com/photos/shokai/3725447171/" title="R0012112 by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2595/3725447171_cd9746e829.jpg" width="500" height="375" alt="R0012112" /></a><br />
<br />
<br />
■準備<br />
BeagleBoardと、インストール時にパソコンとBeagleBoard間でシリアルコンソールを使うのに必要なBeagleケーブルはdigikeyで購入できる。他の部品は国内で全て入手可能。<br />
<a href="http://www.flickr.com/photos/shokai/3726360852/" title="BeargleBoard 周辺機器 by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2665/3726360852_ce2bddd184.jpg" width="500" height="470" alt="BeargleBoard 周辺機器" /></a><br />
<br />
<br />
■Ubuntu9.04をBeagleBoardにインストール<br />
OSはSDカードにインストールする。<br />
最初デスクトップ版をインストールしてみたけど重すぎた。AngstromやHandheld Mojoならそれなりに動くけど、フルのUbuntuデスクトップはウィンドウマネージャをtwmにしても無理だった。<br />
今回の用途にはCUIがあれば十分だったので、最低限のbuildツールを含んだARM用イメージを作って起動させた。<br />
<br />
なお作業はext3のファイルシステムが読み書きできる必要があるので全て別のUbuntu Desktopで行った。<br />
<ol>
  <li><a href="http://d.hatena.ne.jp/shokai/20090708/1247052207">BeagleBoardにUbuntu Desktop版インストール &#8211; 橋本詳解</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20090714/1247572943">BeagleBoardにUbuntuセットアップ(GUIなし)、sshdを入れてリモートログインしてみる &#8211; 橋本詳解</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20090714/1247573774">いろいろインストールして環境を整える &#8211; 橋本詳解</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20090714/1247577340">Rubyまわりをインストール &#8211; 橋本詳解</a></li>
</ol>
<br />
これで、ApacheやRubyやsshdはもちろん、emacsと各種elisp、gemとeasy_install、rails2やsinatra、mongrel_clusterとapache2でmod_proxy_balancerなどがaptとgemでさくっとインストールできた。<br />
このへんのサーバサイドアプリ開発環境のセットアップの容易さはubuntuさすが。<br />
<br />
処理速度は体感でDebian化した白箱より速い。SDカードなのであまりR/Wしたくないがたぶん外付けUSB-HDDも認識できるんじゃないだろうか。そうすると、クローラ作ったり簡単なbotを動かす程度の俺は自宅サーバ環境はBeagleBoardで十分という可能性もある。<br />
<br />
<br />
<br />
処理速度とストレージ読み書きに不安はあるが小型かつバッテリーでも動かせるUbuntu Linux環境ができた。<br />
<br />
<br />
■Arduino / moxaとの通信<br />
BeagleBoard基板上のシリアルコンソールに使ったポートをArduinoやmoxaとの通信を使った。<br />
<br />
本当はUSBで接続したかったけどできなかった。<br />
FTDIチップのドライバはaptでインストールできるが、USBに接続しても認識されない（/dev/ttyUSB0に現れない）<br />
同じバージョンのUbuntuデスクトップを別のAMD64マシンで用意して、同じようにセットアップをしたがこちらは認識した。ARM版Ubuntuが何かおかしいのかもしれない。<br />
<br />
64bitAMDマシンではlsmodした時にFTDIチップを監視してるプロセスがいるんだけど、BeagleBoardではlsmodしてもいない。<br />
誰かLinux詳しい人教えてくれるとうれしいです・・・<br />
<br />
<br />
しかたないのでセットアップに使ったBeagleケーブルのオス版を作って通信に使う。<br />
シリアルポートの9つのピンには<a href="http://shokai.org/blog/archives/107">よく見ると番号が振ってあり</a>、それをBeagleBoardの基板上の1～9ピン（10は無視する）と接続する。<br />
シリアルポート側は<br />
</p>
<blockquote><p>12345<br />
6789</p></blockquote>
<p>
のようになるが、BeagleBoard上のコネクタは<br />
</p>
<blockquote><p>13579<br />
2468</p></blockquote>
<p>
となっているのでとても捻れる。気合いではんだづけする。基板上のシルク印刷をよく見てね。<br />
<br />
<br />
<a href="http://www.flickr.com/photos/shokai/3726251750/" title="R0012102 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3470/3726251750_7ed5ddfcca.jpg" width="375" height="500" alt="R0012102" /></a><br />
<a href="http://www.flickr.com/photos/shokai/3726252136/" title="R0012104 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3659/3726252136_7956c5652a.jpg" width="500" height="375" alt="R0012104" /></a><br />
<a href="http://www.flickr.com/photos/shokai/3726252318/" title="R0012106 by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2485/3726252318_db39260871.jpg" width="500" height="375" alt="R0012106" /></a><br />
<a href="http://www.flickr.com/photos/shokai/3725446073/" title="R0012107 by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2432/3725446073_81b5282398.jpg" width="500" height="375" alt="R0012107" /></a><br />
<br />
<br />
これで、Arduinoの外側にあるRX / TXピンにMAX232(ADM3202)を接続すればBeagleBoardとシリアル通信できる。<br />
<a href="http://www.flickr.com/photos/shokai/3725446767/" title="R0012110 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3457/3725446767_41233f4a93.jpg" width="500" height="375" alt="R0012110" /></a><br />
<br />
ArduinoにCdS（明るさのセンサ）なんかを接続して数値をBeagleBoardに送り続ければいい。<br />
<br />
<br />
/etc/event.d/ttyS2 を削除して再起動すると、/dev/ttyS2がシリアルコンソールではなくシリアルポートとして開ける。<br />
</p>
<blockquote><p>screen /dev/ttyS2</p></blockquote>
<p>でモニタできる。<br />
UNIX系なので、シリアルポートもFileとして簡単に読み出せた。<br />
<a href="http://d.hatena.ne.jp/shokai/20090716/1247733038">Arduino + BeagleBoard(Ubuntu) シリアルポートを読んでたまにファイルに書き出す &#8211; 橋本詳解</a><br />
<br />
通信できる手段が整えばあとは好きにできる。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4617/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac版Arduino IDEがlibrxtxSerial.jnilibが見つからないエラーで起動しないのを対処</title>
		<link>http://shokai.org/blog/archives/4586</link>
		<comments>http://shokai.org/blog/archives/4586#comments</comments>
		<pubDate>Sat, 04 Jul 2009 17:40:22 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4586</guid>
		<description><![CDATA[起動時にこんなエラーが出た。環境はMacbook pro 17インチ OSX LeopardでXCodeなどもたぶん全部入れてあるメイン開発環境。 java.lang.UnsatisfiedLinkError: /App [...]]]></description>
			<content:encoded><![CDATA[<p>
起動時にこんなエラーが出た。環境はMacbook pro 17インチ OSX LeopardでXCodeなどもたぶん全部入れてあるメイン開発環境。<br />
<br />
</p>
<blockquote><p>java.lang.UnsatisfiedLinkError: /Applications/arduino/Arduino.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitable image found.</p></blockquote>
<p>
<br />
<br />
<a href="http://www.flickr.com/photos/shokai/3687833230/" title="arduino error by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2455/3687833230_c53e8dc908.jpg" width="425" height="216" alt="arduino error" /></a><br />
<br />
<br />
原因は64bit環境で実行されようとしているかららしい。<br />
対処法は2つ。<br />
<br />
<br />
■Arduinoを32bit版で起動させる<br />
Arduino実行ファイルを右クリックして「情報を見る」<br />
「32ビットモードで開く」にチェック入れる<br />
(<a href="http://twitter.com/hitoriblog/status/2471362021">hitoriblogさんより</a>)<br />
<br />
<br />
■64bit版rxtxSerial.jnilibをインストールする<br />
<a href="http://iharder.sourceforge.net/current/java/librxtxSerial.jnilib">http://iharder.sourceforge.net/current/java/librxtxSerial.jnilib</a> を<br />
/Arduino 16.app/Contents/Resources/Java/<br />
の中にある librxtxSerial.jnilib と入れ替える。<br />
<br />
これは<a href="http://tech.element77.com/2009/06/arduino-problems-with.html">Technobabble: Arduino: Problems With librxtxSerial.jnilib</a>に書いてあった方法。<br />
<br />
<br />
両方ともIDEの起動までは試した。<br />
Arduinoの実機が今ないので動作は試していない。まあどっちかで動くだろう。<br />
<br />
<br />
<br />
他にも<a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1239162176">フォーラムでも同様の質問</a>が出ていて、こちらでは<br />
アプリケーション/ユーティリティ/Java Preferences<br />
でJavaアプリケーションの方でJ2SE5.0の32bit版が優先されるように上の方にもってこいという指示が出ていた。質問者はこれで解決したらしいけど俺の環境では駄目だった。<br />
これはArduinoがJ2SE6向けに作られていないため。<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4586/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduinoが流行っている</title>
		<link>http://shokai.org/blog/archives/2295</link>
		<comments>http://shokai.org/blog/archives/2295#comments</comments>
		<pubDate>Sat, 06 Dec 2008 16:00:09 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[GoogleTrends]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=2295</guid>
		<description><![CDATA[日本語Twitter検索でarduinoのRSSを監視しているんだけど、最近はかなりの頻度で誰かがArduinoをいじっているのでGoogle Trendsでも見てみた まずは世界全体。2005年ごろに出てから毎年倍々に [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://pcod.no-ip.org/yats/search?query=arduino">日本語Twitter検索でarduino</a>のRSSを監視しているんだけど、最近はかなりの頻度で誰かがArduinoをいじっているのでGoogle Trendsでも見てみた<br />
<br />
<br />
まずは世界全体。2005年ごろに出てから毎年倍々になってきている。<br />
<a href="http://www.google.co.jp/trends?q=arduino">Google Trends: arduino (世界全体)<br />
<img src="http://farm4.static.flickr.com/3193/3087168752_5374f56560.jpg" width="500" height="392" alt="Arduino GoogleTrend" /></a><br />
<br />
<span id="more-2295"></span><br />
<br />
日本は検索数の指数がケタ違う延びをしている。<br />
<a href="http://jp.makezine.com/blog/2008/11/make_tokyo_meeting_02_update.html">Make Tokyo Meeting02</a>前後の11月頭に<a href="http://www.google.co.jp/trends?q=arduino&amp;ctab=0&amp;geo=JP&amp;geor=all&amp;date=ytd&amp;sort=0">上がったり下がったり</a>している。<br />
<a href="http://www.google.co.jp/trends?q=arduino&amp;ctab=0&amp;geo=JP&amp;date=all&amp;sort=0">Google Trends: arduino (日本のみ)<br />
<img src="http://farm4.static.flickr.com/3184/3087175606_95626f6c1b.jpg" width="500" height="391" alt="Arduino GoogleTrend (Japan)" /></a><br />
<br />
<br />
<br />
地域別では一番多いのがイタリア。<br />
<a href="http://www.google.co.jp/trends?q=arduino&amp;ctab=0&amp;geo=ita&amp;date=all&amp;sort=0">Google Trends: arduino (イタリア)<br />
<img src="http://farm4.static.flickr.com/3239/3087167858_9b50573f25.jpg" width="500" height="398" alt="Arduino GoogleTrend (Italy)" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/2295/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino &#8211; ロータリーエンコーダ改</title>
		<link>http://shokai.org/blog/archives/1453</link>
		<comments>http://shokai.org/blog/archives/1453#comments</comments>
		<pubDate>Sat, 27 Oct 2007 16:15:34 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[ロータリーエンコーダ]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1453</guid>
		<description><![CDATA[Arduino &#8211; ロータリーエンコーダを回すのコードがアレだったのでシンプルに書き直した。回路はそのままで。 char&#160;rot_state;&#160;//&#160;状態&#160;0~3 ch [...]]]></description>
			<content:encoded><![CDATA[<p>
<p><a href="http://shokai.org/blog/archives/1449">Arduino &#8211; ロータリーエンコーダを回す</a>のコードがアレだったのでシンプルに書き直した。回路はそのままで。</p>
<pre class="prettyprint">
char&nbsp;rot_state;&nbsp;//&nbsp;状態&nbsp;0~3<br />
char&nbsp;rot_pinA&nbsp;=&nbsp;8;&nbsp;//&nbsp;PinA&nbsp;of&nbsp;RotaryEncoder<br />
char&nbsp;rot_pinB&nbsp;=&nbsp;9;&nbsp;//&nbsp;PinB<br />
void&nbsp;setup()<br />
{<br />
&nbsp;&nbsp;Serial.begin(9600);<br />
&nbsp;&nbsp;pinMode(rot_pinA,&nbsp;INPUT);<br />
&nbsp;&nbsp;pinMode(rot_pinB,&nbsp;INPUT);<br />
&nbsp;&nbsp;rot_state&nbsp;=&nbsp;rotary_getState(rot_pinA,&nbsp;rot_pinB);&nbsp;//&nbsp;現在の状態を保存しておく<br />
}<br />
void&nbsp;loop()<br />
{<br />
&nbsp;&nbsp;//&nbsp;ロータリーエンコーダの状態を監視して、PCにシリアル通信で送る<br />
&nbsp;&nbsp;char&nbsp;rot_past&nbsp;=&nbsp;rot_state;<br />
&nbsp;&nbsp;rot_state&nbsp;=&nbsp;rotary_getState(rot_pinA,&nbsp;rot_pinB);&nbsp;//&nbsp;今の状態<br />
&nbsp;&nbsp;char&nbsp;rot_dir&nbsp;=&nbsp;rotary_getDir(rot_state,&nbsp;rot_past);&nbsp;//&nbsp;回転方向<br />
&nbsp;&nbsp;switch(rot_dir){<br />
&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serial.println("R");&nbsp;//&nbsp;右回転<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serial.println("L");&nbsp;//&nbsp;左回転<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;delayMicroseconds(10);<br />
}<br />
/*&nbsp;ロータリーエンコーダの状態番号0~3を取得する&nbsp;*/<br />
char&nbsp;rotary_getState(char&nbsp;pinA,&nbsp;char&nbsp;pinB){<br />
&nbsp;&nbsp;//&nbsp;2つのピンからの入力状態をチェック<br />
&nbsp;&nbsp;if(digitalRead(pinA)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(digitalRead(pinB))&nbsp;return&nbsp;2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return&nbsp;0;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(digitalRead(pinB))&nbsp;return&nbsp;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return&nbsp;3;<br />
&nbsp;&nbsp;}<br />
}<br />
/*&nbsp;1つ前の状態と比較して、回転方向を取得する&nbsp;*/<br />
char&nbsp;rotary_getDir(int&nbsp;state,&nbsp;int&nbsp;past_state){<br />
&nbsp;&nbsp;if((state+3+1)%3&nbsp;==&nbsp;past_state)&nbsp;return&nbsp;1;&nbsp;//&nbsp;左回り<br />
&nbsp;&nbsp;else&nbsp;if((state+3-1)%3&nbsp;==&nbsp;past_state)&nbsp;return&nbsp;2;&nbsp;//&nbsp;右回り<br />
&nbsp;&nbsp;return&nbsp;0;&nbsp;//&nbsp;変化無し<br />
}<br />
</pre>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1453/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino &#8211; ロータリーエンコーダを回す</title>
		<link>http://shokai.org/blog/archives/1449</link>
		<comments>http://shokai.org/blog/archives/1449#comments</comments>
		<pubDate>Fri, 26 Oct 2007 05:42:54 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[ロータリーエンコーダ]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1449</guid>
		<description><![CDATA[Arduinoでロータリーエンコーダの回転を検出した。 ロータリーエンコーダは可変抵抗と異なり、アナログ値を出すのではなく回転方向を2byteでデジタル出力するので、無限に回転させる事ができる。マウスのホイールもロータリ [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>Arduinoでロータリーエンコーダの回転を検出した。<br /><br />
ロータリーエンコーダは可変抵抗と異なり、アナログ値を出すのではなく回転方向を2byteでデジタル出力するので、無限に回転させる事ができる。マウスのホイールもロータリーエンコーダで出来ている。</p>
<p><a href="http://shokai.org/archive/arduino/_071026_RotaryEncoder/_071026_RotaryEncoder.pde">Source Code (Arduino 0009 Alpha / ATmega8 16MHz)</a></p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/eePYgfy25ys&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/eePYgfy25ys&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>基本的に回路もプログラムもATMega8でやったのと全く同じ方法でできた。<br /><br />
<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2005/07/avr_atmega8.html">s.h.log: AVR &#8211; mega8でロータリーエンコーダを回す</a></p>
</p>
<blockquote><p><p>ロータリーエンコーダーの真ん中の足をGNDに接続し、左右の足をそれぞれマイコンのピンに接続。また、左右の足とマイコンのピンの間で、10kΩの抵抗を使ってプルアップする（VCCに接続する）<br /><br />
まあ写真の通り。</p>
<p>インクリメンタル型ロータリーエンコーダーは2本の線で4種類の回転状態を出力する。1クリック回す（カチッと言う）と、4種類の状態が一回りする。<br /><br />
とりあえず状態に0,1,2,3と名前をつけて、10ms毎ぐらいに状態を見に行くと、状態が1増えていたら右に回転、減っていたら左に回転みたいな感じでわかる。</p></p></blockquote>
<p>
<p>ただし、Arduinoにはタイマーが無いので、メインループ loop() の中で delayMicroseconds(10); を呼んで、10ミリ秒を作っている。</p>
<p>なので、ロータリーエンコーダと同時にタイミングが難しい処理を行うとおかしくなるかもしれない。<br /><br />
例えば赤外線の受信とか。</p>
<p><span id="more-1449"></span><br /><br />
　<br /><br />
回路の写真。抵抗は10kΩを使う。<br /><br />
<a href="http://www.flickr.com/photos/shokai/1753677557/" title="Photo Sharing"><img src="http://farm3.static.flickr.com/2392/1753677557_51242438e0.jpg" width="500" height="375" alt="DSC05557" /></a><br /><br />
<a href="http://www.flickr.com/photos/shokai/1753714391/" title="Photo Sharing"><img src="http://farm3.static.flickr.com/2376/1753714391_37d987f812.jpg" width="500" height="375" alt="DSC05562" /></a></p>
<p><a href="http://shokai.org/archive/arduino/_071026_RotaryEncoder/_071026_RotaryEncoder.pde">Source Code (Arduino 0009 Alpha / ATmega8 16MHz)</a><br /><br />
</p>
<blockquote><p>
/***<br /><br />
DetectrotationofRotaryEncoderbypin2&#038;pin3<br /><br />
sendrotationstatetoPCviaSerialPort.<br /><br />
<br /><br />
CPU:ATMEGA816MHz<br /><br />
Compiler:Arduino0009Alpha<br /><br />
Date:2007/10/26<br /><br />
Author:ShoHashimoto<br /><br />
WebSite:http://shokai.org<br /><br />
***/</p>
<p>charled_pin=13;//LEDonArduinoboard<br /><br />
charrot_pinA=2;//PinAofRotaryEncoder<br /><br />
charrot_pinB=3;//PinB</p>
<p>voidsetup()<br /><br />
{<br /><br />
Serial.begin(9600);<br /><br />
pinMode(led_pin,OUTPUT);<br /><br />
digitalWrite(led_pin,HIGH);<br /><br />
pinMode(rot_pinA,INPUT);<br /><br />
pinMode(rot_pinB,INPUT);<br /><br />
}</p>
<p>charrot_state;<br /><br />
voidloop()<br /><br />
{<br /><br />
charpast_state=rot_state;<br /><br />
<br /><br />
//2つのピンからの入力状態をチェック<br /><br />
if(digitalRead(rot_pinA)){<br /><br />
if(digitalRead(rot_pinB))//HH<br /><br />
rot_state=1;<br /><br />
else//HL<br /><br />
rot_state=0;<br /><br />
}<br /><br />
else{<br /><br />
if(digitalRead(rot_pinB))//LH<br /><br />
rot_state=2;<br /><br />
else//LL<br /><br />
rot_state=3;<br /><br />
}<br /><br />
<br /><br />
//回転方向を割り出す<br /><br />
if((rot_state+3+1)%3==past_state){//右回り<br /><br />
Serial.println(&#8220;R&#8221;);<br /><br />
}<br /><br />
elseif((rot_state+3-1)%3==past_state){//左回り<br /><br />
Serial.println(&#8220;L&#8221;);<br /><br />
}<br /><br />
<br /><br />
delayMicroseconds(10);<br /><br />
}<br />
</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1449/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#講座01 SerialPortクラスを使ってArduinoと連動させる(1/2)</title>
		<link>http://shokai.org/blog/archives/1443</link>
		<comments>http://shokai.org/blog/archives/1443#comments</comments>
		<pubDate>Sun, 21 Oct 2007 02:41:30 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# Tutorial]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1443</guid>
		<description><![CDATA[VS2005 C#のSerialPortコンポーネントを使って、Arduinoとシリアル通信して連携する方法をビデオ撮ってみた。 今回はマイコン→PCの一方方向だけしかやらなかったので、逆はあとでやる。 VisualSt [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>VS2005 C#のSerialPortコンポーネントを使って、Arduinoとシリアル通信して連携する方法をビデオ撮ってみた。<br /><br />
今回はマイコン→PCの一方方向だけしかやらなかったので、逆はあとでやる。</p>
<p><embed width="416" height="340" flashvars="autoplay=false" src="http://ustream.tv/fmyMEbxuAkd5FmLcAhUp.Q.usv" type="application/x-shockwave-flash" wmode="transparent" \></p>
<p>VisualStudio C#.NETで<br /><br />
・新規ソリューションを作る<br /><br />
・その中に新規プロジェクトを作る<br /><br />
・ボタンやシリアルポートコンポーネントなどを配置してみる<br /><br />
・コンポーネントにイベント登録する<br /><br />
という事を解説してみた。</p>
<p>→ <a href="http://shokai.org/archive/cs2.0/0710_tutorial/071002_01_Tutorial.zip">ソースコード一式</a></p>
<p>今回書いたのはこれだけ。でも、これもほとんどVisualStudioに自動生成される。<br /><br />
</p>
<blockquote><p>
publicForm1()<br /><br />
{<br /><br />
InitializeComponent();<br /><br />
Console.WriteLine(&#8220;start&#8221;);<br /><br />
}</p>
<p>privatevoidserialPort1_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse)<br /><br />
{<br /><br />
Console.WriteLine(serialPort1.ReadLine());<br /><br />
}</p>
<p>privatevoidbutton1_Click(objectsender,EventArgse)<br /><br />
{<br /><br />
serialPort1.NewLine=&#8221;¥r¥n&#8221;;<br /><br />
serialPort1.Open();<br /><br />
}</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1443/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FNCCでシリアル通信を受信</title>
		<link>http://shokai.org/blog/archives/1322</link>
		<comments>http://shokai.org/blog/archives/1322#comments</comments>
		<pubDate>Tue, 17 Apr 2007 22:00:02 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[FNCC]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1322</guid>
		<description><![CDATA[FNCCを使うと、シリアルポートを扱うクラスの無いFlashでもシリアルポートが使えるようになる。 FNCCのサイトで、COM-XMLSocketのproxy（.NETのexe）と、XMLSocketをシリアルポートみた [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>FNCCを使うと、シリアルポートを扱うクラスの無いFlashでもシリアルポートが使えるようになる。<br /><br />
FNCCのサイトで、COM-XMLSocketのproxy（.NETのexe）と、XMLSocketをシリアルポートみたいに見せるラッパークラス（AS2）が配布されている<br /><br />
<a href="http://www.hatayan.org/software/fncc/index.php">Flash Net Comport Connector &#8211; Rapid prototyping tool series</a></p>
<p>こんな感じで受信できる。</p>
</p>
<blockquote><p><p>importcom.hatayan.flashNetComportConnector.SerialPort;</p>
<p>this.stop();</p>
<p>varserial_net=newSerialPort();<br /><br />
serial_net.openRemoteComport(&#8220;localhost&#8221;,1888);</p>
<p>serial_net.onReceiveStr=function(serialObj:SerialPort){<br /><br />
recv_data=serialObj.getStr();<br /><br />
if(recv_data==&#8217;1&#8242;){<br /><br />
gotoAndStop(1);<br /><br />
}<br /><br />
elseif(recv_data==&#8217;0&#8242;){<br /><br />
gotoAndStop(2);<br /><br />
}<br /><br />
};</p></p></blockquote>
<p>
<p><span id="more-1322"></span><br /><br />
ついでにArduinoのADコンバータで適当なセンサーに接続して、適当にシリアルポートに送信するサンプルものせておく。</p>
</p>
<blockquote><p><p>intad;</p>
<p>voidsetup()<br /><br />
{<br /><br />
Serial.begin(9600);<br /><br />
}</p>
<p>voidloop()<br /><br />
{<br /><br />
ad=analogRead(0);<br /><br />
if(ad>200){<br /><br />
Serial.println(&#8217;1&#8242;);<br /><br />
}<br /><br />
else{<br /><br />
Serial.println(&#8217;0&#8242;);<br /><br />
}<br /><br />
<br /><br />
delay(100);//0.1秒待つ<br /><br />
}</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1322/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino+XPort+Perl+WebService</title>
		<link>http://shokai.org/blog/archives/1298</link>
		<comments>http://shokai.org/blog/archives/1298#comments</comments>
		<pubDate>Thu, 22 Mar 2007 17:01:23 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[Socket]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[XPort]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1298</guid>
		<description><![CDATA[ArduinoにXPortでIP持たせて、そこにPerlからデータをプッシュする。 s.h.log: XPortをEthernet-UARTコンバータとして使うの通りにXPortを設定する。 そこに、明日の天気のデータを [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>ArduinoにXPortでIP持たせて、そこにPerlからデータをプッシュする。</p>
<p><a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/03/xport-telnet.html">s.h.log: XPortをEthernet-UARTコンバータとして使う</a>の通りにXPortを設定する。</p>
<p>そこに、明日の天気のデータを<a href="http://weather.livedoor.com/area/13/63.html">Livedoorお天気</a>のRSSからパースしてsocketで送ると、<br /><br />
socket通信をXPort越しにArduinoで受け取れるので、晴れ/曇り/雨でそれぞれLEDを光らせる「てるてる坊主」を作ろうというもの。</p>
<p><a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/03/perl-io-socket.html">最初は今日の天気だった</a>が、よく考えたら今日の天気は空見ればわかるから、<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/03/perl-date-simple.html">Date::Simple使って</a>明日の天気になった。</p>
<p>あと、送信データもstringではなくchar一文字でいいやという事になった。Arduinoには文字列比較系の関数が無いし、heepが無いマイコンに無理させる必要も無いし。</p>
<p>以下は暫定版のArduino&#038;Perlコード。<br /><br />
physicalとwebに向いているのをそれぞれで分業させたので、結構短く書けて楽だった。<br /><br />
これでテンプレートができたので、<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/03/perl-net-google-calend.html">GoogleCalendarから予定引っ張ってきて</a>枕に振動モータ突っ込んで起こすとか1時間あれば作れる。</p>
<p><span id="more-1298"></span><br /><br />
send-tomorrow-weather.pl<br /><br />
</p>
<blockquote><p>#合宿moduleワークショップ用「てるてる坊主」<br /><br />
#Livedoorお天気RSSから明日の東京の天気をparseし、<br /><br />
#Socketを使って&#8221;s&#8221;/&#8221;c&#8221;/&#8221;r&#8221;で晴れ/曇り/雨をXPortに送信する<br /><br />
#<br /><br />
#Perl5.8.4<br /><br />
#Date:2007/3/22<br /><br />
#Author:ShoHashimoto<br /><br />
#WebSite:http://shokai.org/</p>
<p>usestrict;<br /><br />
usewarnings;<br /><br />
useEncode;<br /><br />
useLWP::Simple;<br /><br />
useXML::RSS;<br /><br />
useIO::Socket;<br /><br />
useDate::Simple;</p>
<p>my$addr=shift;<br /><br />
my$port=shift;</p>
<p>my$url=&#8221;http://weather.livedoor.com/forecast/rss/13/63.xml&#8221;;</p>
<p>my$document=get($url)ordie&#8221;can&#8217;tgetcontentfrom$url¥n&#8221;;</p>
<p>my$rss=XML::RSS->new;<br /><br />
$rss->parse($document);</p>
<p>#明日の日付を取得<br /><br />
my($year,$month,$day)=Date::Simple->today->next->as_ymd;</p>
<p>my$sock=IO::Socket::INET->new(PeerAddr=>$addr,<br /><br />
PeerPort=>$port,<br /><br />
Proto=>&#8217;tcp&#8217;);</p>
<p>for(@{$rss->{items}}){<br /><br />
my$title=encode(&#8216;utf8&#8242;,$_->{title});<br /><br />
if($title=~&#8221;$day日&#8221;){#明日で、東京の時<br /><br />
if($title=~&#8221;雨&#8221;){<br /><br />
$sock->send(&#8220;r&#8221;);<br /><br />
}<br /><br />
elsif($title=~&#8221;曇&#8221;){<br /><br />
$sock->send(&#8220;c&#8221;);<br /><br />
}<br /><br />
else{<br /><br />
$sock->send(&#8220;s&#8221;);<br /><br />
}<br /><br />
}<br /><br />
}</p></p></blockquote>
<p>
<p>Arduino側<br /><br />
</p>
<blockquote><p>/***<br /><br />
合宿moduleワークショップ用「てるてる坊主」<br /><br />
Serialから&#8221;s&#8221;/&#8221;c&#8221;/&#8221;r&#8221;で晴れ/曇り/雨を受け取り、<br /><br />
対応するLED赤/白/青を光らせる<br /><br />
<br /><br />
CPU:ATMEGA816MHz<br /><br />
Compiler:Arduino0007Alpha<br /><br />
Date:2007/3/22<br /><br />
Author:ShoHashimoto<br /><br />
WebSite:http://shokai.org/<br /><br />
***/</p>
<p>charled_pin=13;//LEDonArduinoboard<br /><br />
charled_s=1;//LEDforshiny<br /><br />
charled_c=2;//LEDforrainy<br /><br />
charled_r=3;//LEDforcloudy<br /><br />
charrecvData;//receiveddata</p>
<p>voidsetup()<br /><br />
{<br /><br />
Serial.begin(9600);<br /><br />
pinMode(led_pin,OUTPUT);//LEDmode<br /><br />
pinMode(led_s,OUTPUT);<br /><br />
pinMode(led_c,OUTPUT);<br /><br />
pinMode(led_r,OUTPUT);<br /><br />
digitalWrite(led_pin,HIGH);<br /><br />
}</p>
<p>voidloop()<br /><br />
{<br /><br />
while(Serial.available()){//whenreceivedataviaSerial<br /><br />
recvData=Serial.read();<br /><br />
digitalWrite(led_s,LOW);//initialize<br /><br />
digitalWrite(led_c,LOW);<br /><br />
digitalWrite(led_r,LOW);<br /><br />
switch(recvData){//parsedata<br /><br />
case&#8217;s'://shiny<br /><br />
digitalWrite(led_s,HIGH);<br /><br />
break;<br /><br />
case&#8217;c'://cloudy<br /><br />
digitalWrite(led_c,HIGH);<br /><br />
break;<br /><br />
case&#8217;r'://rainy<br /><br />
digitalWrite(led_r,HIGH);<br /><br />
break;<br /><br />
}<br /><br />
}<br /><br />
}</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1298/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleEarth+GPS+DigitalCompass</title>
		<link>http://shokai.org/blog/archives/1239</link>
		<comments>http://shokai.org/blog/archives/1239#comments</comments>
		<pubDate>Thu, 01 Feb 2007 09:10:18 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[GoogleEarth]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[RDCM-802]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1239</guid>
		<description><![CDATA[せっかく方位センサ買ったので、さくっとGpsWalkingしてみた。 ■本日の素材 ・s.h.log: Arduinoで方位センサ RDCM-802 を試す ・s.h.log: C#でGoogleEarthを動かす ・s [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>せっかく方位センサ買ったので、さくっとGpsWalkingしてみた。</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/JVQ_8dS8KaM"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/JVQ_8dS8KaM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p>■本日の素材<br /><br />
・<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/02/arduino-rdcm-802.html">s.h.log: Arduinoで方位センサ RDCM-802 を試す</a><br /><br />
・<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/01/googleearth-comapi.html">s.h.log: C#でGoogleEarthを動かす</a><br /><br />
・<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/01/gps-connector-ver-up.html">s.h.log: C#用クラス: シリアル接続GPSのラッパーをver up</a></p>
<p>■技術的なこと<br /><br />
結構モジュールが揃っていたので楽だった。</p>
<p><span id="more-1239"></span><br /><br />
こんな感じでGPSと方位センサをgetして<br /><br />
</p>
<blockquote><p>usingOrg.Shokai.Util;<br /><br />
usingSystem.IO.Ports;</p>
<p>GpsConnectorgps=newGpsConnector();<br /><br />
gps.PortName=&#8221;COM5&#8243;;<br /><br />
gps.BaudRate=4800;<br /><br />
gps.connect();</p>
<p>SerialPortdirectionSensor=newSerialPort();<br /><br />
directionSensor.PortName=&#8221;COM3&#8243;;<br /><br />
directionSensor.BaudRate=9600;<br /><br />
directionSensor.open();</p></p></blockquote>
<p>
<p>方位を<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/02/arduino-rdcm-802.html">バイナリ</a>から北が0、南が180、西が270の0～360の数値に直してから</p>
<p>GoogleEarth COM APIに突っ込む<br /><br />
</p>
<blockquote><p>IApplicationGEgEarth=newApplicationGE();<br /><br />
CameraInfoGEcam=newCameraInfoGE();//新しい視点を作る<br /><br />
cam.Azimuth=direction;//方位<br /><br />
cam.FocusPointLatitude=gps.gpsData.lat;//緯度<br /><br />
cam.FocusPointLongitude=gps.gpsData.lon;//経度<br /><br />
gEarth.SetCamera(cam,1);//移動</p></p></blockquote>
<p>
<p>終わり。1.5時間でworking prototypeが完成してしまった。</p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1239/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

