arduinoの最近のブログ記事

さて、こんばんわ。

今日は頼まれことでmax2arduinoを久しぶりにぶり返してみる。
内容はサーボ動くんかい!

という感じです。

早速やってみよう!と思った矢先。

あ、Arduinoソフトウェアが新しくなってる!!というかpackageが

UNO!

Arduino UNO!

A UNO!

という事で買いました。
いいですね。昔のタバコみたいなこのパッケージ、よしよし。

ArduinoUNO.jpg


じゃあ、やろうじゃないの。

まず情報によると、

ここから maxuino-zipを手に入れます。

そしてupしてなかったarduino-0021を手に入れインストール。

じゃあやりますか。


まずこれを使うには StandardFirmata をarduinoの中にいれて、(arduinoからfile/examples/firmata/standardFirmata)
サーボつけて起動!

maxuino07はUIもわかりやすくて比較的簡単に出来そう!!


って思っていたら。。。

arduino UNOではどうもStandardFirmataのverが2.2じゃないといけないぽいらしい。。。そしてそんなのが出てない。。


こまった。

どうしたよ。。

まぁ


前のArduinoで試してみっか!と


できたよ!


わーい!ギャンギャン動いておりますがな!

maxuino007.png



はい、おわり!




使用するもの:

    *
      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で描いた図形も傾く。

max to arduino

| コメント(0) | トラックバック(0)
環境 MacOS10.4.11 1.5GhzPPC http://www.arduino.cc/playground/Interfacing/MaxMSP のサイトより SimpleMessageSystemというファイルをダウンロードする。 http://www.arduino.cc/playground/uploads/Code/SimpleMessageSystem.zi 解凍後、フォルダごと app \ arduino \ hardware \ libraries \ SimpleMessageSystem となるように入れる。 fabomax01.jpg その後、arduinoを起動。 File > examples に SimpleMessageSystemがあるかを確認し、 実行して出てきたプログラムをarduinoに書き込み 以下プログラム
#include 

void setup()
{
    200 with the USB version, that's 12x faster
  Serial.begin(9600);
}

void loop()
{

  if (messageBuild() > 0) {
    switch (messageGetChar()) {
    case 'r':
      readpins();
      break;
    case 'w':
      writepin();
    }

  }

}

void readpins(){

  switch (messageGetChar()) {

    case 'd':

    messageSendChar('d');
    for (char i=2;i<14;i++) {
      messageSendInt(digitalRead(i));
    }
    messageEnd();
    break;

  case 'a':

    messageSendChar('a'); 
    for (char i=0;i<6;i++) {
      messageSendInt(analogRead(i));
    }
    messageEnd();

  }

}

void writepin() {

  int pin;
  int state;

  switch (messageGetChar()) {

    case 'a' :

    pin = messageGetInt();
    state = messageGetInt();
    pinMode(pin, OUTPUT);
    analogWrite(pin, state);
    break; 


  case 'd' :

    pin = messageGetInt(); 
    state = messageGetInt();
    pinMode(pin,OUTPUT); 
    digitalWrite(pin,state);
   

  }

}

書き込みに成功したら、 libraries \ SimpleMessageSystem\MaxMspExample\SimpleMessageSystem_analogin.mxb を開く。

fabomax02.jpg

maxwindow にエラーが表示されている場合、 printボタンを押しserialを確認。

fabomax03.jpg オブジェクト内のserialを書き換える。 fabomax04.jpg これでmax上のトグルからpin13のLEDが制御できれば成功。 *これでarduinoが認識しない場合、arudinoのプッシュスイッチを押す事で認識するはず。 〜改良パッチ編〜 先ほど使用したmaxのパッチの改良版が以下からダウンロードできる。 http://blog.soundsorange.net/category/gear-hardware/ ダウンロードしたフォルダ内のファイルを libraries \ SimpleMessageSystem\MaxMspExample 内に上書きして保存 SimpleMessageSystem.mxbを開き、先程の要領でserialを書き換える。 *なおサンプルファイルのpin13を光らせるオブジェクトの書き方が間違っているので修正。 fabomax05.jpg fabomax06.jpg

この改良パッチによってdigtal inにも対応できるようになった。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちarduinoカテゴリに属しているものが含まれています。

次のカテゴリはlogです。

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