ロボットプログラミング 教材 ろぼたみくらぶ
ロボットプログラミング教材ろぼたみくらぶ

「エースラボ3」に関連する項目

[CW]と[CCW]と[DC_STOP]のしくみ


CW=値CCW=値は、【MOTOR0】と【MOTOR1】に接続したDCモーターの回転方向を別々に制御します。

DC STOPは、【MOTOR0】と【MOTOR1】に接続したDCモーターの停止を別々に制御します。

※コントローラーのDCモーター接続口は、片側にAとBの2箇所ずつありますが、AとBを別々に制御する事は出来ません。A、Bどちらに接続しても同じ動作をします。

値について

値は0または1で指定します。
コントローラーの【MOTOR1】に接続したDCモーターを制御する場合は、値をにします。
CW=1なら【MOTOR1】に接続したDCモーターは時計回りに回転し、CCW=1なら【MOTOR1】に接続したDCモーターは反時計回りに回転し、DC STOP=1なら【MOTOR1】に接続したDCモーターは停止します。

使い方

命令カードの場所は、TronZ-Card V2の「All Cards」タブの「MOTOR」内DC_CWCW=値DC_CCWCCW=値DC_STOPDC STOP=値

試しにDC_CWを挿入すると以下の値決定画面が出ます。

この画面では、0と1、どちらのモーターを制御するかを値で指定します。【MOTOR0】に接続したDCモーターを制御したければ、値をにします。

 

このプログラムを実行すると、【MOTOR0】に接続したDCモーターが1秒時計回りし停止します。この場合、DC STOP=0の代わりに両方のDCモーターが停止する命令STOPを使っても停止します。

[IN]のしくみ


IN=値の命令は、コントローラーに接続したセンサー類からの情報を得る命令です。この命令自体にロボットを動かす機能はありませんが、センサーを使って[IF]で動かす時にセンサーからの入力情報を得ている必要があります。

値について値はコントローラーの【IN 0】から【IN 3】の番号と連動していて、例えば【IN 1】につないだセンサーからの入力情報を得る場合は[IN=1]にします。

[IN]命令に対応するセンサー

IN=値命令は、クリエイティブ、インテリジェント、ACE LABシリーズの全てのセンサーに対応しています。

  • 赤外線センサーモジュール
  • スイッチモジュール
  • 光センサーモジュール
  • 音センサーモジュール
  • 傾斜センサーモジュール

 

TronZ-Card V2ではINの他にSWITCHIRの命令があります。これらもセンサーの情報を得る命令ですが、[IN]命令で入力情報を得られる為、出番がほとんどありません。

使うとすれば、プログラムを人に見せる時にフローが解りやすくなる所でしょうか。

[LABEL]と[GOTO]のしくみ


GOTO=値は、プログラムの実行順が同じ値のLABEL=値に移動します。

値について

値は0~15まで設定可能です。GOTO=値は同じ値を持つLABEL=値の位置へプログラムの実行順が移動します。

使い方

このプログラムでは、0番LEDが0.3秒間隔で無限に点滅します。この様に簡単に無限ループも作ることが出来ます。

 

このプログラムでは、GOTO=0が実行されるとLABEL=0に戻る為、BACK=0は実行される事は無くループします。

 

気が遠くなる様なこのプログラムは、ACE LAB4に登場するウルトラサウルスのプログラムです。よく見ると、GOTO=0が2箇所あるのがわかります。

この様に同じ値の[GOTO]命令がプログラム中に複数あっても良いのです。

[FOR]と[NEXT]のしくみ


FOR=値NEXTは、プログラムの実行を値の回数、繰り返す命令です。

値について

FOR=値命令とNEXTに挟まれた命令を[FOR]で指定した値の回数繰り返し実行し、繰り返しが終わると[NEXT]の次の命令に実行順が移ります。

注意点

FORの中にFORを入れるなど、同じ命令でネスト(入れ子構造)には出来ません。

使用例


このプログラムでは、FOR=3の値は3なので、NEXTとの間に配置した命令を3回繰り返します。

[SERVO]と[STEP]のしくみ


SERVO

SERVO1=値SERVO2=値SERVO3=値は、サーボモーターの回転角度を制御する命令です。

値について

値の範囲は0~20で、値が1変わるとサーボモーターの回転角度が9度変わり、約0度~180度の範囲で角度を制御できます。値の初期値は10(90度)の位置。

サーボモーターについての説明はこちら

使い方

コントローラーの【SERVO1】に繋いだサーボモーター制御する場合、[SERVO1]の命令を使います。次のプログラムを実行するとどうなるでしょう。

