2009年1月26日月曜日

LEGO Duplo をケースに

携帯モノの工作をしたときには、そのケースに苦労することが多い。今回は本業で作っているzigbeeの携帯用ノードであるが、ちょうどいいケースを探していたときに 赤ちゃんむけのLego であるdupro シリーズがちょうどいいんでは?と思い当たり、試してみた。残念ながらレゴは単品売りが行われていないので、一番安くて普通のブロックが沢山入ってそうなものということで、緑のバケツというのを購入した。この中には通常サイズのブロックのほかに動物や人
形、車といったパーツが入っていたが、こちらは今回の用途には役に立たないので、最近激務な同僚の先生のお子さんに差し上げることにして、通常の8つ突起のあるブロックをそのまま削り込むことにした。
結果はこのように、あつらえたように申し分のないサイズとなった。今回の用途では大満足だ。

レゴの内側には噛み合わせのための形状がモールドされている。もちろん、中にモノを詰め込むためにはこのモールドは邪魔になるので切り刻むしかない。カッターとペンチと電動リュータを駆使して中身をくりぬいたところがこちら。

ブロックの内側の構造にカッターで切れ目をいれ、出来る限りペンチでもぎ取る。残った部分はリュータを使って削りこんでいって完成だ。レゴの素材はやわらかく、熱に強いので、ゆっくりカッターやリュータをつかえば思ったよりは簡単に削り込めるし、割れる心配もほとんどない。Oリングをつけるための金具はピンバイスであけた穴を拡張して利用している。こちらの金具はタカチのもので袋には70円と書いてあった。

あとは基盤の組み付けの問題は残っているが、現状では電池ケースを接着剤ではりつけ、基盤は電池に対して両面テープでとりつけた。今後はうすい普通サイズのレゴのパーツをつかい蓋をするなどといった案が考えられるだろう。

レゴを使ったケースは手間とコストはかかるものの見栄えとしても悪くないし、持ち歩きもの、インテリアものにはよいのではないだろうか。次はユニバーサル基板をいれてみようかとおもう。

2008年12月22日月曜日

OSX でTCPウインドウ制御

ある種の Firewallと MacOSX  の rfc1323実装の相性が悪いらしく、
職場の環境では大きいファイルのダウンロードをやっているとかならずストールしてしまう。

そんなとき以下のようにすればいいと教わった。
 sudo sysctl -w net.inet.tcp.rfc1323=0

これを毎回打つのもなんだかなーと思っていたら、 
/etc/sysctl.conf というファイルに以下の1行書いておけばいいらしい。

net.inet.tcp.rfc1323=0

実績はリブートしてのお楽しみ。

2008年12月15日月曜日

Gainer の PGA設定

Gainer(というよりPSoCの)PGAの倍率設定は0-15を指定すると、それに対応した倍率になる。
これがまた微妙な間隔で、覚えるのも大変なので覚え書きとして書いておく。
6,10,12 あたりが2x、4x、8xとなって判りやすいのでよく使うと思う。

指定値   倍率        
 0 1.00
 1 1.14
 2 1.33
 3 1.46
 4 1.60
 5 1.78
 6 2.00
 7 2.27
 8 2.67
 9 3.20
10 4.00
11 5.33
12 8.00
13 16.0
14 24.0
15 48.0

2008年11月4日火曜日

gainer-rubyを NetBSDの箱で動かす

gainer-rubyは rubyで作られたgainerのライブラリであり、rubyを知っていれば非常に簡単にgainerを使うことが出来るのが特徴だ。GUIを使った作品作りとは異なるが、本blogでも twitterとgainerをつなげるなどのエントリで活躍している。ruby自体にさまざまなライブラリが豊富なので twitterやIMなどとの連携を行いやすく、グラフィカルなインスタレーションではないような用途では非常に重宝する。

個人的には温度計を接続し、activerecord経由でDBと連携させて一定時間おきにtwitterに投稿するといった使い方をしている。

個人的なgainer-rubyの問題としては NetBSDをいれた小さい箱で動かなかった点がある。これはシリアルポートのtermiosの設定がうまくいっていないようなので、ここを修正することとした。また、ダウンロードできるgainer-rubyのソースには PGAのゲイン調整のコードが入っていないのでこれも追加したものを作ってみた。動作を確認したNetBSDは 4.0R のi386版である。
PGAのほうは作者にも送ってあるので次のバージョンには反映されるかもしれない。

コードの差分をリンクしておくので、試してみたい方はsvnで checkoutした gainer-ruby にあててみてほしい。PGAのゲインコントロール関数は amp_gain_agnd/amp_gain_dgnd でprocessing のライブラリと対応させてある。シリアルポートはtermiosの設定を変更したが、NetBSDの他にOSX(10.5) でも動作することは確認済みである。


これをつかった作品の全容はまた後ほど

2008年10月14日火曜日

