2011/09/06(火)RSC-U485のまがい物をつくる

2011/09/06 03:01 電子工作importnucho
RSC-U485がubuntuで認識されなかったため、FT232RLとLTC485CN8でまがいものを作った記録です。

2012/1/13追記
この記事のコメントで,以下のようにすることでUbuntuでもRSC-U485が認識することをまえださんから教えて頂きました.
ありがとうございます!
Ubuntu 9.10 では RS-U485 を
# modprobe ftdi_sio vendor=0x1115 product=0x0008
で認識しました.

回路

rsu405_modoki
FT232RLはデフォルトだとCBUS2がTXDENとして機能しているそうなので、CBUS2をREとDEに接続することでRS485通信を行えます。

見た目

RIMG0038
秋月のFT232RLモジュールの下にLTC485CN8が置いてあります。
ついでにハブとしての回路も持たせてみてます。ちょっとスイッチが小さいのが心配ですが。。

これで一応WindowsでもLinuxからでもRS405CBが制御できるようになりました。

パクリ元

FT232RLでRS-485通信(爪車さん)

2011/09/04(日)ArduinoでRS485通信をしてみる

2011/09/04 15:36 Arduinoimportnucho
知り合いの人から「マイコンからRS485通信がしたいぜうぎぎ」と要望があったのが発端となり、LTC485CN8とArduinoでRS405CBを動かしてみたレポートです.

LTC485CN8を使ってみる

回路図

LTC485CN8_test

説明

LTC485CN8はDE,RE端子の状態によって送信、受信のモードを切り替えて使います。
つまりマイコンは,DE,REに直結した端子をHIGHにしてから送信、LOWにしてから受信というように処理を行えばいいわけですね。
あとはまぁ別に普通のシリアル通信です。

余談となってしまうんですが,RS405CBの設定で返信ディレイ時間が用意されている理由は、送受信の切り替えに時間がかかるマイコンを使ったときに調整するためなのかなぁと思ってます。
RS405CBはFutabaのロボット用サーボの開発成果を全て盛り込んだという触れ込みだけあって、色々気が使われてる印象がありますね。

プログラムはちょっと長いので続きを読むに置いときました。

参考という名のパクリ元

RS-485の接続(爪車さん)
FT232RLでRS-485通信(爪車さん)
爪車さんはシミュレータを使いこなしつつ二足歩行ロボをやってらっしゃる凄い方です。

続きを読む

2011/08/28(日)PCからRS405CB/RS406CBを制御する

2011/08/28 13:08 Programimportnucho
RS405CBRS406CBはfutabaから発売されているシリアルサーボです.
いろんなパラメータがあって安全装置も入っているこの素敵サーボをJavaとPythonで制御するライブラリを書いたので,サーボの使い方と一緒に置いておきます.

配線

RS405CB
RS405CB/RS406CB取扱説明書より
数珠繋ぎは6つまでということに注意です.

サーボにIDを振る

このサーボはサーボ同士を繋げていって一本の配線で6つのサーボまでを制御することができます.
そのためにはそれぞれのサーボにIDを付けてあげなければいけないので,その作業を行います.

まずはこちらのサンプルプログラムからVB版をダウンロードします.
ソフトを起動して,電池や安定化電源の電源を入れた後,以下の手順を実行します.
RS405CB_VB1
  1. RSC-U485のささっているポートを選ぶ(コントロールパネル>システム>デバイスマネージャで確認できる)
  2. 画像2のボタンを押す(自動で設定が読み込まれるはず)
  3. 適当なサーボIDを選択し,setボタンを押す
  4. 画像4のボタンを押し,書き込みが終了した旨のメッセージを待つ
以上です.
設定やパラメータなどもここから弄れます.

プログラム

試したい盛りでgithubなんぞ使ってますが,いまひとつ操作に慣れてない感じですね.
RSC_U485_Java
RSC_U485_Python