上のプログラムを実行すると、サーボモーターは値20(角度180)まで回転し、その位置を維持している状態になります。では次のプログラムはどうでしょう。

[SERVO1=20]の後に[SERVO1=0]となっています。実行するとサーボモーターは、一瞬値20(角度180)に行こうとしますが、ほとんど回転する間もなく値0の命令が実行されるため、値0(角度0)まで行き位置を維持している状態になります。

こういった場合は、次の図のように値20(角度180)まで回転出来る時間を[DELAY]命令などで確保する必要があります。

 

STEP

STEP1=値STEP2=値STEP3=値は、サーボモーターの回転速度を制御する命令です。

値について

サーボモーターの回転速度を1~15の範囲で指定します。15が最速。[STEP]で指定のないサーボモーターの標準速度は15です。

使い方

[STEP]命令は基本的に、[SERVO]命令の前に入れます。

その他[SPEED]と[SPEED0][SPEED1]のしくみと同じ要領ですのでご参照ください。

サーボモーターのしくみ


サーボモーター(SERVO MOTOR)は、位置や速度などをプログラミングで制御出来るモーターです。角度範囲は約180度。

構造的にも約180度しか動きませんので、最初にホイールガイドや、モーター軸などの部品を付ける場合、サーボモーターの角度範囲にご注意ください。

また、サーボモーターと部品が繋がる部分は六角形になっていますので、サーボモーターの角度が同じでも、部品の方の取付け角度により次の図のように違いが生じます。

ホイールガイドの取付け例
六角形の接合部

サーボモーターの中心の出し方

組立ての時は、一度ホイールガイドなどを取付け、手動でサーボモーターの回転が止まるまで回し、そこから反対方向に90度回せば約90度の地点がわかります。

また、裏技気味になりますが、TronZ-Card V2を使い、ダウンロードする時の状態にして[SERVO]命令の値を変更するとサーボモーターが連動します。
※エースラボ2では出来ません

◆TronZ-Card V2を使った確認手順

  1. パソコンとプログラムコントローラーをダウンロードケーブルで繋ぎます
  2. サーボモーターをプログラムコントローラーの【SERVO1】に繋ぎます
  3. プログラムコントローラーのモードスイッチをDOWNにし電源を入れます
  4. TronZ-Card V2でSERVO1の命令を挿入します
  5. 値決定画面でサーボモーターの角度を調整すると、連動してサーボモーターが動きますので、値を10にすればサーボモーターは約90度の位置になります

[SPEED]と[SPEED0][SPEED1]のしくみ


SPEED=値SPEED0=値SPEED1=値は、DCモーターの回転速度を制御する命令です。
これらの命令だけではDCモーターは回転しませんので、[GO]や[CW]などのDCモーターが回転する命令も必要になります。

この3種類の命令は、DCモーターの回転を制御する命令と関係があり、以下がそれぞれ効果対象となる命令です。

SPEED=値は、GO=値BACK=値RIGHT=値LEFT=値の命令で回転するDCモーターに対して有効です。

SPEED0=値は、CW=0CCW=0の命令で回転するDCモーターに対して有効です。

SPEED1=値は、CW=1CCW=1の命令で回転するDCモーターに対して有効です。

しくみのポイント[SPEED]はDCモーター両方の回転を制御する命令に対して有効。
[SPEED0][SPEED1]はDCモーターを個別に制御する命令に対して有効。

値について

”値”は、DCモーターが回転する速さです。1から5までの設定値があり、5が一番速く回転します。※通常時は5の速さ。

使い方

基本的には、DCモーターを回転させる命令より先に挿入します。

 

逆だと効果がありません。既に回転しているDCモーターの速度を変えたい場合は、[SPEED=1]の後にもう一度[GO=0]などの命令を入れれば効果が出ます。

 

ループしていれば、プログラムが一周して[GO]に対し効果が出ます。

 

[SPEED0]と[SPEED1]も同じ要領でDCモーターを個別に制御します。

[ON]と[OFF]のしくみ


[ON]と[OFF]は、コントローラーのOUTポートにつないだLEDモジュールの点灯、消灯を制御する命令です。

ON=値OFF=値

値についてそれぞれの値は、コントローラーの【OUT 0】から【OUT 3】の番号と連動していて、例えば【OUT 1】につないだLEDモジュールを点灯させたい場合は[ON=1]にします。
[ON]の値設定画面
クリエイティブ、インテリジェントの場合
エースラボシリーズプログラムコントローラー
エースラボ3~4の場合

 

