ライントレースをするロボット

左右のメンバー入れ替えとのことだったが、変更せずに作ったロボット

目次

開発日記

6月2日

授業中話し合った結果、光センサーを2つ、タッチセンサーを1つ使ったロボットを作ることにした。
初☆評価の勢いで、このロボットもハチャメチャにしっかりと作っていきたいと思う。

6月8日

明日が締め切りだと勘違いし、慌てふためく。
軽くプログラムを作ったものの、何故か直進。改良の余地あり。

6月9日

初号機のお披露目。だが、すぐに改良の手が差し掛かる。速度を上げるため、ギアの比率を変えてみる。

6月15日

安心しきったせいか、とうとう期限前日まで手付かず。必死にプログラムを改良するが、やはり直進。だれか救援を・・・

7月21日

ロボコン製作段階へと入っているのに今頃ページを更新。
理由は締切期限が迫っているからであります。

ライントレースロボ 完成(?)までの道のり

基本の車体作り

駆動方法:車輪による移動
センサー類:光センサー 2個    タッチセンサー 1個
ドライブベースは説明書に載っているものと同じ。

センサー類の行き先

センサーの数が決まったが、どこにつけるかは決めていなかった。
ロボ製作の上手いメンバーに依頼したところ、高機能なバンパーが完成した。先頭部分にタッチセンサーが配置され、光センサーが並ぶようにバンパーの中央に設置されたものだ。ただブロックを重ねるだけでなく、横の穴からも接続しているため、課題1で深刻だった強度不足も全く心配なかった。
光センサーが並んでいるので、黒線の中を進んでいくことになった。なるべく線を細くできるように、片方のセンサーの向きを変え、密着させている。

センサー

なるべく速く走れるように

課題2を見てわかるように、今回は機動力も重視される。
駆動案にキャタピラ・車輪・足などが挙がったが、やはり構造が簡単で確実な車輪に決定。ギアの比率を変えることで簡単にスピードアップができた。
(だが当日は標準速度へ…)

初号機

いざプログラムへ。しかし…

車体ができたところで、早速プログラムを作ってみた。しかし、線を無視して猪突猛進。プログラムを見直しても知識不足のせいか、解決できず。
一人のメンバーのプログラムで何とかライントレースができたため、前日はここで諦める。

そういえば…?

当日になって、コースを作ってないことが問題に。
「何がいい?」と聞く段階で作業が止まってしまい、時間ギリギリから作成開始。その結果がこちら↓

でたらめコース

人生への迷いが感じられます
画用紙の両面にコースを書いて、裏表を変えれば色々な組み合わせができるコースもいいなと考えていた。だが、その頃には目の前に失敗作が…
あえなく一面だけのコースとなりました。

忘れられた存在

今まで全く交換していなかった電池ですが、少し気になって調べてみたところ電圧は7.78V…
授業では8Vをきったら交換しろと言われていました。まさか誤作動はこれが原因なのでは?
当然この次の課題で電池交換をしました。費用は150円なり〜

いざ発表?

さあ発表…と思いきやあまり発表らしきものはしなかった。
まぁ一部未完成だったしいいかなぁと。結局この日はそれで終わりました。

おまけ [bigsmile]

上の写真ではスッキリしたロボットですが、オプションパーツが存在します。それにプログラムにはOUT_Bの文字が…
その正体は…?



こちらで〜す [smile]


輪ゴム飛ばし機

いや〜とても画期的な発明です。モーターが回ると軸に取り付けたネジ状のパーツが回り、輪ゴムが上へとのぼっていきます。そして、最終的には発射されます。
3連続発射が可能です。これで前のロボットを攻撃か?

まとめ

苦労した点

工夫した点

今後の課題

反省

結局今回は不完全燃焼で終わってしまった。時間は十分あったはずなのにあまり成果がないので、改善すべきだなと思った。
今回もメンバー全員が授業以外で集まることはなかった。どうせやるなら、皆で協力してやっていきたい。 今回のコースは画用紙を使って製作しました。買ってから気づいたが、模造紙のほうが広く、持ち運びも便利だなと感じました。

プログラム

受け付けなかったプログラムはこちら↓
2006a/A2/課題2右/前プログラム

訂正したプログラム(当たると旋回)   //製作者 少年

#define light 35                   //光の閾値
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1を光センサーと定義
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーと定義
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーと定義
OnFwd(OUT_B);                      //おまけを始動
while(1)              //無限ループ
 {
 if(SENSOR_1>light)        //センサー1が線の外の場合
  {
  Float(OUT_C);          //進みながら左へ曲がる          
  }else{              //そうでない場合
  OnFwd(OUT_A+OUT_C);       //直進
  }
 if(SENSOR_3<light)        //センサー3が線の外の場合
  {
  Float(OUT_A);          //進みながら右へ曲がる
  }else{              //そうでない場合
  OnFwd(OUT_A+OUT_C);       //直進
  }
 if(SENSOR_2==1);         //物に触れた場合
  {
  OnFwd(OUT_A);OnRev(OUT_C);Wait(180);  //旋回
  }
 }
}

