[[2005/B7/課題3]] 目次 #contents *ライントレースのプログラム(試作) [#kbbd7db2] // ライントレースのプログラム // // 作成者:かずま // 作成日:2005-11-18 #define THRESHOLD 45 // 閾値 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); // センサ端子1に接続されたセンサが // 光センサであると宣言 SetSensor(SENSOR_3, SENSOR_LIGHT); // センサ端子3に接続されたセンサが // 光センサであると宣言 SetPower(OUT_A,3); // 出力Aのパワーを3に設定 SetPower(OUT_C,3); // 出力Cのパワーを3に設定 while(true) { if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) // センサ1が黒線上かつセンサ3が黒線外のとき { OnFwd(OUT_C); // 出力Cのみ前進する Off(OUT_A); } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) // センサ1が黒線外かつセンサ3が黒線上のとき { OnFwd(OUT_A); // 出力Aのみ前進する Off(OUT_C); } else // センサ1、センサ3がともに黒線上又は黒線外のとき { OnFwd(OUT_A+OUT_C); // 前進する } } } ・思ったより難しい...直角と鋭角のカーブがあやしいなぁ。ゆっくり動かせば何とかなるかと思って、パワーを捨てました。コースを太くした方が良いのかも(-_-;) #comment *ライントレースのプログラム(試作2号) [#l6cec02d] // ライントレースのプログラム // // 作成者:かずま // 作成日:2005-11-24 #define THRESHOLD 45 // 閾値 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); // センサ端子1に接続されたセンサが // 光センサであると宣言 SetSensor(SENSOR_3, SENSOR_LIGHT); // センサ端子3に接続されたセンサが // 光センサであると宣言 SetPower(OUT_A,3); // 出力Aのパワーを3に設定 SetPower(OUT_C,3); // 出力Cのパワーを3に設定 while(true) { if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) // センサ1が黒線上かつセンサ3が黒線外のとき { Off(OUT_A+OUT_C); OnFwd(OUT_C); // 左回転する OnRev(OUT_A); } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) // センサ1が黒線外かつセンサ3が黒線上のとき { Off(OUT_A+OUT_C); OnFwd(OUT_A); // 右回転する OnRev(OUT_C); } else // センサ1、センサ3がともに黒線上又は黒線外のとき { Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); // 前進する } } } ・より鋭くカーブできるように改良!(さらに遅くなったけど…)なぜか左折が苦手、光センサーが原因かなぁ? #comment *ライントレースのプログラム(試作3号) [#if417ff1] // ライントレースのプログラム // // 作成者:かずま // 作成日:2005-11-24 #define THRESHOLD 45 // 閾値 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); // センサ端子1に接続されたセンサが // 光センサであると宣言 SetSensor(SENSOR_3, SENSOR_LIGHT); // センサ端子3に接続されたセンサが // 光センサであると宣言 while(true) { if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) // センサ1が黒線上かつセンサ3が黒線外のとき { Off(OUT_A+OUT_C); OnFwd(OUT_C); // 左回転する OnRev(OUT_A); } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) // センサ1が黒線外かつセンサ3が黒線上のとき { Off(OUT_A+OUT_C); OnFwd(OUT_A); // 右回転する OnRev(OUT_C); } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) // センサ1、センサ3がともに黒線外のとき { Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); // 前進する } } } ・elseを無くしたらなぜか出来ました。SetPowerもあんまり意味ない気がしたんで排除。ちなみに、両方のセンサが黒線上のときのプログラムがないのはわざとです。 -基本的には SetPower はパワーを調整するための命令で回転スピードを調整するための命令ではないので、ゆっくりと動かしたい場合にはギア比を下げたり小さなタイヤを使用しましょう。 -- [[松本(教員)]] &new{2005-11-24 (木) 17:23:29}; -ずっとSetPowerでスピードまで変わるものだと勘違いしてました。ありがとうございました。 -- [[かずま]] &new{2005-11-28 (月) 13:48:05}; -確かにSetPowerでスピードも変わるのですが、おそらく期待するほどは(?)変わらないと思います。SetPower(1) くらいにするとフルパワーのときとかなり違うはずですが実際にはどんな感じでしたでしょうか? -- [[松本(教員)]] &new{2005-11-28 (月) 17:56:04}; -そうですね、ほとんど変わりませんでした。それと動きに覇気が無いと言うか、見ててイライラします。 -- [[かずま]] &new{2005-11-29 (火) 16:33:13}; -モーターが一つと二つの場合の両方をやろう。 -- [[まいける(TA)]] &new{2005-12-02 (金) 17:53:09}; #comment [[戻る>2005/B7/課題3]]