2019b/Member/Hatto/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[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]
プログラミングということができてとても良かった。
終了行:
[[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]
プログラミングということができてとても良かった。
ページ名: