TITLE:FDIII-HCで反射型フォトインタラプタを使う方法 #norelated #contents |CENTER:BGCOLOR(red):||c | :idea:|本ページの注意事項は各製品のナレッジベースやマニュアルに準拠します。&br;各製品のナレッジベースやマニュアルをお読み頂き、ご理解頂いた上で本ページを参考にしてください。| **概要 [#f76b5f5c] 反射型フォトインタラプタは、赤外線を反射しやすい対象物を検出するセンサで、黒地上の白線検出、ペーパエッジの検出などに利用されます。 反射型フォトインタラプタの出力は、白色検出時にLow(0V)、その他はHigh(入力電圧)という単純なものです。~ それに対しFDIII-HCは、Dynamixelプロトコルに則ったシリアル通信を行うことでDynamxielと通信を行っています。故に反射型フォトインタラプタをFDIII-HCに直接接続して運用することはできません。 そこで必要になるのがDynamixelConverterです。DynamixelConverterは、センサからのアナログ・デジタル信号を取り込み、FDIII-HCへDynamixelプロトコルに則ってその情報を渡す、云わば中継役です。 ここではDynamixelConverterを使って、反射型フォトインタラプタの信号をFDIII-HCへ取り込む方法を紹介します。 **用意するもの [#ia904fd4] -[[FDIII-HC]] -[[DynamixelConverter]] -[[反射型フォトインタラプタ]] -ケーブル -ハンダごて、ハンダ ケーブルには必要に応じてノイズの混入を防ぐためのシールド等の措置を講じてください。また、ケーブルが長過ぎると信号の劣化に繋がります。 FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。 **接続 [#zc590dd4] ***1個の反射型フォトインタラプタを接続する [#g793560c] 下図の様に、ケーブルを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) DynamixelケーブルでFDIII-HCとDynamixelConverterを接続します。 ***複数の反射型フォトインタラプタを接続する [#af62cf20] DynamxielConverterのCN2のVCCから供給できる電流は300mAです。~ それに対し、反射型フォトインタラプタは最大消費電流50mAです。つまり6個接続すると最大300mAになります。よって電源を供給できる台数は、反射型フォトインタラプタなら最大6個までということになります。 7個以上接続したい場合は、別途電源を用意し反射型フォトインタラプタに供給する必要があります。 この時、反射型フォトインタラプタに供給する電源の電圧は5Vでなければならないということに注意してください。~ 反射型フォトインタラプタのOUT端子から出力される電圧はHighのとき電源電圧と等しい値になります。~ DynamixelConverterのデジタル入力Highレベル電圧範囲は3~5.5Vです。反射型フォトインタラプタの電源電圧範囲が5~12Vだからといって12Vを入力すると、反射型フォトインタラプタのOUT端子から12Vが出力され、DynamixelConverterが破損してしまいます。 #ref(figure3.png) DynamxielConverterのCN2には、VCCやGND端子が1つしかありません。複数の反射型フォトインタラプタを接続する場合、1つの端子に何本ものケーブルをハンダ付けするのは危険です。~ 変換基板やコネクタ等を用意し、接続数分の端子を用意するなど工夫をしましょう。~ また、いつでも付け替えられるようにしておくとより便利です。 **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'' | となります。
(This host) = http://www.besttechnology.co.jp