Funnelをまとめてみる。~ -Funnelまとめ(このページ) -WiiFunnel(Wiiリモコンみたいなものを作る) -OLED4D for Arduino(4Dシステム有機ELモジュールドライバ) -SOMO14D for Arduino(4Dシステムサウンド再生モジュールドライバ) -[[Funnelまとめ(XIO編)]](XBeeのみでFunnel。古い情報です) -[[Funnelまとめ(XIO編)]](XBeeのみでFunnel) 更新歴~ -Arduino Fio用に大幅改訂。 -- kazushi? 2010-06-13 (日) 19:09:12 -一部の誤植を修正。 -- kazushi? 2010-07-13 (火) 18:54:26 - ハードディスククラッシュからデータ復旧。 -- [[kazushi]] &new{2011-07-02 (土) 02:15:12}; #comment *Funnel [#bf9a006f] &ref(fio_front.jpg,zoom,320x240); &ref(fio_back.jpg,zoom,320x240);~ 写真はArduino Fio+XBee(チップアンテナ型)+EIC-801+リチウムイオンポリマー電池(1000mAh)の組み合わせ。~ 2010/06/13現在のバージョンはv1.0(r737)です。~ IAMASの小林茂先生が考案したフィジカル・コンピューティング・ツールキットがGainer。 Gainerを含めてXBee, Arduino, Arduino Fioなどの様々なI/Oモジュールを利用可能にした総合ツールキットがFunnel。利点はProcessing,ActionScriptなどによる充実したライブラリと無線版I/OのArduino Fioが扱えるところ。~ 公式サイトは[[ここ:http://funnel.cc/]]~ 開発状況は[[ここ:http://code.google.com/p/funnel/]]~ 名前の由来は[[ここ:http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%83%B3%E3%83%8D%E3%83%AB_%28%E6%A9%9F%E5%8B%95%E6%88%A6%E5%A3%AB%E3%82%AC%E3%83%B3%E3%83%80%E3%83%A0%29#.E3.83.95.E3.82.A1.E3.83.B3.E3.83.8D.E3.83.AB]]~ **動作モデル [#f859eb80] Funnel専用I/Oモジュール(Fio)だけなく、XBee, Gainer, ArduinoなどいろいろなI/Oモジュールを利用できる。ここでは~ -Arduino Fio の場合を説明する。~ ***XBee+Arduino Fio † [#cb8148ba] PC<-USB->(エクスプローラUSB(XBee)) ------ ((XBee)ArduinoFio)~ &ref(XBeeExplore.jpg,zoom,160x120); ------ &ref(fio_front.jpg,zoom,160x120);~ 利点)ポートが多い。電源がある。ブレッドボードに刺さる。Arduino Diemilanoveよりコンパクト。~ 欠点)XIOより大きい。Arduino Diemilanoveより動作が遅い。(8MHz)~ -Arduino Fioとは XBeeを搭載することによって無線で制御できるFunnel専用のI/Oモジュールのこと。GainerにGainerI/OがあるようにFunnel にFunnelI/Oがある。Arduino互換機でArduino Pro mini(3.3v 8MHz) w/ ATmega328と同等のものである。 *Arduino Fio [#fb579d80] &color(red){※この情報は2010/06/13時点のものです。};~ &color(red){※XBeeの抜き差しや配線の変更は必ず電源を切って行うこと。};~ &color(red){※リチウムリチウムイオンポリマー電池の取り扱いには十分注意すること。};[[間違えると発火・爆発します:http://www.valley.ne.jp/~h-asawa/ripo1.html]]~ ***ハードウェアの準備 † [#da59a3b4] http://funnel.cc/Hardware/FIO をよく読んでそろえる。私が購入したものは以下のとおり~ -[[Arduino Fio:http://www.switch-science.com/products/detail.php?product_id=290]] x 1個 -[[XBee無線モデム(802.15.4モデル):http://www.switch-science.com/products/detail.php?product_id=96]] x 2個 -[[XBee Explorer USB(XBee⇔USB変換モジュール):http://www.switch-science.com/products/detail.php?product_id=30]] x 1個 -[[リチウムイオンポリマー電池1000mAh:http://www.switch-science.com/products/detail.php?product_id=48]] x 1個 -[[ピンヘッダ(14穴以上):http://www.switch-science.com/products/detail.php?product_id=93]] x 2本 -[[ピンソケット(14穴以上):http://akizukidenshi.com/catalog/g/gP-00241/]] x 2本 -USBケーブル(A⇔mini-B)x 1本(FTDI Basicを常に使う場合は2本) -[[ブレッドボードEIC-801:http://akizukidenshi.com/catalog/g/gP-00315/]] x 1枚 -[[ジャンプワイヤ:http://www.sunhayato.co.jp/products/details.php?u=904&id=06064]] x 数本 -(option)[[FTDI Basic Breakoutボード(3.3V):http://www.switch-science.com/products/detail.php?product_id=54]] x 1個(ファームウェアの書き込みを頻繁にする場合、XBee経由より失敗が少ないので便利) ***半田付け [#p25b6dc4] +Arduino Fioは購入直後はピンソケットがないので用意して半田付けする。 +XBee Explorer USBまたはXBee starter kit:RTSとD3の間をジャンパで接続する。~ &ref(3214685994_3d3fd6d333_m.jpg);~ ***電池の充電 [#p356a0d8] 一晩待つ^^;~ ***ソフトウェアの入手 [#g05908a4] 以下はWindows用。macの場合は公式サイトを参照のこと。ダウンロードしたら解凍する。X-CTU v5.1.4.1(40002637_c.exe)はインストールする。~ -[[funnel-1.0-r737.zip:http://code.google.com/p/funnel/downloads/list]] -[[processing-1.1.zip:http://processing.org/download/]] -[[arduino-0018.zip:http://arduino.cc/en/Main/Software]] -[[X-CTU v5.1.4.1:http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&s=316&tp=5&tp2=0]] -[[FTDI Virtual COM port (VCP) drivers v2.06.02:http://www.ftdichip.com/Drivers/VCP.htm]] -[[interfascia:http://www.superstable.net/interfascia/]](XBee Config Toolに必要) ***PCとXBeeの設定 [#i6eb7f63] +XBeeエクスプローラとUSBケーブルを使ってXBeeをUSBに接続。 +ハードウェアの検出ウィザードが起動したら、FTDI VCP driversを解凍してそのフォルダをドライバインストールフォルダとして指定する。このドライバインストールは2回聞かれる。 Windows7の場合は時間がかかるけど自動的にインストールされる? +コントロールパネル>システム>デバイスマネージャにてポート(COMとLPT)にUSB Serial Portが正常に表示されていることを確認。この場合はCOM9。 +ついでにCOMポート設定を変更しておく。(Windowsのみ) ++デバイスマネージャからCOMポートのプロパティを表示する ++「ポートの設定」ボタンを押して設定画面を開く ++「ビット/秒」を38400にする ++「詳細設定」を押して「その他のオプション」で「クローズ時のRTS設定」をチェックする ***XBeeのファームウェアの更新(10CDより古い場合) † [#sfee26dc] +X-CTUを起動。 +modem configurationのreadを押してXBeeの接続を確認。ここでファームウェアが10CD以上ではなかったらwriteしてファームウェアをアップデート。06/13時点では10E6が最新。 +XBeeを交換して同様に確認する。 +確認更新後、X-CTUを終了。 ***XBeeの設定 [#t51e7e36] +processing-1.1.zipを解凍。適当なフォルダ(例えばc:\Program Files\)においてprocessing.exeアイコンをダブルクリックして起動する。 +($home)/Documents/Processingフォルダが作成されていることを確認してProcessingを終了する。以後このフォルダを($Processing)と呼ぶ。 +($Processing)/libraries/フォルダを作成する。 +interfascia003.zipを解凍し、その中のinterfascia003フォルダを($Processing)/libraries/に移動する。 +funnel-1.0-r737.zipを解凍。適当なフォルダ(例えばc:\)におく。以後このフォルダを($funnel)と呼ぶ。 +XBeeエクスプローラとUSBケーブルを使ってXBeeをUSBに接続。 +Processingから($funnel)hardware/fio/tool/XBeeConfigTool/XBeeConfigTool.pdeを開いて起動する。(起動できない場合はinterfasciaが入っていない可能性がある) +該当のシリアルポート(ここではCOM9)を選択して、「Read」ボタンを押す。 +ボタン下に「Read settings successfully」そして、画面右上に情報がでるのでfirmwareが10CD以上であることを確認。 +コーディネーター(PC)側XBeeの設定。以下のようにしてConfigureボタンを押す。「Configured successfully」と出れば完了。 ++ModeはProgramming radio ++Baud rateは57600(for ATmega328) ++PAN IDは4桁の任意の数字。ここでは1234 +XBeeを交換。 +該当のシリアルポート(ここではCOM9)を選択して、「Read」ボタンを押す。 +ボタン下に「Read settings successfully」そして、画面右上に情報がでるのでfirmwareが10CD以上であることを確認。 +エンドデバイス(Arduino Fio)側XBeeの設定。以下のようにしてConfigureボタンを押す。「Configured successfully」と出れば完了。 ++ModeはArduino Fio radio ++Baud rateは57600(for ATmega328) ++PAN IDは4桁の任意の数字。ここでは1234 ++MY IDは0001であることを確認。(複数ある場合は0002など割り振れる) +コーディネーター(PC)側XBeeをXBeeエクスプローラに戻す。エンドデバイス(Arduino Fio)側XBeeをArduino Fioに差す。(同じ形なので間違えないように!) +Processingを終了する。~ ※この設定ではPAN IDは1234,コーディネータIDは0,エンドデバイスIDは1になっている。複数で勉強するときはこれらの値を必要に応じて変える。 ***Arduino Fioのファームウェアの設定 [#s676232e] +arduino-0018.zipを解凍。適当なフォルダ(例えばc:\Program Files\)においてarduino.exeアイコンをダブルクリックして起動する。 +($home)/Documents/Arduinoフォルダが作成されていることを確認してArduinoを終了する。以後このフォルダを($Arduino)と呼ぶ。 +($Arduino)/libraries/フォルダを作成する。(option) +File/Openから($funnel)/hardware/fio/firmware/StandardFirmataForFio/StandardFirmataForFio.pdeを開く。 +118行目を Firmata.begin(57600); に書き換える。(19200は旧Arduino Fio用と思われる。Arduino Fioでは低速なので動かない。たぶん次の版では変わるはず) +Tools/Board/Arduino Pro Mini (3.3V 8MHz) w/ ATmega328を選択する +以下のどちらかの方法でファームウェアを転送したあとArduinoを終了する。 (FTDI Basic経由の場合)&color(red){※転送が早くて確実です。};~ ++FTDI BasicをUSBケーブルでPCにつなげる。ドライバがインストールされてシリアルポートが登録される。ここではCOM10。 ++Tools/Serial Portで適切なシリアルポートを選択する。ここではCOM10。 ++FTDI BasicをArduino Fioのシルク印刷に対応するピンにあわせて写真のようにピンヘッダでつなげる。~ &ref(fdti.jpg,zoom,240x160);~ ++FTDI Basicを抜いてXBeeをArduino Fioから外す。(FTDI Basicから通電しているので必ず!) ++Uploadボタンを押してファームウェアをアップロード。Binary sketch size: ~がでてFTDI BasicのLED(TX,RX)の点滅が終了したら完了。 ++FTDI Basicを抜いてXBeeをArduino Fioに戻す。(FTDI Basicから通電しているので必ず!) (XBee経由の場合)&color(red){※周りに無線LANやBluetoothなどが電波が多い場合は結構失敗します。};~ ++Tools/Serial Portで適切なシリアルポートを選択する。ここではCOM9。 ++XBeeをArduino Fioにつけたままにする。 ++Arduino Fioの電源を入れる。 ++Uploadボタンを押してファームウェアをアップロード。Binary sketch size: ~がでてXBeeエクスプローラのLED(TX,RX)の点滅が終了したら完了。 ++Arduino Fioの電源を切る。 ***ソフトウェアライブラリの設定(Processing) [#ia6eadfe] +($Processing)/libraries/funnel/を作成し($funnel)/libraries/processing/のなかのlibraryとexamplesをコピーする。 +Processing/libraries/funnel/library/settings.fio.txtを server: port: 9000 io: type: Fio port: COM9 baudrate: 57600 としてCOMポート番号を指定する。~ ※シリアルポートは各自の環境によって変わります。~ ***シンプルスコープの起動 [#n23abd43] +可変抵抗を以下のように接続する。(わかりにくいけどA0ピン)~ &ref(vr_w_fio.jpg,zoom,240x160);~ +ホームディレクトリのProcessingフォルダに以下のディレクトリを作成し以下のソースを作成する。~ SimpleScopeArduino Fio/SimpleScopeArduinoFio.pde - SimpleScopeArduinoFio.pdeのソースコード #geshi(java){{ import processing.funnel.*; final int id = 1; // end device ID final int kChannles = 1; // the number of channels to display Fio fio; Scope[] scope; void setup() { size(340, 35+150*kChannles); frameRate(30); int[] moduleIDs = {id}; fio = new Fio(this, moduleIDs, Fio.FIRMATA); scope = new Scope[kChannles]; for (int channel = 0; channel < kChannles; channel++) { scope[channel] = new Scope(30, 35+150*channel, 200, 100, "A"+channel); } } void draw() { background(0); for (int channel = 0; channel < kChannles; channel++) { scope[channel].updateAndDraw(fio.iomodule(id).analogPin(channel)); } } class Scope { private int l; private int t; private int h; private float values[]; private int index = 0; private int points = 200; private String title; Scope(int l, int t, int w, int h, String title) { this.l = l; this.t = t; this.h = h; this.points = w; this.title = title; values = new float[this.points]; } public void updateAndDraw(Pin pin) { values[index] = pin.value; smooth(); textSize(12); text(title, l - 24, t - 8); text("1.0", l - 24, t + 8); text("0.0", l - 24, t + h); text("val: " + pin.value, l + points + 8, t + 8); text("max: " + pin.maximum, l + points + 8, t + 20); text("min: " + pin.minimum, l + points + 8, t + 32); text("avg: " + pin.average, l + points + 8, t + 44); // draw outlines stroke(200); noFill(); beginShape(); vertex(l - 1, t - 1); vertex(l + points, t - 1); vertex(l + points, t + h); vertex(l - 1, t + h); endShape(CLOSE); // draw the signal stroke(255); beginShape(); for (int i = 1; i < points; i++) { vertex(l + i, t + h - values[(index + i) % points] * (float)h); } endShape(); index = (index + 1) % points; } } }} +Processingを起動。 +File/Sketchbookを開くとSimpleScopeArduinoFioがあるので選択。 +Arduino Fioの電源を入れる。 +SimpleScopeArduino Fioを起動。NullPointerExceptionがでるが気にしない。正常に起動していれば ($Processing)\libraries\funnel\library\settings.fio.txt コマンドポート:サーバの起動中… コマンドポート:サーバが起動しました:9000 I/Oモジュールと接続中です… Stable Library ========================================= Native lib Version = RXTX-2.1-7 Java lib Version = RXTX-2.1-7 baudrate: 57600 I/Oモジュールと接続が完了しました:COM9 API MODE: 2 FIRMWARE VERSION: 10E6 (XBee 802.15.4) PAN ID: 1234 SOURCE ADDRESS: 00 opened host address 127.0.0.1 ececCode /reset コマンドポート:127.0.0.1がサーバに接続しました reboot OK module registerd [Fio] addModule() Fio.ID01 1 notify thread start Discovering nodes... NODE: MY=1, SH=13a200, SL=40526a67, dB=47, NI=' ' configureation OK funnelServiceThread start Firmata Protocol Version: 2.1 Discovering nodes... Discovering nodes... と表示される。~ &color(red){※特にFirmata Protocol Version: 2.1が表示されているか確認。};~ +可変抵抗をまわすとそれに応じてA0のグラフが変化する。