- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006b/A6/L Room]]
#contents
*課題3 光を追いかけるロボット[#lb25a669]
懐中電灯などの光源を用意する。まず明るさに比例した周波数の音を出しながら全方角の中から光源のある方角を探し、探した後は、光源の光を追いかけて進むロボットを作成
*ロボット [#g42f782a]
#ref(2006b/A6/課題3左/06-12-22_16-23.jpg,70%,あおP-Z)
**工夫した点 [#b0f97453]
外観デザインにこだわった。愛くるしい(?)目が特徴!無駄なものと言えばそのとおりです...~
#ref(2006b/A6/課題3左/06-12-22_16-24.jpg,50%,あおP-Z め)
**苦労した点 [#mb6e10ea]
基本的な形は前回の課題のものをそのまま引き継いだのだが、光センサーを1つにするか2つにするかで悩んだ。結局1つでいくことにした。~
*プログラム [#f99b2b13]
*プログラム1 [#f99b2b13]
#define turn_time 420
task play_music()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを設置
while (true)
{
PlayTone(10*SENSOR_1,10);Wait(7); //センサー1の値の10倍の周波数の音を奏でる
}
}
task main()
{
while(true)
{
int light_max=0,time_max; //明るさの最大値と時間を変数で定義
ClearTimer(0);
OnFwd(OUT_A);OnRev(OUT_C); //その場で回転し、光源の方向を確認
start play_music;
while(FastTimer(0)<turn_time)
{
if(SENSOR_1>light_max)
{
light_max=SENSOR_1;
time_max=FastTimer(0); //回転し始めた地点から光源確認までの時間(*)を計る
}
}
OnRev(OUT_A);OnFwd(OUT_C);
Wait(turn_time - time_max); //1回転の時間から(*)の時間を引いた分逆回転する⇒光源の方向を向く
stop play_music;
OnFwd(OUT_A+OUT_C);
Wait(300); //光源の方向へ走る
}
}
*プログラム2(たぶん失敗)byサエグサ [#a743d698]
int lightmax=0; //lightmaxを定義
int timemax=0; //timemaxを定義
#define turn_time 420 //turn_timeを420と定義
int lightmax=0 ; //lightmaxを定義
int timemax=0; //timemaxを定義
#define turn_time 420 //turn_timeを420と定義
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
while(true)
{ ClearTimer(0); //タイマーをリセット
{ ClearTimer(0); //タイマーをリセット
OnFwd(OUT_A);OnRev(OUT_B) //回転と電源探し
start Play_music;
while(FastTimer(0)<turn_time)
{
if(SENSOR_1>light_max)
{
light_max=SENSOR_1;
timemax=turn_time-FastTimer(0);
}
}
OnFwd(OUT_A+OUT_C);//光源の方向に走る
OnFwd(OUT_A+OUT_C); //光源の方向に走る
少し違うプログラムを作ってみました。でも、ロボットがないのでどんな動きをするか不明。前のプログラムよりも若干容量が軽くなったのでは?
*プログラム3 [#u67ff710]
このプログラムは、プログラム1での動作の、光源を探す際の回転をなくしたものです。キットは既に返却したため実際に動きを確認することはできませんが、プログラムだけ組みました。なお、光センサーは2個使用しています。
#define TURN_TIME 400 //ロボットが1回転する時間を設定
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを設置
int light_max=0,time_max;
ClearTimer(0);
while(FastTimer(0)<TURN_TIME)
{
OnFwd(OUT_A); OnRev(OUT_C); //その場で回転
if(SENSOR_1>light_max)
{
light_max=SENSOR_1;
time_max=FastTimer(0);
} //明るい光を発見したら、発見までにかかった時間を記憶
}
OnFwd(OUT_C);OnRev(OUT_A);Wait(TURN_TIME-time_max); //最も明るい方向を向く
OnFwd(OUT_A+OUT_C); Wait(50);
while(true) //光を追跡
{
if(SENSOR_1>SENSOR_3+3)
{
OnFwd(OUT_C); OnRev(OUT_A); Wait(10);
} //センサ−1の方が明るかったらセンサ−1の方を向く
if(SENSOR_1+3<SENSOR_3)
{
OnFwd(OUT_A); OnRev(OUT_C); Wait(10);
} //センサ−3の方が明るかったらセンサ−3の方を向く
else
{
OnFwd(OUT_A+OUT_C);
} //明るい方向を向いているときはそのまま直進
}
}
**苦労した点 [#xcb0d2f5]
松本先生が最初に提示して下さったヒントのプログラムの意味を理解するだけでだいぶ時間がかかってしまった。~
**工夫した点 [#z9a02512]
音そのものにはあまりこだわらず、全体的にすっきりしたプログラムになるようにした。~
**反省・感想 [#u66dd822]
『明るさに比例した周波数の音』をどのように発生させるかということに見当もつかず、最終的には他のチームの考えをかなり参考にさせていただいた。~
今回の課題は年末に出され、提出期限が年明け早々だったので、実験する時間がなくめちゃめちゃキツかった・・・(´δ`;)~
毎回思うことだが、課題は早めに取り組んだ方がいいと思う。。。
この課題にから、難易度が一気に上がりましたね;もうついていくだけで一杯一杯でした・・・(いや、ついていけてたのだろうか@@;)
**リンク [#e768998a]
**意見など、こちらにお願い致します [#haed9116]
-
-光源を移動してもロボットが追従してくるようにプログラムを改良しましょう。 -- [[松本(教員)]] &new{2007-01-09 (火) 13:49:50};
-松本先生のコメントに対して返答いたします。現プログラムでも、光源の位置を移動しても旋回して移動した光源に向かって追従していきます。もっとなめらかにするとなると難しいです。 -- [[あおっぺ]] &new{2007-01-12 (金) 14:01:19};
-(光源を見失った時以外は)一回転して探さなくても光源に向かってくるようにプログラムを変更してみてください。 -- [[松本(教員)]] &new{2007-01-12 (金) 15:06:45};
-プログラムのこの構文や命令が特に難しかったとか、理解するのに勉強したことなど書いてみるといいかもしれませんね。 -- [[まいける(TA)]] &new{2007-02-17 (土) 13:53:59};
#comment