あらかじめ,Java版の場合はrxtxを,Python版の場合はpyserialをインストールして置いてください.
クラスの使い方はコードに入ってるドキュメントを見れば大体わかると信じてます.
Java版だとこういった感じで使用します.
	public static void main(String[] args) {
		RSC_U485 servo = new RSC_U485("COM17", 115200);

		System.out.println("ID1のサーボのトルクをオン");
		servo.torque(1, true);

		System.out.println("最高速度で100度の位置へ回転");
		servo.move(1, 1000, 0);
		try {
			Thread.sleep(500);//しばし待つ
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("現在角度:"+servo.getAngle(1));
		
		System.out.println("1秒かけて0度の位置へ");
		servo.move(1, 0, 100);
		
		try {
			Thread.sleep(1000);//しばし待つ
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("現在角度:"+servo.getAngle(1));
		
	}
ちなみにJavaとPythonで書いたのはWindowsからもUbuntuからも制御したかったのが理由なのですが,RSC-U485がLinuxで認識せずしょんぼりです.
FT232RLとLTC485CN8で同等っぽいのが作れるみたいなので作らないとなぁ….

UbuntuでRSC-U485を認識させる

2012/1/13追記
この記事のコメントで,以下のようにすることでUbuntuでもRSC-U485が認識することをまえださんから教えていただきました.
ありがとうございます!
Ubuntu 9.10 では RS-U485 を
# modprobe ftdi_sio vendor=0x1115 product=0x0008
で認識しました.

資料

説明書
サンプルプログラム

2011/07/29(金)RTnoをmbedに移植した

2011/07/29 22:20 RTMimportnucho
現在は作者さまの方でmbedに対応していらっしゃるので,そちらを使用した方が良いと思われます.

RTnoはArduino上でRTコンポーネントを開発するためのライブラリです.
手軽なIOとしてRTコンポーネントを作ることができるのはとても良いのですが,如何せんArduinoだと気が利いた玩具くらいが限界だと感じるのでmbedに移植してみました.

移植とはいっても綺麗にクラス分けされていたので,作業としては通信周りとあとはちょこちょこくらいでさくっと終了です.

プログラム

元々のRTnoと同じくRTnoProxyを利用します.
ただ私の場合はインストーラ形式で提供されているRTnoProxyが動かなかったので,ソースからコンパイルしたものを使用しました.
勘違いで古いバージョンを使ってただけでした(・ω<)-☆

雛形

RTno_Template
雛形です.
これを色々と書き換えてRTコンポーネントにすることができるのです.

IO制御のサンプル

RTno_digitalInOut
ポート仕様
名称I/Oデータタイプ意味
ledINTimedLongSeqmbed上のLED制御
in0OUTTimedLongSeqp5~p10のポート入力を知る
out0OUTTimedLongSeqp15~p20のポート出力制御
使い方
大体想像通りの動きだと思うので,ここではledポートだけを使ってみます.
rtm-naming-serviceとRT System Builderはあらかじめ起動しているものとします.

rtc.conf内を
corba.nameservers:localhost
exec_cxt.periodic.rate:500.0
Test.RTnoProxy.config_file: RTnoProxy.conf
logger.enable:NO
RTnoProxy.conf内を
conf.default.comport:\\\\.\\COM34
conf.default.baudrate:115200
とします,COM番号など環境に依る部分は適宜書き換えてください.

そうしたら,RTnoProxyCompとDataPortTestCompを起動します.

digitalInOut1
RT System Builder上でRTnoProxyCompのledとDataPortTestCompのlongSeqOutを繋いで,どちらも状態をActiveにします.

digitalInOut2
次に画像のようにDataPortTestComp上で
L
4
1
0
1
0
と入力すると

IMG_20110729_204612
mbed上のLEDが光るという寸法です.
同じような感じでin0ポートでmbed上での入力が知れたり,out0ポートでmbed上のデジタル出力を制御できたりします.

モータ制御のサンプル

RTno_MotorControl
今度はエンコーダ付きモータであるRDO-29B54AふたつをSabertooth2X25で制御してみたサンプルです.
ポート仕様
名称I/Oデータタイプ意味
encorderOUTTimedLongSeqモータの現在のエンコーダ値を知る
positionINTimedLongSeqモータの入力値の位置まで動かす
回路図
RTno_MotorControl_schematic
読みにくくてすいません.
sabertooth2x25のDIPスイッチは2,3,5番をONにした状態です.
使い方
rtm-naming-serviceとRT System Builderはあらかじめ起動しているものとします.

rtc.conf内を
corba.nameservers:localhost
exec_cxt.periodic.rate:500.0
Test.RTnoProxy.config_file: RTnoProxy.conf
logger.enable:NO
RTnoProxy.conf内を
conf.default.comport:\\\\.\\COM34
conf.default.baudrate:115200
とします,COM番号など環境に依る部分は適宜書き換えてください.


RTnoProxyCompとDataPortTestCompを起動します.
MotorControl1
RT System Builder上でRTnoProxyCompのencoderとDataPortTestCompのlongSeqIn,RTnoProxyCompのpositionとDataPortTestCompのlongSeqOutを繋いで,どちらも状態をActiveにします.

MotorControl2
次に画像のようにDataPortTestComp上で
L
2
1000
-2000
と打ち込むとモータが動き出し,しばらくして目的の位置に達したら停止します.

MotorControl3
DataPortTestComp上でvと打ち込むと現在のエンコーダ値を見ることができて,大体指定の位置に動いたんだなということがわかります.
どうでしょう.これくらいのことができれば結構本格的なRTコンポーネントを使った機器まで作れそうな気がしますよね.

既知の問題点

  • ポートは配列しか扱えない
    • 手元のJapaninoでオリジナルのRTnoを使用してもそうなので,RTnoの元々の仕様なのかも……?違うようです.もう一回確認してみます
    • 解決してアップーデートしました.(8/1)
  • シリアル通信をバッファリングしてない
    • MODSERIALなどのバッファ付きの通信を使いたかったけど,うまいこと動かなかった.うーん.
    • 通信待ちでタイムアウトしない以外は問題なさそう…?
  • Arduino側の仕様に併せているためTimedDouble型を内部でfloat型として扱っている.精度が半分になって勿体無いなぁ.
    • RTnoProxyに手を入れるしか….

2011/06/30(木)Sable-2015に簡易バイス取り付けた

2011/06/30 05:57 CNCimportnucho
Sable-2015のスピンドルはアルミ程度ならば十分に削ることのできるパワーを持っているのですが,
テーブルに両面テープで固定するだけだと材料のバリによってテーブルから材料が剥がれてしまって,加工ができませんでした.

IMG_20110515_180708

そこで,今回はSable-2015の説明書にチラッと映っている超簡易なバイスを真似っこして作ってみます.

作るよ

Sable-2015のテーブルには40mm間隔でM5のネジ穴が開いているので,それを利用して作ることができます.
使った材料は25*25*30mmのアルミアングル材1本20*20*20mmのアルミチャンネル材2本M5*80mmのネジ2本です.

手順1

舌の写真のようにアルミアングル材の内側?とアルミチャンネル材の上面?に40mm間隔のM5穴をあけます.
IMG_20110416_192526

手順2

ここでいきなり写真を撮るのを忘れてしまっていているのですが,先ほど穴を開けたほうのアルミチャンネル材の両側面にM5の貫通穴をあけます.

手順3

そして最後に手付かずのアルミチャンネル材の片方の側面にもM5の穴をあけます.

手順4

あとはこんな感じで取り付ければ超簡易バイスの完成です.
IMG_20110515_180726

さいごに

手順がちょっと我ながら適当すぎるなあと思っているのですが,伝わりましたでしょうか.実は管理が悪くて学校に工具を取り上げられてしまったため写真を取り直すことができません….てへ
このバイスはネジで押さえつけるだけというとても簡単なものですが,t5のジュラルミンくらいまでなら加工できることを確認しています.
こんな簡単なものでも加工がスムーズにできるようになるため,必要な方は是非作ってみると良いのではないかなと思います.