- 追加された行はこの色です。
- 削除された行はこの色です。
[[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つを投擲部に使いました。
そのためタイヤにはディファレンシャルギアを採用!!1つのモーターで左右への転回を実現。
** ラチェット部分 [#u5a8604b]
#ref(Image294.jpg)
ギアの回転の逆流を防ぐため、ラチェットを付けました。
** キャスター部分 [#fa815519]
#ref(Image304.jpg)
キャスターの奥光センサーの青いブロックが見えますか?
このロボは光センサーを下に付けているんです。
** 投石部分 [#i0fb60b0]
#ref(Image302.jpg)
後ろの尻尾に接続されたモーターを動かすと・・・
#ref(Image301.jpg)
発射!!
* プログラム [#j0d5c156]
** テーマ1、 [#u94b7269]
*a [#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)
{OnRev(OUT_B);Wait(10);
}
while(SENSOR_3<SENSOR_1)
{OnFwd(OUT_B);Wait(10);
}
if((SENSOR_1>50)&&(SENSOR_3>50))
{while(SENSOR_3>SENSOR_1)
{OnRev(OUT_B);Wait(10);
}
while(SENSOR_3<SENSOR_1)
{OnFwd(OUT_B);Wait(10);
}
if((-5<SENSOR_1)&&(SENSOR_1-SENSOR_3<5))
{Off(OUT_C);Off(OUT_B);
Wait(60);
OnRev(OUT_C);Wait(15);
OnFwd(OUT_C);Wait(3);
Off(OUT_C);}Wait(100);
}
}
}
}
*b [#k7f286ac]
#define THRESHOLD 40
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(true)
{
if(SENSOR_1 > THRESHOLD)
{
if(SENSOR_3 > THRESHOLD)
{
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)
{
OnFwd(OUT_B);Wait(15);
Off(OUT_B);
}
}
if(SENSOR_1 < THRESHOLD)
{
if(SENSOR_3 > THRESHOLD)
{
OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
if(SENSOR_3 < THRESHOLD)
{
OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
}
}
}
**テーマ2、 [#uc9eab7c]
*a [#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(-15<=SENSOR_1-SENSOR_3&&SENSOR_1-SENSOR_3<=15){
OnFwd(OUT_A);
Wait(50);
OnRev(OUT_A);
Wait(50);
Off(OUT_A);
}
else if(SENSOR_1-SENSOR_3>15){
OnFwd(OUT_A);
Wait(40);
Off(OUT_A);
}
else{
OnRev(OUT_A);
Wait(40);
Off(OUT_A);
}
}
}
*b [#bf917c89]
#define THRESHOLD 40
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(true)
{
if(SENSOR_1 > THRESHOLD)
{
if(SENSOR_3 > THRESHOLD)
{
Off(OUT_B);Wait(300);
if(SENSOR_1+SENSOR_3 > THRESHOLD)
{
Off(OUT_B);Wait(300);
while(SENSOR_1+SENSOR_3 < THRESHOLD)
{
OnFwd(OUT_B);Wait(15);
OnRev(OUT_B);Wait(15);
}
Off(OUT_B);
}
}
if(SENSOR_3 < THRESHOLD)
{
OnFwd(OUT_B);Wait(15);
Off(OUT_B);
}
}
if(SENSOR_1 < THRESHOLD)
{
if(SENSOR_3 > THRESHOLD)
{
OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
if(SENSOR_3 < THRESHOLD)
{
OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
}
}
}
**テーマ3、 [#a2ef2433]
*a [#fab526a7]
task main()
{
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_3 < 30)
{OnFwd(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);
}
}
}
}
*b [#w87cba5d]
#define THRESHOLD 40
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(true)
{
if(SENSOR_1 > THRESHOLD)
{
if(SENSOR_3 > THRESHOLD)
{
Off(OUT_B);Wait(300);
if(SENSOR_1+SENSOR_3 > THRESHOLD)
{
Off(OUT_B);Wait(300);
while(true)
{
while(SENSOR_1+SENSOR_3 < THRESHOLD)
{
OnFwd(OUT_B);Wait(15);
OnRev(OUT_B);Wait(15);
}
Off(OUT_C);Wait(100);
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)
{
OnFwd(OUT_B);Wait(15);
Off(OUT_B);
}
}
if(SENSOR_1 < THRESHOLD)
{
if(SENSOR_3 > THRESHOLD)
{
OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
if(SENSOR_3 < THRESHOLD)
{
OnRev(OUT_B);Wait(15);
Off(OUT_B);
}
}
}
}
*結果 [#a6e500da]
**改善した点 [#qae0af54]
-キャスターを若干高めに作り重心を後ろにしました。
-最初はロボが一向に進みませんでした。そこで地面との摩擦を減らすためにタイヤを外しホイールのみで動かせたところ見事動き出しました。
-
** [#c6845256]
*感想 [#qe14f300]
まだプログラムが未完成です。
*コメント [#f2eb1b1f]
よろしければコメントをお願いします
#comment