2010年2月12日金曜日

小型で安価な回転角を検出する装置

ホビーでロボット系の工作をする際に,モーターの回転角や回転速度の検出が良く問題になると思います.RCサーボがこの手の工作で頻繁に使われている理由として,角度の検出部を自分で工作することが困難なことがあげられると思うのですがどうでしょう?

アナログ型光学式ロータリーエンコーダ


そこでここでは,アナログ型の光学式ロータリーエンコーダによって角度を検出する方法を提案してみます.通常光学式のロータリーエンコーダにおいては下の図のようなスリットを持った回転円板を用います.
このような円板は手作りすることが困難であり,高精度の物は高価になります.また,絶対値型のエンコーダはスリットやセンサーの数が多く,自作は非常に困難で大型になってしまいます.そこで,ここでは以下のようなグレースケールを持つ円板
を用いて,以下の図のように配置されたセンサーを用いることを考えます.


グレースケールを持つ円板はプリンタで簡単に作成できますし,センサの組み付け精度などもそれほど必要とされないのでこのような装置は比較的簡単に作成することが出来ます.

試作機

次に実際に試作品を作ってみた結果を示します.
円板はプリンタで印刷したもので,後ろの田宮の小型ギアボックスは回転軸の固定&テスト用です.


センサー部は適当に買ってきた反射型のフォトインタラプタを2個,回転軸について90度対称な位置に配置しただけです.


組み合わせると下の写真のような感じになります.


動作テストの様子です.


動画で使っている円板は黒い部分の半径を変化させてグラデーション円板の代用とした物です.透過型のフォトインタラプタを用いる場合やグレーが使えない場合に有用なのではないかと思います.
いい加減な工作ですが,それらしい波形が出ていることが確認できます.もう少し真面目に作れば,実用的な角度センサになるのではないでしょうか.

2010年2月8日月曜日

『英辞郎 on the WEB』整列・頻度集計

ALCが『英辞郎 on the WEB』整列・頻度集計というのを始めてたんですね.

実は昔,与えられた単語の前後に来る単語の統計を表示するアプリをこっそり作ってたりします.
画面はこんな感じ.

熟語だと

こちらはwikipedia英語版のデータを突っ込んでいます.
そこそこおもしろかったので公開しようかとも思ったのですが,
なにぶんデータが大きすぎて手頃なサーバーがなかったので公開するに至りませんでした.

需要がありそうならもう一度作って公開しようかなぁ・・・
結局置き場所が問題になるわけですが.

2010年2月6日土曜日

MATLAB が出力する図を PowerPoint 向けに自動調節

MATLAB で描いた図やグラフを PowerPoint に貼り付けるときに
一番簡単な方法はFigure のメニューから [編集]-[Figureのコピー] を使って
PowerPoint 上でペーストすることだと思います.

しかし, MATLAB がデフォルト設定で作成するグラフには
以下のような問題があります.

  • プレゼン用には字が小さい
  • グリッドが出ない
    • 無いよりある方が無難だと思うのだけど・・・
  • コピー&ペースト時にサイズが変わる
    • グリッドまで変えられるので意図しない結果になることが多いですね
  • 線が見にくい
    • 細い&プロジェクターで見辛い色が使われます

丁寧に設定すればこれらの問題を解決することは可能ですが,
そこそこ面倒ですし,ミーティングなどで MATLAB による実演を行う際に
これらを逐一設定するのはテンポを損ねます.

というわけで,これらの設定を自動化するプログラムを作りました.
このプログラムは MATLAB のデフォルト設定を書き換えて,
以降に描かれるグラフをプレゼン用に見やすくします.

いまのところ MATLAB を再起動する以外に元に戻す方法はありません.

ちなみに得られるグラフは以下のようになります.

使用前


使用後
コード
function [] = prettify_figure_presen()
%PRETTIFY_FIGURE_PRESEN グラフのフォントをプレゼン用に最適化
% この関数を呼び出すと
% 以降に描かれるプロットの見た目がプレゼン向けになります.
% 元に戻すにはMATLABを再起動するしかないです.
%
% ※ ボード線図は別口(prettify_bodeplot_presen参照)
%    なので注意してください.


%% フォント
set(0,'defaultAxesFontSize',20);
set(0,'defaultAxesFontName','メイリオ');
set(0,'defaultAxesFontWeight','demi'); % normal/demi/bold
set(0,'defaultTextFontSize',20);
set(0,'defaultTextFontName','メイリオ');
set(0,'defaultTextFontWeight','demi');

%% 線の幅
set(0,'defaultAxesLineWidth', 1.5); % 軸
set(0,'defaultLineLineWidth', 2); % プロット

%% プロットの色
clorder = ...
    [  0,   0, 255; % 青
       0, 128,   0; % 緑
     255,   0,   0; % 赤
     204,   8, 204; % 紫
     222, 125,   0; % 茶
       0,  51, 153; % 紺 (青と区別しづらい,注意!)
      64,  64,  64];% 濃い灰色  
set(0,'defaultAxesColorOrder',clorder/255);

%% 最初からgrid on & box on
set(0,'DefaultAxesXGrid','on');
set(0,'DefaultAxesYGrid','on');
set(0,'DefaultAxesBox','on');

%% コピペ時にサイズを変更しない
set(0,'DefaultFigurePaperPositionMode','auto');

end

2010/2/17 追記
17行目の間違いを修正しました&reset(0)で設定を初期化できるそうです.
atsu-kan さんありがとうございます.