ベリーショートなACタップ

テーブルタップのコードがからまるという問題は、古今東西あらゆる現代人が直面している問題のようで、さまざまなツールや解決案が提案されている。また、別のテーブルタップの問題としてはコンセントの口が少ないということがよくあげられる。総計1500Wの3つ口テーブルタップに、昔なら数百ワットを使うテレビやこたつといったものをつなぐのが普通だったのが、最近ではたった100W以下しか使わないゲーム機やパソコンのACアダプタを数多くつなぎたいという要求のほうが多い。

これを解決するには多口のタップを使うのが簡単だが、そう多いものは売られていない。そのため、タップは基本的にたこ足になってしまうのが一般的だが、その場合には長いコードのやり場に困る。

そこで個人的によくやっているのが、タップのコンセントを短く切断してしまう方法だ。とくにオフィスのデスクの下に転がすタップなどはデスクに磁石で取り付けることもあり、あまり長いと邪魔なだけなので、20cmくらいの長さになるようにコードを切断したものを用意している。

高級品のタップの場合にはタップ側を分解するとケーブルがねじ留めされているので、その場合にはねじを外して、コードを短く切り、もう一度ねじ止めする。普通のタップの場合には、ケーブルがハンダ付けされていたり分解できないようなネジや、接着といった方法でとめられていたりするのでその場合にはコンセント側を捨てることにして、新しいコンセントの部品をホームセンターで買ってくればいい。このときにコンセントを90度に曲がるものや回転するものなど、自分のさしたい場所にあわせてやるといいだろう。

写真は筆者のオフィスのテーブルに張り付いているタップである。真ん中が床下から生えてきているタップでそれを左右2つのタップに分岐して使っている。ただでさえ、イーサネットケーブルと電源ケーブルで混乱している机の下だが、このタップのケーブルが3mもある場合とは雲泥の差であるのは判ってもらえるだろう。

既製品を切り刻むのは抵抗があるのだろう。簡単にできる割にあまりやった話を聞かないのだが、自分の足下がおどろくほど快適になるのでぜひ試してみてほしい。

ちなみに切ってしまうと模様替えなどで長いケーブルが必要になると使えないじゃないか!と言う人もいるとおもうが、自分の手元に必要なテーブルタップの口数がかわらない以上は手元まで引っ張るものと手元でバラすものが必要なわけで、大きな問題にならないはずだ。

2008年10月1日水曜日

passenger(mod_rails) でバーチャルホストを使わない複数アプリケーション動作



railsの実行環境としてこの春あたりから話題騒然のpassengerを試してみた。このとき、普通にアプリケーションを立ち上げるのはみんながやっているが複数のアプリケーションをディレクトリで切り替えるというのはあまり見なかったので簡単にまとめておく。

まず、apache + passenger のインストールだが、どこのblogにも書いてあるので省略する。

passengerのための設定までは終了したとして、この後にそれぞれのアプリケーションを動かすための設定を行う。アプリケーションを動かすために設定しないといけない項目はシンボリックリンクを含めると合計4カ所だ。

まず最初にやるべきことはrails のアプリケーションのシンボリックリンクを作ることである。rails アプリケーションそのものが存在するディレクトリはapacheを動かしているユーザで
アクセスできれば、documentrootの中にある必要はないようだ。さすがアプリケーション。

railsアプリの名前が tasklist だとするとtasklistの中のpublic をシンボリックリンクで
Documentroot内の適当な場所にリンクする。だいたいこんな感じになるだろう。

---
cd /WWWROOT/rails/
ln -s /home/name/tasklist/public tasklist
---

次に設定するべきところは railsアプリの routingだ。ここでアプリの中でindexを開いたときに動くべきコントローラが taskであり、最初にアクセスされるべきアクションがindexだとして設定をおこなう。ここでは railsのアプリケーションの中の config/route.rb に以下の行を追加する。

--
map.connect '', :controller => "task", :action => 'index'
--
そして、public内のindex.htmlファイルにアクセスされないように index.htmlを
削除ないし名前変更する必要がある。これをやらないとindex.htmlをアクセスしていつまでたってもアプリケーションにたどり着かないことになってしまう。
これだけの設定でrailsアプリ側の準備ができた。

最後は httpd.confに railsのアプリケーションのrootを伝える設定を書き加える。passenger の設定の下に以下のような行を加えよう。

---
RailsBaseURI /rails/tasklist
---

このあと apacheをリスタートした後ブラウザから、 http://hostname/rails/tasklist とアクセスすると無事にアプリケーションが立ち上がっていることが確認できるだろう。

今回のポイントはこの最後の操作で、 RailsBaseURI の行を増やすと複数のアプリケーションに対応できるということにある。railsアプリを設定し、シンボリックリンクを作り、httpd.confに RailsBaseURIを書き加えれば、同時に複数のアプリケーションを立ち上げることが可能になる点がポイントだ。

