課題3(光量の最大値を求め光の方向へシュートをうつ)目次
#contents
*課題の説明 [#k375a0ea]
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作すること。 ただし、ピンポン玉を放つ距離は10〜30cmである。 ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放っても良いこと。
*ロボットの概形 [#u336a6ca]
#ref(./picture1.jpg)
#ref(./picture2.jpg)
#ref(./picture3.jpg)
#ref(./picture4.jpg)
*プログラミング [#n5c21ab5]
 #define TURN_TIME 395//一回転する時間
 int light_max;	//lightセンサーの値の最大値
 int time_max;	//lightセンサーの値が最大の時の時間
 task main(){
 SetSensor(SENSOR_3, SENSOR_LIGHT);
 ClearTimer(1);
 if (Timer(1) <=10000) {    
 light_max = 0;
 time_max = 0;
 OnFwd(OUT_A);
 OnRev(OUT_C);
 start GetMax;} else { start shoot;}
 }
 //lightセンサーが最大になる時の値、及び時間決定//
 task GetMax(){
 ClearTimer(0);//タイマーを初期化
 while (FastTimer(0) <= TURN_TIME) {//一回転して一番明るいところを探す
 if (SENSOR_3 > light_max){
 light_max=SENSOR_3; //SENSOR_3の値が現在のlight_max
 time_max=FastTimer(0); //SENSOR_3が最大の時の時間を記録
 }
 }
 //回転して//
 if (time_max <= TURN_TIME/2) {//最明点≦180°のとき
 Wait(time_max);	//360もう一度回る
 }
 else {//最明点>180°のとき
 Toggle(OUT_A);//反転
 Toggle(OUT_C);//反転→左旋回  
 Wait(TURN_TIME-time_max);
 }
 start Chase;
 }
 //光を追いかける動作//
 task Chase(){
 Float(OUT_AC);
 while(true){
 if (SENSOR_3 >= light_max){
 (OUT_A);
  Float(OUT_C);
 }
 else {
 Float(OUT_A);
 OnFwd(OUT_C);
 }
 }
 }
 //シュートする動作//
 task shoot ()
 {
 OnFwd(OUT_B); //開く
 Wait(10);
 OnRev(OUT_AC);Wait(10);
 OnFwd(OUT_AC);Wait(25);
 }
*制作時間 [#n5c42649]
プログラミング2時間
ロボット作り2時間
*反省 [#g6a8ffee]
今回はゼミということもあり先生に直接教えてもらった。
そのおかけで、プログラミング作成が順調に進んだ。
プログラミングが順調に進んだことでロボット作成に大きく貢献できた。
あの時、先生に聞いたことで順調に進んだので、本当に良かったと思った。
今回はプログラミングだけではなく、内容も理解することができたので、自分にとってプラスになる課題だった。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS