- 追加された行はこの色です。
- 削除された行はこの色です。
[[2008b/MemberOnly/進行状況A]]
2008b/A7/課題3右
#hr
CENTER:&size(25){光追跡ロボット};
#hr
CENTER:製作者:タキさ Y田
目次
#contents
-------
*課題についての説明 [#d306895c]
インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、
以下の動きをするようにプログラムを作成せよ。
(重複しないように一人一つ以上のプログラムを作成すること)
1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで
懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。
2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを
止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。
懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、
タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく
懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。
*製作したマシン [#e6da836a]
|>|CENTER:COLOR(#808080):''マシン''|
下にある画像が完成したマシンです。
このマシンの製作行程
-------
|>|CENTER:COLOR(#808080):''マシン全体図''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/zentai_yoko3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/zentai_ue3.jpg,50%,);|
|>|CENTER:COLOR(#808080):''アーム''|
|>|CENTER:COLOR(#808080):''ブロックを投げるアーム''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/aim_light3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/arm_left3.jpg,50%,);|
|>|CENTER:COLOR(#808080):''マシン''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/gia3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/stoper3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/kiteibu3.jpg,50%,);|
|>|CENTER:COLOR(#808080):''マシン詳細図''|
|>|CENTER:COLOR(#808080):''ストッパー ギア ドライブベース''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/stoper3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/gia3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/kiteibu3.jpg,50%,);|
*モータ・センサに対応する端子 [#d352300d]
モータ、センサについては以下の端子に接続してあります。
-出力側
A端子 → モータ:タイヤ(正回転:右回転,逆回転:左回転)
B端子 → 使用せず
C端子 → モータ:アーム(正回転:使用せず,逆回転:投げる)
-入力側
1端子 → 光センサ(右)
2端子 → 使用せず
3端子 → 光センサ(左)
*プログラムの紹介 [#n9e8de4f]
Y田製作プログラム(課題1)
task main(){
int s1, s3;
s1 = 0;
s3 = 0;
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetPower(OUT_A,5);
OnRev(OUT_A);
ClearTimer(0);
while(FastTimer(0) <= 500){
if(SENSOR_1 > s1)s1 = SENSOR_1;
if(SENSOR_3 > s3)s3 = SENSOR_3;
}
s1 = s1 - 5;
s3 = s3 - 5;
while(1){
if((SENSOR_1 > 75) || (SENSOR_3 > 75)){
Off(OUT_A);
OnRev(OUT_C);
Wait(17);
Off(OUT_C);
break;
}
if(SENSOR_1 < s1 && SENSOR_3 >= s3){
while(SENSOR_1 < s1)OnFwd(OUT_A);
}
if(SENSOR_1 >= s1 && SENSOR_3 < s3){
while(SENSOR_3 < s3)OnRev(OUT_A);
}
}
}
タキさ製作プログラム(課題2)
/* 光追跡ロボット */
/* 定数を定義 */
#define SHI_J 75
void move_fwd(void){
OnFwd(OUT_A);
Wait(27);
OnRev(OUT_A);
Wait(20);
Off(OUT_A);
}
task main(){
int ligth_max, left_max;
ligth_max = 0;
left_max = 0;
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetPower(OUT_A,5);
OnRev(OUT_A);
ClearTimer(0);
while(FastTimer(0) <= 500){
if(SENSOR_1 > ligth_max)ligth_max = SENSOR_1;
if(SENSOR_3 > left_max)left_max = SENSOR_3;
}
ligth_max = ligth_max - 5;
left_max = left_max - 5;
while(1){
if((SENSOR_1 > SHI_J) || (SENSOR_3 > SHI_J)){
Off(OUT_A);
OnRev(OUT_C);
Wait(17);
Off(OUT_C);
break;
}
if(SENSOR_1 >= ligth_max && SENSOR_3 >= left_max){
while((SENSOR_1 >= ligth_max) || (SENSOR_3 >= left_max))move_fwd();
}
else if(SENSOR_1 < ligth_max && SENSOR_3 >= left_max){
while(SENSOR_1 < ligth_max)OnFwd(OUT_A);
}
else if(SENSOR_1 >= ligth_max && SENSOR_3 < left_max){
while(SENSOR_3 < left_max)OnRev(OUT_A);
}
else if(SENSOR_1 < ligth_max && SENSOR_3 < left_max){
while((SENSOR_1 < ligth_max) || (SENSOR_3 < left_max))OnRev(OUT_A);
}
}
}
*工夫した点 [#u55de425]
*製作日誌 [#u1068eb7]
*皆さんのコメント [#g72ad519]
よろしければコメントをどうぞ
- テスト -- [[タキさ]] &new{2009-01-22 (木) 18:30:46};
#comment