- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/A2/課題3]]
*作成中... [#bb617b20]
*アンバランス [#de3b3251]
モーター2個、光センサー1個使用。
**プログラム [#v0ae3c0b]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
while(true){
if(SENSOR_2<45){
OnFwd(OUT_C);
}
else{
OnFwd(OUT_A);
}
Off(OUT_A+OUT_C);
}
}
{
SetSensor(SENSOR_2, SENSOR_LIGHT);//センサー2をライトセンサーにする
while(true){
if(SENSOR_2<45){ //線上にいるときは左周り
OnFwd(OUT_C);
}
else{
ClearTimer(0); //タイマー0
t=FastTimer(0); //tをタイマー0に定義
OnFwd(OUT_A); //線から外れると右周り
if(t>100){
OnFwd(OUT_C);Wait(t+50);//もし一秒いないにラインを見つけられなければ、
//左に1.5秒回転し逆走するのを防ぐ
}
}
Off(OUT_A+OUT_C);
}
}
**ロボの話 [#kc6e9308]
前の課題が遅くなってしまったため、タッチセンサーの付いたロボに
少し強引な形で、光センサーを付け走らせた。
...想像していたよりも速いスピードで鮮やかなコーナリングを決めていた。
...想像していたよりも速く、鮮やかなコーナリングを決めていた。
**プログラムの話 [#bf8ebbeb]
時間の都合状、サンプルを少し変えただけの物になってしまった。
周りきれない場合を考えてタイマーを付ける...予定。
周りきれない場合を考えてタイマーを付けた事は、
まあ、良い練習になったと思う。
*モーターが一つ [#q766010b]
モーター1個、光センサー1個使用。
**プログラム [#b3bf4be0]
#define THRESHOLD 45 // 閾値
#define RUN_TIME 100 // トレースする時間(単位 1/10 秒)
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
ClearTimer(0); // Timer(0) をリセット
while(Timer(0) <= RUN_TIME){ //タイマー有り
if(SENSOR_2 < THRESHOLD){ // 黒線上にいるとき
OnFwd(OUT_A);
}else{ // 黒線から外れたとき
OnRev(OUT_A);
task main(){
SetSensor (SENSOR_1, SENSOR_LIGHT);
SetSensor (SENSOR_3, SENSOR_LIGHT);
OnRev(OUT_A); //きっかけ
while(true){
if(SENSOR_1 < 50){ //左センサ黒tのる
OnFwd(OUT_A); //right_tire go!
until(SENSOR_3 < 43);
}if(SENSOR_3 < 43){ //right on black
OnRev(OUT_A); //left_tire go!
until(SENSOR_1 < 50);
}
}
Off(OUT_A+OUT_B);
}
**ロボの話 [#ffd1558f]
モーター1個だけを使用で試行錯誤を繰り返す。
片方にしか曲がれないので逆戻りしてしまった。最初はifである時間以上トレース出来なければ次のトレースを無視するなどを考えたけど、
それだと一回転してもカーブを通過していなかったら意味が無いので却下した。富岡さんのスケッチも参考にしてみたがなかなかうまく
いかなった。
富岡さんのスケッチも参考にしてみたがなかなかうまくいかなった。
試行錯誤の結果、説明書のシークレットのページで左にだけなら曲がれるようになり、
同時に、モーター1個で前進後退の方法を理解した。
それに伴い、右折左折しかできないロボを完成。
**プログラムの話 [#r6b10d26]
片方にしか曲がれないので逆戻りしてしまった。最初はifである時間以上トレース出来なければ次のトレースを無視するなどを考えたけど、
それだと一回転してもカーブを通過していなかったら意味が無いので却下した
**作成者 [#q68b9c0b]
キャべツ トマト 富岡
**感想 [#te268daa]
#comment