目次
今回の課題は半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットの作成でした。
今回は前回の課題で作ったロボットのセンサの向きを変えただけだったので簡単に完成させることができました。
基本の車の形のものにアームとセンサーを付けた形になっています。
写真には取り忘れてしまいましたが、センサーの周りに遮光板を付けました。動画ではついています。
モーター1つで開閉ができるようにしました。モーターを直接つなぐと動きが早すぎたのでギア比を考えてゆっくり動くようにしています。
プログラムをこのまま送れるように送受信センサのところには棒が一本しか通らないようにしています。アームとセンサはまとめて本体から簡単に取り外しができるようにもしています。
#define turnleft OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define turnright OnFwd(OUT_A);OnRev(OUT_C); //右旋回 task main () { SetSensor(SENSOR_3,SENSOR_LIGHT); int lightpower=10; int maxtime=0; ClearTimer(0); turnleft; while(FastTimer(0)<450){ if(SENSOR_3>lightpower){ lightpower=SENSOR_3; maxtime=FastTimer(0); } } turnright; int movetime=FastTimer(0); Wait(movetime); turnleft; Wait(maxtime); OnFwd(OUT_AC); OnRev(OUT_B); Wait(50); Off(OUT_B); Wait(60); OnRev(OUT_AC); Wait(60); Off(OUT_AC); }
まずは以下の通りその場で回転するための定義をしました。
#define turnleft OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define turnright OnFwd(OUT_A);OnRev(OUT_C); //右旋回
SetSensor(SENSOR_3,SENSOR_LIGHT); int lightpower=10; int maxtime=0; ClearTimer(0); turnleft; while(FastTimer(0)<450){ if(SENSOR_3>lightpower){ lightpower=SENSOR_3; maxtime=FastTimer(0); } }
turnright; int movetime=FastTimer(0); Wait(movetime);
turnleft; Wait(maxtime);
OnFwd(OUT_AC); OnRev(OUT_B); Wait(50); Off(OUT_B); Wait(60); OnRev(OUT_AC); Wait(60); Off(OUT_AC);
前回の課題の時のものをそのまま使えたのですぐにできたのがよかったです。
実際のロボット動きは動画にしたので見ていただきたいです。動画はこちら
グループで製作ということで、3人で相談しあいながらなんとか形にできたのは大きな達成感を得ることになりました。
もう一つおまけで、最大の明るさのところから経った時間だけ戻るプログラムも作りました。このほうが正確でそれも早く目的の位置まで行くことができました。
#define turnleft OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define turnright OnFwd(OUT_A);OnRev(OUT_C); //右旋回 task main () { SetSensor(SENSOR_3,SENSOR_LIGHT); int lightpower=10; int movetime=0; turnleft; ClearTimer(0); while(FastTimer(0)<320){ if(SENSOR_3>lightpower){ lightpower=SENSOR_3; ClearTimer(1); } } turnright; movetime=FastTimer(1); Wait(movetime); OnFwd(OUT_AC); }