[Dobot Magician] 2つのエアーポンプを同時に操作する方法

Dobot MagicianのI/Oインターフェースを利用して、2つのエアーポンプを同時に動作させる方法の解説を行います。より広範な作業への適用をお考えの方にとって、ご参考になれば幸いです。

1. やるべきこと

エアーポンプを2つ繋げる場合、

    • GP1, SW1に接続した1つ目のポンプ(A)
    • GP2, SW2に接続した2つ目のポンプ(B)

のそれぞれについて、ON/OFFの制御を記述する必要があります。

(単一の関数によって両方のポンプを一度に動かすことは[wc_highlight color=”yellow” class=””]できません[/wc_highlight])

 

2つのエアポンプを接続した様子

 

ポンプ(A)のON/OFFについては、従来通りの記述で制御可能です。

ポンプ(B)は、

GP2(EIO14)でエアーの方向(吸入/吐出)を指定し、

SW2(EIO17)でポンプのON/OFFを行う

ことで動かします。

2. 処理の流れ

次のような処理を例にとり、以降では2つのエアーポンプを制御する具体的な記述例を紹介いたします。

    1. 初期設定
    2. 2つのポンプをON
    3. (なんらかの処理)
    4. 2つのポンプをOFF

3. 各言語でのコード例

一連の処理部分をBlockly, PythonおよびC++で記述した例です。ご自身の環境に合わせてご参照ください。(なお、C++での実行にはDobotDLLが必要となります。)

 

[wc_tabgroup class=”” layout=”box”]

[wc_tab title=”Blockly”]

SuctionCupブロックでポンプ(A)を制御し、EIO17のON/OFFでポンプ(B)を制御します。処理を順に追っていくと、

1, 2つ目のブロックでポンプ(B)のEIOを設定

3つ目のブロックでポンプ(B)のエアーの方向を設定 (Value=1で吸入)

[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]

[wc_accordion_section title=”SetLevelOutputの挙動について”]

3つ目のブロックにあるSetLevelOutputでは、指定した値に応じてエアーポンプ動作時の振る舞いが変化します。具体的には

    • EIO14 = 0のとき、吐き出し
    • EIO14 = 1のとき、吸い込み

の動作を行います。今回は吸盤に吸い付ける動作を想定し、吸い込みを行うよう設定します。

[/wc_accordion_section]

[/wc_accordion]

4, 5つ目のブロックで各ポンプをON

7, 8つ目のブロックで各ポンプをOFF

のようになっています。

[/wc_tab]

[wc_tab title=”Python”]

  1  ##### set output ##### 
  2  dType.SetIOMultiplexingEx(api, 14, 1, 1)
  3  dType.SetIOMultiplexingEx(api, 17, 1, 1)
  4  
  5  ##### seting for pump B #####
  6  dType.SetIODOEx(api, 14, 1, 1) 
  7  
  8  ##### open pump A #####
  9  dType.SetEndEffectorSuctionCupEx(api, 1, 1)
 10  
 11  ##### open pump B #####
 12  dType.SetIODOEx(api, 17, 1, 1)
 13  
 14  
 15  dType.SetWAITCmdEx(api, 1000, 1) # wait for 1 sec.
 16  
 17  
 18  ##### close pump A #####
 19  dType.SetEndEffectorSuctionCupEx(api, 0, 1)
 20  
 21  ##### close pump B #####
 22  dType.SetIODOEx(api, 17, 0, 1)

dType.SetEndEffectorSuctionCupExでポンプ(A)を制御し、dType.SetIODOExを使ってEIO14,17をON/OFFすることでポンプ(B)を制御します。処理を順に追っていくと、

2,3行目でポンプ(B)のEIOを設定

[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]

[wc_accordion_section title=”dType.SetIOMultiplexingExの引数に関して”]

2つ目の引数で対象のEIO番号、3つ目の引数でEIOの機能を指定しています。

詳細はDobot Magician API Description をご覧ください。

[/wc_accordion_section]

[/wc_accordion]

6行目でポンプ(B)のエアーの方向を設定 (第3引数=1で吸入)

[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]

[wc_accordion_section title=”エアーの方向の指定について”]

6行目のSetIODOExでは、第3引数に指定した値に応じてエアーポンプ動作時の振る舞いが変化します。具体的には

    • 第3引数= 0のとき、吐き出し
    • 第3引数= 1のとき、吸い込み

の動作を行います。今回は吸盤に吸い付ける動作を想定し、吸い込みを行うよう設定します。

[/wc_accordion_section]

[/wc_accordion]

9,12行目で各ポンプをON

18,21行目で各ポンプをOFF

のようになっています。

[/wc_tab]

[wc_tab title=”C++”]

  1  // set WAIT time
  2  WAITCmd wait;
  3  wait.timeout = 1000;
  4  
  5  // set output
  6  IOMultiplexing ioMul14, ioMul17;
  7  
  8  ioMul14.address = 14;
  9  ioMul14.multiplex = IOFunctionDO;
 10  ioMul17.address = 17;
 11  ioMul17.multiplex = IOFunctionDO;
 12  SetIOMultiplexing(&ioMul14, true, NULL);
 13  SetIOMultiplexing(&ioMul17, true, NULL);
 14  
 15  IODO io14, io17;
 16  
 17  // setting for pump B
 18  io14.address = 14;
 19  io14.level = 1;
 20  SetIODO(&io14, true, NULL);
 21  
 22  // open pump A 
 23  SetEndEffectorSuctionCup(true, true, true, NULL);
 24  
 25  // open pump B
 26  io17.address = 17;
 27  io17.level = 1;
 28  SetIODO(&io17, true, NULL);
 29  
 30  
 31  SetWAITCmd(&wait, true, NULL); // wait for 1 sec.
 32  
 33  
 34  // close pump A
 35  SetEndEffectorSuctionCup(true, false, true, NULL);
 36  
 37  // close pump B
 38  io17.level = 0;
 39  SetIODO(&io17, true, NULL);

SetEndEffectorSuctionCup()でポンプ(A)を制御し、SetIODO()を使ってEIO14,17をON/OFFすることでポンプ(B)を制御します。処理を順に追っていくと、

8~13行目でポンプ(B)のEIOを設定

[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]

[wc_accordion_section title=”SetIOMultiplexing()の引数について”]

1つ目の引数で対象のEIO番号とEIOの機能を指定します。

詳細はDobot Magician API Description をご覧ください。

[/wc_accordion_section]

[/wc_accordion]

18~20行目でポンプ(B)のエアーの方向を設定 (level=1で吸入)

[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]

[wc_accordion_section title=”エアーの方向の指定について”]

20行目のSetIODO()では、1つ目の引数で指定した値に応じてエアーポンプ動作時の振る舞いが変化します。具体的には

    • level= 0のとき、吐き出し
    • level= 1のとき、吸い込み

の動作を行います。今回は吸盤に吸い付ける動作を想定し、吸い込みを行うよう設定します。

[/wc_accordion_section]

[/wc_accordion]

23~28行目で各ポンプをON

35~39行目で各ポンプをOFF

のようになっています。

[/wc_tab]

[/wc_tabgroup]