2007a/MemberOnly/進行状況A



Counter: 1295, today: 1, yesterday: 0


今回の課題

懐中電灯に向かってブロックを投げるロボットを作成

  • 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。
    光センサで動かない懐中電灯の光を見つけ出す。
    懐中電灯に向けてプロックを投げるためのモータにアームをつけて、上下の動きを加える。
  • 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。
    光センサで懐中電灯の光を見つけ出し、モータが動き始める。
  • 懐中電灯をゆっくり動かしたとき懐中 電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。
    上と同じく懐中電灯の光を探しだし、光に向かって動いて、モータとアームの動きでプロックを投げる。

モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。

創り主

アンゼリカ 

ロボットキット

制作 過程

次は完成したロボットの上、正面、左側、右側で撮影した写真です。

S3700187.JPG
S3700189.JPG
S3700188.JPG
S3700190.JPG

最初の考え方とその順番

  • モーターその1;最初にロボットの本体である1つのモーターを使って動く足を作る。
  • タッチセンサー;光を求めて進んでる間、障害物と遭遇した場合の対策としてセンサーをつける。ダブルでもいいし、シングルでもよい。しかし、タッチセンサーがメインではない為、シングルでも十分だと考えられる。
  • 光センサー;今回のメインのひとつである、光を見つけて追うセンサーである為、必ず左右二つ使う。できれば、地盤が動く部品を使うのが望ましい。
  • モーターその2;最後のモーターを使って、ブロックを光に向けて投げる動作を行うアームをつける。 前の課題での経験を考えて、モーターの激しい動きに耐えられる安定感のある地盤があって欲しい。ロボット自体に新たな場所を作るのではなく、ある場所を十分に使って投げる動作に耐えられる基を作るのが必要である。

モータ1(足)

S3700196.JPG
S3700197.JPG
  • 足の製作は基本的にホームページにのってある、1つのモーターで右左どっちでも動けるボディの絵を参考して作りました。
  • 今回の製作は本をみて作ると詳しい説明と絵が載ってなかった為、色んな角度から撮影されている絵をみて、その形に似ている部品を探して、ちゃんと組み込まれるように順番を考えながら作りました。
  • 1つのモーターで左右両方動ける足を作ったことで、課題の条件である、モーターを2つ使うという条件をクリアすることができました。残りのモーターはブロックを投げる動作をするアームにつける為、取っておきます。
  • 中心となる車輪は安定感があって、ボディの高さをあまり高くしない大きさの車輪を使用しました。そして、前の補助車輪は中心となる車輪と見た目上もっと安定感をもたらす為、同じ種類のものを使用しました。前の補助車輪はあくまでも補助であり、モーターはついてません。

タッチセンサ

S3700187-TOUCH.JPG
  • 元々の計画はダブルのタッチセンサーを使って、より正確な動きをするようにしたかったが、ダブルのタッチセンサーと足のモーターの間に共通する部品があり、足りなくなるので、仕方なく、シングルのタッチセンサーを作りました。
  • 障害物と遭遇した場合素早く反応する為に、タッチセンサーはキットの一番前の方につけました。障害物との衝突を考えて、その衝撃に十分対応できるように、二重の合わせ目を作って、しっかり固定しました。

光センサ

S3700195.JPG
  • 前方にある光を探すために、全方向に自由に動ける部品を選び、組み立てました。
  • 何処にあるか分からない光を探すのが目的である為、二つのセンサーを使いました。
  • 探すのが目的であるから、キットでの位置はタッチセンサーの隣にして、バランスをとりました。

モータ2(アーム)

S3700198_cut.JPG
S3700199_cut.JPG
  • アームの形はなるべく簡単で、単純な動きを変数なしに移行することができるように、なるべく複雑な部品と合口を使わずに作りました。
  • 絵で分かるように、ブロックをアームの真ん中に置いてもいいし、アームの間の隙間にひっかけてもいいようにしました。これは、場合によって遠くまで投げることができます。
  • アームの動きはモーターによって制御されます。ですから、モーターをしっかり固定しないと、モーターの動きの反動でモーター自体がキットから取れてしまう恐れがあります。詳しいことは下の工夫点にて説明します。

