2009年4月アーカイブ

使用するもの:

    *
      XBee 802.15.4
    *
      XBee Explorer USB
    *
      Arduino XBEE Shield
    *
      Arduino Diecimila
    *
      3軸加速度センサ「KXM52-1050
環境: Windows Vista 取り敢えず通信している様子が見たい

ここではArduino 3軸加速度センサで行った3軸加速度センサを用いたシリアル通信をXBeeで無線化する実験を行う。 準備 XBee 802.15.4 を XBee Explorer USBに取り付ける。こちらは受信側となる。 XBee Explorer USBにUSB(Mini-B)オスを接続する。 次に送信側のArduino XBEE Shield と Arduino Diecimila の準備 こちらは発信する側として使うので加速度センサをつなげる。 加速度センサのつなぎ方は↓の通り



KXM52_03.jpg



Arduino XBEE Shieldを取り付ける前に5VとGNDにジャンパーワイヤを差し込んでおく。 アナログ入力は0番ピンと1番ピンを使用した。 Arduino XBEE Shieldの2つのジャンパーピンは「USB」と印字してる方に付ける。 USBケーブルを接続し、プログラムを書き込む。

Arduinoのコード Arduino 3軸加速度センサで使ったプログラムをそのまま使用。
 void setup(){
  //シリアル通信開始
  Serial.begin(9600);
}

void loop(){
  //2つの値をアナログ入力で読み込む
  int x=analogRead(0);
  int y=analogRead(1);

  if(Serial.available()>0){
    //Xの値を出力
    Serial.print(x,DEC);
    //値と値の間に区切りを入れる
    Serial.print(",");
    //Yの値を改行して出力
    Serial.println(y,DEC);
    //合図用データを読み込みバッファを空にする
    Serial.read();
  }
}

書き込みが済んだらArduino XBEE Shieldの2つのジャンパーピンを「XBEE」と印字してる方に付け変える。 USBケーブルの接続を外し、電源アダプタをつなげる。 Processingのコード Arduino 3軸加速度センサで使用したコードとほぼ同じ。シリアルポートの指定を変更する。
import processing.serial.*;
Serial port;

//読み取り値の変数
int x,y;

//X軸-1G時316、+1G時756であることから
//X軸のオフセット値
int x_offset=536;
//X軸の振り幅(-1G〜0G又は0G〜+1G)
int x_range=220;

//Y軸-1G時271、+1G時711であることから
//Y軸のオフセット値
int y_offset=496;
//Y軸の振り幅(-1G〜0G又は0G〜+1G)
int y_range=220;

//角度(ラジアン)の変数
float radX,radY;
float filterX,filterY;

void setup(){
  //3D画面サイズ400×400
  size(400,400,P3D);
  //シリアルポート設定
  port = new Serial(this,"COM4",9600); //XBee Explorer USBと接続している方のシリアルポートを指定する。

  //念のためバッファを空にする
  port.clear();
  //「10」(ラインフィード)が来る度にserialEvent()作動
  port.bufferUntil(10);
 //図形塗り面なし(ワイヤフレーム描画)
  noFill();
}

void draw(){
  //背景色を白
  background(255);

  //3D立体の座標を画面中央、-100奥に配置
  translate(width/2,height/2,-100);

radX=2.0*x*PI/1023;
radY=2.0*y*PI/1023;
 
  //センサX軸の角度は3D立体のX軸の角度に対応
  //センサY軸の角度は3D立体のZ軸の角度に対応
  //角度をそれぞれ代入
  rotateX(-radX);
  rotateZ(radY);

  //直方体を描画
  box(200,30,100);
}

//シリアル通信
void serialEvent(Serial p){
  //文字列用変数を用意し、
  //「10」(ラインフィード)が来るまで読み込む
  String stringData=port.readStringUntil(10);

  //データが空でないとき
  if(stringData!=null){
    //改行記号を取り除く
    stringData=trim(stringData);
   //コンマで区切ってデータを分解、整数化
    int data[]=int(split(stringData,','));

   //データ数が2個のとき
    if(data.length==2){
      //データの値を代入
      x=data[0];
      y=data[1];
      //合図用データ送信
      port.write(65);
    }
  }
}

//マウスボタンを押して通信開始
void mousePressed(){
  //合図用データ送信
  port.write(65);
}

図形を左クリックするとXBee間の通信が始まる。 XBee Explorer USB のRSS が点灯、 TX と RX が点滅する。 発信側の加速度センサを傾けると受信側のXBeeで変数x,yの値を受取り、processingで描いた図形も傾く。

このアーカイブについて

このページには、2009年4月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年4月です。

次のアーカイブは2009年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。