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

「体験用モデルA-1」に関連する項目

[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]命令がプログラム中に複数あっても良いのです。

[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モーターを個別に制御します。

[SOUND]のしくみ


[SOUND]は音を出す命令で、出せる音は6種類あります。

SOUND=値

※音はプログラムコントローラーのブザーモジュールから出ます。
※ACE LABシリーズのプログラムコントローラーの場合は、ブザーモジュールを3ピンケーブルでつないでください。

内蔵されたブザーモジュール

使い方

音を出すには、[SOUND]を挿入し、値を1~6のいずれかに設定します。音を止めるには、新たに[SOUND]を挿入し、値を”0”に設定します。
例えば下のプログラムは、[SOUND=1]で音が出て、[DELAY=3]で3秒間遅延した後、[SOUND=0]が実行され音が止まります。

値について値を変更する事で音が変わります。設定値は0~20までありますが、実際に動作するのは6までです。

  • 値0 無音(音を止める時に使います)
  • 値1 ピーーーーー
  • 値2 ピーポーピーポー
  • 値3 細かい連続音
  • 値4 UFO
  • 値5 低音→高音
  • 値6 高音→低音

[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]を実行しロボットは直進します。

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