プログラム

その1;懐中電灯が動かない時ブロックを投げる

#define THRESHOLD 70       //投げる時の値
task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ−1を光センサーに定義
  SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ−3を光センサーに定義
  while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD)) {  //センサー1or3で受ける光が値より小さい時
      OnFwd(OUT_C);         //回転
      Off(OUT_A);
}
      Off(OUT_C); 
      OnFwd(OUT_A); Wait(50);    //強い時ブロックを投げる
      OnRev(OUT_A); Wait(50);
      Off(OUT_A);
}

その2;懐中電灯をゆっくり動かす時光に向かって進む

#define THRESHOLD 70       //値    
task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ−1を光センサーに定義
  SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ−3を光センサーに定義
  while(true) {
      if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) {  //センサー1と3が受ける光が値より大きければ進む
      OnRev(OUT_C); Wait(20);
      OnFwd(OUT_C); Wait(20);
      }
      if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) {  //センサ−3が受ける光が小さかったら左周り
      OnRev(OUT_C);Off(OUT_A); 
      }
      if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) {  //センサ−1が受ける光が小さかったら右周り
      OnFwd(OUT_C);Off(OUT_A);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
      }
      if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) {  //光を見つけられなかったら回転
      OnFwd(OUT_C);Off(OUT_A); 
      }
      }
Off(OUT_A+OUT_C);
}

その3;懐中電灯をゆっくり動かす時光に向かって進み、光の動きを止めればブロックを投げる

#define THRESHOLD 70       //値
#define RUN_TIME 25        //時間定義
task main()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ−1を光センサーに定義
 SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ−3を光センサーに定義
 SetPower(OUT_A+OUT_C,7);        //AとCのモーターの出力を7
 ClearTimer(0);              
  while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD) || (Timer(0) <= RUN_TIME)) {//光が閾値より弱くタイマーが2,5秒以下ならば実行
      if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) {  //センサー1と3が受ける光が値より大きかったら前
      OnRev(OUT_C); Wait(20);
      OnFwd(OUT_C); Wait(20);
      }
      if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) {  //センサ−3が受ける光が小さかったら左
      ClearTimer(0);OnRev(OUT_C);Off(OUT_A); 
      }
      if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) {  //センサ−1が受ける光が小さかったら右
      ClearTimer(0); OnFwd(OUT_C);Off(OUT_A);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
      }
      if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) {  //光がなければ回転
      ClearTimer(0);OnFwd(OUT_C);Off(OUT_A); 
      }
      }
Off(OUT_C);OnRev(OUT_A); Wait(50);      //投げる 
OnFwd(OUT_A); Wait(50); Off(OUT_A);
}

制作の後

ロボットキットの工夫点および苦労

S3700192_paint.JPG
  • 上の所で少し取り上げたモーター2の固定の仕方について話します。絵で赤く表されている通り、激しいモーターの動きに安定感をもたらす為に、そして限られた場所で最大限の効果をあげる為に、モーターの凸凹となっているところに隙間をつくり、他の部品と接続できる所をすべて使って、力を分散できる場所を作りました。
  • 赤く塗ってある二つの所がモーターを支持する最重要部品です。これらの部品がちゃんと地盤に食い込んでいる為に、激しいモーターの動きに耐えることができるのです。
  • 限られた場所で、結構大きさのあるモーターを乗せるのは、キット全体のバランスに悪影響を及ぼす可能性があるのです。そこで、私はもう完璧に位置が決まってあるセンサーのところに注目しました。センサーが乗せてある上にバランスよくモーターを乗せて、モーターと同じ高さを反対側のセンサー端子の上に作りました。そして、その二つの同じ高さの部品をうまく繋ぐことができれば、モーターはもっとしっかり安定するはずです。そこで、一番簡単で確実な、長い棒二つを使って繋ぎました。そしたら、モーターは綺麗に固定させることができました。
