<?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; PhysicalComputing</title>
	<atom:link href="http://shokai.org/blog/archives/tag/physicalcomputing/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(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>PSoC CapSenseで静電容量タッチセンサ 4つ動かした</title>
		<link>http://shokai.org/blog/archives/4404</link>
		<comments>http://shokai.org/blog/archives/4404#comments</comments>
		<pubDate>Fri, 03 Apr 2009 00:56:46 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[CapSense]]></category>
		<category><![CDATA[CY8C21334]]></category>
		<category><![CDATA[PhysicalComputing]]></category>
		<category><![CDATA[PSoC]]></category>
		<category><![CDATA[PSoCDesigner]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[電子工作]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4404</guid>
		<description><![CDATA[前の記事の回路などが思いきり間違っていたので修正しつつ、CapSenseとLED4つずつに増やした。 多分、マイコンの足の数だ増やせる。 例によってコードはBitbucketにアップした CapSense CSDウィザー [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://shokai.org/blog/archives/4386">前の記事</a>の回路などが思いきり間違っていたので修正しつつ、CapSenseとLED4つずつに増やした。<br />
多分、マイコンの足の数だ増やせる。<br />
<br />
例によってコードは<a href="http://bitbucket.org/shokai/capsense-led/src/e16efcaebf38/">Bitbucketにアップした</a><br />
<br />
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/Fy-QWm1miEQ&#038;hl=ja&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Fy-QWm1miEQ&#038;hl=ja&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<br />
<br />
CapSense CSDウィザードで4つスイッチを置いて<br />
<a href="http://www.flickr.com/photos/shokai/3408356980/" title="capsenseたくさん by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3640/3408356980_6f860378e2.jpg" width="408" height="365" alt="capsenseたくさん" /></a><br />
<br />
<br />
AnalogMUXBusに接続されている事を確認<br />
<a href="http://www.flickr.com/photos/shokai/3408358000/" title="capsenseたくさん by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3360/3408358000_e43bf30d1e_o.png" width="526" height="494" alt="capsenseたくさん" /></a><br />
<br />
<br />
CSDの設定。しきい値などをかなり何度も直した。適当にやってたので理論をわかってないんだけど、どうやらセンサ部分の形状や配置に応じて微調整しなければ使い物にならないっぽい。<br />
<a href="http://www.flickr.com/photos/shokai/3407550261/" title="capsenseたくさん by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3305/3407550261_bca3a6aeb8.jpg" width="400" height="365" alt="capsenseたくさん" /></a><br />
<br />
<br />
ピンの設定。LEDが4つにした。<br />
使ってないピンをPull Upにしておくとノイズが来ないので安定する事に気づいた。<br />
<a href="http://www.flickr.com/photos/shokai/3407550877/" title="capsenseたくさん by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3340/3407550877_233a257804.jpg" width="399" height="351" alt="capsenseたくさん" /></a><br />
<br />
<br />
実体配置図<br />
<a href="http://www.flickr.com/photos/shokai/3407425117/" title="capsenseたくさん by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3597/3407425117_2bcd238cec.jpg" width="494" height="430" alt="capsenseたくさん" /></a><br />
<br />
<br />
前の記事の回路が間違っていて、あのままではうまく動かなかったが、1kΩの抵抗と0.1μFのキャパシタを足したら複数認識できるようになった。<br />
<br />
CapSense CSDのデータシートにあった図。抵抗とキャパシタが必要らしい<br />
<a href="http://www.flickr.com/photos/shokai/3407401745/" title="capsenseたくさん by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3581/3407401745_3ea56ca197.jpg" width="269" height="196" alt="capsenseたくさん" /></a><br />
<br />
P1[5]とP0[3]の間に1kΩを入れて、P0[3]からキャパシタを通して銅箔テープに延ばす。<br />
<a href="http://www.flickr.com/photos/shokai/3407601745/" title="R0011375 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3655/3407601745_f120a2c5d3.jpg" width="375" height="500" alt="R0011375" /></a><br />
前の記事はP1[5]とP0[3]で静電容量取ろうとしてたので、思いっきり間違ってた。<br />
<br />
<br />
<br />
プログラム。<br />
前のやつのif(CSD_1_bIsSensorActive(センサ番号))を増やしただけ。<br />
<a href="http://bitbucket.org/shokai/capsense-led/src/e16efcaebf38/main.c">shokai / CapSense LED / source — bitbucket.org</a><br />
main.c<br />
</p>
<blockquote><p>
#include&nbsp;&lt;m8c.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;part&nbsp;specific&nbsp;constants&nbsp;and&nbsp;macros<br />
#include&nbsp;&quot;PSoCAPI.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;PSoC&nbsp;API&nbsp;definitions&nbsp;for&nbsp;all&nbsp;User&nbsp;Modules<br />
#define&nbsp;_BV(BIT)&nbsp;(1&lt;&lt;BIT)<br />
#define&nbsp;sbi(BYTE,BIT)&nbsp;(BYTE&nbsp;|=&nbsp;_BV(BIT))<br />
#define&nbsp;cbi(BYTE,BIT)&nbsp;(BYTE&nbsp;&amp;=&nbsp;~_BV(BIT))<br />
#define&nbsp;LED_0_ON()&nbsp;sbi(PRT1DR,&nbsp;7);<br />
#define&nbsp;LED_0_OFF()&nbsp;cbi(PRT1DR,&nbsp;7);<br />
#define&nbsp;LED_1_ON()&nbsp;sbi(PRT0DR,&nbsp;1);<br />
#define&nbsp;LED_1_OFF()&nbsp;cbi(PRT0DR,&nbsp;1);<br />
#define&nbsp;LED_2_ON()&nbsp;sbi(PRT0DR,&nbsp;5);<br />
#define&nbsp;LED_2_OFF()&nbsp;cbi(PRT0DR,&nbsp;5);<br />
#define&nbsp;LED_3_ON()&nbsp;sbi(PRT0DR,&nbsp;7);<br />
#define&nbsp;LED_3_OFF()&nbsp;cbi(PRT0DR,&nbsp;7);<br />
<br />
<br />
void&nbsp;main()<br />
{<br />
&nbsp;&nbsp;M8C_EnableGInt;<br />
&nbsp;&nbsp;CSD_1_Start();<br />
&nbsp;&nbsp;CSD_1_InitializeBaselines();<br />
&nbsp;&nbsp;CSD_1_SetDefaultFingerThresholds();<br />
&nbsp;&nbsp;while(1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;CSD_1_ScanAllSensors();<br />
&nbsp;&nbsp;&nbsp;&nbsp;CSD_1_UpdateAllBaselines();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CSD_1_bIsSensorActive(0)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_0_ON();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_0_OFF();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CSD_1_bIsSensorActive(1)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_1_ON();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_1_OFF();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CSD_1_bIsSensorActive(2)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_2_ON();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_2_OFF();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CSD_1_bIsSensorActive(3)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_3_ON();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_3_OFF();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
}<br />
</p></blockquote>
<p>
<br />
<br />
<br />
電源を5VのACアダプタにしたらすっきりしたので、大学院棟の俺の机に置いておきます<br />
さわると光ります<br />
<a href="http://www.flickr.com/photos/shokai/3408353138/" title="R0011369 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3327/3408353138_9bfb04efaa.jpg" width="500" height="375" alt="R0011369" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4404/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PSoC CapSenseで静電容量タッチセンサを自作した</title>
		<link>http://shokai.org/blog/archives/4386</link>
		<comments>http://shokai.org/blog/archives/4386#comments</comments>
		<pubDate>Thu, 02 Apr 2009 19:24:36 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[CapSense]]></category>
		<category><![CDATA[CY8C21334]]></category>
		<category><![CDATA[PhysicalComputing]]></category>
		<category><![CDATA[PSoC]]></category>
		<category><![CDATA[PSoCDesigner]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[電子工作]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4386</guid>
		<description><![CDATA[回路などが間違っている事に気がつきました 正しい実装は次の記事へ。 使った部品の説明などはこのまま下へ。 ********************************************* できたっぽい。ひさしぶ [...]]]></description>
			<content:encoded><![CDATA[<p>
回路などが間違っている事に気がつきました<br />
正しい実装は<a href="http://shokai.org/blog/archives/4404">次の記事</a>へ。<br />
使った部品の説明などはこのまま下へ。<br />
*********************************************<br />
<br />
<br />
できたっぽい。ひさしぶりにマイコンいじった。<br />
銅箔テープの部分に指が近づけると電気容量の乱れるので、それをPSoC CY8C21334のCapSense機能で検出してLEDを光らせている。<br />
コードも<a href="http://bitbucket.org/shokai/capsense-led/changeset/803cad7671cd/">bitbucketにアップしました</a><br />
<br />
<br />
（音小さい）<br />
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/NHo9ahK27zA&#038;hl=ja&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/NHo9ahK27zA&#038;hl=ja&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
LEDは点滅させたくてさせているんじゃないんだけど、してしまっている。<br />
もう少し抵抗値などの調整が必要らしい。<br />
<br />
静電容量タッチセンサはメカニカルな部品が無いので、ビデオの最後にやっている様に、何の変哲もない壁に埋め込んでその上に人の手が乗っているかを検出したりできる。<br />
防水加工も容易だし、銅箔等を使えば曲面に埋め込む事も出来る。<br />
実際ヨーロッパの寒いところに行くと信号機やエレベータのボタンが凍結防止のために静電容量センサで実装されていたりする。<br />
<br />
PSoCのCapSenseはワンチップで静電容量センサを簡単に実装できるパッケージで、商業的にはSONYのオーディオコンポやAppleのiPodのホイールなんかにも使われていてずいぶん潤っているらしく、セミナーも無料だし<a href="http://shokai.org/blog/archives/1274">基盤は配るし</a>タダメシも出てくる。<br />
<br />
<br />
次は複数のcapsenseを使えるようにしてみる予定。<br />
<a href="http://www.flickr.com/photos/shokai/3406823383/" title="静電容量タッチセンサ(capsense) by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3632/3406823383_7d0a9ec8fb.jpg" width="500" height="375" alt="静電容量タッチセンサ(capsense)" /></a><br />
<br />
<br />
■必要な部品<br />
リンク先は買ったお店の商品ページ。<br />
<ul>
<li><a href="https://www.chip1stop.com/UE027_M10.cfm?PID=CYPR-0009072">PSoCマイコン CY8C21334-24PVXI(20pin)</a><br />capsenseがついているマイコン。<a href="http://shokai.org/blog/archives/4338">いろいろ探した</a>結果、これをchip1stopで買うのがコストパフォーマンスが一番良いという結論になった</li>
<li><a href="http://akizukidenshi.com/catalog/g/gP-02614/">秋月のSSOP変換基板</a><br />CY8C21334がSSOPという超小さいパッケージしか無いので、ブレッドボードに刺せるように足幅を広げる基盤。28ピンなので8ピン余るけど安いからこれを使う。</li>
<li>銅箔テープ たしか千石で買ったと思う。薄くて平べったい電極ならなんでも良さそう</li>
</ul>
<br />
<br />
あとは、秋月で買ったPSoC MiniProgというUSB接続の書き込み機と、ブレッドボードとLEDとクリップとベニヤ板と変換基板のピンヘッダ（オス）。<br />
<br />
<br />
<br />
■センサー部分の制作<br />
銅箔テープを千石で買ってきて適当な木の板に平行に貼る。裏に糊がついていたので楽だった。<br />
<a href="http://www.flickr.com/photos/shokai/3406820981/" title="銅箔テープ by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3311/3406820981_2d6ce30071_m.jpg" width="240" height="180" alt="銅箔テープ" /></a><a href="http://www.flickr.com/photos/shokai/3406821345/" title="銅箔テープ by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3361/3406821345_0f395a47c2_m.jpg" width="240" height="180" alt="銅箔テープ" /></a><br />
<br />
<a href="http://doggie.blog.so-net.ne.jp/2006-12-21">CY3235 CapSense-ProxDet</a>では2.2kΩの抵抗と0.1μFのキャパシタがついているらしいが、手持ちの<a href="http://shokai.org/blog/archives/1274">PSoC Expressセミナーの時にもらったCY3121</a>では何もなくCY8C21434に直結しているように見えるので、これでいいのかも。<br />
<br />
<br />
■マイコンのはんだづけ<br />
今回はんだづけはここだけ。<br />
フラックスをたっぷり塗って、足に沿ってさっさっと撫でる。<br />
<a href="http://www.flickr.com/photos/shokai/3406816793/" title="変換基板にはんだづけ by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3620/3406816793_fcaa4ae496.jpg" width="500" height="375" alt="変換基板にはんだづけ" /></a><a href="http://www.flickr.com/photos/shokai/3407625186/" title="変換基板にはんだづけ by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3553/3407625186_229c00fe84.jpg" width="500" height="375" alt="変換基板にはんだづけ" /></a><br />
<br />
<br />
<br />
■PSoC Designerでのデバイス設定<br />
新規プロジェクトをCY8C21334 24PVXI(20pin)で開始して、<br />
Device EditorでUser ModulesからCap Sense(CSD)を配置。<br />
<a href="http://www.flickr.com/photos/shokai/3407691648/" title="capsense by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3587/3407691648_0a92605124.jpg" width="314" height="300" alt="capsense" /></a><br />
<br />
「Select CSD with clock prescaler」を選択した。<br />
<a href="http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php?PSoC%C6%FE%CC%E7%A1%A7PSoC%20First%20Touch%CA%D4#tbb76fdf">PSoC入門：PSoC First Touch編 &#8211; MeRLマイコンブ</a>の記事ではwithout clock prescalerを選んでいるが、digital/analog block消費量も変わらないのでclock prescalerにしてみた。<br />
<br />
<br />
Interconnect Viewで、CSD_1をplaceしてから右クリックすると「CSDウィザード」というのがあるのでそれを使う。<br />
センサの数を1、スライダーを0にしてPORT0_1を左上にドラッグアンドドロップして「OK」<br />
<a href="http://www.flickr.com/photos/shokai/3406665197/" title="capsense by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3403/3406665197_d7891467ca_o.png" width="618" height="386" alt="capsense" /></a><br />
<br />
<br />
すると、CSD_1に接続されている。<br />
いままでUARTやADCモジュールではInterconnect Viewで自分で接続していたが、その必要が無くなっている。<br />
<a href="http://www.flickr.com/photos/shokai/3407708938/" title="capsense by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3397/3407708938_2f64cf758d_o.png" width="422" height="415" alt="capsense" /></a><br />
<br />
<br />
CSD_1の設定を確認。Pinの設定をしておく。<br />
<a href="http://www.flickr.com/photos/shokai/3406672963/" title="capsense by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3301/3406672963_28bfc1224d.jpg" width="311" height="234" alt="capsense" /></a><br />
<br />
<br />
<br />
最後に、PORT0_0でLEDを光らせるためにDriveをStrongに変更<br />
<a href="http://www.flickr.com/photos/shokai/3407716654/" title="capsense by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3604/3407716654_a8ac8dc8fd.jpg" width="307" height="175" alt="capsense" /></a><br />
<br />
<br />
ピン割り当て<br />
<a href="http://www.flickr.com/photos/shokai/3407720204/" title="capsense by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3633/3407720204_61ca12d2e1.jpg" width="383" height="345" alt="capsense" /></a><br />
<br />
<br />
<br />
<br />
Generate Applicationして、Cでプログラムを書く。<br />
<br />
<br />
■PSoC Designerでのプログラミング<br />
<a href="http://bitbucket.org/shokai/capsense-led/src/803cad7671cd/main.c">shokai / CapSense LED / source — bitbucket.org</a><br />
main.c<br />
</p>
<blockquote><p>
#include&nbsp;&lt;m8c.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;part&nbsp;specific&nbsp;constants&nbsp;and&nbsp;macros<br />
#include&nbsp;&quot;PSoCAPI.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;PSoC&nbsp;API&nbsp;definitions&nbsp;for&nbsp;all&nbsp;User&nbsp;Modules<br />
#define&nbsp;_BV(BIT)&nbsp;(1&lt;&lt;BIT)<br />
#define&nbsp;sbi(BYTE,BIT)&nbsp;(BYTE&nbsp;|=&nbsp;_BV(BIT))<br />
#define&nbsp;cbi(BYTE,BIT)&nbsp;(BYTE&nbsp;&amp;=&nbsp;~_BV(BIT))<br />
#define&nbsp;LED_ON()&nbsp;sbi(PRT0DR,&nbsp;0);<br />
#define&nbsp;LED_OFF()&nbsp;cbi(PRT0DR,&nbsp;0);<br />
<br />
<br />
void&nbsp;main()<br />
{<br />
&nbsp;&nbsp;M8C_EnableGInt;<br />
&nbsp;&nbsp;CSD_1_Start();<br />
&nbsp;&nbsp;CSD_1_InitializeBaselines();<br />
&nbsp;&nbsp;CSD_1_SetDefaultFingerThresholds();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;while(1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;CSD_1_ScanAllSensors();<br />
&nbsp;&nbsp;&nbsp;&nbsp;CSD_1_UpdateAllBaselines();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CSD_1_bIsSensorActive(0)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_ON();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED_OFF();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
}<br />
</p></blockquote>
<p>
<br />
<br />
<br />
■マイコンの回路を作る<br />
データシートを見て、PSoC MiniProgから接続が必要なSCLK、SDATA、XRES、VDD(VCC)、VSS(GND)の位置を確認<br />
<a href="http://www.flickr.com/photos/shokai/3406818217/" title="ピン配置 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3568/3406818217_74aaa888fa.jpg" width="500" height="375" alt="ピン配置" /></a><br />
<br />
<br />
その通りに配線。電源はUSBのPSoC MiniProgから給電できる。<br />
この時点でLEDを点灯させるだけのプログラムを書いて、マイコン単体で動くか確認した。<br />
<a href="http://www.flickr.com/photos/shokai/3406819253/" title="R0011336 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3618/3406819253_fc91ca0a53.jpg" width="500" height="375" alt="R0011336" /></a><br />
<br />
<br />
<br />
さきほどのプログラムを書き込んで、<br />
PORT0_1とPORT1_5からクリップで銅箔テープに接続して完成。<br />
さわると光る。<br />
<a href="http://www.flickr.com/photos/shokai/3407630672/" title="静電容量タッチセンサ(capsense) by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3322/3407630672_b278c41530.jpg" width="500" height="375" alt="静電容量タッチセンサ(capsense)" /></a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4386/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails + Physical Computingする時の注意点</title>
		<link>http://shokai.org/blog/archives/4094</link>
		<comments>http://shokai.org/blog/archives/4094#comments</comments>
		<pubDate>Sun, 11 Jan 2009 21:43:34 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[PhysicalComputing]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4094</guid>
		<description><![CDATA[最近まわりでRailsが流行っているんだけど、なんだか2ケタ以上の人が「webサービスと何か(?)をするにはRuby on Railsを使えば全部できる」という盛大な勘違いを起こしているので説明用資料を書いておく。Rai [...]]]></description>
			<content:encoded><![CDATA[<p>
最近まわりでRailsが流行っているんだけど、なんだか2ケタ以上の人が「webサービスと何か(?)をするにはRuby on Railsを使えば全部できる」という盛大な勘違いを起こしているので説明用資料を書いておく。Railsはそんなに万能ではないです。<br />
<br />
Railsはwebアプリケーションを簡単に作れるMVCフレームワークで、HTTPを通してwebブラウザから使う事を前提にしている。マイコンとProcessingを接続してガジェットを作るのとは別の常識があります。<br />
<br />
<br />
<br />
■Railsが向いていること<br />
Railsは、おおざっぱに列挙するとこんなアプリケーションに向いています（無理すれば変な事も可能だけど後述）<br />
<ul>
  <li>アクセスしたURLに応じて異なるHTMLやXMLが表示される</li>
  <li>後ろにSQLなどのデータベースがあって、データを溜めたり取り出したりする</li>
  <li>ユーザ登録してログイン/ログアウトできて、同じURLでもユーザ毎に違うHTML表示が出る</li>
  <li>Formがあって、テキストを打ち込んで「投稿」すると保存される</li>
</ul>
<br />
普通のwebサービスを作るのに向いています。例えば<br />
<ul>
  <li>mixiとかFacebookのようなSNS</li>
  <li>WordPressやMovableTypeのように記事をFormに打ち込んでデータベースに保存して、週毎/記事毎の様々な表示で同じデータを使い回す</li>
  <li>twitterや掲示板みたいなもの</li>
</ul>
を作るのに向いている。<br />
ようするに、あるURLにHTTP GETでアクセスすると何か表示される。そしてHTTP POSTするとデータを溜めるという機能がある。<br />
<br />
<span id="more-4094"></span><br />
<br />
<br />
■Railsが向いていないこと<br />
<ul>
  <li>あるwebサービスを定期的に監視して、更新があったらデータを取ってきて、別のサービスやデバイスに転送する<br />
	<ul>
	  <li>定期的な処理はcronを回すかdaemonを作るべき。どうしてもRailsを表示に使いたければ、定期的な処理をするプログラムがRailsのデータベースに書き込む。それをRailsが読み出す。</li>
	</ul>
  </li>
  <li>デバイスからシリアル通信でデータを送り続けて、Railsの表示を変化させる<br />
    <ul>
      <li>無理。基本的に「あるURLにHTTPでアクセスしたら、そのURLに応じたHTMLやXMLがダウンロードできる」ものだと思うべき。webページの表示をサーバー側からpushして更新する事はComet等を使わなければできないので（難しいからやめておいたほうがいい）、簡単にsetIntervalで30秒毎にXmlHttpRequestしてRailsにデータを取りに行くべき。</li>
    </ul>
  </li>
  <li>
    FlashのXMLSocketや、XPortのシリアル-TCPSocket変換で接続してデータをやりとりしたい<br />
    <ul>
      <li>生のTCP/IPではなく、HTTPでやるべき。FlashならLoadVarsや<a href="http://shokai.org/blog/archives/1509">URLLoaderを使う</a>。XPortなら<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113849/shokai-22">Making Things Talk</a>という本にHTTPリクエストを作る方法が書いてある。もしくは、Socketサーバープログラムを自作してRailsのデータベースに書き込む。</li>
    </ul>
  </li>
</ul>
とにかく、HTTP以外でRailsとやりとりするのは無理です。間に何か別のプログラムを挟んで、そいつとデータベースを共有するとかする。<br />
<br />
<br />
<br />
■Railsが必要ない場合<br />
話を聞いているとそもそもRailsで作る必要が無くて、RubyやPythonで小さなプログラムを作ってcronで定期的に実行するだけで済む事がよくある<br />
<ul>
  <li>安全にユーザ認証する必要がない</li>
  <li>何人も同時にアクセスしない</li>
  <li>そもそもデータベースにデータを蓄積しなくて、webサービスとデバイス、webサービスとwebサービスのトンネルを作りたいだけ</li>
  <li>データベースに溜めるけど、トンネルするデータを一時的に保存しておきたいだけ<br />
    <ul><li><a href="http://shokai.org/blog/archives/1504">RailsなしでActiveRecordだけ使ってSQLiteを読み書きすればいい</a></li></ul>
  </li>
</ul>
例：<a href="http://shokai.org/blog/archives/1501">橋本商会  Twitterアカウント「DNPハウス」として発言できる okTwitter を作った</a><br />
例：<a href="http://shokai.org/blog/archives/4036">橋本商会  スーパーボット大戦</a><br />
<br />
<br />
<br />
■まずクローラを作る<br />
多くのwebサービスはデータ取得APIに制限をつけている。サービスにとってデータとユーザこそが財産だからという事と、ユーザデータ全てにアクセス可能だとプライバシーの問題があるからだと思う。<br />
<ul>
  <li>Twitterはユーザ毎に最新3200postしか取得できない</li>
  <li>del.icio.usは他人のブックマークは最新100件しか取得できない</li>
  <li>Flickrは位置情報付き写真のみ最新4000件しか検索結果が出ない</li>
  <li>WebAPIは1日あたりの呼び出し回数に制限がかかっている事が多い</li>
</ul>
いちどクローラでDBに保存して、それをRailsでXMLなどのフォーマットに直して出力して、Flash等で読み込んで表示するのはアリだと思う。<br />
例：<a href="http://shokai.org/blog/archives/1533">橋本商会  GoogleEarth上でFlickrの位置情報付き写真を見れるサービスを作った</a><br />
<br />
<br />
<br />
■危険ワード<br />
以下のような曖昧な単語を使っている時は、設計ができていないか、そもそもコンピュータで実現不可能な問題を扱っている場合が多い。<br />
<ul>
<li>通信して〜〜<br />
<ul><li>HTTPか、TCP/IPそのままか、XMLSocketか、とにかく何で通信するか明確にする。webの世界はセキュリティを考慮した仕組みになっているので、通信の手順に制限がかかっている事が多い。クロスドメインとか。</li></ul></li>
<li>似た人や物を検索して〜〜<br />
<ul><li>「似ている」ではなくて「数値的に+-50以内」や「完全に値が一致する」であれば簡単にできる。「似ている」という事をコンピュータで計算するのはとても難しくて、一つの研究分野なのでまず<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113644/shokai-22">集合知プログラミング</a>等を読むべき。また、前述の通りWebAPIからのデータ取得は制限されているのも注意。</li></ul>
</li>
<li>タグを付けて〜〜<br />
<ul><li>YouTube、delicious、ニコニコ動画などはそれぞれ「タグ」と呼んでいる機能へのユーザ毎のアクセス権限が異なり、webサービス内のコミュニティのあり方のデザインに直結している。安易に「タグ付けて分類」とか言わない方がいい。</li></ul>
</li>
</ul>
<br />
<br />
<br />
■もっと調べるべき<br />
webアプリはスイッチとマイコンとFlashとProcessingとは違う常識で動いているので、もっと勉強するべき。<br />
<ul>
  <li>HTTP</li>
  <li>セッション</li>
  <li>Cookie</li>
  <li>GETとPOST</li>
  <li>クロスドメイン</li>
</ul<br />
について調べると理解が深まる。<br />
<br />
<br />
また、Ruby on Railsでwebアプリケーションを作る事と、Rubyそのものでプログラムを書く事は完全に別の物として見た方が良いと思う。<br />
Railsはscaffoldやmigrateの仕組み、ファイルの配置が良くできていて、それを使うためにターミナルで叩くコマンドを覚えて管理する部分が便利でもあり、またそのノウハウに学習コストもかかる。<br />
Rubyはgemが便利でオブジェクト指向機能が綺麗な、普通のプログラミング言語。<br />
<br />
ひととおりscaffoldやmigrateやプラグインの仕組みを理解したら、Railsで使っているActiveRecordやActiveResource等の部品の仕組みを見ていくと良いと思う。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4094/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

