[[2016a/Member]] *はじめに [#x7fabdda] 今回の課題は、ロボットに紙コップを運ばせることである。 紙コップは重ねて立たせなければならない。 *機体の説明 [#y5aa72c5] #ref(./1課題3.2.png,100%) #ref(./1課題3.1.png,100%) #ref(./課題3.1.png,100%) ロボットの先端にある黄色いアームにより紙コップの上げ下げを行う。 その際、アームの先端についているタイヤにより紙コップが滑り落ちないようにしている。 アームは紙コップをつかんで閉じると上がるようになっている。 下についている紫色の部品は紙コップを重ねる際に、ずれないようにする役割がある。 センサーはライントレースをするための光センサーをひとつ使用している。 *プログラミングの説明 [#e886e53f] #define Middle 45 ライントレースの中央値 task main() { setting(); STARTING_OPERATION(); repeat(2) { TRACE(); zensin(); } //交差点からDへ向かう TRACE(); OnRev(OUT_C); Wait(25); TRACE(); //誤差修正 OnRev(OUT_A); Wait(95); Off(OUT_AC); //dに到着 OnFwd(OUT_B);//コップつかむ Wait(250); start keep; TURN_180();//180°回転 TRACE(); zensin(); TRACE(); OnRev(OUT_A); Wait(80); Off(OUT_AC); stop keep; down(); OnFwd(OUT_B); Wait(250); start keep; OnFwd(OUT_A);//Qの方向を向く OnRev(OUT_C); Wait(200); Off(OUT_AC); OnRev(OUT_AC);//進む Wait(100); Off(OUT_AC); //センサー使って進む while(SENSOR_1 > Middle-4) OnRev(OUT_AC); stop keep; //放す Off(OUT_AC); down(); } sub setting() { //初期設定(パワー、センサー) SetSensor(SENSOR_1,SENSOR_LIGHT);//ライントレース SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める SetSensor(SENSOR_3,SENSOR_LIGHT);//紙コップの認識 SetPower(OUT_AC,4);//タイヤ SetPower(OUT_B,7);//紙コップをつかむアームの上下、開き } sub zensin() { OnRev(OUT_A); Wait(106); Off(OUT_A); } sub copjugde()*使ってない //コップが前にくるまで前進 { while(SENSOR_3 < 46) OnRev(OUT_AC); Off(OUT_AC); Wait(100); } task keep()*使ってない(紙コップの保持) //上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義 { while(1) { OnRev(OUT_B); Wait(1); OnFwd(OUT_B); Wait(1); } } sub TRACE() //トレース用メソッド { ClearTimer(0); while(FastTimer(0)<=42){ if(SENSOR_1>Middle+4)//白 左旋回 { OnFwd(OUT_C); OnRev(OUT_A); ClearTimer(0); } else if(SENSOR_1>Middle+2)//やや白 左折 { Off(OUT_C); OnRev(OUT_A); ClearTimer(0); } else if(SENSOR_1>Middle)//直進 { OnRev(OUT_AC); ClearTimer(0); } else if(SENSOR_1>Middle-2)//やや黒 右折 { Off(OUT_A); OnRev(OUT_C); } else //黒 右旋回 { OnFwd(OUT_A); OnRev(OUT_C); } } Off(OUT_AC); PlaySound(SOUND_FAST_UP);//トレース終了、交差点認識 } sub down() //下に下げる動作 { OnRev(OUT_B); Wait(200); } sub STARTING_OPERATION() //スタート地点の四角から脱出する { while(SENSOR_1<Middle) { OnRev(OUT_AC); } while(SENSOR_1>Middle) { OnRev(OUT_AC); } OnRev(OUT_AC); Wait(50); Off(OUT_C); OnRev(OUT_A); Wait(40); while(SENSOR_1<Middle) { OnRev(OUT_AC); } Off(OUT_AC); } sub TURN_180() //waitで回転後180°回転し黒線を認識したら停止 { OnFwd(OUT_AC); Wait(80); Off(OUT_AC); OnRev(OUT_A); Wait(130); while(SENSOR_1>40) { OnFwd(OUT_C); OnRev(OUT_A); } Off(OUT_AC); } *感想・考察 [#h3d3e4b7] 私たちのグループではマイコンをひとつで挑戦した。 結果は紙コップを一個も運べなかった。 ひとつのモーターでコップのつかみと上げ下げを行ったことはよかったと思う。 しかし、ほかのグループのロボットが上手く二台で役割分担出来ているのを見て、ひとつのロボットに詰め込みすぎるのは良くなかったと感じた。 そのほうが失敗した際に修正しやすかった。 紙コップを運ぶこと以前に、ライントレースが出来なくなっていたのはそれが原因かもしれない。