2012年9月11日火曜日

Android から Bluetooth 経由で RS232 信号をやりとりする


構成は

Android
 |
[Bluetooth]
 |
Bluetooth モジュール (Bluetooth Module - BlueSMiRF Gold)
 |
[シリアル通信 (CMOS レベル) ]
 |
RS232CインタフェースIC (ADM 3202AN)
 |
[シリアル通信 (RS232 レベル) ]
 |
クロ

Bluetooth モジュール には Sparkfun の Bluetooth Modem - BlueSMiRF Gold (https://www.sparkfun.com/products/10268) を使いました。

これは、Bluetooth を使ってデータを送受信し、そのデータを RX/TX ピンの接続先にシリアル通信で中継するモジュールです。

Sparkfun には他にもいくつか Bluetooth モジュール製品があり、
https://www.sparkfun.com/search/results?term=bluetooth&what=products

以下の製品でも同じことができます。
Bluetooth Mate Gold : https://www.sparkfun.com/products/9358
Bluetooth Mate Silver : https://www.sparkfun.com/products/10393

Bluetooth Modem - BlueSMiRF Silver : https://www.sparkfun.com/products/10269
Bluetooth Modem - BlueSMiRF HID : https://www.sparkfun.com/products/10938


Bluetooth Modem のシリアル通信の信号レベルは 0 〜 Vcc (Vcc は Bluetooth Modem を動作させるための電圧 Operating Voltage) です。Bluetooth Modem -BlueSMiRF だと Operating Voltage は 3.3V から 6V です(製品ページに書いてあります)。


シリアル通信では、この範囲の電圧を 0 と 1 に割り当てることで論理データ(0, 1 のデータ)を送ります。

どの範囲の電圧を 0 と 1 に割り当てるかでいくつかの論理レベルがあります。
(Logic voltage levels - Wikipedia http://en.wikipedia.org/wiki/Logic_level#Logic_voltage_levels)

・CMOS レベル
 Low (0) : 0V 〜 VDD / 2
 High (1): VDD / 2 〜 VDD
 * VDD = 供給されてる電圧

・TTL レベル
 Low (0) : 0 V 〜 0.8V
 High (1) : 2V 〜 VCC
 * VCC = 5V ± 10%


一方、RS232 の電圧レベルはこれとは異なります。
http://en.wikipedia.org/wiki/RS-232#Voltage_levels
・RS232 レベル
 Low (0) : +3V 〜 +15V
 High (1) : -3V 〜 -15V
 *-3V 〜 +3V は無効な範囲

クロの入力は RS232 レベルの信号になっている必要があるため、Bluetooth モジュールのシリアル信号のレベルを変換する必要があります。

今回は RS232C インタフェース IC (DIP) ADM3202AN を使いました。
秋月電子通商でソケットとコンデンサ付きのキットが売っていたので、これを利用しました。
http://akizukidenshi.com/catalog/g/gI-03030/

ここで注意するのは接続するピンです。

BTモジュール              ADM3202AN                                  クロ
RX -------------------- ROUT  --- 変換 ---  RIN      -------------------- TX
TX --------------------    TIN  --- 変換 ---  TOUT  -------------------- RX

ADM3202AN は信号のレベルを変換するだけなので、RX と TX をクロスさせません。
(ちょっとここではまりました。。。)


ということで完成

背中にバッテリーとミニブレッドボードを載せました

ブレッドボードちっちゃいよね
http://akizukidenshi.com/catalog/g/gP-05157/
他に白と黒もあります

左の突き刺さってるのが BT モジュール、右の IC がレベル変換です


Android と Bluetooth モジュールとの通信は
Y.A.M の 雑記帳: Android Bluetooth でシリアル通信(SPP)する Fragment 書いた
にまとめました。




2012年9月6日木曜日

Processing からシリアル通信でクロを制御する


僕のプロセッシングユニット RPU-10 にあらかじめ登録しておいた動作(単一の動きのモーションと、複数の動きをまとめたシナリオがある)を、 RS232C を介して実行させることができるんだー。

RS232C を介して送るコマンドは双葉電子工業さんの RPU-10 のページにあるよ。
http://www.futaba.co.jp/robot/robot_processing_unit/index.html

構成はこんな感じ。

[PC] Processing → USB to RS232C 変換ケーブル → RS232C to ステレオジャック → GDog

キー入力が 0 〜 9 だったら、その番号のモーションを動作させるコマンドを送るようにしてみました!

import processing.serial.*; Serial port; Serial port2; void setup() { // List all the available serial ports: println(Serial.list()); //シリアルポートの設定 port = new Serial(this, "/dev/tty.usbserial-003013FA", 115200); port.clear(); } void draw() { } void keyPressed() { println("keycode : " + keyCode); if(keyCode > 47 && keyCode <58) { byte b = (byte)(keyCode - 48); sendCommand(b); } } void sendCommand(byte b) { byte data[] = { 0x50, 0x4d, b }; println(data); port.write(data); } void serialEvent(Serial p) { if(port.available() > 0){ int b = port.read(); println(b); } }


draw() メソッドを省略しちゃうと、キーを押しても keyPressed() が呼ばれなくなっちゃうので注意してね。


ステレオジャックの構造を知らなかったんだけど、勉強になりました。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%B3%E3%83%97%E3%83%A9%E3%82%B0

チップ(T)をシリアルの Tx、リング(R)をシリアルの Rx として使ってるみたい。
テスターを使えばどの線がチップか、リングかスリーブ(GND)かわかるしね。




2012年9月4日火曜日

Processing で Serial 通信するときのエラー対処


クロです。

僕は外部からシリアル通信でコマンドを送れるようになっているので、
ご主人様が Processing を使って Mac からコマンドを送ろうとしたんです。

そうしたらいくつかエラーが出ちゃって、、、
直すのがちょっと大変だったからメモしておくって。


1. Processing のインストール

http://processing.org/download/ から Mac OSX 用の 1.5.1 をダウンロードしました。


2. RXTX のライブラリの警告

Serial 通信をしたいので、

Sketch → Import Library... → Serial I/O



を選択して、シリアルポートの一覧をとりあえず表示してみました。

import processing.serial.*; Serial port; void setup() { // List all the available serial ports: println(Serial.list()); }

そうしたら

WARNING:  RXTX Version mismatch 
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2

という警告がでたんだけど、
これは無視しても問題ないみたい。

RXTX のライブラリのバージョンが異なるのが原因なんだって。


3. Invalid memory access of location

実際にポートを開いたら

import processing.serial.*; Serial port; void setup() { // List all the available serial ports: println(Serial.list()); //シリアルポートの設定 port = new Serial(this, "/dev/tty.usbserial-000013FD", 115200, 'N', 8, 1.0); }

Invalid memory access of location ...

というエラーがでて強制終了しちゃいました。

いろいろぐぐった結果、
http://projectsentrygun.freeforums.org/processing-code-on-mac-osx-t133.html
にある方法で

http://rxtx.qbang.org/wiki/index.php/Download から
rxtx-2.1-7-bins-r2.zip (もしくは rxtx-2.2pre2-bins.zip)を
ダウンロードして、中にはいってる

RXTXcomm.jar
librxtxSerial.jnilib(Mac_OS_Xフォルダの中にある)

 

/System/Library/Java/Extension/

にコピーしたらエラーはでなくなりました!

上記の Version mismatch の警告もでないようにしたかったので、rxtx-2.1.7 の方をダウンロードしました。たぶん 2.2 の方でも問題ないと思う。

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1280537327
のフォーラムだと http://rxtx.qbang.org/wiki/index.php/Download の RXTX だと
うまくいかなかったってあるけど、ちゃんと動いたよ(2010年の投稿だからかもね)。


Invalid memory access of location...
のエラーはでなくなったんだけど、、、


4.  gnu.io.PortInUseException : Unknown Application ...

今度は PortInUseException が出るようになっちゃいました、、、
またまたぐぐって
http://jgrasstechtips.blogspot.jp/2008/04/rxtx-and-funky-portinuseexception-on.html
にある方法で

ターミナルから

sudo mkdir /var/lock
sudo chmod 777 /var/lock

すれば直りました!



Processing の Serial ライブラリの Reference は
http://processing.org/reference/libraries/serial/Serial.html
だよ。




2012年9月3日月曜日

クロのポートレート

僕のポートレート組み立て中の写真です。
まずは頭から

胴体をつなげたよ
前足を作成
後ろ足も
胴体に合体!
プロセッシングユニットをのせて
カバーをつけて
おなかの下にバッテリーをいれて







完成!








2012年9月1日土曜日

はじめまして。クロです。

はじめまして。

ウフィカの新しいメンバーのクロです。

僕は秋葉原の RT Corporation さんから買われて
ウフィカにやってきました。

G-ROBOTS の G-DOG という製品です。

肘 x 2、肩 x 2、膝 x 2、股関節 x 2、腰
の全部で 9 つサーボモーターが付いてます。

組み立てた状態のものを買う事もできるけど
せっかくなら組み立ててみたいよね。

組み立て説明書は CD-ROM に入ってます。
(ノパソしか持ってなかったらちょっと困るね)

説明書は PDF なので Mac や Linux でも問題ないんだけど、
サーボモーターをキャリブレーションしたり、動きのパターンを
設定して動作をつくるソフトは Windows だけだから Mac ユーザーには
敷居が高いよね。
(Adobe AIR のソフトとかだといいのかな? ブラウザからポート叩けるように
なるといろいろ面白いんだけど、、、)

結構古い製品なんです。
対応OSは Windows XP だし、
パソコンとの通信は RS232C ポートなの。
最近のパソコンには付いてないよね。

だから、USBシリアルコンバーターとかを使って、
USB → RS232C → GDog
とすれば通信できるよ。

組み立てには6時間くらいかかったのかな。
頭 → 首 → 体 → 腰 → 足
という順番で組み立てるんだ。

ねじの種類がたくさんあって、袋に番号が振ってなかったから
説明書のねじがどれなのか確かめるのが大変だったみたい。

組み立て自体は説明書の通りに進めれば特に問題なく大丈夫だったって。



ウフィカのブログを担当することになったので
よろしくお願いします!