LEDモジュールの点灯時間は、[DELAY]や[DELAY100]などを使い制御します。LEDモジュールを消灯したい場合は次のプログラムの様に[OFF]を使います。

[ELSE]のしくみ


[ELSE]は、同じ値の[IF]の条件が一致しなかった場合に、プログラムの内容を実行します。

ELSE=(値)

ポイント[ELSE]は同じ値の[IF]の条件が一致しなかった場合に、内容のプログラムを実行する。

次のサンプルプログラムは、赤外線センサーモジュールを2つ【IN0】と【IN1】につなぎ、LEDモジュールを【OUT0】につないである前提です。赤外線センサーモジュールの反応が両方ともオフの場合は[IF=0]の条件が一致し、それ以外の状態では[ELSE=0]と一致し【OUT0】のLEDがモジュールが[ON=0]により点灯します。

もし、上のサンプルプログラムを[ELSE]を使わずにプログラミングすると次のようになります。

どちらのプログラムも動作は同じですが、[ELSE]を使った方は少しだけ少ない命令で同じ動きをしています。このサンプルプログラムは、赤外線センサーを2個使っていますが、センサー類は最大で4個付けられますので、同じ動作をする場合などは[ELSE]を使うと便利です。

[DELAY]と[DELAY100]のしくみ


[DELAY]と[DELAY100]は、指定の秒数、次の命令の実行を遅らせる命令です。

DELAY=値DELAY100=値

  • [DELAY]は1秒単位で設定できて最大15秒
  • [DELAY100]は、0.1秒単で設定できて最大1.0秒
[DELAY]とはプログラム実行時に「次の命令実行を○○秒遅らせろ」と言う命令。

使い方

次のプログラム[GO=0]→[DELAY=3]→[STOP]を実行すると、ロボットは3秒前進して停止します。

 

実際のプログラムの動きは、[GO]で前進し[DELAY]で[STOP]の実行を3秒遅らせた形です。これによりロボットは3秒前進後に停止となります。

[GO][BACK][LEFT][RIGHT]のしくみ


GO=値BACK=値LEFT=値RIGHT=値

これらの命令は、次の図のロボットの様に、ロボットの向きとモーターの位置構成を対象にして作られていて、【MOTOR0】と【MOTOR1】を同時に制御します。

[GO]ロボットを前進させる命令です。
命令を受けたロボットは、コントローラーのMOTOR 0MOTOR 1に繋いだDCモーターを回転させます。MOTOR 0につないだDCモーターは反時計回り、MOTOR 1の方は時計回りになります。
[BACK]ロボットを後進させる命令です。
命令を受けたロボットは、コントローラーのMOTOR 0MOTOR 1に繋いだDCモーターを回転させます。MOTOR 0につないだDCモーターは時計回り、MOTOR 1の方は反時計回りになります。
[LEFT]
ロボットを左回転させる命令です。
命令を受けたロボットは、コントローラーのMOTOR 0MOTOR 1に繋いだDCモーターを回転させます。MOTOR 0につないだDCモーターと、MOTOR 1のDCモーターは共に時計回りします。
[RIGHT]
ロボットを右回転させる命令です。
命令を受けたロボットは、コントローラーのMOTOR 0MOTOR 1に繋いだDCモーターを回転させます。MOTOR 0につないだDCモーターと、MOTOR 1のDCモーターは共に反時計回りします。
値について

[GO=0]や[BACK=0]の”0”の値は、次の命令を実行するまでの遅延時間です。値は0.1秒~0.9秒までをカード挿入時に出る画面で指定します。0.9秒以上を指定する場合は、直後に[DELAY]や[DELAY100]の命令を使います。

※プログラミング初期段階のテキストでは、動作時間としている箇所があります。

[START]と[END]のしくみ


[START]と[END]について説明します。

STARTEND

コントローラーは[START]と[END]の間に入った命令を基本的に[START]側から[END]まで実行します。[START]と[END]のカード自体にロボット制御の機能はなく、プログラムはここからここまで!とコントローラーに示しているだけです。[END]カードにロボットを停止する機能は有りませんので、ロボットを停止したい場合は[STOP]などの命令を使う必要があります。

ポイント[START]と[END]のカードは、それ自体にロボットを制御する機能は無く、プログラムの最初と終わりを示しているに過ぎない。

[IF]のしくみ


「IF」は、多くのプログラミング言語で条件分岐に使われている命令です。ある条件を判定し、結果により異なる処理をさせるために使われます。

IF=値

