Funnelをまとめてみる。
- Funnelまとめ(このページ)
- WiiFunnel(Wiiリモコンみたいなものを作る)
- OLED4D for Arduino(4Dシステム有機ELモジュールドライバ)
- SOMO14D for Arduino(4Dシステムサウンド再生モジュールドライバ)
- Funnelまとめ(XIO編)(XBeeのみでFunnel)
更新歴
- Arduino Fio用に大幅改訂。 -- kazushi? 2010-06-13 (日) 19:09:12
- 一部の誤植を修正。 -- kazushi? 2010-07-13 (火) 18:54:26
- ハードディスククラッシュからデータ復旧。 -- kazushi?
Funnel †

写真は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が扱えるところ。
公式サイトはここ
開発状況はここ
名前の由来はここ
動作モデル †
Funnel専用I/Oモジュール(Fio)だけなく、XBee, Gainer, ArduinoなどいろいろなI/Oモジュールを利用できる。ここでは
の場合を説明する。
XBee+Arduino Fio † †
PC<-USB->(エクスプローラUSB(XBee)) ------ ((XBee)ArduinoFio?)
------ 
利点)ポートが多い。電源がある。ブレッドボードに刺さる。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 †
※この情報は2010/06/13時点のものです。
※XBeeの抜き差しや配線の変更は必ず電源を切って行うこと。
※リチウムリチウムイオンポリマー電池の取り扱いには十分注意すること。間違えると発火・爆発します
ハードウェアの準備 † †
http://funnel.cc/Hardware/FIO をよく読んでそろえる。私が購入したものは以下のとおり
半田付け †
- Arduino Fioは購入直後はピンソケットがないので用意して半田付けする。
- XBee Explorer USBまたはXBee starter kit:RTSとD3の間をジャンパで接続する。

電池の充電 †
一晩待つ^^;
ソフトウェアの入手 †
以下はWindows用。macの場合は公式サイトを参照のこと。ダウンロードしたら解凍する。X-CTU v5.1.4.1(40002637_c.exe)はインストールする。
PCとXBeeの設定 †
- XBeeエクスプローラとUSBケーブルを使ってXBeeをUSBに接続。
- ハードウェアの検出ウィザードが起動したら、FTDI VCP driversを解凍してそのフォルダをドライバインストールフォルダとして指定する。このドライバインストールは2回聞かれる。 Windows7の場合は時間がかかるけど自動的にインストールされる?
- コントロールパネル>システム>デバイスマネージャにてポート(COMとLPT)にUSB Serial Portが正常に表示されていることを確認。この場合はCOM9。
- ついでにCOMポート設定を変更しておく。(Windowsのみ)
- デバイスマネージャからCOMポートのプロパティを表示する
- 「ポートの設定」ボタンを押して設定画面を開く
- 「ビット/秒」を38400にする
- 「詳細設定」を押して「その他のオプション」で「クローズ時のRTS設定」をチェックする
XBeeのファームウェアの更新(10CDより古い場合) † †
- X-CTUを起動。
- modem configurationのreadを押してXBeeの接続を確認。ここでファームウェアが10CD以上ではなかったらwriteしてファームウェアをアップデート。06/13時点では10E6が最新。
- XBeeを交換して同様に確認する。
- 確認更新後、X-CTUを終了。
XBeeの設定 †
- 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のファームウェアの設定 †
- 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経由の場合)※転送が早くて確実です。
- FTDI BasicをUSBケーブルでPCにつなげる。ドライバがインストールされてシリアルポートが登録される。ここではCOM10。
- Tools/Serial Portで適切なシリアルポートを選択する。ここではCOM10。
- FTDI BasicをArduino Fioのシルク印刷に対応するピンにあわせて写真のようにピンヘッダでつなげる。

- FTDI Basicを抜いてXBeeをArduino Fioから外す。(FTDI Basicから通電しているので必ず!)
- Uploadボタンを押してファームウェアをアップロード。Binary sketch size: ~がでてFTDI BasicのLED(TX,RX)の点滅が終了したら完了。
- FTDI Basicを抜いてXBeeをArduino Fioに戻す。(FTDI Basicから通電しているので必ず!)
(XBee経由の場合)※周りに無線LANやBluetoothなどが電波が多い場合は結構失敗します。
- Tools/Serial Portで適切なシリアルポートを選択する。ここではCOM9。
- XBeeをArduino Fioにつけたままにする。
- Arduino Fioの電源を入れる。
- Uploadボタンを押してファームウェアをアップロード。Binary sketch size: ~がでてXBeeエクスプローラのLED(TX,RX)の点滅が終了したら完了。
- Arduino Fioの電源を切る。
ソフトウェアライブラリの設定(Processing) †
- ($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ポート番号を指定する。
※シリアルポートは各自の環境によって変わります。
シンプルスコープの起動 †
- 可変抵抗を以下のように接続する。(わかりにくいけどA0ピン)

- ホームディレクトリのProcessingフォルダに以下のディレクトリを作成し以下のソースを作成する。
SimpleScopeArduino? Fio/SimpleScopeArduinoFio?.pde
- SimpleScopeArduinoFio?.pdeのソースコード
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...
と表示される。
※特にFirmata Protocol Version: 2.1が表示されているか確認。
- 可変抵抗をまわすとそれに応じてA0のグラフが変化する。