- 追加された行はこの色です。
- 削除された行はこの色です。
[[Funnelまとめ]]
- 公開 -- [[kazushi]] &new{2008-09-11 (木) 21:12:23};
- IMU 5 DOFモジュールのセットアップ方法を追加 -- [[kazushi]] &new{2008-09-14 (日) 16:54:56};
- Funnel008b5用にXBee単体での方法を更新 -- [[kazushi]] &new{2008-09-18 (木) 14:19:18};
- FIOv1.3とFunnel009用に更新 -- [[kazushi]] &new{2009-04-24 (金) 14:56:51};
- XIOの章の回路図を追加 -- [[kazushi]] &new{2009-05-07 (木) 18:15:32};
- VCP driversの情報を追加 -- [[kazushi]] &new{2009-05-12 (火) 22:15:25};
- XBeeのend device側paketization timeout(RO)は10より3(デフォルト)のほうが滑らかになる。 -- [[kazushi]] &new{2009-11-10 (火) 13:37:19};
- XIO単体のみの説明に変更 -- [[kazushi]] &new{2011-07-02 (土) 03:13:24};
- Processing2.0およびfunnel1.0r806にて動作確認 -- [[kazushi]] &new{2012-12-09 (日) 13:09:23};
#comment
***XIO(XBee単体) [#v392bc2a]
PC<-USB->(エクスプローラUSB(XBee)) ------ (XBee)~
&ref("explorer_usb_s.JPG"); ------ &ref("xbee_valicon_s.jpg");~
利点)fioなしで始められる。コンパクト~
欠点)ポート数が少ない。電源を制作しなければならない。そのままではブレッドボードに刺さらない。~
-XBeeとは
シリアルポート接続によるPCのデータを送受信する無線モジュール。~
*XIO(XBee単体) [#md780815]
&color(red){※この情報は2012/12/09時点のものです。};~
&color(red){※XBeeの抜き差しや配線の変更は必ず電源を切って行うこと。};~
**可変抵抗でやってみた。 [#h07785d4]
*** 1.Funnel008bのダウンロード [#i1a10d10]
http://funnel.googlecode.com/files/funnel-1.0-r806.zip ~
*** 2.ProcessingにFunnelのライブラリをインストールする [#n2e57e4e]
Processingは2.0 Beta 7 (7 December 2012)を使用。~
libraries/processing/funnel~
を~
(My document)/Processing/libraries/~
にコピーあるいは移動する。(ディレクトリがなければ作成)~
Processingを起動してSketch>Import Library...>Contributedにfunnelと表示されていればOK
*** 3.X-CTUでXbeeの値を設定する [#f3966afc]
設定に関してほかのパラメータをいじったことがあればrestoreして初期設定に戻す。~
//1:1の通信を行う。~
コーディネータ(ホスト)側
ATID 3111 <-PAN(グループ)ID
ATDH 0000
ATDL 0000 <-相手のID
ATMY 0000 <-自分のID
ATBD 6 <-シリアルポートの速度(57600)
ATAP 2 <-APIモードの設定
エンドデバイス(クライアント)側
ATID 3111 <-PAN(グループ)ID
ATDH 0000
ATDL 0000 <-相手のID
ATMY 0001 <-自分のID
ATBD 6 <-シリアルポートの速度(57600)
ATD0 2 <-ピン20をアナログ入力AD0に設定
ATIT 1 <-ここで指定したサンプル数ごとに送信
ATIR 0A <-サンプリング間隔(0x0A = 10ms)
*** 4.Funnelライブラリを設定する [#ub6be0b3]
(My document)/Processing/libraries/funnel/libraryの~
settings.xbee.txtを次のようにする~
server:
port: 9000
io:
type: XBee
com: COM5 <-ここはコーディネータをつなげているCOMポート番号を指定
baudrate: 57600 <-ATBDで設定した速度
*** 5.回路を組む [#od4005fe]
&ref("xbee_valicon.jpg");~
回路図~
&ref("xio_n_v-resistor_thumb.jpg");~
大きなファイルはこちら。&ref("xio_n_v-resistor.bmp");~
エンドデバイス側の回路を組む際の注意点~
&color(red){電源電圧は必ず2.8〜3.4Vの範囲で使用};→5Vを加えるとモジュールが破壊!~
&color(red){Vref(14番ピン)はVCC(1番ピン)に接続};→A/D変換のための基準電圧~
*** 6.ここでXBeeのコーディネータ・エンドデバイスとも電源を入れる [#vf567fde]
*** 7.Processingを起動する [#ca085054]
以下のスケッチを作成。フォントはサンプルのものを流用する。~
以下のスケッチを作成。~
#geshi(java){{
/*
analog in
*/
import processing.funnel.*;
final int id = 1; // end device ID
XBee xbee;
void setup()
{
size(400,130);
int[] moduleIDs = {id};
xbee = new XBee(this, moduleIDs);
}
void draw()
{
background(0);
text("analogInput[0]: " + xbee.iomodule(id).analogPin(0).value,10,80);
}
}}
-チェックポイント
--FIRMWARE VERSIONなどの情報が表示されているか?→されていなければATAPの結果を確認
*** 8.動作確認 [#p35e6827]
可変抵抗のつまみを回すと、値が0.0から1.0で変わる。ヤフー:-D~
値が震えていたりしたらエンド・デバイスの電源を切って、14番ピンに基準電圧(+3.3V)をとっているか確認すること。~
**加速度センサ(KXM52-1050モジュール)でやってみた。 [#xd9dbc94]
KXM52-1050モジュール~
http://akizukidenshi.com/catalog/g/gI-01425/~
*** 1.X-CTUにてエンドデバイスのXBeeの設定をかえる。 [#y8ceed4c]
ATID 3111 <-PAN(グループ)ID
ATDH 0000
ATDL 0000 <-相手のID
ATMY 0001 <-自分のID
ATIT 1 <-ここで指定したサンプル数ごとに送信
ATIR 0A <-サンプリング間隔(0x0A = 10ms)
ATD0 2 <-ピン20をアナログ入力AD0に設定
ATD1 2 <-ピン19をアナログ入力AD0に設定
ATD2 2 <-ピン18をアナログ入力AD0に設定
*** 2.回路を組む [#db0a0147]
そのうちアップ~
回路図~
&ref("xio_kxm52.png",zoom,320x240);~
pdfはこちら。&ref("xio_kxm52.pdf");~
eagleスケマティックはこちら。&ref("xio_kxm52.sch");~
*** 3.XBeeコーディネータ・エンドデバイスとも電源を入れる [#s2956941]
&color(red){※XBeeなどの3.3vで動くモジュールには3.4v以上の電圧を与えないこと!};
*** 4.Processingを起動する [#ca085054]
以下のスケッチを作成。フォントはサンプルのものを流用する。~
以下のスケッチを作成。~
#geshi(java){{
/**
* SimpleScope XBee
*/
import processing.funnel.*;
final int kChannles = 3; // the number of channels to display
final int kPoints = 200; // the number of points to display
final int id = 1; // end device ID
XBee xbee;
float values[][];
int index = 0;
void setup()
{
size(400, 400);
frameRate(30);
int[] moduleIDs = {id};
xbee = new XBee(this, moduleIDs);
values = new float[kChannles][kPoints];
for (int channel = 0; channel < kChannles; channel++) {
for (int i=0; i < kPoints; i++) {
values[channel][i] = 0;
}
}
}
final int kLeft = 35;
final int kTop = 25;
final int kHeight = 100;
void draw()
{
background(0);
smooth();
for (int channel = 0; channel < kChannles; channel++) {
int offset = channel * 130;
textSize(12);
text("analogInput(" + channel + ")", kLeft - 24, kTop - 8 + offset);
text("1.0", kLeft - 24, kTop + 8 + offset);
text("0.0", kLeft - 24, kTop + kHeight + offset);
text("val: " + xbee.iomodule(id).pin(channel).value, kLeft + kPoints + 8, kTop + 8 + offset);
text("max: " + xbee.iomodule(id).pin(channel).maximum, kLeft + kPoints + 8, kTop + 20 + offset);
text("min: " + xbee.iomodule(id).pin(channel).minimum, kLeft + kPoints + 8, kTop + 32 + offset);
text("avg: " + xbee.iomodule(id).pin(channel).average, kLeft + kPoints + 8, kTop + 44 + offset);
values[channel][index] = xbee.iomodule(id).pin(channel).value;
// draw outlines
stroke(200);
noFill();
beginShape();
vertex(kLeft - 1, kTop - 1 + offset);
vertex(kLeft + kPoints, kTop - 1 + offset);
vertex(kLeft + kPoints, kTop + kHeight + offset);
vertex(kLeft - 1, kTop + kHeight + offset);
endShape(CLOSE);
// draw the signal
stroke(255);
beginShape();
for (int i = 1; i < kPoints; i++) {
vertex(kLeft + i, kTop + kHeight - values[channel][(index + i) % kPoints] * (float)kHeight + offset);
}
endShape();
}
index = (index + 1) % kPoints;
}
}}
~
*** 6.動作確認 [#hee53ed6]
ブレッドボードを大きく動かす(ここがポイント)と、それぞれの値が変わる。今回の場合は
0 -> x-accel
1 -> y-accel
2 -> z-accel
で、動作を確認してみた。
~
~
//**ジャイロでやってみた。 [#xd9dbc94]
//IMU 5 DOFモジュール~
//http://www.sparkfun.com/commerce/product_info.php?products_id=741 ~
//~
//*** 1.X-CTUにてエンドデバイスのXBeeの設定をかえる。 [#y8ceed4c]
// ATID 3111 <-PAN(グループ)ID
// ATDH 0000
// ATDL 0000 <-相手のID
// ATMY 0001 <-自分のID
// ATIT 1 <-ここで指定したサンプル数ごとに送信
// ATIR 0A <-サンプリング間隔(0x0A = 10ms)
// ATD0 2 <-ピン20をアナログ入力AD0に設定
// ATD1 2 <-ピン19をアナログ入力AD0に設定
// ATD2 2 <-ピン18をアナログ入力AD0に設定
// ATD3 2 <-ピン17をアナログ入力AD0に設定
// ATD4 2 <-ピン11(注意!)をアナログ入力AD0に設定
//
//*** 2.回路を組む [#uf6b40bf]
//&ref("IMG_4010.JPG");~
//XBee単体でやってみた。~
//回路図~
//&ref("xio_imu5dof.jpg");~
//大きなファイルはこちら。&ref("xio_imu5dof.bmp");~
//~
//*** 3.XBeeコーディネータ・エンドデバイスとも電源を入れる [#g315301c]
//&color(red){※XBeeなどの3.3vで動くモジュールには3.4v以上の電圧を与えないこと!};
//~
//*** 4.Processingを起動する [#ca085054]
//以下のスケッチを作成。フォントはサンプルのものを流用する。~
//#geshi(java){{
//}}
//~
//*** 6.動作確認 [#hee53ed6]
//ブレッドボードを大きく動かす(ここがポイント)と、それぞの値が変わる。実際に角//度を出す時は得られた値を積分する(足し合わせる)ため、小さく動かしても値の変化//はそれほどない。だから向きを変えたから値が変わるということではない。今回の場合は
// 0 -> x-accel
// 1 -> y-accel
// 2 -> z-accel
// 3 -> x-rate
// 4 -> y-rate
//で、動作を確認してみた。
//~
}}