#author("2020-02-15T19:38:10+09:00","Hatto","Hatto") #author("2020-02-15T19:39:08+09:00","Hatto","Hatto") [[2019b/Member]] *課題3 [#b30eedab] 青と赤のボールを運搬して空き缶の上に乗せる *ロボットについて [#hffb59e9] #ref(2019b/Member/Hatto/Mission3/robo.jpeg,50%) 一体型のロボットを作ることにした。 下の部分が各種センサーでライントレースと缶の発見を行う側で、上の部分がアームでボールの回収と設置を行う側である。 光センサーは、車体との距離を縮めることでカーブを交差点だと認識することを減らした。さらに地面と近すぎず、 遠すぎない位置に設置することで安定した値を取れるようにした。 *プログラミング [#l257949b] #define SPEED 35 //モーターの回転速度 #define STEP 1 //一回の判断で進む時間 #define mae OnFwd(OUT_BC,SPEED); //前進する #define usiro(t) OnRev(OUT_BC,SPEED);Wait(t);Off(OUT_BC); //後退する #define migi1 OnFwd(OUT_C,SPEED); //右折する #define migi2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED); //右に旋回 #define hidari1 OnFwd(OUT_B,SPEED); //左折する #define hidari2 OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED); //左に旋回 #define CONN 1 //スレーブの番号 #define SIGNALON 11 //SIGNALONは11と定義 #define SIGNALOFF 12 //SIGNALOFFは12と定義 これがマクロのプログラミング sub linefollow1() { SetSensorLight(S3); //S3に光センサーをつける SetSensorLowspeed(S4); //S4に超音波センサーをつける long t0; t0=CurrentTick(); while(CurrentTick()-t0<200){ //t0が0.2秒の間繰り返す if(SensorUS(S4)<=6){ //6cm以内に近づくと Off(OUT_BC); //モーターが止まる PlaySound(SOUND_UP); //ピロピロという音が鳴る break; //whileループから抜け出す } if(SENSOR_3>60){ //値が60以上の時 migi2; //右に旋回 t0=CurrentTick(); //時間をリセット }else if(SENSOR_3>52){ //値が52以上の時 migi1; //右折する t0=CurrentTick(); //時間をリセット }else if(SENSOR_3>40){ //値が40以上の時 hidari1; //左折する t0=CurrentTick(); //時間をリセット }else if(SENSOR_3>30){ //値が30以上の時 hidari2; //左に旋回 }else{ //そのほかの時 mae; //前進する t0=CurrentTick(); //時間をリセット } Wait(STEP); } Off(OUT_BC); //モーターを止める Wait(1000); //1秒待つ } これが左をトレースするプログラム { Wait(1000); //1秒待つ PlaySound(SOUND_CLICK); //ピッという音を出す linefollow1(); //左側をライントレースし缶の前まで行く mae;Wait(350);Off(OUT_BC); //缶の前でもう少し前へ行く(タッチセンサーならいらなかったかも) SendRemoteNumber(CONN,MAILBOX1,SIGNALON); //スレーブに11を送る(C地点の缶) Wait(17000); //17秒待つ(これを無くしたかった) usiro(1400); //後退する kaihi(); //缶を回避 linefollow1(); //左側をライントレース mae;Wait(700);Off(OUT_BC); //D地点の交差点を直進 linefollow1(); //左側をライントレース mae;Wait(350);Off(OUT_BC); //缶の前まで調節 SendRemoteNumber(CONN,MAILBOX1,SIGNALON); //スレーブに11を送る Wait(17000); //17秒待つ usiro(1100); //後退する migi2;Wait(1600);Off(OUT_BC); //D地点の交差点を右折 linefollow1(); //左側をライントレース hidari2;Wait(1600);Off(OUT_BC); //G地点の交差点を左折 linefollow1(); //左側をライントレース mae;Wait(350);Off(OUT_BC); //缶の前まで調節 SendRemoteNumber(CONN,MAILBOX1,SIGNALON); //スレーブに11を送る Wait(17000); //17秒待つ usiro(1100); //後退する migi2;Wait(1700);Off(OUT_BC); //G地点の交差点を右折 linefollow1(); //左側をライントレース hidari1;Wait(2000);Off(OUT_BC); //H地点の交差点を左折 linefollow2(); //右側をライントレース migi1;Wait(2000);Off(OUT_BC); //H'地点の交差点を右折 linefollow1(); //左側をライントレース hidari2;Wait(1600);Off(OUT_BC); //G'地点の交差点を左折 linefollow1(); //左側をライントレース mae;Wait(350);Off(OUT_BC); //缶の前まで調節 SendRemoteNumber(CONN,MAILBOX1,SIGNALOFF); //スレーブに11を送る Wait(17000); //17秒待つ usiro(1100); //後退する } これがメインのプログラム *まとめ [#t907cb9b] プログラミングということができてとても良かった。