二足歩行ロボットコミュニティサイト

【サイトの使い方】  【サイトマップ】  【お問い合わせ】 
ロボット動画  |   ロボット写真  |   BBS  |   ダウンロード  |   イベント予定  |   スタッフ日記  |   リンク  |  
ログイン パスワード    新規登録   パスワード紛失  

 

第20回 デジタル入出力拡張基板を使う

最近自分の中でのボトムズ熱が過熱している今日この頃。来月のOVAレンタル開始と新シリーズが楽しみです。

さて、今回はデジタル入出力を行う拡張ボード「VS-IX007」を使ってみます。
デジタル入出力とは、いわゆるスイッチのようなものです。出力できる信号も取得できる値も、0か1か、即ちOFFかONかのみです。
そのため、スイッチを接続してそのON/OFFの状態を取得したり、LEDをつないで点灯のON/OFFを制御したりするのに主に使います。

インターフェースデバイスの作成

さて、今回も拡張ボードにスイッチやLEDなどのインターフェースデバイスを接続する必要があります。
VS-IX007はLED拡張ボードのように16chの入出力を持っており、基板上のピン配置もほとんど同じです。
せっかくなのでLED拡張ボードの時の説明をおさらいしてみましょう。

アナログ入力拡張ボードの

写真
写真上側が0〜7ch(CN2)、下側が8〜16ch(CN3)。信号線は入力・出力のどちらを接続しても良い
電源の極性に気をつけて配線する

CN2-1〜CN2-8、CN3-1〜CN3-8には、入出力のどちらをつなげても問題ありません。また、CN2-9,CN2-10,CN3-9,CN3-10にはデバイスの電源線 を接続します。
何度も言うように配線の極性を間違えないように注意してください(+極にはCN2-9及びCN3-9、-極にはCN2-10及びCN3-10をそれぞれ接続し てください)。
また+極と-極の線は、CN2-9とCN2-10、CN3-9とCN3-10という組み合わせにしてください。

ここでは、以下のようなインターフェースデバイスを作りました。一方の8chを出力(LED)に、もう一方の8chを入力(スイッチ)に割り振 っています。

インターフェースデバイス
0〜7がスイッチ(デジタル入力)、8〜15がLED(デジタル出力)

インターフェースデバイスができたらVS-IX007と接続し、ついでにCPUボードとも接続しましょう。
このとき、I2Cバスアドレス(ディップスイッチ)の設定まであわせて行います。
ディップスイッチの設定は前回詳しく説明 していますね。おさらいしましょう。
VS-IX007のI2Cバスアドレスはデフォルトで「0x40」なので、ティップスイッチはSW1-2〜SW1-4をOFFに設定してください。

ディップスイッチの設定写

真
SW1-2〜SW1-4をOFFに設定する

RobovieMakerの設定

続いて、RobovieMakerから設定を行います。
前回までと同様、RobovieMakerから通信を開始し、メニューの「プロジェクトの設定」→「CPUの設定」をクリックしてダイアログを開いて 、「拡張機器」のタブをクリックして「追加」ボタンをクリックします。
クリックすると更にダイアログが開くので、続いて「デバイスの種類」に「VS-IX007(デジタル入出力)」を選択して「デバイスの詳細設定 」をクリックしてください。
クリックすると以下のダイアログが開きます。

デジタル入出力拡張ボード

の詳細設定ダイアログ
デジタル入出力拡張ボードの詳細設定ダイアログ

ダイアログでは、おなじみのI2Cバスアドレス、ステータス取得変数のほかに、各chを入力と出力のどちらで使うか、また、入力や出力のパ ラメータとして使用する変数の番号を設定します。
デフォルトの状態では、入出力については全て「Input」=入力で使用する設定になっています。
今回は8〜15chをデジタル出力で使うことにします。ダイアログより、8〜15chの「Outputで使用」に全てチェックを入れます。
設定できたら「適用」ボタンを押してください。

8〜15chをアウトプットに設

定
8〜15chの「Outputで使用」に全てチェックを入れる

