課題3のページ

課題

半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作する。

ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。

ロボットについて

下向きに取り付けていた光センサーを前向きに取り付けた以外は課題2と同じものを使った。

課題2ではアームはボールを押さえていただけだったが、今回はシュートするのにも使った。

robot.jpg

プログラム

#define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);  //左旋回
#define shoot OnRev(OUT_B);Wait(20);Off(OUT_B); //シュートする
int turntime=500;//回転する時間
int lightmax=50; //仮の最大値
int timemax=0; //仮の最大値を与える時刻
task main()
{
  SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);  //明るくなるまでの時間を測る
  turn_right;
   while(FastTimer(0) < turntime) 
 {
    if (SENSOR_2 > lightmax)   {
        timemax==FastTimer(0);   }
 }
Off(OUT_AC);Wait(100);
turn_left;
Wait(turntime-timemax); //明るくなったところまで逆旋回
Off(OUT_AC);Wait(100);
shoot;
}

工夫した点

ロボットを旋回させて明るくなった点までの時間を測り、回転していた時間から測った時間を引いてその分逆に旋回させた。そうすることでちょうど一回転しなくてもほぼ正確に明るくなった方向を向くことができた。

シュートはアームを一回転させて弾くようにしたことで勢いよくシュートできるようになり、方向もまっすぐ飛ばすことができた。

反省

最初はどういったプログラムにすればいいかわからなかったが、やり方がわかった後は比較的早く終わらせることができた。

ロボット本体は課題2とほぼ同じだったので、やりやすかった。

また、課題2では紙の丸みでうまくシュートできなかったが、シュートの仕方を変えて今回はできたので良かったと思う。

代入するときに「=」とするところを「==」としてしまった。プログラムを送ることはできたが、動かした時に上手く明るい方にシュートできなかったことがあったのはそれが原因だと思う。間違いがないかしっかりチェックすべきだった。


添付ファイル: filerobot.jpg 157件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-16 (日) 14:44:09 (1465d)