・hiros
・show
・くまちゃん
・まえだ
できるだけマシンの小型化を狙いテニスボールを押し出せるようにした。
前の方に付いているとがったブロックはおもり兼押し出し棒。
幅は写真にもある通り極限まで狭くしてマシンそのものでボールを押し出す戦法で行くことにした。
車輪を外付けにするとボールを押し出すことができなくなるので、内側に付けることで解決した。
ただ車輪間の距離が狭くなると全体の安定感がなくなってしまい転倒しやすくなったので、マシン前後にだけ重心をかけるようにして横への転倒を防ぐようにした。
ボールが中に入ると写真の丸で囲った部分が手前にスライドしていき、ボールを押し出しゴールインする仕組み。
マシンの前方がボールを受け取る場所になったので、センサーはマシンの後部に取り付けることにした。
赤丸で囲った部分がボールをこぼさないための支えになっている。
当初はブロックにしていたが、ブロックだと耐久性に欠けていたので写真のパーツを使用した。
スタート時、既定の円に二台のマシンをセットしないといけないこともあり、なるべく小型化を目指した。
初めにdefineで使うものをわかりやすいように定義した。
#define R OUT_C #define L OUT_A #define RL SENSOR_3 #define LL SENSOR_1 #define isBlack <40 #define isWhite >=40 #define NINETY 17 #define BALL 20 void go_straight(){ //前に進む OnFwd (R+L); } void go_straight_s(){ //前にゆっくり進む OnFwd (R+L); Off (R+L); Wait (2); } void tr(){ //右に曲がる OnFwd (L); OnRev (R); } void tr_s(){ //右にゆっくり曲がる OnFwd (L); Off (R+L); } void tl(){ //左に曲がる OnFwd (R); OnRev (L); } void tl_s(){ //左にゆっくり曲がる OnFwd (R); Off (R+L); } void stop_moving(){ //全ての動きを止める(一つ一つの動作の安定化のため) Off (R+L); Wait (100); } task main (){ SetSensor (RL, SENSOR_LIGHT); SetSensor (LL, SENSOR_LIGHT); int blackline = 0; while (1){ //スタート位置から黒線まで行く go_straight(); if (blackline >= 2) break; if (RL isBlack && LL isBlack){ PlaySound (SOUND_CLICK); blackline++; while (RL isBlack || LL isBlack) go_straight(); } } stop_moving(); // turn left while (1){ //テニスボールがある方に向く if (LL isBlack) break; tl_s(); } stop_moving(); while (1){ //ライントレースをする if (RL isBlack && LL isBlack) { while (RL isBlack && LL isBlack) go_straight(); break; } else if (RL isWhite && LL isWhite) go_straight(); else if (RL isBlack && LL isWhite) tr_s(); else if (RL isWhite && LL isBlack) tl_s(); } stop_moving(); /*while (1){ //テニスボールの方に方向転換 if (LL isBlack) break; tl(); }*/ tl(); Wait (NINETY); stop_moving(); while (1){ //もう一台からメッセージが来たら前進してボールを押し出す if (Message() == 1){ Wait (300); go_straight(); Wait (BALL); } ClearMessage(); } go_straight(); //Wait (300); }
こちらもdefineで簡略化した。
#define R OUT_A #define L OUT_C #define SLIDE OUT_B #define RL SENSOR_1 #define LL SENSOR_3 #define NINETY 10 #define isWhite <40 #define isBlack >40 #define ANGLE 10 #define GOAL 500 void go_straight(){ //前に進む OnFwd (R+L); } void go_straight_s(){ //前にゆっくり進む OnFwd (R+L); Off (R+L); Wait (1); } void go_back(){ //後進する OnRev (R+L); } void tr(){ //右にゆっくり曲がる OnFwd (L); OnRev (R); Off (R+L); Wait (1); } void tl(){ //左にゆっくり進む OnFwd (R); OnRev (L); Off (R+L); Wait (1); } void stop_moving(){ //動作の安定化のために全ての動きを止める Off (R+L); Wait (100); } void out(){ //ボールを掃き出す OnFwd (SLIDE); Wait (50); Off (SLIDE); } void set_in(){ //ボールを中に入れ込む OnRev (SLIDE); Wait (50); Off (SLIDE); } task main (){ SetSensor (RL, SENSOR_LIGHT); SetSensor (LL, SENSOR_LIGHT); int blackline = 0; while (1){ //円から黒線まで行く go_straight_s(); if (blackline >= 2) break; if (RL isBlack && LL isBlack){ PlaySound (SOUND_CLICK); blackline++; while (RL isBlack || LL isBlack) go_straight_s(); } } stop_moving(); while (1){ //ボールのある方に向く if (RL isWhite) break; tr(); } stop_moving(); while (1){ //ライントレースする if (RL isBlack && LL isBlack) { while (RL isBlack && LL isBlack) go_straight_s(); break; } else if (RL isWhite && LL isWhite) go_straight_s(); else if (RL isBlack && LL isWhite) tr(); else if (RL isWhite && LL isBlack) tl(); } while (1){ //もう一台からボールを受け取り、一気にゴールをもっていき、戻る。 stop_moving(); SendMessage (1); tl(); Wait (NINETY); stop_moving(); Wait (300); tr(); Wait (70); go_straight_s(); Wait (GOAL); stop_moving(); out(); set_in(); go_back(); Wait (GOAL); tl(); Wait (ANGLE); Wait (ANGLE); stop_moving(); } }
思い通りに行かないことも多くて、悔しいこともたくさんあったけれど、集団で何かをする、という貴重な体験をした。 そのなかでグループとしてのプロジェクトの進め方と注意点などを学んだ。 この授業はそういったことを学ぶという目的があったのだと改めて気づかされた。 ここで学んだことを無駄にせず、今後の人生に活かしていきたい。 困難な状況を何とかしようとアイディアをひねるのは非常に楽しかったです。 半年間ありがとうございました。
今回なかなか集まる機会に参加できなくチームのみんなに
迷惑をかけてしまった。
また結局上手くいくことができなかった。
これは先生の仰っていた通り、二回目や三回目の課題を
きちんと理解できていなかったのだと思います。
最後上手くいかなかったのは悔しかったです。
先生に見てもらった時にも助言をいただきましたが、
マシンをボールを置いてある位置まで取りに行かせるのに
あと少し正確さが足りなかった。
また、ボールを掴んだ後にゴールまで運ぶ時に
タイマーで位置を調べては運んだので電池の消耗に作用されて
正確にゴールまで運ぶことができないこともあった。
これは先生に見てもらった時に、今まで習ってきた
課題3つを総合すれば簡単に出来ることを教わりました。
それができなかったのはとても悔しかったです。
今回の課題は4人で集まれる時もなく、非常に厳しいものとなった。
また課題としても結局は失敗してしまった。
最後にしてチームとしては納得のいかない結果になってしまった。
今日: 1
昨日: 0
全て: &counter([total|today|yesterday]);