S3700193_paint.JPG
  • モーターを固定したのはいいものの、そのモーターを何処まで動かせばいいのかの制限が設定されてません。そこで、私は前のセンサーが差し込まれてある段にアームが引っ掛かるように位置を決めました。
  • もし、モーターを下ろした時の動きを定めてなかったら、キット全体が揺るぐ可能性があるのです。後ろのほうは投げたあと、次に備えて、整える余裕をおきました。後はアームの着地の時の位置を定めることができればもっと安定するはずです。

感想および発展したい所

  • 今回の課題はいろんな意味で復習になりました。一番前にやった字を書くロボットの時使ったアームをここでまた別の目的として、応用することができました。前回は上と下の動きでペンを下ろすか、上げるかでしたが、今回はモーターに軽いアームを付けて上下の動きを利用して物を投げる動作を表現することができました。
  • 次に、光を追うセンサーですが、前回は下の方にある黒い線ばかりを追いましたが、今回は四方何処にあるか分からない光を求めて動くように設置しなければなりませんでした。そこで、いろんな方向にセンサーが反応できるようにクルクル回る部品を使いました。
  • ロボットにさせる動きを常に考えながら、その為だけに無駄な動きを排除し、簡潔な動きだけを生かす作業は非常に楽しく、頭を使いました。まだ、色んな部品の扱いになれてなくて、戸惑うことが沢山ありますが、課題を一つ一つクリアしていくうちに段々と部品の使い道になれていくような気がします。
  • ロボットを創ることと、プログラムを作成することの大変さは毎回感じることですが、その度に、一つのものに深く考える思考力が備えられる気がします。こんな作業を通じて、ロボットの仕組みや、プログラミングをもっと勉強したいと思います。

コメントお願いします!

  • 「その*邀撃に十分対応*できるよう」「モーター自体がキットから*取られて*しまう恐れが」「全方向に自由に動ける*地盤*を選び」、ところどころ?と思う表現があります。読み手にやさしく [oh] -- 2007-07-05 (木) 00:42:03
  • 上と同じくですが、箇条書きで見やすくなっている点は評価できます。 -- ヒロヤ? 2007-07-05 (木) 09:19:46
  • すみません。私留学生でまだ日本語が満足に書けません。すみませんでした。 -- ANGELLICA? 2007-07-05 (木) 17:51:21
  • すみません。私留学生でまだ日本語が満足に書けません。すみませんでした。 -- ANGELLICA? 2007-07-05 (木) 17:51:25
  • なるほど、それは失礼しました。このロボティクス入門を通して更に日本語が上達できると良いですね [smile] -- まいける(TA) 2007-07-10 (火) 23:59:05


添付ファイル: fileS3700199_cut.JPG 201件 [詳細] fileS3700198_cut.JPG 210件 [詳細] fileS3700193_paint.JPG 203件 [詳細] fileS3700192_paint.JPG 188件 [詳細] fileS3700191_cut.JPG 102件 [詳細] fileS3700187-TOUCH.JPG 204件 [詳細] fileS3700199.JPG 100件 [詳細] fileS3700198.JPG 107件 [詳細] fileS3700197.JPG 208件 [詳細] fileS3700196.JPG 202件 [詳細] fileS3700195.JPG 219件 [詳細] fileS3700193.JPG 141件 [詳細] fileS3700192.JPG 120件 [詳細] fileS3700191.JPG 109件 [詳細] fileS3700190.JPG 203件 [詳細] fileS3700189.JPG 201件 [詳細] fileS3700188.JPG 204件 [詳細] fileS3700187.JPG 199件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-10 (火) 23:59:06