1: 2010-10-12 (火) 16:00:42 eid7gud ソース 2: 2010-10-12 (火) 18:51:01 eid7gud ソース
Line 1: Line 1:
TITLE:FDIII-HCで反射型フォトインタラプタを使う方法 TITLE:FDIII-HCで反射型フォトインタラプタを使う方法
 +#norelated
 +#contents
 +
 +|CENTER:BGCOLOR(red):||c
 +|  :idea:|本ページの注意事項は各製品のナレッジベースやマニュアルに準拠します。&br;各製品のナレッジベースやマニュアルをお読み頂き、ご理解頂いた上で本ページを参考にしてください。|
 +
 +
**概要 [#f76b5f5c] **概要 [#f76b5f5c]
-反射型フォトインタラプタは、赤外線を反射しやすい対象物を検出するセンサで、黒地上の白線検出、ペーパエッジの検出などに利用されます。+反射型フォトインタラプタは、赤外線を反射しやすい対象物を検出するセンサで、黒地上の白線検出、ペーパエッジの検出などに利用されます。
-反射型フォトインタラプタの出力は、白色検出時にLow(0V)、その他はHigh(入力電圧)という単純なものです。+
 +反射型フォトインタラプタの出力は、白色検出時にLow(0V)、その他はHigh(入力電圧)という単純なものです。~
それに対しFDIII-HCは、Dynamixelプロトコルに則ったシリアル通信を行うことでDynamxielと通信を行っています。故に反射型フォトインタラプタをFDIII-HCに直接接続して運用することはできません。 それに対しFDIII-HCは、Dynamixelプロトコルに則ったシリアル通信を行うことでDynamxielと通信を行っています。故に反射型フォトインタラプタをFDIII-HCに直接接続して運用することはできません。
-そこで必要になるのがDynamixelConverterです。DynamixelConverterは、センサからのアナログ入力・デジタル入力を取り込み、FDIII-HCへDynamixelプロトコルに則ってその情報を渡す中継役です。+そこで必要になるのがDynamixelConverterです。DynamixelConverterは、センサからのアナログ・デジタル信号を取り込み、FDIII-HCへDynamixelプロトコルに則ってその情報を渡す、云わば中継役です。 
 + 
 +ここではDynamixelConverterを使って、反射型フォトインタラプタの信号をFDIII-HCへ取り込む方法を紹介します。
**用意するもの [#ia904fd4] **用意するもの [#ia904fd4]
 +-[[FDIII-HC]]
 +-[[DynamixelConverter]]
 +-[[反射型フォトインタラプタ]]
 +-ケーブル
 +-ハンダごて、ハンダ
 +
 +ケーブルには必要に応じてノイズの混入を防ぐためのシールド等の措置を講じてください。また、ケーブルが長過ぎると信号の劣化に繋がります。
 +
 +FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。
 +
 +**接続 [#zc590dd4]
 +
 +DynamixelConverterと反射型フォトインタラプタを接続します。
 +
 +下図の様に、ケーブルをそれぞれの端子にハンダ付けします。~
 +
 +#ref(figure1.png)
 +
 +反射型フォトインタラプタのVCCにDynamxielConverterのCN2のPin1:VOUT(5V)を接続し、電源を供給します。これにより反射型フォトインタラプタのOUTから出力されるHigh時の電圧は5Vとなります。
 +
 +反射型フォトインタラプタのGNDとDynamxielConverterのCN2のPin10:GNDを接続します。
 +
 +反射型フォトインタラプタのOUTとDynamxielConverterのCN2のPin2:P1を接続します。勿論P2~P8でも構いません。
 +
 +#ref(figure2.png)
 +
 +DynamxielConverterのCN2には、VCCやGND端子が1つしかありません。複数の反射型フォトインタラプタを接続する場合、1つの端子に何本ものケーブルをハンダ付けするのは危険です。~
 +変換基板やコネクタ等を用意し、接続数分の端子を用意するなど工夫をしましょう。
 +また、いつでも付け替えられるようにしておくとより便利です。
 +
 +#ref(figure3.png)
 +
 +DynamixelケーブルでFDIII-HCとDynamixelConverterを接続します。
 +
 +**Modeを変更する [#ycd5aec4]
 +
 +Modeの設定は、運用時のプログラム内では設定しないことをお勧めします。
 +Modeを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。
 +
 +制限といっても何十万回という数ですので、普通に使用していれば制限を越えることはありません。
 +しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があるためです。
 +
 +DynamixelConverterの設定の変更にはDxpacket Configuratorを使用します。
 +基本的な使い方はDynamixel Configuratorと同じですのでそちらを参考にしてください。
 +
 +**プログラミング [#k2387ac0]
 +
 +ここではFDIII-HCのプログラムを作成するための準備や書き込み方法は省略します。
 +
 +DynamixelConverterのP1に接続した反射型フォトインタラプタの状態を取得し、それを表示するプログラムは以下のようになります。
 +
 + #include <fd.h>
 + #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();}
 +
 + void main (void) {
 +   uint8_t ReadData;  // アドレス42の値
 +   bool P1;          // アドレス42のビット0の値
 +
 +   fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4);
 +
 +   while (1) {
 +     fd_DXReadByteData (1, 42, &ReadData);
 +     P1 = (ReadData & (1 << 0) ) >> 0;
 +     fd_printf ("%d : %d\r", ReadData, P1);
 +     KEY_QUIT;
 +  }
 + }
 +
 +----
 +
 + fd_DXReadByteData (1, 42, &ReadData);
 +DynamixelConverter(ID=1)のDigital In(アドレス42)のデータをReadDataに代入しています。IDを変更した場合は適宜書き換えてください。
 +
 +----
 +
 + P1 = (ReadData & (1 << 0) ) >> 0;
 +Digital In(アドレス42)のデータからビット0の値だけを取り出しています。本来は「P1 = ReadData & 1;」だけで良いのですが、P2~P8の値を取得する場合を想定しこのように表記しています。
 +
 +それではP3に反射型フォトインタラプタを接続した場合を考えてみます。
 + P3 = (ReadData & (1 << 2) ) >> 2;
 +P3の値はReadDataのビット2です。ReadDataからビット2の値だけを取り出すには論理積(&)とビットシフト(<<又は>>)を使います。
 +
 +(1 << 2)は1を左に2ビットシフトさせた値です。2進数で書くと
 +
 +| ビットシフト前 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ''1'' |
 +| 2ビット左へシフト | 0 | 0 | 0 | 0 | 0 | ''1'' | 0 | 0 |
 +
 +となります。
 +論理積(&)の真理値表は以下になります。
 +| a | b | a & b |
 +| 0 | 0 | 0 |
 +| 0 | 1 | 0 |
 +| 1 | 0 | 0 |
 +| 1 | 1 | 1 |
 +つまりa,b両方1の時だけ1になります。
 +
 +この「1を2ビット左へシフトさせた値」とReadDataの論理積(&)を取ることで、ビット2だけを取り出します。
 +
 +| 適当なReadData | 1 | 0 | 1 | 1 | 0 | ''1'' | 0 | 1 |
 +| 1を2ビット左へシフトした値 | 0 | 0 | 0 | 0 | 0 | ''1'' | 0 | 0 |
 +| ビット2だけを取り出した値 | 0 | 0 | 0 | 0 | 0 | ''1'' | 0 | 0 |
 +あるいは
 +| 適当なReadData | 1 | 1 | 0 | 0 | 1 | ''0'' | 0 | 1 |
 +| 1を2ビット左へシフトした値 | 0 | 0 | 0 | 0 | 0 | ''1'' | 0 | 0 |
 +| ビット2だけを取り出した値 | 0 | 0 | 0 | 0 | 0 | ''0'' | 0 | 0 |
 +
 +となります。
 +
 +「ビット2だけを取り出した値」を右へ2ビットシフトすることで、ビット2だけの値を取り出すことができます。
 +
 +| ビット2だけを取り出した値 | 0 | 0 | 0 | 0 | 0 | ''1'' | 0 | 0 |
 +| 右へ2ビットシフトした値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ''1'' |
 +あるいは
 +| ビット2だけを取り出した値 | 0 | 0 | 0 | 0 | 0 | ''0'' | 0 | 0 |
 +| 右へ2ビットシフトした値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ''0'' |
 +となります。


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom