使用するもの:
*
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 の準備 こちらは発信する側として使うので加速度センサをつなげる。 加速度センサのつなぎ方は↓の通り
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で描いた図形も傾く。