以上、簡単だが主に自分でまた半年後にやるときの参考になればとおもい記録しておこう。

2008年7月8日火曜日

gainer clone で「かざぐるま」あるいは PWMによるモーターの駆動 (2)

前回のあらすじ
Gainerモジュールにトランジスタアレイでかざぐるまを駆動することに成功したCUE。
しかし、そのモーターからは脳を直撃する怪音が無限に鳴り響く!

すこし時間があいてしまったが、前回の最後で述べたとおり、怪音をなくすためにはPWMの周波数を変更するのがもっとも一般的かつ効果的な手法である。しかしながらgainerの配布されているファームウェアでは、PGAのゲインはコマンドで変更できてもPWMの周波数は変更できない。ということで、「Gainerのファームウェアを改造してノイズが出ないモータを実現するぞ」プロジェクトを決行した

当方ではファームウェアの不具合について感知しないのはもちろん、ファームウェアの焼き込みサービスも行ってないのであしからず。秋月電子などから PSOC miniProg を手に入れて各自で焼き込んでもらいたい。どのように作業したかは以下のとおりである。


1. ファームウェアの入手
firmware はgainer.cc のページからダウンロードできる。以下のページからファームウェアのソースファイルをダウンロードする。ダウンロードできたらこれを unzipして展開しておく。

2. ファームウェアの展開
ファームウェアはzipなので適当なツールを使って展開する。このとき置き場所は日本語の入っていないディレクトリでなければ、PSoCデザイナでmakeするときに不具合がでることがあるので注意したほうがよい。僕は C:\ に直接展開したフォルダをそのまま移動した。

3. 設定画面をながめる
書き換えポイントを探るためにコンフィグとソースをよく見て考える。
config_a にPWMモジュールが8つ発見できたので、これが出力用のPWMに違いないとあたりをつける。そのときに、PWMのクロックをどこからもらってるかを配線からながめると16ビットのカウンタを使ってブロードキャストバスに信号を流し込み、そのバスの信号をクロックとして使っているということがわかった。


その後で、ソースコードをかるく読んでみるとまさしく config-a の PWMモジュールの山がそのままPWMとして出力されることがわかる。これでconfig-a のPWMモジュールのクロックを書き換えるという方針が決定した。




4. 使えそうなクロックを探す
使えそうな clockとして Gainerの生の設定でPSoCモジュールが供給しているのは、24MHzの生クロックのほかこれを分周して作っている VC1,2,3 のそれぞれさらに専用のcounterにより作りだされているもともとのPWMの信号がある。それぞれのクロックはどれくらいの周期かというとPWMでは 256クロックで1周期ということなのでCPUCLK 24MHz が およそ 100KHzとなるがこれはすこし早すぎるようだ。

VC1は 24/3 = 8MHz VC2は 8/4 = 2MHz であり、これをさらに 1/256したものが周波数になる。よって VC1でおよそ 32KHz VC2では 8KHz となる。超音波領域に突入することが目標なので、 VC1のほうを採用することとした。

これをそのまま PWMのクロックに入れればいいのだが8つある設定を書き換えるのは大変なので大本となっている PWM用のカウンタであるCounter16に入力することにした。

このままでは counter16のソースが 8MHzとなったはいいがカウンタをつかってさらにスピードを落としているので、それをカウントしている部分を探すこれはソースコードのほうで発見した。
クロックの比は 1:1 なので226行目(あたり)のところの Counter16_A_PWMClk_WritePeriod(0); を 0に書き換える。これで毎回カウントアップのたびにCounterがあふれているはずだ。
実際のところcounter16など使わなくても、直接配線をVC1に変更しまくればそれでもOKなのだが、その場合には書き換えるポイントが8つになってしまうので、間違い等があると大変である。そこで今回はCounterはそのまま使って、そのカウンタの周期を修正したのである。修正ポイントのコードは以下のとおりである。

--ここから
// start analog outputs
// Counter16_A_PWMClk_WritePeriod(157); // 50Hz (i.e. 20ms)
  Counter16_A_PWMClk_WritePeriod(0); // 10KHz (i.e. 1ms)
Counter16_A_PWMClk_WriteCompareValue(0);
Counter16_A_PWMClk_Start();
--ここまで



この2つをやってからbuild を行う。今回はHitechC のフリー版つかってmakeを行った。Gainer自体はもともとimage-craftのコンパイラで作られていたはずだが、何の問題もなくコンパイルもおわったのでこれを miniprogを使って書き込んで完成である。

これで動作させればPWMでモータを駆動させても音がならないGainerが完成である。モータが動かなくなるくらい低いPWM値の場合にモータからの異音がしなくなるのがわかるはずだ。

改変した後のHEXファイルはこちらにおいておく。そのままmini-progで焼き込めば動くはずだ。