- 追加された行はこの色です。
- 削除された行はこの色です。
【メニュー】
#contents
*課題3:光を追いかけるロボット [#pa756167]
**課題の内容 [#c8f5efc8]
懐中電灯の光を追いかけて進むロボットを製作し、以下1〜4の中から2種類以上のプログラムを作成せよ。
+光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す
+光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す
+光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す
+上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する
ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。
(期限:7月6日)
*ロボット完成までの課程 [#b7058ed5]
***与えられた課題をクリアするために… [#c480d8f5]
両方一時に完成する事は難しいので、一つ一つのプログラムから作成していく事にした。
+光を追いかけるロボットの作成
+曲を演奏するロボットの作成(課題の1と4)
**1.光を追いかけるロボットの作成 [#md78030f]
-光を追いかけるロボット
-ロボットの特徴
***光を追いかけるロボットのプログラム [#se513eb0]
作成者:イケス・カツヤ・ウメ・カトゥ
日時:7月6日(木)
#define go_straight OnFwd(OUT_A+OUT_C); //直進
#define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define minus 15 //マイナス
int max; //maxを定義
int time; //timeを定義
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2:光センサー
max=SENSOR_2; //センサー2をmaxに指定
time=Timer(0); //timeをタイマー0に指定
ClearTimer(0); //タイマー0をリセット
while(Timer(0)<=14) //タイマー0が14以下の時
{
turn_right //右旋回
if(SENSOR_2>max) //センサー2が最大値以上なら
{
ClearTimer(1); //タイマー1をリセット
max=SENSOR_2 ; //センサー2を最大値に指定
}
else //そうでなければ
{
max=max; //maxをそのまま
time=Timer(1); //timeをタイマー1に指定
}
}
ClearTimer(1); //タイマー1をリセット
while(Timer(1)<=time) //timeがタイマー以下の時
{turn_left} //左旋回
while(true)
{
if(SENSOR_2>=max-minus) //センサー2が最大値?マイナス以上の時
{go_straight} //直進
if(SENSOR_2<max-minus) //センサー2が最大値?マイナス未満の時
{
turn_right //右旋回
ClearTimer(2); //タイマー2をリセット
until((SENSOR_2>=max-minus)||(Timer(2)==5)); //センサー2が最大値?マイナス以上、またはタイマー2が5まで
}
if(SENSOR_2<max-minus) //まだセンサー2が最大値?マイナス未満の時
{
turn_left //左旋回
until(SENSOR_2>=max-minus); //センサー2が最大値?マイナス以上まで
}
}
}
-昨年度のページなどを参考にしてみたのだが、書かれているプログラムの意味を理解するのに多くの時間がかかってしまった。しかも、まだわからないところもノ。最後の課題であるロボコンでは、プログラムの意味をしっかりと理解した上で臨みたい。
**2.曲を演奏するロボットの作成 [#zd6abc62]
***演奏曲[#y69d0609]
『プログラム』
作成者:イケス・カトゥ
#define Mi 330
#define Fa 349
#define So 392
#define Ra 440
#define Si 494
#define Do 523
#define Re 587
#define mi 659
task play_music()
{
while (true)
{
PlayTone(Ra,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Do,120); Wait(150);
PlayTone(Do,30); Wait(35);
PlayTone(Re,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,120); Wait(150);
PlayTone(Si,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Ra,120); Wait(150);
PlayTone(Ra,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Do,90); Wait(120);
PlayTone(Ra,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Do,120); Wait(150);
PlayTone(Do,30); Wait(35);
PlayTone(Re,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,120); Wait(150);
PlayTone(Si,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Ra,120); Wait(150);
PlayTone(Mi,30); Wait(35);
PlayTone(Fa,30); Wait(35);
PlayTone(Mi,30); Wait(35);
PlayTone(Mi,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Ra,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(mi,60); Wait(70);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Fa,60); Wait(70);
PlayTone(Ra,60); Wait(65);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,60); Wait(70);
PlayTone(Fa,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(mi,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Fa,60); Wait(70);
PlayTone(Ra,60); Wait(65);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Ra,90); Wait(95);
PlayTone(Ra,90); Wait(95);
PlayTone(So,60); Wait(65);
PlayTone(Ra,120); Wait(125);
Wait(50);
}
}
task main()
{
SetSensor(SENSOR_1, SENSOR_TOUCH);
start play_music ;
OnFwd(OUT_A+OUT_B);
until (SENSOR_1==1);
stop play_music ;
Off(OUT_A+OUT_B);
}
-「青空」という曲。
***その1【光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す】 [#w1ff88ce]
『プログラム』
作成者:
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define go_straight OnFwd(OUT_A+OUT_C);
#define Mi 330
#define Fa 349
#define So 392
#define Ra 440
#define Si 494
#define Do 523
#define Re 587
#define mi 659
task play_music()
{
while (true)
{
PlayTone(Ra,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Do,120); Wait(150);
PlayTone(Do,30); Wait(35);
PlayTone(Re,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,120); Wait(150);
PlayTone(Si,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Ra,120); Wait(150);
PlayTone(Ra,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Do,90); Wait(120);
PlayTone(Ra,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Do,120); Wait(150);
PlayTone(Do,30); Wait(35);
PlayTone(Re,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,120); Wait(150);
PlayTone(Si,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Si,30); Wait(35);
PlayTone(Ra,120); Wait(150);
PlayTone(Mi,30); Wait(35);
PlayTone(Fa,30); Wait(35);
PlayTone(Mi,30); Wait(35);
PlayTone(Mi,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Ra,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(mi,60); Wait(70);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Fa,60); Wait(70);
PlayTone(Ra,60); Wait(65);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,60); Wait(70);
PlayTone(Fa,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(mi,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,30); Wait(35);
PlayTone(Fa,60); Wait(70);
PlayTone(Ra,60); Wait(65);
PlayTone(Si,60); Wait(65);
PlayTone(Do,30); Wait(35);
PlayTone(Ra,90); Wait(120);
PlayTone(Ra,90); Wait(95);
PlayTone(Ra,90); Wait(95);
PlayTone(So,60); Wait(65);
PlayTone(Ra,120); Wait(125);
Wait(50);
}
}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(true)
{
start play_music;
while(SENSOR_2<60)
{
go_straight;
}
while(SENSOR_2>60)
{
stop play_music;
turn_left;
}
}
}
***その4【『光源に近づき過ぎると停止する』という機能を追加する】 [#jf208187]
『プログラム』
作成者:カツヤ・ウメ
-演奏曲は先ほどのと同じ。
*反省点 [#e257024a]
**工夫した点 [#x8f064af]
-演奏曲に力を入れた。
-最初から光センサーと曲のプログラムを一緒に作るのが大変だったので光センサーと曲のプログラムを別々に作った。
**苦労した点 [#t3c52926]
-曲と光センサーのプログラムをセットにすることが難しかった。
-光を追うロボットのプログラムが難しすぎたため、昨年度のプログラムを参考にさせてもらった。
**今後の課題 [#zcd11ed0]
-ロボコンまでにもう少し複雑なプログラムを使えるようになっておきたい。
*A6へのアドバイス [#x24d9b52]
アドバイスお願いします!
#comment