GSBee + Geta XBee + サーボモータ制御

/media/uploads/diasea/_scaled_bcbim6dcqaanyfu.jpg

菅工房さんやgalileo 7で購入できる、Wifiモジュール GSBeeと、mbedとXBeeを簡単に繋げられるGeta XBeeを使用して、Wifi経由でサーボモータを制御してみた。

1.Geta XBee

Geta XBeeは、TX p9, RX p10, CTS 無, RTS 無, RESET p21として、配線しています。また、RESETにつながるR5の抵抗のみ使用し、TX, RXは、そのままジャンパしている。

2.Wifiモジュール

Wifiモジュールに関しては、菅工房さんの低消費電流 Wi-FiモジュールMoo SoftさんのGainSpan WI-FI モジュールが、とても参考になる。

また、mbedのライブラリに関しては、下記に情報がある。

GainSpan Wi-Fi module library

まず、GSBeeをPCにつないで簡単に動作確認するためには、下記のような製品が必要。また、互換品もある。

XBeeエクスプローラUSBドングル XBeeエクスプローラUSB

動作確認のためにMoo SoftさんのGainSpan ユーティリティページにあるGainSpan.zipをダウンロードし、設定して実行を行った。

モジュールは、初期の通信速度は9600bpsとなっており、ユーティリティを使用し、下記のコマンドで通信速度を変更できる。

通信速度変更コマンド

ATB=115200

まず、第一に、下のプログラムを動作させた。

Import programGSwifiInterface_HelloWorld

GSwifiInterface (interface for GainSpan Wi-Fi GS1011 modules) see https://mbed.org/users/gsfan/notebook/GSwifiInterface/

Import libraryGSwifiInterface

GSwifiInterface library (interface for GainSpan Wi-Fi GS1011 modules) Please see https://mbed.org/users/gsfan/notebook/GSwifiInterface/

こちらのサンプルの通信速度設定は、9600bpsとなっているので、注意が必要。 下記のように修正することにより、通信速度の変更ができる。

/GSwifiInterface/GSwifi/GSwifi.h40行目あたり

#define CFG_DATA_SIZE 1000
 
//#define CFG_UART_BAUD 9600
#define CFG_UART_BAUD 115200
#define CFG_WREGDOMAIN "2" // 0:FCC, 1:ETSI, 2:TELEC

また、Wifiモジュールの動作を追うために、DEBUGログやINFOログの出し方は以下の通り。 下記を修正することにより、該当ログが出力されるようになる。

/GSwifiInterface/GSwifi/GSwifi.h45行目から60行目あたり

//Debug is disabled by default
//#if (0 && !defined(TARGET_LPC11U24))
#if (1 && !defined(TARGET_LPC11U24))
#define DBG(x, ...) std::printf("[GSwifi : DBG]" x "\r\n", ##__VA_ARGS__);
#define WARN(x, ...) std::printf("[GSwifi : WARN]" x "\r\n", ##__VA_ARGS__);
#define ERR(x, ...) std::printf("[GSwifi : ERR]" x "\r\n", ##__VA_ARGS__);
#else
#define DBG(x, ...)
#define WARN(x, ...)
#define ERR(x, ...)
#endif
 
//#if (0 && !defined(TARGET_LPC11U24))
#if (1 && !defined(TARGET_LPC11U24))
#define INFO(x, ...) printf("[GSwifi : INFO]\r\n"x"\r\n", ##__VA_ARGS__);
#else
#define INFO(x, ...)
#endif

★★★今回、Wifiのアクセスポイントに接続できない状態に陥り、菅工房の菅さんに上記の修正やデバッグ方法等、色々とアドバイス頂きました。ありがとうございました。★★★

2013/2/6現在、ファームウェアの更新を行おうと思い、GainSpan社のサイトに登録したのですが、ログインできない状態です。

2.サーボモータを制御するプログラム

ネットワーク経由でサーボモータを制御するプログラムは、以下のサイトを参考にさせて頂いた。

Robot No.8080のブログ: RCサーボモータをmbed+LAN+ProcessingでGUI制御(その1) 【mbed編】

Robot No.8080のブログ: RCサーボモータをmbed+LAN+ProcessingでGUI制御(その2) 【Processing編】

2-1.Processing用コード

Wifiを介してPCからサーボモータを制御しますが、その際Processingおよび、controlP5ライブラリを使用している。

参考サイトのプログラムは、3つのサーボモータ制御用だったので、2つのみ制御するよう、削除及び修正を行った。

/*
 * Servo Controler
 */

import controlP5.*;
import processing.net.*;

ControlP5 controlP5;
Client myClient;

int[] cmd1 = {255,0,4,0,128,128};
boolean init = false;

void setup() {
  size(200,290);
  
  Textlabel title;
  controlP5 = new ControlP5(this);

  title = controlP5.addTextlabel("title", "Servo Controller",10,10);
  title.setHeight(30);
  title.setWidth(400);
  title.setFont(ControlP5.synt24);

  // create sliders
  for (int i = 0 ; i < 2 ; i++ ) {
    // add a vertical slider
    controlP5.addSlider("servo" + i, 0, 255, 90, (50 + i * 80), 60, 10, 181);
    Slider ss = (Slider)controlP5.controller("servo" + i);
    ss.setNumberOfTickMarks(7);
    ss.setSliderMode(Slider.FLEXIBLE);
    ss.snapToTickMarks(false);
    ss.setValue(128);
  }
  myClient = new Client(this, "192.168.1.17", 10002); 
 init = true;
}

void draw() {
  background(100);
}

void servoCmd(int[] data)
{
  if(!init) return;
  for(int i = 0; i < data.length; i++)
  {
    myClient.write((byte)data[i]);
  }
}

void servo0(int value) {
  cmd1[4] = value;
  servoCmd(cmd1);
}
void servo1(int value) {
  cmd1[5] = value;
  servoCmd(cmd1);
}

有線で動作させた場合は次のようになります。

有線LANでの制御(Youtube)

2-2.mbed用コード

無線化するにあたり、GSwifiInterfaceライブラリがEthernetInterfaceライブラリと使い方が互換とのことだったので、下記を参考にした。

Ethernet Interface

但し、私の環境では、モジュールに固定IPを振る際に、うまく動作しなかった。 Wifiモジュールのプロファイルに設定してある、固定IPが呼び出されてしまう。

この現象は、XBeeエクスプローラUSBドングルを使用した際にも起きていたので、モジュールのファームウェアのバグかもしれない。

main.cpp

gs.init("192,168,1,17", "255,255,255,0", "192,168,1,254");

動作したプログラムはこちら。

Import programGSwifiInterface_HelloServo

Servo controll with gainspan GS1011M wifi module

成功した動画。PCからProcessingで作ったインタフェースを使って、操作している。

Wifi経由でのサーボモータ制御(Youtube)


Please log in to post comments.