TronZ-Card V2とTAMI-TOOLで使用する命令の[IF](もし)も、取り付けたセンサー類のオン、オフで条件を分ける事ができます。例えば赤外線センサーからの入力信号がオンだった場合の動作と、オフだった場合の動作をそれぞれプログラミングする事によりロボットを制御します。

TronZ-Card V2とTAMI-TOOLの[IF]TronZ-Card V2とTAMI-TOOLでの[IF]の役割は、取り付けたセンサーからの情報をもとにして、条件分岐をするために使う。

[IF]命令語カードの配置

基本的に[IF]と[ENDIF]はセットで配置して使いますが[ENDIF]は、[IF]や[ELSE]が複数あっても一連の分岐の最後に一つ入っていれば良い事になっています。上記プログラムの途中に[ENDIF]を入れても[IF]の分岐先で更に[IF]で分岐するといった、ネスト(入れ子状態)は、この教材では作れません。

※センサー類を使用する場合は、値部分に使用するポートの番号を指定した[IN=値]の命令カードを入れる必要があります。

※センサー類を使って分岐する場合の多くは、プログラムをループさせる必要性が出てきます。ループしないと電源を入れた瞬間にプログラムが実行され瞬時に終わってしまうからです。

[ENDIF][ENDIF]は、[IF]や[ELSE]が複数あっても最後に一つ入っていれば良い。

値について

[IF]を配置すると、値を決める画面が出ます。

[IF]命令語カードの値指定画面

 

値は0~3まで4つあり、それぞれコントローラーのIN0~IN3を示しています。

※画像のコントローラーは、クリエイティブやインテリジェントに使われているタイプですが、エースラボシリーズのプログラムコントローラーでも説明は同じです。

値指定画面には、4つの四角いチェックボックスと、その右に値のセレクトボックスがあります。どちらを操作しても値を決められますが、下の表のように、セレクトボックス内の数値の仕組みは複雑なので、チェックボックスを使うとわかりやすいでしょう。

IFの設定パターンは覚える必要は有りません。挿入した命令カードの[IF=値]の値部分の数字とセンサーをつないだコントローラーの【IN0~3】ポートの数字とはイコールでは無い所がポイントです。

例えば、[IF]を挿入した時に出るチェックボックスのIN3の部分にチェックを入れると、カードの表示は[IF=8]になります。(2進法の底は2で、ポート番号の数値が冪指数)

しくみのポイント指定したセンサーのIN番号が[IF=値]の値になる訳では無い

ライントレースプログラム


体験用モデルA-1

 

ライントレースとは

赤外線センサーモジュールの働きにより、床などの黒い線に沿ってロボットが自動で走る状態を言います。

画像のモデルでは、ロボットの前についている二箇所の赤外線センサーモジュールが、黒い線と白い床を判断しています。

ライントレースしているロボットを観察すると、黒い線を追っている様に見えますが、プログラムの仕組みとしては、実は黒い線を避けて走行しています。

赤外線センサーは、自ら出した光が物体に反射し、戻ってきた光を感知した時は「オン」(1)になり、無感知の時は「オフ」(0)になります。黒い色は光を吸収してしまいほとんど反射しませんので、センサーは反射を感知せずに、離れた時と同じ「オフ」になる仕組みです。
ロボットを持ち上げた時も光が反射する物体が無いので両方の赤外線センサーは「オフ」になり、下記のプログラム内容だと[IF=0]の条件と一致し[STOP]を実行します。

しくみのポイント「自動ドアと同じで近付くとオンになる」とおぼえるとわかりやすい。

プログラム

  • [IF=0]は、両方の赤外線センサーがオフで実行
  • [IF=1]は、左側(IN 0)の赤外線センサーだけがオンで実行
  • [IF=2]は、右側(IN 1)の赤外線センサーだけがオンで実行
  • [IF=3]は、両方の赤外線センサーがオンで実行

 

しくみの説明

右側(IN=1)のセンサーがオフになっている状態

 

画像の状態は、右側(IN1)の赤外線センサーだけが黒いラインの上にかかり、センサーがオフになっている状態です。この場合プログラムは、残った左側(IN0)[IF=1]条件に一致と判断するので、[IF=1]の中にある[RIGHT=0]を実行しロボットを右回転させます。

ロボットが右回転する事で黒いラインにかかっていた右側(IN1)のセンサーは白い床へと戻り、センサーの状態はオンに変わります。すると両方のセンサーがオンの条件[IF=3]と一致するので[GO=0]を実行しロボットは直進します。

しくみのポイント片方のセンサーがオフになると条件が変わり、反対側のセンサーがオンの時のプログラムを実行する。