- 追加された行はこの色です。
- 削除された行はこの色です。
*課題3(RISグループ) [#bf419d1f]
**課題内容 [#ua07bdc0]
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作しなさい。 ただし、ピンポン玉を放つ距離は10〜30cmとする。 ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。
**主なプログラミング内容 [#tb17bab4]
・ライトセンサーを前方に付けて本体を一回転、周囲の明るさを読み取る
・明るさの最大値を求める
・タイマーを用いて明るさの最大値の時刻を記録し使用する
*ロボット本体 [#x3c06114]
本体は課題2で使用したロボットを使用。
さらにボールのホールドやオープンから放出も課題2で使ったままの装置を用いた。
参照、課題2
http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMember%2Fluminous%2FMission2#t490a7b6
ボール取り込み装置の前方にライトセンサーを設置した。
#Ref(./IMG_3781.JPG)
*動画 [#r542b4ce]
**https://youtu.be/wra233VIKvY [#r7b2b8f4]
*プログラミング [#jc743941]
**メイン函数 [#w1e71365]
task main
task main()
{
センサー2番にライトセンサーを設置
SetSensor(SENOOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);
カウントを開始する
int turn_time = 290; //360度回転するまでの時間
int turn_time = 700; //360度回転するまでの時間
int light_max = 10; //この数値は後で更新されるので0でもいいが適当においてみた
int time_max;
タイマーをリセット
ClearTimer(0);
タイヤの回転を抑えて精度を良くする
SerPower(OUT_AC,1);
回転しながら観測し始める
OnFwd(OUT_A);OnRev(OUT_C);
while(FastTimer(0) < turn_time)
{
if(SENSOR_2 > light_max){
light_max = SENSOR_2;
time_max = FastTimer(0);
}
}
観測終了
Off(OUT_AC);PlaySound(SOUND_CLICK);Wait(100); //小休止し確認音を鳴らす
光センサーの観測した最大値のあるところまで逆回転する
SetPower(OUT_AC,1);
OnFwd(OUT_C);OnRev(OUT_A);
Wait(turn_time - time_max);
Off(OUT_AC);
PlaySound(SOUND_CLICK);Wait(100);
ホールドしているボールを押し出して懐中電灯に当てる
OnRev(OUT_B);Wait(25);Off(OUT_B); //アームを開く
OnFwd(OUT_AC);Wait(80);Off(OUT_AC); //前進
PlaySound(SOUND_DOWN); //終了確認音
}
*考察 [#k16bff72]
今回はそのまま逆回転で引き算を用いて簡単に最大値の方向を向くプログラムにしたが
一回転するための秒数は私がモーターの具合を見て勝手に与えたものなので、
そのライトセンサーの最大値を用いて一回転を正確にするプログラムもあれば良いと思った。
上記のプログラミングができれば正確な360度が分かるのだから逆回転を使わずに
最大値の方向を向くことができるのではないかと思った。