<?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; moxa</title>
	<atom:link href="http://shokai.org/blog/archives/tag/moxa/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:32:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>BeagleBoard上でmoxaを開発する</title>
		<link>http://shokai.org/blog/archives/4954</link>
		<comments>http://shokai.org/blog/archives/4954#comments</comments>
		<pubDate>Wed, 23 Dec 2009 05:02:59 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[BeagleBoard]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4954</guid>
		<description><![CDATA[Ubuntu 9.04をインストールしたBeagle Boardの上でtalkticのコンパイルとmoxaへ書き込みを行う。刺しっぱなしで開発できるようになるのでとても便利。 xtel technical informa [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://shokai.org/blog/archives/4938">Ubuntu 9.04をインストールしたBeagle Board</a>の上でtalkticのコンパイルとmoxaへ書き込みを行う。刺しっぱなしで開発できるようになるのでとても便利。<br />
<br />
<a href="http://www.uc.sfc.keio.ac.jp/xtel/download/">xtel technical information ＞ download＞ ダウンロード</a>から「開発用エクリプスパッケージ for Mac」をダウンロードしてくる。<br />
<br />
xtel-eclipseの中の<br />
<ul>
  <li>jsc/jsc.jar<br />
    talkticコンパイラ</li>
  <li>avrdude/bin/avrdude<br />
    avrdude実行ファイル。mac portsでインストールできるavrdudeだと書き込みが怪しい。<br />
Ubuntu9.04のaptでインストールできるavrdudeは普通に動くのでこれは必要ない。</li>
  <li>avrdude/etc/avrdude.conf<br />
    avrdudeの設定ファイル</li>
</ul>
この3つを手に入れて適当にアクセスしやすい場所に置いておく。<br />
<br />
<br />
■talkticのコンパイル<br />
javaをインストールする<br />
<pre class="prettyprint">
sudo apt-get install default-jre<br />
which java<br />
</pre>
<br />
コンパイル。source.jsからsource.binを作る<br />
<pre class="prettyprint">
java -jar path/to/jsc.jar -Bsource.bin source.js<br />
</pre>
macでも同じようにバイナリを作れる。<br />
<br />
<br />
■moxaへの書き込み<br />
avrdudeをインストールしておく。Macはeclipseについてるavrdudeを使う。<br />
<pre class="prettyprint">
sudo apt-get install avrdude<br />
which avrdude<br />
</pre>
<br />
BeagleBoardではUSBデバイス名を書き込んであっても /dev/ttyUSB0 になってしまい、しかもrootしかアクセスできないのでsudoを使って書き込む。<br />
<pre class="prettyprint">
sudo avrdude -C path/to/avrdude.conf -p m128 -c stk500v1 -b 9600 -P /dev/ttyUSB0 -F -U eeprom:w:source.bin:r<br />
</pre>
<br />
<br />
Macだとsudoが必要なくて、デバイス名が認識されてるのでこうなる。<br />
<pre class="prettyprint">
avrdude -C path/to/avrdude.conf -p m128 -c stk500v1 -b 9600 -P /dev/tty.usbserial-gemsbok -F -U eeprom:w:source.bin:r<br />
</pre>
<br />
<br />
こんな風に書き込んだりプログラム書いたりしてる<br />
<a href="http://www.flickr.com/photos/shokai/4208176866/" title="ピクチャ 1 by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2764/4208176866_cb0e8b0387_o.png" width="969" height="1147" alt="ピクチャ 1" /></a><br />
<br />
<a href="http://www.flickr.com/photos/shokai/4207412711/" title="ピクチャ 2 by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4049/4207412711_d55fb4a490_o.png" width="961" height="1147" alt="ピクチャ 2" /></a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4954/feed</wfw:commentRss>
		<slash:comments>1</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>moxaでバイオメタルを動かした</title>
		<link>http://shokai.org/blog/archives/4182</link>
		<comments>http://shokai.org/blog/archives/4182#comments</comments>
		<pubDate>Tue, 10 Feb 2009 15:57:04 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[biometal]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[PWM]]></category>
		<category><![CDATA[Talktic]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4182</guid>
		<description><![CDATA[バイオメタルをmoxaで動かすために0V～3V程度を出せる回路とプログラムを作った。 色々試した結果、最終的にPCからシリアル通信でmoxaのanalogWrite（PWM出力）を制御できるようにして、analogWri [...]]]></description>
			<content:encoded><![CDATA[<p>
バイオメタルをmoxaで動かすために0V～3V程度を出せる回路とプログラムを作った。<br />
<br />
色々試した結果、最終的にPCからシリアル通信でmoxaのanalogWrite（PWM出力）を制御できるようにして、analogWriteをトランジスタ（2SC1815）に突っ込む。トランジスタは三端子レギュレータ7805から得た5Vを出すが、トランジスタを通る事で3.7V程度に落ちて、バイオメタルにちょうど良い電圧になった。<br />
<br />
バイオメタルは「3Vで駆動」と書いてあったけど3.7Vでも大丈夫だった。5Vそのまま入れると変な臭いがしてきてヤバイ（すぐ止めました）<br />
<br />
AVRマイコンのGPIO出力は3Vだけど40mAと電流が足りなかった。<br />
バイオメタルを動かすには200mA程度必要で、<a href="http://akizukidenshi.com/catalog/g/gI-00538/">秋月の3.3Vの三端子レギュレータ</a>を使っても動いたけどマイコンから制御するためにトランジスタをかますと2V程度に落ちてしまうので5V電源でやったらちょうど良くなった。アクチュエータ系は試行錯誤が必要だなー<br />
<br />
<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Xnyhoo5QABY&#038;hl=ja&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Xnyhoo5QABY&#038;hl=ja&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
パソコンでアナログ値を制御している動画<br />
<br />
<br />
回路。基盤で隠れて見えないけど、moxaの左下のGNDはブレッドボードのGNDと接続されている<br />
<a href="http://www.flickr.com/photos/shokai/3269462758/" title="moxaでバイオメタル動かす by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3329/3269462758_67443e9061.jpg" width="500" height="375" alt="moxaでバイオメタル動かす" /></a><br />
<a href="http://www.flickr.com/photos/shokai/3268639249/" title="moxaでバイオメタル動かす by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3437/3268639249_6773751957.jpg" width="500" height="375" alt="moxaでバイオメタル動かす" /></a><br />
<br />
<br />
今回のtalkticコード<br />
<a href="http://www.uc.sfc.keio.ac.jp/xtel/learning/analog-read-write.html">xtel technical information ＞ learning＞ Analog Read &amp; Write</a>を参考にした<br />
</p>
<blockquote><p>
serialInit(9600);<br />
pinMode(1,true);<br />
pinMode(0,true);<br />
power&nbsp;=&nbsp;0.0;<br />
<br />
function&nbsp;onSerialReceive(){&nbsp;//&nbsp;シリアル受信イベント<br />
&nbsp;&nbsp;&nbsp;&nbsp;while(serialAvailable()){&nbsp;//&nbsp;受信データがある時<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;recvData&nbsp;=&nbsp;serialRead();&nbsp;//&nbsp;読み出し<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;power&nbsp;=&nbsp;recvData*0.01;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;analogWrite(0,&nbsp;power);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;analogWrite(1,&nbsp;power)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serialSend(recvData);&nbsp;//&nbsp;受信した文字列をそのままエコーする<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
while(true){<br />
}<br />
</p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PCなしで、moxaで音を出す</title>
		<link>http://shokai.org/blog/archives/2237</link>
		<comments>http://shokai.org/blog/archives/2237#comments</comments>
		<pubDate>Wed, 05 Nov 2008 03:16:32 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[gemsbok]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[Talktic]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[xtel]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=2237</guid>
		<description><![CDATA[xtel technical information ＞ learning＞ Sound Writeより moxaとスピーカを直結させて、soundWrite(ピン番号, 周波数)関数を使うと音が出せる センサと組み合わ [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://uc.sfc.keio.ac.jp/xtel/learning/sound-write.html">xtel technical information ＞ learning＞ Sound Write</a>より<br />
<br />
moxaとスピーカを直結させて、soundWrite(ピン番号, 周波数)関数を使うと音が出せる <br />
<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Nt6rr4BsNXY&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=ja&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/Nt6rr4BsNXY&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=ja&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
<br />
<br />
センサと組み合わせるとインタラクティブに音階を変えられる。CdSという明度センサを使っている<br />
<a href="http://uc.sfc.keio.ac.jp/xtel/learning/sound-write.html"><img src="http://uc.sfc.keio.ac.jp/xtel/learning/tt/sound-write.gif" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/2237/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>moxaでセンサーネットワーク</title>
		<link>http://shokai.org/blog/archives/2229</link>
		<comments>http://shokai.org/blog/archives/2229#comments</comments>
		<pubDate>Tue, 04 Nov 2008 16:19:23 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[gemsbok]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[Talktic]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[xtel]]></category>
		<category><![CDATA[zigbee]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=2229</guid>
		<description><![CDATA[xtelのmoxaを使う。 moxaのzigbee無線で距離を測るから距離情報を削って、少しフォーマットを変えただけだが たくさんあるセンサ付きノードの状態を、zigbee無線で一カ所に集めるのが簡単にできる。 8ビット [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://uc.sfc.keio.ac.jp/xtel/">xtelのmoxa</a>を使う。<br />
<br />
<a href="http://shokai.org/blog/archives/1584">moxaのzigbee無線で距離を測る</a>から距離情報を削って、少しフォーマットを変えただけだが<br />
たくさんあるセンサ付きノードの状態を、zigbee無線で一カ所に集めるのが簡単にできる。<br />
8ビットマイコンなのにclassが作れて（厳密にはJavaScript互換なのでクラスではないが）文字列が可変長でString.splitなども使えてArrayもあるので、こういう無線通信プロトコルは簡単に作れる<br />
<br />
<span id="more-2229"></span><br />
<br />
■<a href="http://www.bitbucket.org/shokai/orf08moxa/src/c3c0f6aa2df2/nodeSample/source.js">ノードのプログラム</a><br />
定義したsensor_send()関数でデバイス名,センサ名,センサ値を送信する<br />
あまり頻繁に送ると受信側が困るので、適度にsleepを入れる<br />
</p>
<blockquote><p>var&nbsp;debugMode&nbsp;=&nbsp;false;&nbsp;//&nbsp;trueの時、無線データなどをシリアルポートで確認できる<br />
<br />
var&nbsp;radio&nbsp;=&nbsp;new&nbsp;Object();<br />
radio.id&nbsp;=&nbsp;2;&nbsp;&nbsp;<br />
radio.channel&nbsp;=&nbsp;15;<br />
<br />
radioInit(0xDEAD,&nbsp;radio.id,&nbsp;radio.channel,&nbsp;31);<br />
serialInit(9600);<br />
<br />
pinMode(0,&nbsp;true);<br />
<br />
function&nbsp;loop()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;an&nbsp;=&nbsp;analogRead(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;send_sensor(&quot;sampleDevice&quot;,&nbsp;&quot;lightSensor&quot;,&nbsp;an);&nbsp;//&nbsp;デバイス名,センサ名,センサ値<br />
&nbsp;&nbsp;&nbsp;&nbsp;sleep(100);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;約1秒停止<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;button&nbsp;=&nbsp;digitalRead(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;send_sensor(&quot;sampleDevice&quot;,&nbsp;&quot;pushButton&quot;,&nbsp;button);<br />
&nbsp;&nbsp;&nbsp;&nbsp;sleep(100);<br />
}<br />
<br />
//&nbsp;デバイス名,センサ名,センサ値を送信<br />
function&nbsp;send_sensor(deviceName,&nbsp;sensorName,&nbsp;sensorValue){<br />
&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;deviceName&nbsp;+&nbsp;&quot;:&quot;&nbsp;+&nbsp;sensorName&nbsp;+&nbsp;&quot;=&quot;&nbsp;+&nbsp;sensorValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;radioSend(0xFFFF,&nbsp;message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(debugMode)&nbsp;serialSend(message&nbsp;+&nbsp;&quot;&yen;r&yen;n&quot;);&nbsp;//&nbsp;無線データ確認用<br />
}<br />
<br />
<br />
function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}</p></blockquote>
<p>
<br />
<br />
<br />
■<a href="http://www.bitbucket.org/shokai/orf08moxa/src/c3c0f6aa2df2/root/source.js">ルートのプログラム</a><br />
センサ群を集約するroot。<br />
センサのデバイス名、センサ名、値をSensorListクラス内に複数保持して、定期的にシリアル通信でPCに渡す。<br />
</p>
<blockquote><p>var&nbsp;radio&nbsp;=&nbsp;new&nbsp;Object();<br />
radio.id&nbsp;=&nbsp;1;&nbsp;&nbsp;<br />
radio.channel&nbsp;=&nbsp;15;<br />
<br />
//&nbsp;class定義<br />
function&nbsp;Sensor(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.deviceName&nbsp;=&nbsp;&quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;&quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.value&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.toString&nbsp;=&nbsp;function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.deviceName&nbsp;+&nbsp;&quot;:&quot;&nbsp;+&nbsp;this.name&nbsp;+&nbsp;&quot;=&quot;&nbsp;+&nbsp;this.value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
}<br />
<br />
function&nbsp;SensorList(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.sensors&nbsp;=&nbsp;new&nbsp;Array();<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.store&nbsp;=&nbsp;function(sensor){&nbsp;//&nbsp;sensor値を保持する<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;上書き保存<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(s&nbsp;in&nbsp;this.sensors){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s.name&nbsp;==&nbsp;sensor.name&nbsp;&amp;&amp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.deviceName&nbsp;==&nbsp;sensor.deviceName){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.value&nbsp;=&nbsp;sensor.value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;新規保存<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.sensors.push(sensor);<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.toString&nbsp;=&nbsp;function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;&quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(s&nbsp;in&nbsp;this.sensors){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;+=&nbsp;s.toString()&nbsp;+&nbsp;&quot;&amp;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.length&nbsp;=&nbsp;function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.sensors.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
}<br />
<br />
//&nbsp;class定義終わり<br />
<br />
sensors&nbsp;=&nbsp;new&nbsp;SensorList();<br />
<br />
radioInit(0xDEAD,&nbsp;radio.id,&nbsp;radio.channel,&nbsp;31);<br />
serialInit(9600);<br />
<br />
function&nbsp;loop()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;=&nbsp;&quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;serialSend(sensors.toString()&nbsp;+&nbsp;&quot;&yen;r&yen;n&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;sleep(10);/**/<br />
}<br />
<br />
function&nbsp;onRadioReceive(seq,id,pan,data,rss)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sensor&nbsp;=&nbsp;new&nbsp;Sensor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;data.split(&quot;:&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;sensor.deviceName&nbsp;=&nbsp;tmp[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmp2&nbsp;=&nbsp;tmp[1].split(&quot;=&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;sensor.name&nbsp;=&nbsp;tmp2[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;sensor.value&nbsp;=&nbsp;tmp2[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;sensors.store(sensor);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//serialSend(sensors.length()&nbsp;+&nbsp;&quot;,&quot;&nbsp;+&nbsp;sensor.toString()&nbsp;+&nbsp;&quot;&yen;r&yen;n&quot;);<br />
}<br />
<br />
function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}<br />
</p></blockquote>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/2229/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>moxa &#8211; 明るさと振動をシリアル通信で送る</title>
		<link>http://shokai.org/blog/archives/2211</link>
		<comments>http://shokai.org/blog/archives/2211#comments</comments>
		<pubDate>Tue, 21 Oct 2008 11:28:44 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[CdS]]></category>
		<category><![CDATA[gemsbok]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[Talktic]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[xtel]]></category>
		<category><![CDATA[振動スイッチ]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=2211</guid>
		<description><![CDATA[CdSと振動スイッチを使った。 xtel基盤のDigitalReadとAnalog Readのページが大変参考になりました。 このサイズのCdSだと、330ΩをGNDにつないで分圧したら丁度良くなった。 まずブレッドボー [...]]]></description>
			<content:encoded><![CDATA[<p>
CdSと振動スイッチを使った。<br />
xtel基盤の<a href="http://www.uc.sfc.keio.ac.jp/xtel/learning/digital-read.html">DigitalRead</a>と<a href="http://www.uc.sfc.keio.ac.jp/xtel/learning/analog-read-write.html">Analog Read</a>のページが大変参考になりました。<br />
<br />
<br />
このサイズのCdSだと、330ΩをGNDにつないで分圧したら丁度良くなった。<br />
<a href="http://www.flickr.com/photos/shokai/2960178243/" title="DSCF4111 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3137/2960178243_2dac765e1d.jpg" width="500" height="375" alt="DSCF4111" /></a><br />
<br />
<br />
まずブレッドボードで回路を組んでみた<br />
<a href="http://www.flickr.com/photos/shokai/2960178937/" title="DSCF4114 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3067/2960178937_8b0aabbb5d.jpg" width="500" height="375" alt="DSCF4114" /></a><br />
<br />
<br />
それからはんだづけ<br />
<a href="http://www.flickr.com/photos/shokai/2961108278/" title="明るさ、振動 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3012/2961108278_b674a54213.jpg" width="375" height="500" alt="明るさ、振動" /></a><br />
<br />
<br />
プログラム。<br />
連続でシリアル通信するとPCが大変なので、1秒ぐらいのインターバルを取る。<br />
明るさはアナログ値なのでその時間内の平均を取った。<br />
振動も、一度でも振動センサが反応したらshaked:trueになるようにして、serialSendでまとめて送った。<br />
</p>
<blockquote><p>serialInit(9600);<br />
pinMode(0,&nbsp;true);&nbsp;//&nbsp;振動センサ<br />
<br />
function&nbsp;loop(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;an&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;shaked&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;loopTime&nbsp;=&nbsp;1000;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;loopTime;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;an&nbsp;+=&nbsp;analogRead(0);&nbsp;//&nbsp;明るさ<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!digitalRead(0))&nbsp;shaked&nbsp;=&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;an&nbsp;=&nbsp;an/loopTime;<br />
&nbsp;&nbsp;&nbsp;&nbsp;serialSend(&quot;light:&quot;+an+&quot;,shake:&quot;+shaked+&quot;&yen;r&yen;n&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);<br />
}<br />
<br />
<br />
function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}</p></blockquote>
<p>
<br />
<br />
PCでシリアル通信受信したところ<br />
<a href="http://www.flickr.com/photos/shokai/2960976604/" title="振動と明るさ by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3050/2960976604_b6a951ebc9.jpg" width="500" height="239" alt="振動と明るさ" /></a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/2211/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>moxaのzigbee無線で距離を測る</title>
		<link>http://shokai.org/blog/archives/1584</link>
		<comments>http://shokai.org/blog/archives/1584#comments</comments>
		<pubDate>Mon, 11 Aug 2008 07:39:54 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[Talktic]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[xtel]]></category>
		<category><![CDATA[zigbee]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1584</guid>
		<description><![CDATA[zigbee無線で距離を測った。 moxaの無線は出力を変える事ができる。これを利用して、サンプルプログラムの中にあった距離が近づいたらLEDが点灯する奴を改造し、 ・複数nodeをID識別 ・距離の計測の高速化 を行っ [...]]]></description>
			<content:encoded><![CDATA[<p>
zigbee無線で距離を測った。<br />
<br />
<a href="http://xtel.sfc.keio.ac.jp/jp/xtel.html">moxa</a>の無線は出力を変える事ができる。これを利用して、サンプルプログラムの中にあった距離が近づいたらLEDが点灯する奴を改造し、<br />
・複数nodeをID識別<br />
・距離の計測の高速化<br />
を行った。<br />
<br />
1つのanchorと複数のnodeとの間の距離を取る。たくさんプログラムを書きこむ羽目になるのでUSBハブが無いと大変。<br />
<a href="http://www.flickr.com/photos/shokai/2697119204/" title="DSCF2544 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3294/2697119204_d11f387aab.jpg" width="500" height="375" alt="DSCF2544" /></a><br />
<br />
■しくみ<br />
徐々に電波強度を上げていくと、「最も弱い出力で受信できた時」を距離とする事ができる。<br />
電波強度は、無線通信のデータ本文に数値として含めておいて、受信側で文字列をparseして読み出す。<br />
<br />
moxaはマイコン上でECMAScriptが使えるので、Stringを分解したり、Object型インスタンスに何でも突っ込んだり、配列に溜めたりするのが楽に出来るので通信プロトコルを作るのが楽だった。<br />
<br />
<br />
■nodeのプログラム<br />
徐々に電波強度を上げながらanchorに無線を送り続ける<br />
<a href="http://shokai.org/archive/moxa/0808_RadioDistance/node/source.js">node/source.js</a><br />
</p>
<blockquote><p>var&nbsp;radio&nbsp;=&nbsp;new&nbsp;Object();<br />
radio.id&nbsp;=&nbsp;2;&nbsp;//&nbsp;id:2以降がnode<br />
radio.group&nbsp;=&nbsp;7;<br />
<br />
var&nbsp;time&nbsp;=&nbsp;1;<br />
var&nbsp;power_borders&nbsp;=&nbsp;new&nbsp;Array();<br />
power_borders&nbsp;=&nbsp;[1,2,3,4,11,12,13,30,31];&nbsp;//&nbsp;距離の境目リスト<br />
<br />
<br />
function&nbsp;loop()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist_send();<br />
}<br />
<br />
function&nbsp;dist_send(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(p&nbsp;in&nbsp;power_borders){&nbsp;//&nbsp;power<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radioInit(0xDEAD,&nbsp;radio.id,&nbsp;radio.group,&nbsp;p);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;&quot;power:&quot;+p+&quot;,time:&quot;+time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radioSend(0xFFFF,&nbsp;message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;time++;<br />
}<br />
<br />
function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}</p></blockquote>
<p>
<br />
■プロトコル<br />
powerを1から徐々に上げながら送信する。<br />
</p>
<blockquote><p>&#8220;power:2,time:15&#8243;<br />
&#8220;power:3,time:15&#8243;<br />
&#8220;power:4,time:15&#8243;</p></blockquote>
<p>
 という風にtimeという変数も合わせて送る事で、1セット分の無線送信試行を表している。<br />
<br />
■距離の境目<br />
実際にはpowerと無線の飛距離は正比例していなくて、簡単に調べた所<br />
・power 4ぐらい → 4メートル以内ぐらい<br />
・power 10前後 → 5~15メートルぐらい<br />
・power 20前後 → 15～30メートルぐらい<br />
・power 30前後 → それ以上<br />
となっていた。なので、その境目あたりを重点的に送信するために<br />
</p>
<blockquote><p>power_borders&nbsp;=&nbsp;[1,2,3,4,11,12,13,30,31];&nbsp;//&nbsp;距離の境目リスト</p></blockquote>
<p>を使った。こうすると1から最大31まで全powerを試す必要が無くなり、3倍ぐらい速くなっても精度はあまり落ちない。<br />
<br />
<br />
■anchorのプログラム<br />
nodeからの最低出力で受信できた時のpowerを本文から取り出し、nodeのID毎に配列に保存しておく。<br />
<a href="http://shokai.org/archive/moxa/0808_RadioDistance/anchor/source.js">anchor/source.js</a><br />
</p>
<blockquote><p>var&nbsp;radio&nbsp;=&nbsp;new&nbsp;Object();<br />
radio.id&nbsp;=&nbsp;1;&nbsp;//&nbsp;nodeはid:2以降<br />
radio.group&nbsp;=&nbsp;7;<br />
<br />
var&nbsp;dist&nbsp;=&nbsp;new&nbsp;Object();<br />
dist.lastTime&nbsp;=&nbsp;0;<br />
dist.lastPower&nbsp;=&nbsp;0;<br />
<br />
nodes&nbsp;=&nbsp;new&nbsp;Array(16);<br />
nodes_init(nodes);<br />
<br />
serialInit(9600);<br />
radioInit(0xDEAD,&nbsp;radio.id,&nbsp;radio.group,&nbsp;31);<br />
<br />
function&nbsp;loop(){<br />
}<br />
<br />
function&nbsp;onRadioReceive(seq,id,pan,data,rss)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(id&nbsp;&lt;&nbsp;2)&nbsp;return;&nbsp;//&nbsp;nodeからではない時<br />
&nbsp;&nbsp;&nbsp;&nbsp;commands&nbsp;=&nbsp;data.split(&quot;,&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(c&nbsp;in&nbsp;commands){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;c.split(&quot;:&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;power&quot;)&nbsp;distance&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;time&quot;)&nbsp;time&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nodes[id].lastTime&nbsp;!=&nbsp;time){&nbsp;//&nbsp;新しいデータの時<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[id].distance&nbsp;=&nbsp;distance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nodeのidと距離を出力<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serialSend(&quot;id:&quot;+id+&quot;,distance:&quot;+distance+&quot;,time:&quot;+time+&quot;&yen;r&yen;n&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[id].lastTime&nbsp;=&nbsp;time;<br />
}<br />
<br />
function&nbsp;nodes_init(nodes){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;nodes.length;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;node&nbsp;=&nbsp;new&nbsp;Object();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.lastTime&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.distance&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.id&nbsp;=&nbsp;i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[i]&nbsp;=&nbsp;node;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}</p></blockquote>
<p>
<br />
■無線データの受信と解析<br />
onRadioReceive(seq,id,pan,data,rss) という関数を宣言すると無線を受信できる。<br />
こういうデータが来るので</p>
<blockquote><p>&#8220;power:3,time:15&#8243;</p></blockquote>
<p>splitで : と , を分けて、nodeオブジェクトに保存する。<br />
</p>
<blockquote><p>&nbsp;&nbsp;&nbsp;&nbsp;commands&nbsp;=&nbsp;data.split(&quot;,&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(c&nbsp;in&nbsp;commands){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;c.split(&quot;:&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;power&quot;)&nbsp;distance&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;time&quot;)&nbsp;time&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p></blockquote>
<p>
また、引数 id に送信元のIDが入っているので、あわせて保存しておく。<br />
<br />
■シリアルポートに出力<br />
今回はanchorからパソコンにシリアル通信で出力した。<br />
</p>
<blockquote><p>id:2,distance:10,time:18\r\n<br />
id:6,distance:3,time:11\r\n<br />
id:7,distance:13,time:7\r\n</p></blockquote>
<p>
こんな感じの文字列がきて、anchorとnodeの間の距離、IDがわかる。<br />
<br />
<a href="http://www.flickr.com/photos/shokai/2743267975/" title="距離計測、ついでにボタン状態も by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3280/2743267975_da725fcb17.jpg" width="500" height="370" alt="距離計測、ついでにボタン状態も" /></a><br />
ちなみに、node側でさらにボタンの押下状態なんかも付けられる。<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1584/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>moxaを9V電池で動くように改造する</title>
		<link>http://shokai.org/blog/archives/1563</link>
		<comments>http://shokai.org/blog/archives/1563#comments</comments>
		<pubDate>Sat, 09 Aug 2008 16:45:24 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[gemsbok]]></category>
		<category><![CDATA[moxa]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[xtel]]></category>
		<category><![CDATA[電子工作]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1563</guid>
		<description><![CDATA[基本はUSB給電だが、内部にレギュレータがあるので9V電池をそのまま接続するだけで使えるようになる。 ■電源ケーブルを付け直す 上の写真にもある赤いケーブルが、PCのUSB端子からの5V給電をmoxaのレギュレータに送る [...]]]></description>
			<content:encoded><![CDATA[<p>
基本はUSB給電だが、内部にレギュレータがあるので9V電池をそのまま接続するだけで使えるようになる。<br />
<br />
<a href="http://www.flickr.com/photos/shokai/2744841954/" title="DSCF3388 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3032/2744841954_33d4d95b74.jpg" width="500" height="375" alt="DSCF3388" /></a><br />
<br />
<br />
<br />
■電源ケーブルを付け直す<br />
上の写真にもある赤いケーブルが、PCのUSB端子からの5V給電をmoxaのレギュレータに送る役目をしている。<br />
（上の写真では既に付け直した後だが）最初は基盤裏側に付けてあるのだけど、今回は下方向にピンヘッダを付けたかったので基盤表側につけなおした<br />
<br />
<br />
基盤裏のピンヘッダ。赤い電源ケーブルははんだごてを当てながら抜けば簡単に外せる<br />
<a href="http://www.flickr.com/photos/shokai/2744831158/" title="DSCF3376 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3296/2744831158_76034ff2fa.jpg" width="500" height="375" alt="DSCF3376" /></a><br />
<br />
表側に付け直した。<br />
<a href="http://www.flickr.com/photos/shokai/2743989577/" title="DSCF3372 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3240/2743989577_b665df28e8.jpg" width="500" height="375" alt="DSCF3372" /></a><br />
<br />
<br />
この状態で、まずは一回moxa基盤そのものがパソコンから認識できるかどうか確かめたりしておいた方が良い。電源まわりはバグの元なので。<br />
<br />
<br />
<br />
■9V電池を接続する<br />
図のように接続する。9Vのプラスとマイナスを間違えないように注意。<br />
<a href="http://www.flickr.com/photos/shokai/2747349568/" title="9v-moxa by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3245/2747349568_d48246c045.jpg" width="500" height="418" alt="9v-moxa" /></a><br />
<br />
外部にセンサーなどを接続する時は、右の3.3V出力を利用する。左側のUSBからの5V出力は当然動いていないので使えない。<br />
あと、左側にもGNDがあるのでうまく利用すると良いかも。<br />
<br />
今回作った基盤は裏から見るとこうなっている。電池からの給電をON/OFFするスイッチを、電池+→VIN間に付けた。<br />
<a href="http://www.flickr.com/photos/shokai/2744842854/" title="DSCF3389 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3092/2744842854_4b30d4df8a.jpg" width="500" height="375" alt="DSCF3389" /></a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1563/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

