- 追加された行はこの色です。
- 削除された行はこの色です。
[[2008b]]
*目次 [#te2dadd2]
#contents
*課題3 懐中電灯に向かってブロックを投げるロボット [#i2f30c9c]
**1 課題の概要 [#te98618a]
インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)
~その1 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。
~その2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。
&br;懐中電灯の代わりに携帯のライトなどを利用してもよい。 モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。
**2 ロボット本体の製作過程 [#o2189730]
**3 ロボットの完成の様子と工夫点 [#zf6a78ee]
**4 ロボットのプログラム [#vbfbdfde]
***その1 [#s5c1a5fb]
#define THRESHOLD 50 //闘値を50に設定
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーに設定
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーに設定
SetPower(OUT_A+OUT_C,7); //出力を7に設定
OnFwd(OUT_C); //左に回転
while(true){
if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)){ //センサ−1、3とも闘値より強い光を感知した場合、
Off(OUT_C); //タイヤを止める
Wait(50); //(動作を安定させるための停止時間)
OnFwd(OUT_A); //アームを動かしてブロックを投擲
Wait(50); //
Off(OUT_A); //アームを止める
}
if(SENSOR_3>THRESHOLD){ //センサ−3が闘値より強い光を感知した場合,
OnRev(OUT_C); //右に回転
}
if(SENSOR_3>SENSOR_1){ //センサ−3がセンサ−1よりも強い光を感知している場合、
OnRev(OUT_C); //右に回転
}
}
}
***その2 [#ze1f5b99]
#define hikari 53
#define line 75
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetPower(OUT_A+OUT_C,7);
while (true) {
if((SENSOR_1>hikari)&&(SENSOR_3>hikari)){
OnRev(OUT_C);Wait(20); //zenshin
OnFwd(OUT_C);Wait(20);
}
if ((SENSOR_1>hikari)&&(SENSOR_3<hikari)){
OnRev(OUT_C); //migimawari
}
if((SENSOR_1<hikari)&&(SENSOR_3<hikari)){
OnFwd(OUT_C); //hidari
}
if((SENSOR_1>line)&&(SENSOR_3>line)){
Off(OUT_C);
OnFwd(OUT_A);Wait(12); //nageru
Off(OUT_A);
break;
}
}
Off(OUT_C);
}
*コメント [#we22e274]
コメントがあればどうぞ
*相方に難しいことばかり押し付けてしまいました。唯一役立てたのは、モーター底辺に棒を差し込めることを発見したことだけです。
#comment