[[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に設定 ATD1 2 <-ピン19をアナログ入力AD1に設定 ATD2 2 <-ピン18をアナログ入力AD2に設定 *** 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 //で、動作を確認してみた。 //~ }}