- 追加された行はこの色です。
- 削除された行はこの色です。
[[2007b/A1]]
-----
CENTER:size(22){課題3:光を追いかけブロックを投げるロボ};
-----
RIGHT:訪れてくれた人の数 &counter(all);
LEFT:メニュー
#contents
懐中電灯の光を追い、その方向へブロックを投げるロボットの作成。
*課題 [#i156ad79]
インストの「top secret」を参考にして、ブロック(一番太いホイール)を投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。~
(重複しないように一人一つ以上のプログラムを作成すること)~
LEFT:テーマ1、全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~
LEFT:テーマ2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。~
LEFT:テーマ3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~
ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。
*ロボ紹介 [#va7c6a65]
** 全体 [#edc93fae]
#ref(Image297.jpg)
カッコいいでしょ!!
無駄なパーツ??そんなものはありません!!(笑)
今回目指したのは、コンパクトな動力部とロボのインパクトの強さです。
** 駆動部分 [#tcf7c561]
#ref(Image293.jpg)
モーターが2個までしか使えないため、1つをタイヤにもう1つを投擲部に使いました。
-モーターが2個までしか使えないため、1つをタイヤにもう1つを投擲部に使いました。
そのためタイヤにはディファレンシャルギアを採用!!1つのモーターで左右への転回を実現。
-モーターが1つのためギアやブロックを必要最小限に抑え、よりコンパクトなボディに進化しました。
** ラチェット部分 [#u5a8604b]
#ref(Image292-2.jpg)
ギアの回転の逆流を防ぐため、ラチェットを付けました。
これでロボは後ろに下がらなくなります。
** キャスター部分 [#fa815519]
#ref(Image304.jpg)
キャスターの奥光センサーの青いブロックが見えますか?
このロボは光センサーを下に付けているんです。
タイヤは大きくジグザグを描くように大きい物を使用。
キャスター、タイヤ共に摩擦を減らすためゴムを除きました。
** 投石部分 [#i0fb60b0]
#ref(Image302.jpg)
後ろの尻尾に接続されたモーターを動かすと・・・
#ref(Image301-2.jpg)
発射!!
かなりのスピードです。
* プログラム [#j0d5c156]
** テーマ1、 [#u94b7269]
*斎木[#tf88a431]
task main()
{ SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(true)
{Off(OUT_B);
while(SENSOR_3>SENSOR_1) //センサー1よりセンサー3が明るい間
{OnRev(OUT_B);Wait(10); //右に曲がる
}
while(SENSOR_3<SENSOR_1) //センサー3よりセンサ−1が明るい間
{OnFwd(OUT_B);Wait(10); //左に曲がる
}
if((SENSOR_1>50)&&(SENSOR_3>50))//2つのセンサーが光源を発見したとき
OnRev(OUT_C);Wait(15); //ブロックを投げる動作
OnFwd(OUT_C);Wait(15); //アームを戻す
Off(OUT_C);}Wait(100); //停止
}
}
}
*杉本 [#k7f286ac]
#define THRESHOLD 40 //光の規定値を40に設定
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光センサー
while(true) //無限に繰り返す
{
if(SENSOR_1 > THRESHOLD)
{
if(SENSOR_3 > THRESHOLD) //センサー1、2が規定値以上の場合
{
Off(OUT_B);Wait(300); //止まる
if(SENSOR_1+SENSOR_3 > THRESHOLD) //更に確認
{
OnRev(OUT_C);Wait(15); //ブロックを投げる
OnFwd(OUT_C);Wait(1); //アームを戻す
Off(OUT_C);Wait(100);
}
}
if(SENSOR_3 < THRESHOLD) //センサー1が規定値以上、3が以下の場合
{
OnFwd(OUT_B);Wait(15); //左へ旋回
Off(OUT_B);
}
}
if(SENSOR_1 < THRESHOLD)
{
if(SENSOR_3 > THRESHOLD) //センサー1が規定値以下、3が以上の場合
{
OnRev(OUT_B);Wait(15); //右へ旋回
Off(OUT_B);
}
if(SENSOR_3 < THRESHOLD) //センサー1、3が規定値以下の場合
{
OnRev(OUT_B);Wait(15); //右へ旋回
Off(OUT_B);
}
}
}
}
**テーマ2、 [#uc9eab7c]
*斎木[#n53fb021]
task main()
{SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
while(true)
{if(SENSOR_1<=30&&SENSOR_3<=30) //センサーが光源を発見できないとき
{OnFwd(OUT_A); Wait(100); //左に旋回
}
else if((SENSOR_1>50)&&(SENSOR_3>50))//光源を発見したとき
{OnFwd(OUT_A); Wait(50); //左に進む
OnRev(OUT_A); Wait(50); //右に進む つまり前進
Off(OUT_A); //停止
}
else if((SENSOR_1>50)&&(SENSOR_3<50))//センサー3よりセンサ−1が明るいとき
{OnFwd(OUT_B);Wait(40); //左に曲がる
}
else((SENSOR_3>50)&&(SENSOR_1<50))//センサ−1よいセンサー3が明るいとき
{OnRev(OUT_A); Wait(40); //右に曲がる
Off(OUT_A); //停止
}
}
}
}
*杉本 [#bf917c89]
#define THRESHOLD 40 //光の規定値を40に設定
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光センサー
while(true) //無限に繰り返す
{
if(SENSOR_1 > THRESHOLD)
{
if(SENSOR_3 > THRESHOLD) //センサー1、3が規定値以上の場合
{
Off(OUT_B);Wait(300); //しばらく待つ
if(SENSOR_1+SENSOR_3 > THRESHOLD) //再確認
{
Off(OUT_B);Wait(300); //しばらく待つ
while(SENSOR_1+SENSOR_3 < THRESHOLD) //更に、センサー1、3が規定値以下の場合
{
OnFwd(OUT_B);Wait(15);
OnRev(OUT_B);Wait(15); //ジグザグに前進
}
Off(OUT_B);
}
}
if(SENSOR_3 < THRESHOLD) センサー1が規定値以上、3が以下の場合
{
OnFwd(OUT_B);Wait(15); //左へ旋回
Off(OUT_B);
}
}
if(SENSOR_1 < THRESHOLD)
{
if(SENSOR_3 > THRESHOLD) //センサー1が規定値以下、3が以上の場合
{
OnRev(OUT_B);Wait(15); //右へ旋回
Off(OUT_B);
}
if(SENSOR_3 < THRESHOLD) //センサー1、3が規定値以下の場合
{
OnRev(OUT_B);Wait(15); //右へ旋回
Off(OUT_B);
}
}
}
}
**テーマ3、 [#a2ef2433]
*a [#fab526a7]
*斎木 [#fab526a7]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
{SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(true)
{
if(SENSOR_1 > 30)
{
if(SENSOR_3 > 30)
{Off(OUT_B);Wait(300);
if(SENSOR_1+SENSOR_3 > 30)
{Off(OUT_B);Wait(300);
while(true)
{while(SENSOR_1+SENSOR_3 < 30)
{OnFwd(OUT_B);Wait(15);
OnRev(OUT_B);Wait(15);
}
Off(OUT_C);Wait(100);
if(SENSOR_1+SENSOR_3 > 30)
{OnRev(OUT_C);Wait(15);
OnFwd(OUT_C);Wait(1);
Off(OUT_C);Wait(100);
}
}
{if(SENSOR_1 > 30) //センサー1が白
{if(SENSOR_3 > 30) //センサ−3も白のとき
{Off(OUT_B);Wait(300); //3秒待ち
if((SENSOR_1> 30)&&(SENSOR_3 > 30)) //まだ白なら
{OnFwd(OUT_B);Wait(15);
OnRev(OUT_B);Wait(15); //前進し
if((SENSOR_1>30)&&(SENSOR_3>30)) //まだ白なら
{OnRev(OUT_C);Wait(15); //ブロックを投げる
OnFwd(OUT_C);Wait(10); //アームを戻す
Off(OUT_C);Wait(100); //停止
}
}
}
}
if(SENSOR_3 < 30) //センサー1は明るいのにセンサー3が暗いとき
{OnFwd(OUT_B);Wait(15); //左に回る
Off(OUT_B); //停止
}
}
if(SENSOR_3 < 30)
{OnFwd(OUT_B);Wait(15);
Off(OUT_B);
if(SENSOR_1 < 30) //センサー1が暗く
{if(SENSOR_3 > 30) //センサー3が明るいとき
{OnRev(OUT_B);Wait(15); //右に回る
Off(OUT_B); //停止
}
if(SENSOR_3 < 30) //両方とも暗いとき
{OnRev(OUT_B);Wait(15); //右に回り光を探す
Off(OUT_B); //停止
}
}
}
if(SENSOR_1 < 30)
{if(SENSOR_3 > 30)
{OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
if(SENSOR_3 < 30)
{OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
}
}
}
}
}
*杉本 [#w87cba5d]
#define THRESHOLD 40
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光センサー
while(true) //無限に繰り返す
{
if(SENSOR_1 > THRESHOLD)
{
if(SENSOR_3 > THRESHOLD) //センサー1、3が規定値以上の場合
{
Off(OUT_B);Wait(300); //しばらく待つ
if(SENSOR_1+SENSOR_3 > THRESHOLD) //再確認
{
Off(OUT_B);Wait(300); //しばらく待つ
while(true) //無限に繰り返す
{
while(SENSOR_1+SENSOR_3 < THRESHOLD) //センサー1、3が規定値以下の間繰り返す
{
OnFwd(OUT_B);Wait(15);
OnRev(OUT_B);Wait(15); //左右にジグザグに前進
}
Off(OUT_C);Wait(100);
if(SENSOR_1+SENSOR_3 > THRESHOLD) //センサー1、3が規定値以上の場合
{
OnRev(OUT_C);Wait(15); //ブロックを投げる
OnFwd(OUT_C);Wait(1); //アームをもとに戻す
Off(OUT_C);Wait(100);
}
}
}
}
if(SENSOR_3 < THRESHOLD) //センサー1が規定値以上、3が以下の場合
{
OnFwd(OUT_B);Wait(15); //左へ旋回
Off(OUT_B);
}
}
if(SENSOR_1 < THRESHOLD)
{
if(SENSOR_3 > THRESHOLD) //センサー1が規定値以下、3が以上の場合
{
OnRev(OUT_B);Wait(15); //右へ旋回
Off(OUT_B);
}
if(SENSOR_3 < THRESHOLD) //センサー1、3が規定値以下
{
OnRev(OUT_B);Wait(15); //右へ旋回
Off(OUT_B);
}
}
}
}
*結果 [#a6e500da]
**改善した点 [#qae0af54]
-キャスターを若干高めに作り重心を後ろにしました。
-最初はロボが一向に進みませんでした。そこで地面との摩擦を減らすためにタイヤを外しホイールのみで動かせたところ見事動き出しました。
-
-車体を安定させるために後部にチューブを取り付け安定させた。
** [#c6845256]
*感想 [#qe14f300]
まだプログラムが未完成です。
-1つのモーターで左右の動きができる事に感動。ジグザグ走行がヨチヨチ歩きみたいでかわいかった!
-光の追いかけと、ブロックを投げる事の両立が難しく感じました。
-1つのモーターでロボを動かすには馬力が足りず、苦労しました。
*コメント [#f2eb1b1f]
よろしければコメントをお願いします
#comment