この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
ch_protchrm [2019/01/28 19:33] klab |
ch_protchrm [2019/03/07 02:23] klab [メッセージを受信する] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
# プロッチを使ってみよう | # プロッチを使ってみよう | ||
- | LEDや各種センサ、通信機能を持つロボット「**プロッチ**」を使ってプログラムで操作してみよう。プロッチのプログラミングは、ダウンロード版のドリトルのみ対応している。 | + | LEDや各種センサ、通信機能を持つロボット「**プロッチ**」を使ってプログラムで操作してみよう。 |
## プロッチについて | ## プロッチについて | ||
ライン 56: | ライン 56: | ||
通信モードでは、パソコンとプロッチをUSBケーブルで接続した状態でプロッチの制御を行う。ドリトルでは、プログラムを実行すると、USBシリアル通信を用いてプロッチに制御命令を送信している。送信された命令をプロッチで受信し、命令に合わせて動作を行う。 | 通信モードでは、パソコンとプロッチをUSBケーブルで接続した状態でプロッチの制御を行う。ドリトルでは、プログラムを実行すると、USBシリアル通信を用いてプロッチに制御命令を送信している。送信された命令をプロッチで受信し、命令に合わせて動作を行う。 | ||
- | {{:pasted:protch_process.png?400}} | + | {{ :pasted:protch_process.png?400 }} |
## プログラムの入力から実行まで | ## プログラムの入力から実行まで | ||
ここではプロッチのLEDを交互に点滅するプログラムを使って、ドリトルのプログラムの入力から実行までの手順を説明する。\\ | ここではプロッチのLEDを交互に点滅するプログラムを使って、ドリトルのプログラムの入力から実行までの手順を説明する。\\ | ||
ライン 68: | ライン 69: | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
左ライト!点灯。 | 左ライト!点灯。 | ||
- | プロッチ!1 待つ。 | + | プロッチ!1 待つ。 |
左ライト!消灯。 | 左ライト!消灯。 | ||
プロッチ!1 待つ。 | プロッチ!1 待つ。 | ||
ライン 82: | ライン 83: | ||
{{:pasted:protchrm_end.png}} | {{:pasted:protchrm_end.png}} | ||
- | 今回のプログラムでは、左のLEDが1秒ごとに点滅すれば正しく動作している。 | + | 今回のプログラムでは、左のLEDが1秒ごとに点滅すれば正しく動作している。プログラムの説明は、後にしている。 |
ライン 95: | ライン 96: | ||
**ルール2**\\ | **ルール2**\\ | ||
- | 一度だけ実行したい処理を**最初に実行**のブロックに書く。開発モードでは、「動作終了」のタイミングによってはLEDが点灯した状態やモータが回転した状態が残ってしまうので、LEDを消す処理やモータを停止する処理を書くことが考えられる。 | + | 一度だけ実行したい処理を**最初に実行**のブロックに書く。モータの速度を設定することや、動作の開始を合図するためのブザー音などの処理を書くことが考えられる。 |
<code> | <code> | ||
最初に実行=「 | 最初に実行=「 | ||
ライン 103: | ライン 103: | ||
</code> | </code> | ||
**ルール3**\\ | **ルール3**\\ | ||
- | 今回は、LEDが点灯した状態が残ってしまうことを考慮し、最初に実行にLEDの**消灯**命令を書いた。プロッチはLEDが2つ搭載されているため、左側のLEDを制御するオブジェクトを「左ライト」、右側のLEDを制御するオブジェクトを「右ライト」にした。 | ||
- | <code> | ||
- | 左ライト!消灯。 | ||
- | </code> | ||
- | |||
- | **ルール4**\\ | ||
何度も実行したい処理を**繰り返し実行**のブロックに書く。LEDの点滅やセンサの計測値によって動作を分岐するような処理を書くことが考えられる。 | 何度も実行したい処理を**繰り返し実行**のブロックに書く。LEDの点滅やセンサの計測値によって動作を分岐するような処理を書くことが考えられる。 | ||
- | |||
<code> | <code> | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
ライン 117: | ライン 110: | ||
</code> | </code> | ||
- | **ルール5**\\ | + | **ルール4**\\ |
- | 今回は、LEDの点滅をするために、**点灯**命令と**消灯**命令を書いた。点灯と消灯命令の間には、プログラムの実行を止めるプロッチオブジェクトの**待つ**命令を書いている。待つの単位は秒である。\\ | + | 最初に実行や繰り返し実行のブロックに書いたプログラムをプロッチに送るために**転送**を使用する。通信モードの場合、制御命令を一つずつプロッチに送る。 |
- | 「点灯」「1秒待つ」「消灯」「1秒待つ」を繰り返しているので1秒間隔でLEDが点滅していることになる。 | + | |
<code> | <code> | ||
- | 左ライト!点灯。 | + | プロッチ!転送。 |
- | プロッチ!1 待つ。 | + | |
- | 左ライト!消灯。 | + | |
- | プロッチ!1 待つ。 | + | |
</code> | </code> | ||
+ | |||
+ | ## ライトを点灯しよう | ||
+ | プロッチに搭載しているライトは、「左ライト!点灯。」や「右ライト!点灯。」を使うことでライトを点灯することができる。また、「左ライト!消灯」や「右ライト!消灯」を使うことでライトを消灯することができる。 | ||
+ | |||
+ | <code> | ||
+ | システム!"protch"使う。 | ||
+ | 最初に実行=「 | ||
+ | 左ライト!点灯。 | ||
+ | プロッチ!1 待つ。 | ||
+ | 左ライト!消灯。 | ||
+ | プロッチ!1 待つ。 | ||
+ | 」。 | ||
+ | プロッチ!転送。 | ||
+ | </code> | ||
+ | 上記のプログラムでは、 | ||
**左ライト・右ライトの命令一覧** | **左ライト・右ライトの命令一覧** | ||
ライン 133: | ライン 137: | ||
## スイッチの利用 | ## スイッチの利用 | ||
- | プロッチに搭載しているスイッチは、**押された?**を使うことでスイッチのONとOFFを検出できる。スイッチは左右に搭載しており、左側のスイッチを制御するオブジェクトを「左スイッチ」、右側のスイッチを制御するオブジェクトを「右スイッチ」にした。\\ | + | プロッチに搭載しているスイッチは、「左スイッチ!接触?」や「右スイッチ!接触?」を使うことでスイッチのONとOFFを検出できる。 |
- | 次のプログラムでは、左スイッチが押されている時に左ライトが点灯し、押されていないときは消灯する。プログラムは繰り返し実行に書いているため、何度の実行される。 | + | |
<code> | <code> | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
ライン 142: | ライン 144: | ||
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
- | 「左スイッチ! 押された?」! なら「 | + | 「(左スイッチ! 押された?)==はい」! なら「 |
左ライト! 点灯。 | 左ライト! 点灯。 | ||
」そうでなければ「 | 」そうでなければ「 | ||
ライン 148: | ライン 150: | ||
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
- | 下図は、プロッチが箱に衝突し、左スイッチが押されたので左ライトが点灯している。 | + | 上記のプログラムでは、左スイッチが押されている時に左ライトが点灯し、押されていないときは消灯する。プログラムは繰り返し実行の中に書いているため、何度の実行される。例えば、プロッチが箱に衝突したことを知らせるために左ライトを点灯するなどができる。 |
{{:pasted:protch_switch.jpg}} | {{:pasted:protch_switch.jpg}} | ||
**左スイッチ・右スイッチの命令一覧** | **左スイッチ・右スイッチの命令一覧** | ||
^ 命令 ^ 機能 ^ | ^ 命令 ^ 機能 ^ | ||
- | |読む | スイッチの入力を0か1で取得する | | + | |接触? | スイッチの入力を「はい」か「いいえ」で取得する | |
- | |接触? | スイッチの入力を0か1で取得する | | + | |
## 光センサの利用 | ## 光センサの利用 | ||
ライン 170: | ライン 171: | ||
計測結果!(左光センサ!明るさ?)書く。 | 計測結果!(左光センサ!明るさ?)書く。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 185: | ライン 187: | ||
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
下図は、左光センサを手で隠すと暗くなるのでLEDが点灯している。 | 下図は、左光センサを手で隠すと暗くなるのでLEDが点灯している。 | ||
ライン 206: | ライン 209: | ||
システム!"protchrm"使う。 | システム!"protchrm"使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | 左サーボモータ!180 角度。 | + | 左サーボ!180 角度。 |
- | 右サーボモータ!180 角度。 | + | 右サーボ!180 角度。 |
プロッチ!1 待つ。 | プロッチ!1 待つ。 | ||
- | 左サーボモータ!0 角度。 | + | 左サーボ!0 角度。 |
- | 右サーボモータ!0 角度。 | + | 右サーボ!0 角度。 |
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 225: | ライン 230: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!1 前進。 | + | プロッチ!1 前進。 |
- | モータ!1 後進。 | + | プロッチ!1 後進。 |
- | モータ!1 左折。 | + | プロッチ!1 左折。 |
- | モータ!1 右折。 | + | プロッチ!1 右折。 |
- | モータ!1 左回り。 | + | プロッチ!1 左回り。 |
- | モータ!1 右回り。 | + | プロッチ!1 右回り。 |
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 241: | ライン 248: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
- | 「左スイッチ!押された?」!なら「 | + | 「(左スイッチ!接触?)==はい」!なら「 |
- | モータ!255 255 速度設定。 | + | プロッチ!255 255 速度。 |
- | モータ!1 前進。 | + | プロッチ!1 前進。 |
- | 」そうでなければ「右スイッチ!押された?」なら「 | + | 」そうでなければ「(右スイッチ!押された?)==はい」なら「 |
- | モータ!100 100 速度設定。 | + | プロッチ!100 100 速度。 |
- | モータ!1 前進。 | + | プロッチ!1 前進。 |
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
- | **モータの命令一覧** | + | **プロッチのモータの命令一覧** |
^ 命令 ^ 機能 ^ | ^ 命令 ^ 機能 ^ | ||
|前進 | 左右のモータを正回転する| | |前進 | 左右のモータを正回転する| | ||
ライン 264: | ライン 273: | ||
|左回り | 右側のモータが標準の速度で正回転し、左側のDCモータが標準の速度/5の速度で正回転する | | |左回り | 右側のモータが標準の速度で正回転し、左側のDCモータが標準の速度/5の速度で正回転する | | ||
|右回り | 左側のモータが標準の速度で正回転し、右側のDCモータが標準の速度/5の速度で正回転する | | |右回り | 左側のモータが標準の速度で正回転し、右側のDCモータが標準の速度/5の速度で正回転する | | ||
- | |速度設定 | DC モータの速度を0 から255 までの値で設定する。標準では100になっている | | + | |速度 | DC モータの速度を0 から255 までの値で設定する。標準では100になっている | |
## ラインセンサの利用 | ## ラインセンサの利用 | ||
ライン 277: | ライン 286: | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
計測結果!(左ラインセンサ!読む)書く。 | 計測結果!(左ラインセンサ!読む)書く。 | ||
+ | プロッチ!0.5 待つ。 | ||
」。 | 」。 | ||
</code> | </code> | ||
ライン 286: | ライン 296: | ||
システム!"protchrm" 使う。 | システム!"protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
「(左ラインセンサ!読む)<(右ラインセンサ!読む)」!なら「 | 「(左ラインセンサ!読む)<(右ラインセンサ!読む)」!なら「 | ||
- | モータ!左回り。 | + | プロッチ!左回り。 |
」そうでなければ「 | 」そうでなければ「 | ||
- | モータ!右回り。 | + | プロッチ!右回り。 |
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 311: | ライン 321: | ||
システム!"protchrm"使う。 | システム!"protchrm"使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | モータ!停止。 | + | プロッチ!停止。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
「(距離センサ!距離?)<40」!なら「 | 「(距離センサ!距離?)<40」!なら「 | ||
- | モータ!1 停止。 | + | プロッチ!1 停止。 |
」そうでなければ「 | 」そうでなければ「 | ||
- | モータ!前進。 | + | プロッチ!前進。 |
」実行。 | 」実行。 | ||
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
{{:pasted:protch_distance.png}} | {{:pasted:protch_distance.png}} | ||
ライン 342: | ライン 352: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | シリアル!"こんにちは"出力。 | + | 通信端子!"こんにちは"送信。 |
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 352: | ライン 362: | ||
システム! "protchrm" 使う。 | システム! "protchrm" 使う。 | ||
最初に実行=「 | 最初に実行=「 | ||
- | 受信ラベル=ラベル!""作る。 | + | 受信ラベル=ラベル!作る。 |
」。 | 」。 | ||
繰り返し実行=「 | 繰り返し実行=「 | ||
- | 受信ラベル!(シリアル!読む)書く。 | + | 受信ラベル!(通信端子!受信)書く。 |
」。 | 」。 | ||
+ | |||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
ライン 366: | ライン 378: | ||
### チャットプログラム | ### チャットプログラム | ||
- | 次のプログラムでは、フィールドオブジェクトに書いた文字をボタンの動作で出力している。また、読む命令を0.1秒間隔で実行することで受信した文字をテキストエリアに書いている。 | + | 次のプログラムでは、フィールドオブジェクトに書いた文字をプロッチの左スイッッチの押下により送信している。また、 |
<code> | <code> | ||
ライン 372: | ライン 384: | ||
最初に実行=「 | 最初に実行=「 | ||
送信フィールド=フィールド! 作る。 | 送信フィールド=フィールド! 作る。 | ||
- | 送信ボタン=ボタン!"送信"作る。 | ||
受信エリア=テキストエリア! 作る。 | 受信エリア=テキストエリア! 作る。 | ||
- | 送信ボタン:動作=「シリアル! (送信フィールド! 読む)出力」。 | + | 」。 |
- | 前回受信値="". | + | |
- | 「 | + | 繰り返し実行=「 |
- | 受信値=シリアル! 読む。 | + | 「(左スイッチ!接触?)==はい」!なら「 |
- | 「前回受信値! =受信値」! なら「 | + | 通信端子! (送信フィールド! 読む)送信 |
+ | 」実行。 | ||
+ | 受信値=通信端子! 受信。 | ||
+ | 「受信値!=””」! なら「 | ||
受信エリア! (受信値)書く。 | 受信エリア! (受信値)書く。 | ||
- | 」実行。 | + | 」実行。 |
- | 前回受信値=受信。 | + | |
- | プロッチ!0.1 待つ。 | + | |
- | 」! 1000 繰り返す。 | + | |
」。 | 」。 | ||
+ | プロッチ!転送。 | ||
</code> | </code> | ||
上記のプログラムを実行すると下図のような実行画面が現れる。①はフィールドに記述した文字を「送信」ボタンを押すことで送信する。②は送られてきた文字が書かれる。 | 上記のプログラムを実行すると下図のような実行画面が現れる。①はフィールドに記述した文字を「送信」ボタンを押すことで送信する。②は送られてきた文字が書かれる。 |