LEDや各種センサ、通信機能を持つロボット「プロッチ」を使ってプログラムで操作してみよう。プロッチのプログラミングは、ダウンロード版のドリトルのみ対応している。
プロッチは、山崎教育システム株式会社と株式会社モノ・グラムが開発・販売する教育教材である。LEDの点灯や、センサを利用した各種計測、モータの制御を行うことができる。またプロッチを2台使用することにより2つのパソコン間での文字や数字のやりとりをするプログラムを作ることもできる。
なお、ドリトルでは「オリジナルプロッチ」に対応している。1)
プロッチで利用できるセンサ、アクチュエータ、拡張パーツを下図や表に示す。なお、図については、センサを赤色、アクチュエータを青色、拡張パーツを緑色、電源やUSBなどプログラムの実行に必要な部品を黒色で示している。
部品名 | 説明 |
---|---|
電源ボタン | プロッチの電源をオン・オフする |
リセットボタン | プロッチに書き込まれたプログラムをもう一度実行する |
外部電源 | サーボモータの制御に必要な外部電源を接続する |
USB | パソコンとプロッチをUSBポートで接続し、パソコンからプログラムの転送やプロッチを制御する |
ライト | LEDライトを点灯、消灯する |
スイッチ | スイッチのON、OFFを検出し、障害物の衝突を検出したり、スイッチをコントローラにしたりする |
光センサ | センサの周辺の明るさを計測する |
ブザー | 音階や音長を指定して、ブザーで演奏する |
ラインセンサ | 赤外線の反射量を計測し、計測値からラインの白と黒を判断できる |
モータ | 左右のタイヤを回転させて、プロッチを動かす |
サーボモータ | 指定した角度にモータを制御する。※利用する場合、外部電源が必要になる |
超音波センサ | 超音波を出力し、壁や障害物から跳ね返ってくるまでの時間から距離を計測する |
通信端子 | プロッチ2台の通信端子をケーブルで接続し、それぞれをパソコンとUSBで接続して、文字や数値のやり取りをする |
ドリトルでプロッチを制御するには、ドリトルのダウンロードの他、プロッチエディタ及びUSBデバイスドライバのインストールが必要になる。以下がインストールの手順である。なお、ソフトウェアとドライバのインストールを行うため、OSの管理者権限が必要となる場合がある。
ドリトルによるプロッチの制御は通信モードと自立モードがある。下表にそれぞれのメリット・デメリットを示す。
メリット | デメリット | |
---|---|---|
通信モード | ドリトルのGUIが利用できる ・「ボタン」、「ラベル」、「テキストエリア」 | PCとUSBケーブルで接続できる範囲でしか動作できない ケーブルを抜くとエラーになる可能性がある |
自立モード | プログラムを転送後はPCから離れた場所でも動作できる | センサやアクチュエータの動作の確認するすべがない |
実際の開発にあたって、最初に通信モードでセンサの性質やアクチュエータの動作を確認しながら、プログラムを作成し、めどが立ってから自立モードでロボットを単独で動作させることが考えられる。
以下は、通信モードでの制御方法について説明する。なお、自立モードでの制御方法に関しては、〜〜を参照してください。
ここではプロッチのLEDを交互に点滅するプログラムを使って、ドリトルのプログラムの入力から実行までの手順を説明する。
手順1:プログラムを編集画面に入力
次のプログラムを入力する。(サンプルプログラム(**.dtl))
システム!"protchrm"使う。 最初に実行=「 左ライト!消灯。 」。 繰り返し実行=「 左ライト!点灯。 プロッチ!1 待つ。 左ライト!消灯。 プロッチ!1 待つ。 」。 プロッチ!転送。
手順2:プログラムの実行(実行ボタンを押す)
手順3:動作を確認する
手順4:動作を終了する
今回のプログラムでは、左のLEDが1秒ごとに点滅すれば正しく動作している。
ドリトルからプロッチを制御するプログラムを説明する。
書き方1
プロッチを使うプログラムを作成することを示すため、先頭の行に記述する。プロッチ本体を表す「プロッチ」4)というオブジェクトや各種センサやモータなどを表すオブジェクトが使えるようになる。
システム!"protchrm"使う。
書き方2
一度だけ実行したい処理を最初に実行のブロックに書く。開発モードでは、「動作終了」のタイミングによってはLEDが点灯した状態やモータが回転した状態が残ってしまうので、LEDを消す処理やモータを停止する処理を書くことが考えられる。
最初に実行=「 ・・・ 」。
書き方3
今回は、LEDが点灯した状態が残ってしまうことを考慮し、最初に実行にLEDの消灯命令を書いた。プロッチはLEDが2つ搭載されているため、左側のLEDを制御するオブジェクトを「左ライト」、右側のLEDを制御するオブジェクトを「右ライト」にした。
左ライト!消灯。
書き方4
何度も実行したい処理を繰り返し実行のブロックに書く。LEDの点滅やセンサの計測値によって動作を分岐するような処理を書くことが考えられる。
繰り返し実行=「 ・・・ 」。
書き方5
今回は、LEDの点滅をするために、点灯命令と消灯命令を書いた。点灯と消灯命令の間には、プログラムの実行を止めるプロッチオブジェクトの待つ命令を書いている。待つの単位は秒である。
「点灯」「1秒待つ」「消灯」「1秒待つ」を繰り返しているので1秒間隔でLEDが点滅していることになる。
左ライト!点灯。 プロッチ!1 待つ。 左ライト!消灯。 プロッチ!1 待つ。
左ライト・右ライトの命令一覧
命令 | 機能 |
---|---|
点灯 | LEDを点灯する |
消灯 | LEDを消灯する |
プロッチに搭載しているスイッチは、押された?を使うことでスイッチのONとOFFを検出できる。スイッチは左右に搭載しており、左側のスイッチを制御するオブジェクトを「左スイッチ」、右側のスイッチを制御するオブジェクトを「右スイッチ」にした。
次のプログラムでは、左スイッチが押されている時に左ライトが点灯し、押されていないときは消灯する。プログラムは繰り返し実行に書いているため、何度の実行される。
システム! "protchrm" 使う。 最初に実行=「 左ライト!消灯。 」。 繰り返し実行=「 「左スイッチ! 押された?」! なら「 左ライト! 点灯。 」そうでなければ「 左ライト! 消灯。 」実行。 」。
下図は、プロッチが箱に衝突し、左スイッチが押されたので左ライトが点灯している。
左スイッチ・右スイッチの命令一覧
命令 | 機能 |
---|---|
読む | スイッチの入力を0か1で取得する |
接触? | スイッチの入力を0か1で取得する |
プロッチに搭載している光センサは明るさ?を使うことで周辺の光量を取得できる。光センサは左右に搭載しているので左側の光センサを制御するオブジェクトを「左光センサ」、右側の光センサを制御するオブジェクトを「右光センサ」にした。
センサの計測値はドリトルのラベルオブジェクトを使うとドリトルの実行画面で確認することできる。次のプログラムでは最初に実行で「計測結果」という名前のラベルを作り、繰り返し実行で光センサの明るさ?で取得した計測値を計測結果ラベルに書いている。
システム! "protchrm" 使う。 最初に実行=「 計測結果=ラベル!作る。 」。 繰り返し実行=「 計測結果!(左光センサ!明るさ?)書く。 」。
次のプログラムでは、周辺の光量が100より大きい時に左のライトが点灯する。プログラムは繰り返し実行に書いているため、何度の実行される。
システム! "protchrm" 使う。 最初に実行=「 左ライト!消灯。 」。 繰り返し実行=「 「(左光センサ! 明るさ?)>100」! なら「 左ライト! 点灯。 」そうでなければ「 左ライト! 消灯。 」実行。 」。
下図は、左光センサを手で隠すと暗くなるのでLEDが点灯している。
左光センサ・右光センサの命令一覧
命令 | 機能 |
---|---|
読む | 光量を0〜255の範囲で取得する。暗い程、取得する値は大きくなる |
明るさ? | 光量を0~255の範囲で取得する。暗い程、取得する値は大きくなる |
プロッチにはサーボモータ用の端子がある。サーボモータは角度を使うことで指定した角度にモータを動かすことができる。端子は左右にあり、左側のサーボモータを制御するオブジェクトを「左サーボモータ」、右側のサーボモータを制御するオブジェクトを「右サーボモータ」にした。サーボモータの接続方法は下図のとおりである。サーボモータを利用するときは、外部電源に電池ボックスを接続する必要がある。
次のプログラムでは、左右のサーボモータの角度を1秒ごとに180度と0度に動作する。
システム!"protchrm"使う。 最初に実行=「 左サーボモータ!180 角度。 右サーボモータ!180 角度。 プロッチ!1 待つ。 左サーボモータ!0 角度。 右サーボモータ!0 角度。 」。
右サーボモータ・左サーボモータの命令一覧
命令 | 機能 |
---|---|
角度 | 0度~180度の間で角度を指定する |
プロッチのモータは前進・後進・左折・右折・左回り・右回りを使うことで動かすことができる。また、停止を使うことでモータを止めることができる。これらの命令は秒数を指定することでその時間だけ動作することができる。
次のプログラムでは、1秒ごとに前進、後進、左折、右折、左回り、右回りをしている。
システム! "protchrm" 使う。 最初に実行=「 モータ!1 前進。 モータ!1 後進。 モータ!1 左折。 モータ!1 右折。 モータ!1 左回り。 モータ!1 右回り。 モータ!停止。 」。
モータの回転速度は速度設定を使うことで変更できる。モータの回転速度は0〜255の範囲で設定でき、標準では100に設定している。
次のプログラムでは、左スイッチを押した時に回転速度を255にして1秒前進し、右スイッチを押した時に速度を100にして、1秒前進する。
システム! "protchrm" 使う。 最初に実行=「 モータ!停止。 」。 繰り返し実行=「 「左スイッチ!押された?」!なら「 モータ!255 255 速度設定。 モータ!1 前進。 」そうでなければ「右スイッチ!押された?」なら「 モータ!100 100 速度設定。 モータ!1 前進。 」実行。 」。
モータの命令一覧
命令 | 機能 |
---|---|
前進 | 左右のモータを正回転する |
後進 | 左右のモータを逆回転する |
停止 | 左右のモータを停止する |
左折 | 右側のモータを正回転する |
右折 | 左側のモータを正回転する |
左回り | 右側のモータが標準の速度で正回転し、左側のDCモータが標準の速度/5の速度で正回転する |
右回り | 左側のモータが標準の速度で正回転し、右側のDCモータが標準の速度/5の速度で正回転する |
速度設定 | DC モータの速度を0 から255 までの値で設定する。標準では100になっている |
プロッチに搭載しているラインセンサは赤外線を出し、物体から跳ね返ってきた赤外線の反射量を取得する仕組みである。読むを使うことで赤外線の反射量を取得できる。ラインセンサは左右に搭載しているので左側のラインセンサを制御するオブジェクトを「左ラインセンサ」、右側のラインセンサを制御するオブジェクトを「右ラインセンサ」にした。
次のプログラムでは、ドリトルの画面でラインセンサが計測した値を確認できる。
システム!"protchrm" 使う。 最初に実行=「 計測結果=ラベル!作る。 」。 繰り返し実行=「 計測結果!(左ラインセンサ!読む)書く。 」。
ラインセンサの反射量は、物体の色によって変化する。この特性を使うことでラインの白と黒を判断することができる。ライントレースカーは、ラインセンサで地面に描かれた線(黒色)を判断し、コースに沿って動くようにモータを制御する。
次のプログラムでは、左右のラインセンサを比較し、線の上にいなければ右折し、線の上にいれば左折する。
システム!"protchrm" 使う。 最初に実行=「 モータ!停止。 」。 繰り返し実行=「 「(左ラインセンサ!読む)<(右ラインセンサ!読む)」!なら「 モータ!左回り。 」そうでなければ「 モータ!右回り。 」実行。 」。
ラインセンサの命令一覧
命令 | 機能 |
---|---|
読む | 赤外線の反射量を0〜255の範囲で取得する |
明るさ? | 赤外線の反射量を0〜255の範囲で取得する |
プロッチでは距離センサをつけることができる。距離センサは距離?を使うことで、プロッチの正面にあるモノまでの距離をmmで取得できる。次のプログラムでは、障害物が近くにあると停止する。
システム!"protchrm"使う。 最初に実行=「 モータ!停止。 」。 繰り返し実行=「 「(距離センサ!距離?)<40」!なら「 モータ!1 停止。 」そうでなければ「 モータ!前進。 」実行。 」。
距離センサの命令一覧
命令 | 機能 |
---|---|
読む | 距離センサの計測値をmmで取得する |
距離? | 距離センサの計測値をmmで取得する |
プロッチを2台使うことで文字を送ることができる。文字の送受信はシリアルオブジェクトの出力で文字を送信し、読むで送信された文字を取得できる。プロッチ2台を繋ぐためには、ジャンパワイヤーなどの通信コードを使う。パソコンとの接続は下図のように行う。
メッセージの送信には、シリアルオブジェクトの出力を使う。次のプログラムでは、「こんにちは」を送信している。
システム! "protchrm" 使う。 最初に実行=「 シリアル!"こんにちは"出力。 」。
メッセージの受信には、シリアルオブジェクトの読むを使う。取得した文字をラベルに書くことでドリトルの実行画面で確認できる。
システム! "protchrm" 使う。 最初に実行=「 受信ラベル=ラベル!""作る。 」。 繰り返し実行=「 受信ラベル!(シリアル!読む)書く。 」。
シリアルオブジェクトの命令一覧
命令 | 機能 |
---|---|
出力 | 文字を出力します |
読む | 送信された文字を取得します |
次のプログラムでは、フィールドオブジェクトに書いた文字をボタンの動作で出力している。また、読む命令を0.1秒間隔で実行することで受信した文字をテキストエリアに書いている。
システム!"protchrm"使う。 最初に実行=「 送信フィールド=フィールド! 作る。 送信ボタン=ボタン!"送信"作る。 受信エリア=テキストエリア! 作る。 送信ボタン:動作=「シリアル! (送信フィールド! 読む)出力」。 前回受信値="". 「 受信値=シリアル! 読む。 「前回受信値! =受信値」! なら「 受信エリア! (受信値)書く。 」実行。 前回受信値=受信。 プロッチ!0.1 待つ。 」! 1000 繰り返す。 」。
上記のプログラムを実行すると下図のような実行画面が現れる。①はフィールドに記述した文字を「送信」ボタンを押すことで送信する。②は送られてきた文字が書かれる。