この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ch_protchrm [2019/01/28 16:48] klab |
ch_protchrm [2019/03/15 16:15] (現在) klab |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
# プロッチを使ってみよう | # プロッチを使ってみよう | ||
- | LEDや各種センサ、通信機能を持つロボット「**プロッチ**」を使ってプログラムで操作してみよう。プロッチのプログラミングは、ダウンロード版のドリトルのみ対応している。 | + | LEDや各種センサ、通信機能を持つロボット「**プロッチ**」を使ってプログラムで操作してみよう。 |
## プロッチについて | ## プロッチについて | ||
ライン 33: | ライン 33: | ||
- **プロッチのデバイスドライバのインストールする** | - **プロッチのデバイスドライバのインストールする** | ||
* プロッチの電源を入れた状態でPCとプロッチをUSBケーブルで接続する。自動的にドライバがインストールされる。 | * プロッチの電源を入れた状態でPCとプロッチをUSBケーブルで接続する。自動的にドライバがインストールされる。 | ||
- | * 「Prolific USB-to-Serial Comm Port (COM*)((COM*の部分は環境によって異なる。)) デバイスドライバーソフトウェアが正しくインストールされました。」と表示される。写真を貼り直す{{:pasted:protch.png}} | + | * 「Prolific USB-to-Serial Comm Port (COM*)((COM*の部分は環境によって異なる。)) デバイスドライバーソフトウェアが正しくインストールされました。」と表示される。\\写真を貼る。\\ |
- **ドリトルをインストールする** | - **ドリトルをインストールする** | ||
* ドリトルのサイト(http://dolittle.eplang.jp)のダウンロードから最新版のWindows用のドリトルをダウンロードして任意のフォルダに展開する。(「C:」直下が好ましい) | * ドリトルのサイト(http://dolittle.eplang.jp)のダウンロードから最新版のWindows用のドリトルをダウンロードして任意のフォルダに展開する。(「C:」直下が好ましい) | ||
ライン 53: | ライン 53: | ||
## 通信モードでのプロッチの制御方法 | ## 通信モードでのプロッチの制御方法 | ||
- | 以下は、通信モードでの制御方法について説明する。なお、自立モードでの制御方法に関しては、〜〜を参照してください。 | + | ここでは、通信モードでの制御方法について説明する。なお、自立モードでの制御方法に関しては、〜〜を参照してください。\\ |
+ | 通信モードでは、パソコンとプロッチをUSBケーブルで接続した状態でプロッチの制御を行う。ドリトルでは、プログラムを実行すると、USBシリアル通信を用いてプロッチに制御命令を送信している。送信された命令をプロッチで受信し、命令に合わせて動作を行う。 | ||
+ | |||
+ | {{ :pasted:protch_process.png?400 }} | ||
- | {{:pasted:protch_process1.png?200x50}}ドリトルの記述ルールに従ってプログラムを記述する\\ | ||
- | {{:pasted:protch_process2.png?200x50}}ドリトルの記述ルールに従ってプログラムを記述する | ||
## プログラムの入力から実行まで | ## プログラムの入力から実行まで | ||
ここではプロッチのLEDを交互に点滅するプログラムを使って、ドリトルのプログラムの入力から実行までの手順を説明する。\\ | ここではプロッチのLEDを交互に点滅するプログラムを使って、ドリトルのプログラムの入力から実行までの手順を説明する。\\ | ||
ライン 68: | ライン 69: | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
左ライト!点灯。 | 左ライト!点灯。 | ||
- | プロッチ!1 待つ。 | + | プロッチ!1 待つ。 |
左ライト!消灯。 | 左ライト!消灯。 | ||
プロッチ!1 待つ。 | プロッチ!1 待つ。 | ||
ライン 75: | ライン 76: | ||
</code> | </code> | ||
- | **手順2**:プログラムの実行(実行ボタンを押す)\\ | + | **手順2**:通信用のプログラムをプロッチに転送する\\ |
- | **手順3**:動作を確認する\\ | + | * プログラムを実行すると次のダイアログが表示するので、「はい」を押す\\ |
- | **手順4**:動作を終了する\\ | + | (画像を追加)\\ |
+ | **手順3**:動作を終了する\\ | ||
* 実行画面の「動作終了」ボタンを押す(ドリトルからの制御命令の送信を終了する) | * 実行画面の「動作終了」ボタンを押す(ドリトルからの制御命令の送信を終了する) | ||
{{:pasted:protchrm_end.png}} | {{:pasted:protchrm_end.png}} | ||
- | 今回のプログラムでは、左のLEDが1秒ごとに点滅すれば正しく動作している。 | + | 今回のプログラムでは、左のLEDが1秒ごとに点滅すれば正しく動作している。プログラムの説明は、後にしている。 |
- | ### プロッチのプログラムの基本 | + | ### プロッチの制御プログラムを書く時のルール |
ドリトルからプロッチを制御するプログラムを説明する。 | ドリトルからプロッチを制御するプログラムを説明する。 | ||
- | **書き方1**\\ | + | **ルール1**\\ |
プロッチを**使う**プログラムを作成することを示すため、先頭の行に記述する。プロッチ本体を表す「プロッチ」((「protch」「プロ」も使用できる。))というオブジェクトや各種センサやモータなどを表すオブジェクトが使えるようになる。 | プロッチを**使う**プログラムを作成することを示すため、先頭の行に記述する。プロッチ本体を表す「プロッチ」((「protch」「プロ」も使用できる。))というオブジェクトや各種センサやモータなどを表すオブジェクトが使えるようになる。 | ||
<code> | <code> | ||
ライン 94: | ライン 96: | ||
</code> | </code> | ||
- | **書き方2**\\ | + | **ルール2**\\ |
- | 一度だけ実行したい処理を**最初に実行**のブロックに書く。開発モードでは、「動作終了」のタイミングによってはLEDが点灯した状態やモータが回転した状態が残ってしまうので、LEDを消す処理やモータを停止する処理を書くことが考えられる。 | + | 一度だけ実行したい処理を**最初に実行**のブロックに書く。モータの速度を設定することや、動作の開始を合図するためのブザー音などの処理を書くことが考えられる。 |
<code> | <code> | ||
最初に実行=「 | 最初に実行=「 | ||
ライン 102: | ライン 103: | ||
」。 | 」。 | ||
</code> | </code> | ||
- | **書き方3**\\ | + | **ルール3**\\ |
- | 今回は、LEDが点灯した状態が残ってしまうことを考慮し、最初に実行にLEDの**消灯**命令を書いた。プロッチはLEDが2つ搭載されているため、左側のLEDを制御するオブジェクトを「左ライト」、右側のLEDを制御するオブジェクトを「右ライト」にした。 | + | |
- | <code> | + | |
- | 左ライト!消灯。 | + | |
- | </code> | + | |
- | + | ||
- | **書き方4**\\ | + | |
何度も実行したい処理を**繰り返し実行**のブロックに書く。LEDの点滅やセンサの計測値によって動作を分岐するような処理を書くことが考えられる。 | 何度も実行したい処理を**繰り返し実行**のブロックに書く。LEDの点滅やセンサの計測値によって動作を分岐するような処理を書くことが考えられる。 | ||
- | |||
<code> | <code> | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
ライン 117: | ライン 111: | ||
</code> | </code> | ||
- | **書き方5**\\ | + | **ルール4**\\ |
- | 今回は、LEDの点滅をするために、**点灯**命令と**消灯**命令を書いた。点灯と消灯命令の間には、プログラムの実行を止めるプロッチオブジェクトの**待つ**命令を書いている。待つの単位は秒である。\\ | + | 最初に実行や繰り返し実行のブロックに書いたプログラムをプロッチに送るために**転送**を使用する。通信モードの場合、制御命令を一つずつプロッチに送る。 |
- | 「点灯」「1秒待つ」「消灯」「1秒待つ」を繰り返しているので1秒間隔でLEDが点滅していることになる。 | + | |
<code> | <code> | ||
- | 左ライト!点灯。 | + | プロッチ!転送。 |
- | プロッチ!1 待つ。 | + | |
- | 左ライト!消灯。 | + | |
- | プロッチ!1 待つ。 | + | |
</code> | </code> | ||
+ | |||
+ | ## ライトを点灯しよう | ||
+ | プロッチに搭載しているライトは、「左ライト!点灯。」や「右ライト!点灯。」を使うことでライトを点灯することができる。また、「左ライト!消灯」や「右ライト!消灯」を使うことでライトを消灯することができる。 | ||
+ | |||
+ | <code> | ||
+ | システム!"protch"使う。 | ||
+ | 最初に実行=「 | ||
+ | 左ライト!点灯。 | ||
+ | プロッチ!1 待つ。 | ||
+ | 左ライト!消灯。 | ||
+ | プロッチ!1 待つ。 | ||
+ | 」。 | ||
+ | プロッチ!転送。 | ||
+ | </code> | ||
+ | 上記のプログラムでは、左ライトが1秒間点灯する。 | ||
**左ライト・右ライトの命令一覧** | **左ライト・右ライトの命令一覧** | ||
ライン 133: | ライン 138: | ||
## スイッチの利用 | ## スイッチの利用 | ||
- | プロッチに搭載しているスイッチは、**押された?**を使うことでスイッチのONとOFFを検出できる。スイッチは左右に搭載しており、左側のスイッチを制御するオブジェクトを「左スイッチ」、右側のスイッチを制御するオブジェクトを「右スイッチ」にした。\\ | + | プロッチに搭載しているスイッチは、「左スイッチ!接触?」や「右スイッチ!接触?」を使うことでスイッチのONとOFFを検出できる。 |
- | 次のプログラムでは、左スイッチが押されている時に左ライトが点灯し、押されていないときは消灯する。プログラムは繰り返し実行に書いているため、何度の実行される。 | + | |
<code> | <code> | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
ライン 142: | ライン 145: | ||
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
- | 「左スイッチ! 押された?」! なら「 | + | 「(左スイッチ! 接触?)==はい」! なら「 |
左ライト! 点灯。 | 左ライト! 点灯。 | ||
」そうでなければ「 | 」そうでなければ「 | ||
ライン 148: | ライン 151: | ||
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
- | 下図は、プロッチが箱に衝突し、左スイッチが押されたので左ライトが点灯している。 | + | 上記のプログラムでは、左スイッチが押されている時に左ライトが点灯し、押されていないときは消灯する。プログラムは繰り返し実行の中に書いているため、何度の実行される。例えば、プロッチが箱に衝突したことを知らせるために左ライトを点灯するなどができる。 |
{{:pasted:protch_switch.jpg}} | {{:pasted:protch_switch.jpg}} | ||
**左スイッチ・右スイッチの命令一覧** | **左スイッチ・右スイッチの命令一覧** | ||
^ 命令 ^ 機能 ^ | ^ 命令 ^ 機能 ^ | ||
- | |読む | スイッチの入力を0か1で取得する | | + | |接触? | スイッチの入力を「はい」か「いいえ」で取得する | |
- | |接触? | スイッチの入力を0か1で取得する | | + | |
## 光センサの利用 | ## 光センサの利用 | ||
ライン 170: | ライン 172: | ||
計測結果!(左光センサ!明るさ?)書く。 | 計測結果!(左光センサ!明るさ?)書く。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 185: | ライン 188: | ||
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
下図は、左光センサを手で隠すと暗くなるのでLEDが点灯している。 | 下図は、左光センサを手で隠すと暗くなるのでLEDが点灯している。 | ||
ライン 198: | ライン 202: | ||
## サーボモータの利用 | ## サーボモータの利用 | ||
- | プロッチにはサーボモータ用の端子がある。サーボモータは**角度**を使うことで指定した角度にモータを動かすことができる。端子は左右にあり、左側のサーボモータを制御するオブジェクトを「左サーボモータ」、右側のサーボモータを制御するオブジェクトを「右サーボモータ」にした。サーボモータの接続方法は下図のとおりである。サーボモータを利用するときは、外部電源に電池ボックスを接続する必要がある。 | + | プロッチにはサーボモータ用の端子がある。サーボモータは**角度**を使うことで指定した角度にモータを動かすことができる。端子は左右にあり、左側のサーボモータを制御するオブジェクトを「左サーボ」、右側のサーボモータを制御するオブジェクトを「右サーボ」にした。サーボモータの接続方法は下図のとおりである。サーボモータを利用するときは、外部電源に電池ボックスを接続する必要がある。 |
{{:pasted:protch_servo.jpg}} | {{:pasted:protch_servo.jpg}} | ||
ライン 206: | ライン 210: | ||
システム!"protchrm"使う。 | システム!"protchrm"使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | 左サーボモータ!180 角度。 | + | 左サーボ!180 角度。 |
- | 右サーボモータ!180 角度。 | + | 右サーボ!180 角度。 |
プロッチ!1 待つ。 | プロッチ!1 待つ。 | ||
- | 左サーボモータ!0 角度。 | + | 左サーボ!0 角度。 |
- | 右サーボモータ!0 角度。 | + | 右サーボ!0 角度。 |
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
- | **右サーボモータ・左サーボモータの命令一覧** | + | **右サーボ・左サーボの命令一覧** |
^ 命令 ^ 機能 ^ | ^ 命令 ^ 機能 ^ | ||
|角度 |0度~180度の間で角度を指定する| | |角度 |0度~180度の間で角度を指定する| | ||
ライン 225: | ライン 231: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!1 前進。 | + | プロッチ!1 前進。 |
- | モータ!1 後進。 | + | プロッチ!1 後進。 |
- | モータ!1 左折。 | + | プロッチ!1 左折。 |
- | モータ!1 右折。 | + | プロッチ!1 右折。 |
- | モータ!1 左回り。 | + | プロッチ!1 左回り。 |
- | モータ!1 右回り。 | + | プロッチ!1 右回り。 |
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 241: | ライン 249: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
- | 「左スイッチ!押された?」!なら「 | + | 「(左スイッチ!接触?)==はい」!なら「 |
- | モータ!255 255 速度設定。 | + | プロッチ!255 255 速度。 |
- | モータ!1 前進。 | + | プロッチ!1 前進。 |
- | 」そうでなければ「右スイッチ!押された?」なら「 | + | 」そうでなければ「(右スイッチ!接触?)==はい」なら「 |
- | モータ!100 100 速度設定。 | + | プロッチ!100 100 速度。 |
- | モータ!1 前進。 | + | プロッチ!1 前進。 |
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
- | **モータの命令一覧** | + | **プロッチのモータの命令一覧** |
^ 命令 ^ 機能 ^ | ^ 命令 ^ 機能 ^ | ||
|前進 | 左右のモータを正回転する| | |前進 | 左右のモータを正回転する| | ||
ライン 264: | ライン 274: | ||
|左回り | 右側のモータが標準の速度で正回転し、左側のDCモータが標準の速度/5の速度で正回転する | | |左回り | 右側のモータが標準の速度で正回転し、左側のDCモータが標準の速度/5の速度で正回転する | | ||
|右回り | 左側のモータが標準の速度で正回転し、右側のDCモータが標準の速度/5の速度で正回転する | | |右回り | 左側のモータが標準の速度で正回転し、右側のDCモータが標準の速度/5の速度で正回転する | | ||
- | |速度設定 | DC モータの速度を0 から255 までの値で設定する。標準では100になっている | | + | |速度 | DC モータの速度を0 から255 までの値で設定する。標準では100になっている | |
## ラインセンサの利用 | ## ラインセンサの利用 | ||
ライン 277: | ライン 287: | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
計測結果!(左ラインセンサ!読む)書く。 | 計測結果!(左ラインセンサ!読む)書く。 | ||
+ | プロッチ!0.5 待つ。 | ||
」。 | 」。 | ||
</code> | </code> | ||
### ライントレースカー | ### ライントレースカー | ||
- | ラインセンサの反射量は、物体の色によって変化する。この特性を使うことでラインの白と黒を判断することができる。ライントレースカーは、ラインセンサで地面に描かれた線(黒色)を判断し、コースに沿って動くようにモータを制御する。\\ | + | ライントレースカーは、ラインセンサで地面に描かれた線(黒色)を判断し、コースに沿って動くようにモータを制御する。\\ |
次のプログラムでは、左右のラインセンサを比較し、線の上にいなければ右折し、線の上にいれば左折する。 | 次のプログラムでは、左右のラインセンサを比較し、線の上にいなければ右折し、線の上にいれば左折する。 | ||
ライン 286: | ライン 297: | ||
システム!"protchrm" 使う。 | システム!"protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
「(左ラインセンサ!読む)<(右ラインセンサ!読む)」!なら「 | 「(左ラインセンサ!読む)<(右ラインセンサ!読む)」!なら「 | ||
- | モータ!左回り。 | + | プロッチ!左回り。 |
」そうでなければ「 | 」そうでなければ「 | ||
- | モータ!右回り。 | + | プロッチ!右回り。 |
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 311: | ライン 322: | ||
システム!"protchrm"使う。 | システム!"protchrm"使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
「(距離センサ!距離?)<40」!なら「 | 「(距離センサ!距離?)<40」!なら「 | ||
- | モータ!1 停止。 | + | プロッチ!1 停止。 |
」そうでなければ「 | 」そうでなければ「 | ||
- | モータ!前進。 | + | プロッチ!前進。 |
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
{{:pasted:protch_distance.png}} | {{:pasted:protch_distance.png}} | ||
ライン 342: | ライン 353: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | シリアル!"こんにちは"出力。 | + | 通信端子!"こんにちは"送信。 |
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 352: | ライン 363: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | 受信ラベル=ラベル!""作る。 | + | 受信ラベル=ラベル!作る。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
- | 受信ラベル!(シリアル!読む)書く。 | + | 受信ラベル!(通信端子!受信)書く。 |
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 366: | ライン 379: | ||
### チャットプログラム | ### チャットプログラム | ||
- | 次のプログラムでは、フィールドオブジェクトに書いた文字をボタンの動作で出力している。また、読む命令を0.1秒間隔で実行することで受信した文字をテキストエリアに書いている。 | + | 次のプログラムでは、フィールドオブジェクトに書いた文字をプロッチの左スイッッチの押下により送信している。また、 |
<code> | <code> | ||
ライン 372: | ライン 385: | ||
最初に実行=「 | 最初に実行=「 | ||
送信フィールド=フィールド! 作る。 | 送信フィールド=フィールド! 作る。 | ||
- | 送信ボタン=ボタン!"送信"作る。 | ||
受信エリア=テキストエリア! 作る。 | 受信エリア=テキストエリア! 作る。 | ||
- | 送信ボタン:動作=「シリアル! (送信フィールド! 読む)出力」。 | + | 」。 |
- | 前回受信値="". | + | |
- | 「 | + | 繰り返し実行=「 |
- | 受信値=シリアル! 読む。 | + | 「(左スイッチ!接触?)==はい」!なら「 |
- | 「前回受信値! =受信値」! なら「 | + | 通信端子! (送信フィールド! 読む)送信 |
+ | 」実行。 | ||
+ | 受信値=通信端子! 受信。 | ||
+ | 「受信値!=””」! なら「 | ||
受信エリア! (受信値)書く。 | 受信エリア! (受信値)書く。 | ||
- | 」実行。 | + | 」実行。 |
- | 前回受信値=受信。 | + | |
- | プロッチ!0.1 待つ。 | + | |
- | 」! 1000 繰り返す。 | + | |
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
上記のプログラムを実行すると下図のような実行画面が現れる。①はフィールドに記述した文字を「送信」ボタンを押すことで送信する。②は送られてきた文字が書かれる。 | 上記のプログラムを実行すると下図のような実行画面が現れる。①はフィールドに記述した文字を「送信」ボタンを押すことで送信する。②は送られてきた文字が書かれる。 |