CENTER:&size(30){ライントレースをするロボット};~ 左右のメンバー入れ替えとのことだったが、変更せずに作ったロボット~ 目次 #contents *開発日記 [#p3ce862f] **6月2日 [#d51e10d4] 授業中話し合った結果、光センサーを2つ、タッチセンサーを1つ使ったロボットを作ることにした。~ 初☆評価の勢いで、このロボットも%%ハチャメチャに%%しっかりと作っていきたいと思う。 **6月8日 [#a7b6a22f] 明日が締め切りだと勘違いし、慌てふためく。~ 軽くプログラムを作ったものの、何故か直進。改良の余地あり。 **6月9日 [#dcc47eb8] 初号機のお披露目。だが、すぐに改良の手が差し掛かる。速度を上げるため、ギアの比率を変えてみる。 **6月15日 [#cd83f05a] 安心しきったせいか、とうとう期限前日まで手付かず。必死にプログラムを改良するが、やはり直進。だれか救援を・・・ **7月21日 [#g4752e8f] ロボコン製作段階へと入っているのに今頃ページを更新。~ 理由は締切期限が迫っているからであります。 *ライントレースロボ 完成(?)までの道のり [#faf1b674] **基本の車体作り [#re278368] 駆動方法:車輪による移動~ センサー類:光センサー 2個 タッチセンサー 1個~ ドライブベースは説明書に載っているものと同じ。 **センサー類の行き先 [#zed51539] センサーの数が決まったが、どこにつけるかは決めていなかった。~ ロボ製作の上手いメンバーに依頼したところ、高機能なバンパーが完成した。先頭部分にタッチセンサーが配置され、光センサーが並ぶようにバンパーの中央に設置されたものだ。ただブロックを重ねるだけでなく、横の穴からも接続しているため、課題1で深刻だった強度不足も全く心配なかった。~ 光センサーが並んでいるので、黒線の中を進んでいくことになった。なるべく線を細くできるように、片方のセンサーの向きを変え、密着させている。~ #ref(2006a/A2/課題2右/SN310103.JPG,30%,センサー); **なるべく速く走れるように [#d3ff6bae] 課題2を見てわかるように、今回は機動力も重視される。~ 駆動案にキャタピラ・車輪・足などが挙がったが、やはり構造が簡単で確実な車輪に決定。ギアの比率を変えることで簡単にスピードアップができた。~ &size(10){(だが当日は標準速度へ…)}; #ref(2006a/A2/課題2右/SN310099.JPG,30%,初号機); **いざプログラムへ。しかし… [#b2ab77fb] 車体ができたところで、早速プログラムを作ってみた。しかし、線を無視して猪突猛進。プログラムを見直しても知識不足のせいか、解決できず。~ 一人のメンバーのプログラムで何とかライントレースができたため、前日はここで諦める。 **そういえば…? [#l994de93] 当日になって、コースを作ってないことが問題に。~ 「何がいい?」と聞く段階で作業が止まってしまい、時間ギリギリから作成開始。その結果がこちら↓~ #ref(2006a/A2/課題2右/SN310106.JPG,30%,でたらめコース); %%人生への迷いが感じられます%%~ 画用紙の両面にコースを書いて、裏表を変えれば色々な組み合わせができるコースもいいなと考えていた。だが、その頃には目の前に失敗作が…~ あえなく一面だけのコースとなりました。 **忘れられた存在 [#lf50b0b6] 今まで全く交換していなかった電池ですが、少し気になって調べてみたところ電圧は7.78V…~ 授業では8Vをきったら交換しろと言われていました。まさか誤作動はこれが原因なのでは?~ 当然この次の課題で電池交換をしました。費用は150円なり〜 **いざ発表? [#d5fa2803] さあ発表…と思いきやあまり発表らしきものはしなかった。~ まぁ一部未完成だったしいいかなぁと。結局この日はそれで終わりました。 **おまけ&bigsmile; [#g37a9f63] 上の写真ではスッキリしたロボットですが、オプションパーツが存在します。それにプログラムにはOUT_Bの文字が…~ その正体は…?~ ~ ~ ~ こちらで〜す⌣~ ~ ~ #ref(2006a/A2/課題2右/SN310104.JPG,30%,輪ゴム飛ばし機); いや〜とても画期的な発明です。モーターが回ると軸に取り付けたネジ状のパーツが回り、輪ゴムが上へとのぼっていきます。そして、最終的には発射されます。~ 3連続発射が可能です。これで前のロボットを攻撃か? *まとめ [#v10d12ce] **苦労した点 [#rd5db030] -''タッチセンサーと光センサーの取りつけ方。''~ バンパーとして取り付け。 -''あるメンバーのプログラムを受け付けなかった。''~ プログラムが原因?電池が原因?未だに不明 -''コース作り(?)''~ 案外時間が掛かった。リーダー的な存在がいない(?)のが原因であろう。 **工夫した点 [#r3e972db] -センサー複合型バンパー(なかなか丈夫)~ 取り外しも簡単にできます。 -車輪のギアを変えると簡単にスピードアップ&size(10){最初からです…}; -センサーの感知部分を密着させ、細い線でも走行可能にした。 **今後の課題 [#q351602c] -たまにロボットが発症する「気まぐれ」の解明。 -プログラムを正確なものにする。 *反省 [#h3690c0a] 結局今回は不完全燃焼で終わってしまった。時間は十分あったはずなのにあまり成果がないので、改善すべきだなと思った。~ 今回もメンバー全員が授業以外で集まることはなかった。どうせやるなら、皆で協力してやっていきたい。 今回のコースは画用紙を使って製作しました。買ってから気づいたが、模造紙のほうが広く、持ち運びも便利だなと感じました。 *プログラム [#q606897f] 受け付けなかったプログラムはこちら↓~ [[2006a/A2/課題2右/前プログラム]] **訂正したプログラム(当たると旋回) //製作者 少年 [#yd9581c0] #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); //旋回 } } } **訂正したプログラム(当たると追い越し) //製作者 少年 [#x8357d83] #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); //線の中へ } } } **これはタッチセンサーが反応したら反対方向にロボットが動く [#ydd05262] プログラム //制作者 ムーディ [#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); //回転 } } } **これは追い越しプログラム //制作者 ムーディ [#x47a7996] #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); //右に回転してコースに戻る } } } *コメント欄 [#n6b11ea7] よろしければアドバイスを… -『受け付けなかったプログラム』が受け付けられなかった理由を考えてみてください。if や else の括弧を確認してください。eise は else の間違い。 -- [[松本(教員)]] &new{2006-07-11 (火) 10:33:29}; -ゴムはただのゴムのくせに実はちょっぴり高価らしいので、切れると松本先生がお怒りになられるので、きらないように注意しましょう&bigsmile; おおむねの構成としては良いでしょう。プログラムは2人で1つアップしてくださいね。 -- [[まいける(TA)]] &new{2006-07-20 (木) 23:51:52}; #comment