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のジュラルミンくらいまでなら加工できることを確認しています.
こんな簡単なものでも加工がスムーズにできるようになるため,必要な方は是非作ってみると良いのではないかなと思います.

2011/01/19(水)XMDF形式の電子書籍を無理やり変換してkindleで読む

2011/01/19 08:08 kindleimportnucho
先日,Amazonの電子書籍リーダーであるkindle3が届いて喜んでいたのですが,日本の電子書籍に多いXMDF形式が読めないのが悔しくて,電子書籍自体の自炊という珍妙な作業を行ってみました.

おおまかな手順としては
  1. 電子書籍準備
  2. ブンコビューアでページを送りながら全てスクリーンショットをとる
  3. トリミングする
  4. pdfに変換
という無理やりで単純な作業です.以下にやった手順をざっとまとめてみます.

XMDF形式の電子文庫を準備する

当たり前ですが電子文庫を準備しましょう.
とりあえずどんな風に見えるかが確認したい場合は電子文庫パブリなどの立ち読み用のデータを使ってみると良いかと思います.

ブンコビューアでスクリーンショットを撮る

準備した電子書籍をブンコビューアで読み込み,スクリーンショットを撮っていきます.
人の手で何百頁もスクリーンショットを撮っていくのはただの拷問なので,UWSC Free版という自動化ソフトの手を借りました.
なお,kindleの画面に合わせるためブンコビューアは可能な限り小さいサイズ(800*600?)にし,右上の三角を押してメニューを隠した状態で作業を行いました.

dir = "c:\book\title"//保存フォルダ
page = 500//ページ数のパラメータ
wait=0.2//ウェイトタイム 0.2sec

while True
    ifb GETKEYSTATE(VK_UP)
	for count = 1 to page
       		id = GETID(GET_ACTIVE_WIN)
		SAVEIMG(dir+"/"+count, id, , , , , , 85)//圧縮率85%
		KBD(VK_LEFT)
		Sleep(wait) //ウェイトタイム
	next
    endif
    Sleep(0.2)
wend
参考に私が使ったスクリプトを置いておきます.
UWSCでこのスクリプトを実行した後,ブンコビューアをアクティブした状態でキーボードの上ボタンを押せば,ページ送りながらpageで指定したパラメータ分の枚数の画像がdirに指定したフォルダに保存されていく仕様です.
ウェイトタイムはPCのスペックと相談しながら調整してください.

トリミング

スクリーンショットを撮ったままだと,上や下のバーが邪魔なので,文字の部分だけを切り出します.

この作業にはVIXを使いました.
VIX上で画像を保存したフォルダまで移動し,Ctrl+Aなどで全体を選択します.
メニューから「画像」→「総合変換」としてウィンドウを開きます.
次にフォーマットのタブでJPEGを選択し,トリミング等のタブで「トリミングを行う」をチェックを入れ,今回は画像サイズを横795,縦484とし,切り出し位置をX2,Y55としました.この位置は環境によって調整が必要かもしれません.
後はOKを押せば一括でトリミングが行われるはずです.

pdfに変換する

画像をpdfに変換するためにChainLPを使用しました.
最初にインストールする際はiTextSharp.dllをChainLPを解凍したフォルダに置くことを忘れないようにしましょう.

使い方は見れば大体わかるかと思います.
右上の「入力」ボタンで画像を読み込み,pdfを指定して「出力」ボタンを押せばpdfにまとめられて出力してくれます.
著者,タイトル,その他はお好みで設定をしてください.

最後に

全体の作業時間は,本の長さにもよりますが薄い文庫本程度の文量だと10分程度でした.
著作権が何となく怖いのでどんな風に表示されてるかの写真は準備しませんでしたが,見栄えに関してはスクリーンショットで撮っているだけなので当たり前に結構滲みます.
また,ブンコビューアのサイズが800*600が最少なので横長でスクリーンショットを撮らねばらならず,縦書きの文章を読むのにちょっと違和感があります(^^;

それでも個人的にはまぁ普通に読める範囲だとは思いますので,ちょっと手間をかけてでもkindleで読みたいんだ!という奇特な方は是非試してみるといいのではないかと思います.

ネタ元

ブンコビューア(XDMF)形式の電子本を無理矢理ΣBookで読む
何とかしてKindleでもって本を読む