クルーズコントロール
運転のストレスを軽減し運転手をサポートするクルーズコントロールプログラムをデザインします。
CONNECT(結びつける)
(5分)
このレッスンでは、はじめて変数の概念が登場します。子どもたちはここで学んだ知識を活かして、ロボットにクルーズコントロール機能をつけるタスクに挑戦してもらいます。タッチセンサーを押すとロボットの速度が速くなります。次の質問を使って議論を促しましょう: - 運転中に運転手がストレスを感じる原因にはどのようなものがあるでしょうか? - 長時間運転をする運転手の安全性を向上するために何ができるでしょうか?子どもたちに、プラスボタンとマイナスボタンがハンドルでは何を意味すると思うかたずねてみましょう。この2つのボタンがどのように車の速度を調節できるか話し合ってください。子どもたちに、自分が見つけたアイデアを記録して共有するためのツールを選んでもらいましょう。文章、動画、画像、スケッチブック、あるいはそのほかのクリエイティブな手段を使って、自分の考えを記録してもらいます。
Construct(組み立てる)
(15~30分)
組み立て 子どもたちはロボットエデュケーターの基本モデルを組み立て、2つのタッチセンサーを取り付けます。
子どもたちに今日のタスクは2つのタッチセンサーを使ってロボットの速度をコントロールしたり維持したりすることだと説明します。プログラミングに取り組む前に、下のリストを使って子どもたちに組み立てチェックをしてもらいましょう: - モーターからポートBとCの間は正しく配線されていますか? - 車輪は正しく取りつけられていますか? - 車輪は自由に回転していますか?プログラム EV3 プログラミングソフトウェア(またはアプリ)で新規プロジェクトを作成してもらいます。変数ブロックに対する子どもたちの理解を発展させましょう。変数ブロックはデータ(テキスト、ロジック、数値、または配列)を保存することができ、このデータはプログラムが実行されている間はいつでも上書きすることができるのだと説明します。変数ブロックが機能するには数学ブロック、テキストブロック、または配列操作ブロックを使って読み込みや書き込みをしなければならないことにも触れてください。ロボットが発進したあとにタッチセンサーを押すと速度を速くすることができるようにプログラムしてもらいます。タッチセンサーを制御するプログラミングブロック(待機)はループの中に入れます。子どもたちに、自分が見つけたアイデアを記録してみんなと共有するためのツールを選んでもらいましょう。文章、動画、画像、スケッチブックといったような、創造力を働かせる媒体を選ぶよう促してください。回答例ファイル名:CODING-07.EV3 (タブ:1)
変数を使って速度を上げる 1.プログラムを開始します。2.「Speed」という変数ブロックを作成し、0の値を入力します。3.もしタッチセンサーが押されたら:a.変数ブロック「Speed」の値を読み込みます。b.読み取った値に10を足します。c.結果の値を変数ブロック「Speed」に書き込みます。d.変数ブロック「Speed」の値を読み込みます。e.変数ブロック「Speed」に保存されている値が示す速度でモーターBとCを起動します。--4.ステップ3aから3eを繰り返します。
注意 詳しいサポートが必要な子どもたちにはロボットエデュケーターチュートリアルを見るように言いましょう。EV3 ソフトウェアでは:ロボットエデュケーター > ベーシック以降 > 変数ロボットエデュケーター > ツール > マイ ブロックロボットエデュケーター > ベーシック(駆動ベース) > 直線運動ロボットエデュケーター > ベーシック以降 > マルチタスクロボットエデュケーター > ベーシック以降 > ループロボットエデュケーター > ベーシック以降 > データ ワイヤーロボットエデュケーター > ベーシック以降 > 基礎数学子どもたちに、今日のレッスンでは変数ブロックを使うこと を説明します。定数と変数の違いを説明しておくとよいでしょう。 - 定数はプログラムの中で何度も繰り返し数値を提供するのに使われます。定数は固定値であり、プログラムが実行されていないときにしか変更することができません。 - 変数は、プログラム内に値を保存し、プログラムに使用するのに使われます。ここでの違いは、変数はプログラムが実行されている間に何度も上書きすることができるという点です。ステアリングブロックと表示ブロックを使って、定数ブロックの仕組みを子どもたちに実演して見せるとよいでしょう。変数ブロックの使い方を説明し、変数を1つ含むプログラムを作ってもらってください。
CONTEMPLATE(よく考える)
(35分)
最初のプログラムが完成して、タッチセンサーが押されるとロボットの速度が上がるようになったら、ロボットの速度を下げるにはプログラムに何をつけ足したらよいかたずねてみましょう。1つの方法は、最初のプログラムに使われたのと同じような無限のループをもう1つ作ることです。このループには別のタッチセンサーポート(別のセンサーを追加)を使用します。数学ブロックは、足し算ではなく引き算を実行するように変更します。子どもたちにマルチタスクについてもう一度説明し、このレッスンではこのようなプログラミングについての知識を使うように言いましょう。回答例ファイル名:CODING-07.EV3 (タブ:2)
変数による速度の増加と減少 1.プログラムを開始します。2.「Speed」という変数ブロックを作成し、0の値を入力し、2つのタスクを開始します。タスク1 3.もしタッチセンサー1が押されたら:a.変数ブロック「Speed」の値を読み込みます。b.読み取った値に10を足します。c.結果の値を変数ブロック「Speed」に書き込みます。d.変数ブロック「Speed」の値を読み込みます。e.変数ブロック「Speed」に保存されている値が示す速度でモーターBとCを起動します。--4.ステップ3aから3eを繰り返します。タスク2 5.もしタッチセンサー2が押されたら:a.変数ブロック「Speed」の値を読み込みます。b.読み取り値から10を引きます。c.結果の値を変数ブロック「Speed」に書き込みます。d.変数ブロック「Speed」の値を読み込みます。e.変数ブロック「Speed」に保存されている値が示す速度でモーターBとCを起動します。--6.ステップ5aから5eを繰り返します。**
ボタンを1回(または2回)押すだけで車輪つきロボットの速度を上げたり下げたりすることができるようになったら、今度はロボットの速度を表示する仕組みをプログラムしてみましょう。表示ブロックを使って変数ブロックに保存されている数値を表示します。このレッスンで学ぶ新しいスキルは、マイ ブロックの作成です。下のプログラムでは2つ使われています。マイ ブロックはすでに書いたプログラムのサブルーチンを作ることができるブロックです。下の例では加速ループと減速ループを利用してマイ ブロックが作られています。マイ ブロックを利用する理由は2つあります。1つはスペースの節約、もう1つは作成したサブルーチンを別のプログラムで再利用しやすくなることです。マイ ブロックについてのチュートリアルはEV3 ソフトウェアのロボット エデュケーターの中に収録されています。回答例ファイル名:CODING-07.EV3 (タブ:3)
変数による速度の増加と減少、速度表示 1.プログラムを開始します。2.「Speed」という変数ブロックを作成し、0の値を入力し、3つのタスクを開始します。タスク1 3.マイ ブロック「Acceleration(加速)」を開始します。タスク2 4.マイ ブロック「Deceleration(減速)」を開始します。タスク3 5.変数ブロック「Speed」の値を読み込みます。6.変数ブロック「Speed」に保存されている値を表示します。7.ステップ5と6を繰り返します。
発表する 子どもたちに、自分の作品や独自の考え、学習の成果を表現するのに最適だと思うツールを自由に選んでもらいましょう。文章、動画、画像、スケッチブックといったような、創造力を働かせる媒体を選ぶよう促してください。評価 プログラミング的思考スキルの具体的な評価基準は「評価」の章に掲載されています。
Continue(さらに続ける)
(45分)
テキストベースのプログラミングを使用する 様々なプログラミング言 語を比較できるよう、子どもたちにテキストベースのプログラミング言語について知ってもらいましょう。
回答例ファイル名:CODING-07_1.C
#pragma config(Sensor, S1, touchSensor, sensorEV3 _ Touch)
#pragma config(Sensor, S2, touchSensor2, sensorEV3 _ Touch)
#pragma config(Motor, motorB, rightMotor, tmotorEV3 _ Large,
PIDControl, driveRight, encoder)
#pragma config(Motor, motorC, leftMotor, tmotorEV3 _ Large,
PIDControl, driveLeft, encoder)
/*
Create a program to control the positive speed of the robot by a press
of a Touch Sensor.
*/
task main()
{
//Create an integer (whole number) variable to store speed value.
int speed = 0;
//Repeat our control loop forever.
while(true)
{
//When I press the touch sensor button.
if(getTouchValue(touchSensor) == 1)
{
//Add 10 to our ‘speed’ variable
if(speed < 100) speed = speed + 10;
//Create a loop to wait for the touch sensor button to be
released.
while(getTouchValue(touchSensor) == 1)
{
//Wait for button to be released.
sleep(10);
}
//Set motorB and motorC speed to the value of the ‘speed’
variable
setMotorSpeed(motorB, speed);
setMotorSpeed(motorC, speed);
}
}
}
注意警告安全ではない可能性があります。
以下はテキストベースのプログラミング言語ROBOTCを使用したプログラムの例です。レゴ マインドストーム EV3と互換性があるそのほかのテキストベースのプログラミング言語を使用しても構いません。レゴ エデュケーションはROBOTCプラットフォームの所有権をもたず、ユーザー体験や使用される技術の品質に対するサポートまたは保証は提供いたしません。セットアップに必要な情報はROBOTCによって提供されています:robotc.net他のプログラミング言語を使用した後は必ずレゴ マインドストーム EV3 ブロックファームウェアを再インストールすることをおすすめします。EV3 ブロックの再インストール方法
そのほかのプログラミング言語
教師用サポート
以下のことに取り組みます:変数ブロックを使用して情報を保存する複数の階層構造をもつプログラムを制作する機能ブロック(マイ ブロック)を作る
教育版 レゴ® マインドストーム EV3 基本セット EV3ソフトウェアまたはEV3プログラミングアプリ [ROBOTCソフトウェア(オプション)
NGSS
MS-ETS1-1. / MS-ETS1-2. / MS-ETS1-3. /MS-ETS1-4.
CSTA
2-A-2-1 / 2-A-7-2 / 2-A-7-3 / 2-A-7-4 / 2-A-5-5 / 2-A-5-6 / 2-A-5-7 / 2-A-3-9 / 2-A-6-10 / 2-C-7-11 / 2-C-4-12 / 2-D-5-16 / 2-I-1-20