訂正したプログラム(当たると追い越し) //製作者 少年

#define light 40                   //光の閾値を設定
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1が光センサーと定義
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2がタッチセンサーと定義
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3が光センサーと定義
while(1)              //無限ループ
 {
 if(SENSOR_1>light)        //センサー1が線から外れた場合
  {
  Float(OUT_C);          //前進しながら左へ
  }else{              //センサー1が線の中の場合
  OnFwd(OUT_A+OUT_C);              //前進
  }
 if(SENSOR_3<light)        //センサー3が線から外れた場合
  {
  Float(OUT_A);          //前進しながら右へ
  }else{              //そうでない場合
  OnFwd(OUT_A+OUT_C);       //前進
  }
 if(SENSOR_2==1);         //物に触れた場合
  {
  Float(OUT_C);Wait(30);      //前進しながら左へ
  OnFwd(OUT_C);Float(OUT_A);Wait(30);  //前進しながら右へ
  OnFwd(OUT_A);          //線の中へ
  }
 }
}
 

これはタッチセンサーが反応したら反対方向にロボットが動く    

プログラム     //制作者 ムーディ [#j1749bc7]

#define x 30      光の閾値
task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサ−1を光セ ンサーと定義
 SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサ−3を光センサーと定義
 SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサ−2をタッチセンサーと定義
 while(1){              //無限ループ
  if(SENSOR_1<x)
   {          //センサ−1がライン上に乗った場合
   OnFwd(OUT_C);         //左に曲がる
   }
  if(SENSOR_3<x)
   {          //センサ−3がライン上に乗った場合
   OnFwd(OUT_A);          //右に曲がる
   }
  if((SENSOR_1>x)&&(SENSOR_3>x))  //センサー1、3が ともにライン上にない場合
   {
   OnFwd(OUT_A+OUT_C);
   }      //直進
  if(SENSOR_2==1)
   {         //タッチセンサーが反応した場合
   OnFwd(OUT_A);Wait(180);   
   OnRev(OUT_C);Wait(180);     //回転
   }
  }
 }

これは追い越しプログラム      //制作者 ムーディ

#define x 40//光の閾値
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT)  //センサー1を光センサーと定義
SetSensor(SENSOR_3,SENSOR_LIGHT)  //センサ−3を光センサーと定義  
SetSensor(SENSOR_2,SENSOR_TOUCH)  //センサ−2をタッチセンサーと定義
while(1){//無限ループ      
 if(SENSOR_1<x)
  {          //センサー1がライン上に乗った場合
  OnFwd(OUT_A);        //左に曲がる
  }         

  

 if(SENSOR_3>x)
  {          //センサ−3がライン上に乗った場合
  OnFwd(OUT_A);          //右に曲がる
  }
 if((SENSOR_1>x)&&(SENSOR_3>x)){  //センサー1、3が共にライン上にない場合
  {OnFwd(OUT_A+OUT_C);}      //直進 
 if(SENSOR_2==1)
  {         //タッチセンサーが反応した場合 
  OnRev(OUT_A+OUT_C);Wait(100);  //後退して
  OnFwd(OUT_A);Wait(45);
  OnRev(OUT_C);Wait(45);     //右に回転し
  OnFwd(OUT_A+OUT_C);Wait(70);  //前進
  OnFwd(OUT_C);Wait(45);
  OnRev(OUT_A);Wait(45);     //左に回転し
  OnFwd(OUT_A+OUT_C);Wait(100);  //前進
  OnFwd(OUT_A);Wait(45);
  OnRev(OUT_C);Wait(45);     //右に回転してコースに戻る
  }
 }
}

ライントレース       //制作者   ジュニア

これはラインからはみ出したときに片っぽのタイヤを止めてからトレースするプログラムです。

#define light 35                   //LIGH値
task main()
SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1=光センサ
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2=タッチセンサ
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3=光センサ
while(1)              //無限ループ
{
if(SENSOR_1>light)        //センサー1=線の外
 {
 Off(OUT_C);          //左へ旋回         
 }else{              //そうでない場合
 OnFwd(OUT_A+OUT_C);       //直進
 }
if(SENSOR_3<light)        //センサー3=線の外
 {
 Off(OUT_A);          //右へ旋回
 }else{              //そうでない場合
 OnFwd(OUT_A+OUT_C);       //直進
 }
if(SENSOR_2==1);         //物に触れた場合
 {
 OnFwd(OUT_A);OnRev(OUT_C);Wait(360);  //旋回
 }
}
}

コメント欄

よろしければアドバイスを…



添付ファイル: fileSN310106.JPG 344件 [詳細] fileSN310104.JPG 302件 [詳細] fileSN310103.JPG 336件 [詳細] fileSN310099.JPG 309件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-17 (木) 16:27:33