設定を適用すると、「現在のInput値」の項目に、0〜7ch及び8〜15chから取得した現在のデジタル入力の値を表示します。
試しにインターフェースデバイスのスイッチを押してみると、数字が変化します。
この数値表記は、16進数と2進数が並んでいます。2桁の16進数を2進数表記にすると8桁(=8ビット)になるので、ボタン一つを押すとどこ かの桁(=ビット)が「0」か「1」に切り替わります。
インターフェースデバイスから取得したデジタル入力情報は、「Inputの出力変数」で設定された変数に逐次記録されます。
デフォルトの設定では、この変数は0〜7chが136、8〜15が137になっています。
一方、今回の8〜15chのようなデジタル出力のchの場合、その信号は「Outputの参照変数」で設定された変数を読み取って行なわれます。
デフォルトの設定では、この変数は0〜7chが39、8〜15が40になっています。
これらはいずれもポーズスライダの値ですね。

「Outputの参照変数」と

「Inputの出力変数」
各chのデジタル出力に使用される変数は「Outputの参照変数」で、デジタル入力に使用される変数は「Inputの出力変数」で設定する。
設定は0〜7ch、及び8〜15chと、8ch単位で行なう

ちなみに、現在の設定では、変数の各ビットが0の場合にLEDが点灯し、1の場合にLEDが消灯します。
これを、0でLEDが消灯し1でLEDが点灯するという具合に、直感的にわかりやすくしたいと思います。
8〜15chの項目中の「数値反転有効」にチェックを入れると、出力される数値が反転し、デバイスに対し変数が0の時に1を、1の時に0を送信 するようになるので、上記の設定が可能になります。
では、8〜15chの項目中の「数値反転有効」に全てチェックを入れます。

「数値反転有効」
「数値反転有効」にチェックを入れると、チェックしたchの出力信号や入力信号を反転する

「数値反転有効」の設定はデジタル入力にも有効です。この場合、取得したデジタル入力の値が反転されて変数に記録されます。
設定できたら「適用」ボタンを押してください。

操作マップにスイッチの入力を使う

さて、せっかくスイッチをつなげたので、スイッチを押してロボットに何かアクションをさせたいと思います。
スイッチの入力は、操作マップでも設定可能なので、早速設定してみましょう。

操作マップの作成ダイアログを開いたら、「アナログ入力」の項目に注目してください。
アナログ入力の使用方法は前回などで説明しましたが、CPUボードの変数の値に応じてロボットに任意のモーションを再生させることができ る機能です。
前回までの説明では、モーション発動の条件に「閾値以上」「閾値以下」のどちらかを使用しましたが、デジタル入力の場合は「変数=設定 値」を使用します。

アナログ入力の条件選択を

「変数=設定値」に設定
アナログ入力の条件選択を「変数=設定値」に設定する

それでは、任意のアナログ入力の参照変数を136(0〜7chのデジタル入力変数)、条件選択を「変数=設定値」に設定して、条件詳細の「設 定」ボタンをクリックしてください。
ボタンをクリックすると以下のダイアログを表示します。

「変数=設定値」の条件詳細

設定ダイアログ
「変数=設定値」の条件詳細設定ダイアログ
「変数**の現在値」に現在のデジタル入力の状態が表示される

