- 追加された行はこの色です。
- 削除された行はこの色です。
&size(40){ロボット課題3};
#contents
*設計 [#gbe63518]
**車体 [#p3f5477d]
#ref(CIMG0938.JPG)
↑↑全体~
写真中央にあるのが発射台です。~
左上の青いブロックが光センサーで懐中電灯の光を感知します。~
#ref(CIMG0939.JPG)
↑↑RCX
-目標を探すための回す部分
-誤差を完全回避ための設計
-発射部分が重くて動きにくいのは欠点
#ref(CIMG0940.JPG)
↑↑ギアの取り付け部分(後ろ側より)
#ref(CIMG0941.JPG)
↑↑ギアの取り付け部分(前側より)~
#ref(3-1.jpg)
-A(1)->B->C->D->E->F->2順
-一つのモータは二つ違う方向の伝送に責任を負う設計
-発射するため早い初速度が必要ため、1まずブロックを押し、2もだんだん棒を抜き出す
-「あ」は発射台を固定するための棒で、「い」は前進するためのモータとギア
#ref(003.jpg)
↑↑光センサーです。~
~
中立な稲妻のこだわりでオリジナルにこだわりました。~
結構大きいものになりました。~
見た目で感じてもらえると思います!!~
*プログラム [#qc3c2d87]
**1.懐中電灯に向かって投げる [#ee210217]
#define TURN_TIME 400 //1周の時間を設定
#define throw OnFwd(OUT_A);Wait(1);Off(OUT_A); //投げるときの定義
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ−1をライトセンサーと設定
SetPower(OUT_C,2); //モーターCの出力を制限
int light_max=0; //光の最大値
int t_max=0; //最大値のときの時間
ClearTimer(0); //タイマーを0にして
OnFwd(OUT_C); //探し始めます
while(FastTimer(0)<TURN_TIME){ //回っている間
if(SENSOR_1>light_max) //最大値の光を見つけたら
{
light_max=SENSOR_1; //最大値の光と設定
t_max=FastTimer(0); //タイマーを入れる
}
}
Off(OUT_C);
Wait(50);
OnFwd(OUT_C);
Wait(t_max); //最大値の光までまわる
Off(OUT_C);
throw //投げる
}
作成者:竹
**2.懐中電灯に近づいて投げる [#r1be70c8]
比較的うまく探すことができました。
**2.懐中電灯を追っていき投げる[#r1be70c8]
#define TURN_TIME 400 // 1周の時間を設定
#define throw OnFwd(OUT_A);Wait(1);Off(OUT_A); // 投げるときの定義
#define straight Off(OUT_C);Wait(10);OnFwd(OUT_C);Wait(20);OnRev(OUT_C);Wait(20); // 近づくときの定義
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ−1をライトセンサーと設定
SetPower(OUT_C,2); //モーターCの出力を制限
int light_max=0; //光の最大値
int t_max=0; //最大値のときの時間
ClearTimer(0); //タイマーを0にして
OnFwd(OUT_C); //探し始めます
while(FastTimer(0)<TURN_TIME){ //1周しているとき
if(SENSOR_1>light_max){ //最大値の光にあったら
light_max=SENSOR_1; //最大値の光と設定
t_max=FastTimer(0); //最大値の光のところまでの時間をはかる
}
}
Off(OUT_C);
Wait(50);
OnFwd(OUT_C);
Wait(t_max); //最大値の光まで回って
Off(OUT_C);
straight //近づいて
throw //投げる
}
作成者:中立な稲妻
------
課題を当初勘違いしていました。
イメージしてプログラムを作ったので、こちらで評価していただければと思います。
**訂正 [#c1288d94]
#define THERESHOLD 45 //閾値を45と設定
#define light_max 50 //最大値の光を50と設定
#define throw OnFwd(OUT_A);Wait(1);Off(OUT_A); // 投げるときの定義
#define straight Off(OUT_C);Wait(10);OnFwd(OUT_C);Wait(20);OnRev(OUT_C);Wait(20); // 近づくときの定義
#define TURN_TIME 800 //2周させるための時間
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ−1をライトセンサーと設定
SetPower(OUT_C,2); //モーターCの出力を制限
while(FastTimer(0)<TURN_TIME) //2周している間に
if(SENSOR_1>THERESHOLD){ //閾値40以上の時
if(SENSOR_1>light_max){ //最大値50の光にあったら
straight //近づいて
throw //投げる
}
}
Off(OUT_C);
Wait(50);
}
閾値と最大値の光は過去のを参考にして設定しました。
2のプログラムはタイマーよりも閾値を試行錯誤しながら探しだしてプログラムに使用する方がいいのではないかと
思いました。
*感想 [#vf513274]
**竹 [#udfb96b2]
前回の課題よりは難しくなかったですが、タイマーを使ったプログラムは初めてだったのでちょっと大変でした。
また移動させるためのモーター一つというのも難しい課題でした。
**中立な稲妻 [#rc28ad64]
かなり難しい課題ですよね。
直接投げる方は簡単ですけど、人並みの設計が嫌いですので、独特な面白い(たぶん?)ロボットを作りました。
輪ゴムを使ったら一番早い初速度を得られるかもしれないですけど、切れたら面倒ですのでその方案を放棄しました。
*コメント [#s84efe2d]
お願いします。
- ロボットの方も工夫しているのは良いと思います。2つ目の課題では懐中電灯は懐中電灯が逃げていくので、それを追っていく課題です。過去のページも参考にしてみてください -- [[FI]] &new{2009-08-05 (水) 08:06:05};
- 2つ目の課題を修正しました。イメージになってしまいましたが、課題点なども書いたので再評価お願いします。 -- [[竹]] &new{2009-08-08 (土) 23:40:34};
#comment