- 追加された行はこの色です。
- 削除された行はこの色です。
[[2009a]]
*目次 [#lce279f3]
#contents
*課題3/懐中電灯に向かってホイールを投げるロボット [#f9730b01]
**メンバー紹介 [#s778b942]
•しゅうた...
•しゅうた...工学ノ人。関西人。
•ゆうき...
•ゆうき...教育ノ人。猛毒種。
**課題内容 [#iba3b268]
インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。
1. 全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。
2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
3. 懐中電灯を動かしたとき懐中電灯に向かって進み、見失った時には再び全方向から懐中電灯を探しだす。7秒以上追尾できたら懐中電灯に向かってブロックを投げる。
懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。
**ロボットの作成 [#fc293318]
***土台部分 [#v7185453]
#ref(3dodai.jpg)
***光センサー [#gda5c6e4]
***ホイールを投げる部分 [#dcbd9e39]
**プログラム [#kf08ed71]
***しゅうた [#l0ca3a26]
プログラム内容:1. 全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる
#define THRESHOLD 50 //閾値の設定
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに設定
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに設定
SetPower(OUT_A+OUT_C,7); //出力を7に設定
OnFwd(OUT_A); //右回転
while(true){
if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)){ //センサー1、3が閾値より大きい光を感知した場合
Off(OUT_A); //停止
Wait(50); //安定させるための時間
OnFwd(OUT_C); //ホイールを投げる
Wait(15);
Off(OUT_C);
OnRev(OUT_C); //元の位置に戻す
Wait(15);
Off(OUT_C);
}
if(SENSOR_3>THRESHOLD){ //センサ−3が閾値より大きい光を感知した場合
OnRev(OUT_A); //左回転
}
if(SENSOR_3>SENSOR_1){ //センサー3がセンサー1より光を強く感知した場合
OnRev(OUT_A); //左回転
}
}
}
***ゆうき [#h5a83e24]
プログラム内容→2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
#define hikari 53 //光を探す為の閾値
#define line 75 //ブロックを投げる為の閾値
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1→光センサ
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3→光センサ
SetPower(OUT_A+OUT_C,7); //出力を7に設定
while (true) {
if((SENSOR_1>hikari)&&(SENSOR_3>hikari)){ //センサ1、3がhikariより大きいならば前進する。
OnRev(OUT_A);Wait(20);
OnFwd(OUT_A);Wait(20);
}
if ((SENSOR_1>hikari)&&(SENSOR_3<hikari)){ //センサ1のみがhikariより大きいならば右に回る。
OnRev(OUT_A);
}
if((SENSOR_1<hikari)&&(SENSOR_3<hikari)){ //センサ1、3が共にhikariより小さいならば左に回る。
OnFwd(OUT_A);
}
if((SENSOR_1>line)&&(SENSOR_3>line)){ //センサ1、3が共にlineより大きいときブロックを投げる。
Off(OUT_A);
OnFwd(OUT_C);Wait(12);
Off(OUT_C);
break; //ブロックを投げたらbreakしてwhileから抜ける。
}
}
Off(OUT_A); //停止
}
**創意工夫した点 [#v91494d5]
今回創意工夫した点はディファレンシャルギアへの負担の軽減だと思います。
課題3から初めて用いたディファレンシャルギアでそのまま車体を動かすと両タイヤの馬力の違いからかギアがうまく噛み合いませんでした。
そこで前にもう一つ小さいタイヤを取り付けてディファレンシャルギアへの負担を軽減することでなかなかスムーズに走ってくれましたf^_^;
**感想 [#p6e4c4a4]
***しゅうた [#i274ea26]
今回の課題での難点はやはりディファレンシャルギアを用いて、車体をどれほどスムーズに走行させるかでした。
でもプログラミングは意外とすぐに出来たので良かったです↑↑
次のロボコン頑張ります!!
***ゆうき [#fdde78dc]
今回はディファレンシャルギアを用いた土台部分にかなり苦しめられました。なかなか動いてくれなくて(TДT*) まぁ・最終的にはガタガタ音をたてながらではありますが、ちゃんと動いてくれたのでよしとしましょう(´∀`)=3ww
プログラムに関しては思いのほかスムーズに出来上がったのでよかったです。一瞬暴走しましたが笑
この調子でロボコンも頑張ります♪
*コメント [#l0c54589]
このページに関する御意見•御感想などありましたらお書きくださいm(_ _)m
#comment