ダイアログ上部の「(竸**の現在値」には、現在の変数の値が表示されます。
デジタル入力は、信号がOFF(スイッチがOFF)のときは1、信号がON(スイッチがON)のときは0が返ってきます。
試しにスイッチを押すとダイアログに表示されている変数の値が変わります。
ちなみに、「x」と「o」の羅列は二進数表記を置き換えたもので、「x」が0、「o」が1に相当します。

「変数=設定値」の設定では、変数の値が任意の値と同じになった時にモーションを発動します。
ただ、任意のbitにマスクをかける機能があります。
「有効ビット」の項目より、8chあるデジタル入力のうち使用するchだけを選んで使うことができます。
また、「変数=設定値」の場合は、発動条件として設定できる数値が他の条件のような16bitではなく8bitになります。
それでは、まず「有効ビット」の項目で、使用するchのbitのみにチェックを入れてください。

使用するビットに「有効ビ

ット」のチェックを入れる
使用するビットに「有効ビット」のチェックを入れる
「有効ビット」に設定したbitのみ「有効ビットのみ抽出」の値に変化が現れる

有効ビットの設定を行なうと、ダイアログ上部の「有効ビットのみ抽出」の表示値にも変化が現れます。
先ほどはボタンを押しても何も表示が変わりませんでしたが、有効ビットを設定すると、チェックを入れたビットの状態のみ表示に反映さ れるようになります。

次に、実際のモーション発動値を設定します。
「モーション発動値の設定」の項目で、ビットごとのモーション発動値を設定します。
ここで「xに設定」にチェックを入れるとデジタル入力が0の場合を、「oに設定」にチェックを入れるとデジタル入力が1の場合をモーショ ン発動値とします。
例えば、4,6,7bitを有効ビットにした上で、「モーション発動値の設定」を、4,6を「xに設定」に、7を「oに設定」にすると0〜7chの場合 は4,6chの信号がON(x)且つ7chの信号がOFF(o)の場合がモーション発動条件となります。
他のbitは「有効ビット」の設定でチェックを入れない限り無視されるので、他のボタンを押していようがいまいが、4,6,7のボタンの状態 が上記である限りモーションが発動します。

「有効ビット」に設定した

bitのみ「有効ビットのみ抽出」の値に変化が現れる
「モーション発動値の設定」で、モーションを発動するときの各bitの状態を設定する

モーション発動値の設定がすんだら、ダイアログ上部の「有効ビットのみ抽出」とその隣の「モーション発動値」を見てください。
ここで、先ほどの「モーション発動値の設定」の状態(4,6chのスイッチを押し、7chのスイッチを離す)と、「モーション発動値」の表示 値と同じになります。
ロボットをコントローラで操作している時に、デジタル入力でこの状態を入力すれば、モーションが発動します。

散々ややこしいことを書きましたが、つまりはダイアログの「有効ビットのみ抽出」と「モーション発動値」の値が同じになればモーショ ンを発動する、という原則を覚えておけば大丈夫です。

「有効ビットのみ抽出」と

「モーション発動値」の値が一致した時にモーションを発動する
「有効ビットのみ抽出」と「モーション発動値」の値が一致した時にモーションを発動する

設定ができたら操作マップをロボットに書き込み、ロボットのモード切替スイッチを設定して操作マップで立ち上げ、デジタル入力で前述 の状態にスイッチを押してみてください。

ポーズスライダでデジタル出力を制御する

さて、今度はデジタル出力をポーズスライダで操作してみましょう。
デジタル出力の変数は39と40に設定されているので、使用するchの側のポーズスライダの「スライダ有効」フラグにチェックを入れます。
今回は8〜15chがデジタル出力なので40番のポーズスライダを有効にします。
ポーズスライダを有効にしたら、適当にツマミを操作してください。ポーズスライダの値に応じてデジタル出力の信号が変化し、LEDが点滅 します。

デジタル出力をポーズスライダで制御する方法はLED拡張ボードの制御のそれと似ています。
ただ、LED拡張ボードは2bitで1chのLEDを操作するのに対し、デジタル出力は1bitで1chを制御します。
そのため、4桁の16進数のうち下2桁のみが信号の値として使われます。
また、LED拡張ボードのようにPWM信号を出力する機能は無いので、LEDは信号の値に応じて常に点灯/点滅のどちらかの状態になります。

ポーズスライダの値に対し

てLEDが点滅する
ポーズスライダの値に対してLEDが点滅する

デジタル出力をポーズスライダ以外で操作する

現在の設定ではデジタル出力の参照変数がポーズスライダになっていますが、この部分を変更すれば当然ポーズスライダ以外の変数でもデ ジタル出力を操作できます。
例えば、VS-IX007の詳細設定ダイアログより、8〜15のデジタル出力の「Outputの参照変数」の設定を、0〜7chの「Inputの出力変数」であ る136に設定します。
すると、デジタル入力のボタンを押すことでデジタル出力の信号を切り替える(LEDを点滅させる)ことができます。
また、ゲームパッドのボタン入力を格納する241,242番の変数を「Outputの参照変数」に設定すると、ゲームパッドのボタンを押すことでデ ジタル出力の信号を切り替える(LEDを点滅させる)ことができます。

次回予告

拡張ボード関連の解説も一旦今回で終了です。
次回は、CPUボードのコアな設定について説明したいと思います。


前のページ
第19回 アナログ入力拡張ボードを使用する
コンテンツのトップ 次のページ
第21回 CPUボードの詳細設定について


検索
Loading
メインメニュー