はじめに
このページでは、インタラクティブインターフェイスiIF−12でサーボを動かす方法について説明します。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。
※以下の情報は2010年3月現在のものです。ご注意ください。
iIF−12についてはこちらを参照願います。
開発環境について
このページのサンプルプログラムはMicrosoftのVisualC#2008(以降VC#と略す)で作られています。開発環境や、初めてのプログラミングについてはセンサの値を読み取るのページで紹介していますので、そちらを参照願います。
サーボの接続
iIF−12には12個のサーボポートがあります。サーボは専用のRu−12を使用してください。ケーブルの白側が基板の内側になるようにさしこみます。
サーボ駆動命令
命令フォーマットについてはiIF−12のページで説明しています。12個全部の位置を一度に指定する命令、個別のサーボを駆動する命令、サーボパルス停止(脱力になる)があります。
サーボへは、位置とスピードを指定します。
位置は0〜254の値で指定します。127が中心位置となります。
スピードは、現在位置から目的位置までに要する時間を設定します。
値1につき15mSecとなります。たとえば、今、中心の127の位置にあったとして、スピードを50、目的の位置を254にしたとします。命令を実行すると中心位置から右90度まで、50x15=750mSecかけてゆっくり回転します。
スピード1にすると最速になります。
尚、サーボの最大回転スピードは決まっていますのでそれよりも速くは回転しませんので注意してください。たとえば、0の位置から254の位置まで180度回転させる場合、スピードを1としても15mSecでは回りません。
全サーボ駆動命令の場合、スピードの値は1つです。つまり、各サーボがどの位置にあろうと、全部のサーボが停止する瞬間は同じになります。
プログラミング(デザイン)
では実際にプログラムを作ってみましょう。コンポーネントを使ってシリアル通信する方法は、センサーのところでやりましたが、ほとんどそれと同じです。今回はデータを送るだけなのでセンサーよりも簡単です。
まず、前回と同じようにWindowsFormのテンプレートでプロジェクトを作り、フォームを作ります。今回は、トラックバーに追従してサーボを動かすことにします。ということで、デフォルトで作られるForm1にTrackBarコンポーネントを貼り付けました。また、通信するのでSerialPortコンポーネントも貼り付けてあります(欄外で見えない)。
TrackBarコンポーネントは、トラックバーを動かすと、「トラックバーが変化した」 というイベントが発生しますので、そこでサーボにシリアル命令を送る記述を書きます。TrackBarのつまみを動かすと、その位置によってValueプロパティの値がかわります。
値の範囲はMaximumとMinimumで設定します。位置データは0〜254の値なので、Maximumに254、Mimimunを0にします。
範囲を変更すると、目盛りが変化すると思います。動作にはあまり影響は無いですが、目盛りをきれいにつけたい場合はTickFrequencyプロパティを調整します。上では32に設定していますので、値32ごとに目盛りが付けられます。
次にイベントの記述をします。イベント表示ボタンを押します。
TrackBarのイベント一覧が表示されますが、Scrollイベントがスライダを移動したときに発生するイベントです。横をダブルクリックしてコードを表示させます。
とりあえず、現状はなにも記述していないので、テンプレートで自動的に作られたままになっています。
プログラミング(コードの記述)
次にコードを書いていきます。
下記、四角でかこったところが追加記述した部分です。
<行19〜21>
コンストラクタ部で、SerialPortコンポーネントを設定してオープンしています。センサーのところで説明しているので詳しくは割愛します。
<行24>
起動時に、トラックバーがはじによっているとマズいか?とおもって、トラックバーの位置を中心にしています。別にここはなくても問題なし。
<行29〜38>
単純に、TrackBarコンポーネントのValueの値を位置として送信しています。ここもセンサーのところと同様です。
ということで、サーボを動かすプログラムが簡単に書けました。
動作確認
F5キーを押して、デバック実行した結果、意図したとおりにトラックバーのスライダにあわせてサーボが動きました。
最後に
実際のプログラム時には、データ送信部は別メソッド(関数)にすると思います。全サーボ駆動や、パルス停止なども同様に行えます。
2010年3月10日
|