2006a/C1/課題2左
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2006a/MemberOnly/進行状況C]]
#hr
CENTER:&size(25){〜『ライントレースロボット』を作る〜};
#hr
-目次
#contents
***制作者 [#j4dc4bba]
篠原 正樹
松井 春樹
石田 優耶
***ページ制作開始日 6月9日[#d45d92b0]
**プログラムの簡単な説明 [#ie6a77bf]
光センサーを2つ使って黒い線を挟んでラインをトレースする。各センサーは一定の明るさを感知して右左折して進路を修正する仕組み。
また障害物(他のロボット)に当たったときは、一旦進行を停止し、バックしてから右折し、その後前進してから左折で進路に戻る。
**今回のモーターやセンサーの使用目的 [#u5cffeb3]
&color(#FF0000){モーター};は左右のタイヤに使用し計2つ。ロボット本体が直進、右折、左折、バック等をしやすいように左のタイヤと右のタイヤでモーターを分けた。
&color(#FF0000){光センサー};は少し間隔を空けて2つ設置。その2つのセンサーで黒い線を挟み、左右の光センサーが度数40以下を感知したときを条件に何か動作が起こるようにする。
&color(#FF0000){タッチセンサー};は前方に1つ設置。障害物に当たったときに条件が作動するようにする。
**ロボット制作過程での問題点と解決策 [#q2f29672]
++右左折がうまくいかない
→前後のタイヤの軸の距離を近づけてタイヤの摩擦を減らした
++タッチセンサーが反応しない
→設置位置が低かったので高い位置に変え接触面を縦に長くした
++タッチセンサーが何もないところで反応する
→写真にあるように後ろに錘をつけることで板をある程度安定させる
**ロボットの写真 [#tc3ebbe7]
&ref(SN310023[2].JPG); &color(red){タッチセンサー};の部分→&ref(SN310024[1].JPG);
***ロボット(改良版) [#c47cdcdc]
誤動作でタッチセンサーが押されないように改良
&ref(SN310025[2].JPG);
**プログラム [#qa3908b5]
***ライントレースロボット(障害物を右側にさける) [#y863ff5f]
task main()
{
SetPower(OUT_A,1); //*誤差を減らすためモーターの力を弱く*/
SetPower(OUT_C,1);
SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーに設定
SetSensor(SENSOR_2,SENSOR_TOUCH);//タッチセンサーに設定
SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーに設定
while(true){
if((SENSOR_1>40)&&(SENSOR_3>40)) {
OnFwd(OUT_A+OUT_C); //*どちらのセンサーとも何も書かれていなければ前進*/
}
if(SENSOR_3<40) {
OnFwd(OUT_A); OnRev(OUT_C);//*センサー3が黒い線に触れたら右に回転*/
}
if(SENSOR_1<40) {
OnFwd(OUT_C); OnRev(OUT_A);//*センサー1が黒い線に触れたら左に回転*/
}
if((SENSOR_1<40)&&(SENSOR_3<40)) {
Off(OUT_A+OUT_C);Wait(30); //*どちらのセンサーも黒い線に触れたら少し前進の後、右に回転*/
OnFwd(OUT_A+OUT_C);Wait(4);
OnFwd(OUT_A);OnRev(OUT_C);Wait(40);
}
if(SENSOR_2==1) {
SetPower(OUT_A,7); //*タッチセンサーに触れたら右に旋回*/
SetPower(OUT_C,7);
Off(OUT_A+OUT_C);Wait(10);
OnRev(OUT_A+OUT_C);Wait(200);
OnFwd(OUT_A);OnRev(OUT_C);Wait(364/4);
SetPower(OUT_C,7);
OnFwd(OUT_A+OUT_C);Wait(150);
OnFwd(OUT_C);OnRev(OUT_A);Wait(364/4);
OnFwd(OUT_A+OUT_C);Wait(150);
OnFwd(OUT_C);OnRev(OUT_A);Wait(364/5);
OnFwd(OUT_A+OUT_C);
}
}
}
***ライントレースロボット(タッチセンサーに触れたら反転) [#c6a8ace4]
#define A 40 //*黒の線と何も書かれていない場所の区別の値を定義する*/
task main()
{
SetPower(OUT_A,4);//*確実性を出すため力を弱く*/
SetPower(OUT_C,4);//*上と同じ*/
SetSensor(SENSOR_1,SENSOR_LIGHT);//*センサー1を光センサーに*/
SetSensor(SENSOR_2,SENSOR_TOUCH);//*センサー2をタッチセンサーに*/
SetSensor(SENSOR_3,SENSOR_LIGHT);//*センサー3を光センサーに*/
while(true){
if((SENSOR_1>A)&&(SENSOR_3>A)) {
OnFwd(OUT_A+OUT_C);//*どちらとも書かれていない場所だと前進*/
}
if(SENSOR_3<A) {
OnFwd(OUT_A); OnRev(OUT_C);//*センサー3が黒い線の上に行くと時計回りに回転*/
}
if(SENSOR_1<A) {
OnFwd(OUT_C); OnRev(OUT_A);//*センサー1が黒い線の上に行くと逆時計回りに回転*/
}
if((SENSOR_1<A)&&(SENSOR_3<A)) {
Off(OUT_A+OUT_C);Wait(30);//*どちらも黒い線の上に行くと少し前進した後時計回りに回転*/
OnFwd(OUT_A+OUT_C);Wait(4);
OnFwd(OUT_A);OnRev(OUT_C);Wait(40);
}
if(SENSOR_2==1) {
SetPower(OUT_A,7);
SetPower(OUT_C,7);
Off(OUT_A+OUT_C);Wait(10);//*タッチセンサーが反応したら少し後ろに下がり180度回転*/
OnRev(OUT_A+OUT_C);Wait(100);
OnFwd(OUT_A);OnRev(OUT_C);Wait(364/2);
OnFwd(OUT_A+OUT_C);
}
}
}
**反省点 [#u45dc3a2]
-最初に作ったロボットは前輪と後輪との幅が広く曲がることができなかった。
-コース上のカーブの部分ではどちらのセンサーも黒色に反応して右左を繰り返し先に進まなくなってしまうことがあった。そこでどうするか考え、いったんバックさせてもう一度進ませるようにしたが、こうすると前進と後退を繰り返すだけになってしまった。次に少し前進して右に回転させることにした、そうすると行動の繰り返しがなくなったがラインから外れてしまうということが起きるようになった。
-最初のロボットを実際走らせてみるとカーブを曲がるときの揺れでタッチセンサーが何もないところで反応してしまうことが起きた。
***反省を踏まえて次に活かしたいこと [#d63cd2fa]
-ロボットの車体を曲がれるようにするには、小回りが利くようにするか、タイヤを滑りやすいような材質にするかであるこの場合タイヤは全部材質がゴムなので後者は無理である。
-ロボットの動きをある程度決めてしまうと、その間は動きの調節ができなくなる、だからセンサーを使って微調整をできるようにしたが、さらに微妙なところで問題が起こった。やはりセンサーを増やすしかないのだろうか?
-タッチセンサーが勝手に反応しないようにするにはタッチセンサー前の板を安定させるようにする必要がある。タッチセンサーは勝手に反応しないようにしっかりした作りにしなくてはいけない。
**コメント欄 [#j0797804]
***コメントをどうぞ [#s9bfcec0]
-障害物に当たっていない状態では誤動作でタッチセンサが押されることのないよう、ゴムなどを利用して一定のテンションを書けておくと動作が安定すると思います。 -- [[松本(教員)]] &new{2006-06-16 (金) 10:04:57};
#comment
終了行:
[[2006a/MemberOnly/進行状況C]]
#hr
CENTER:&size(25){〜『ライントレースロボット』を作る〜};
#hr
-目次
#contents
***制作者 [#j4dc4bba]
篠原 正樹
松井 春樹
石田 優耶
***ページ制作開始日 6月9日[#d45d92b0]
**プログラムの簡単な説明 [#ie6a77bf]
光センサーを2つ使って黒い線を挟んでラインをトレースする。各センサーは一定の明るさを感知して右左折して進路を修正する仕組み。
また障害物(他のロボット)に当たったときは、一旦進行を停止し、バックしてから右折し、その後前進してから左折で進路に戻る。
**今回のモーターやセンサーの使用目的 [#u5cffeb3]
&color(#FF0000){モーター};は左右のタイヤに使用し計2つ。ロボット本体が直進、右折、左折、バック等をしやすいように左のタイヤと右のタイヤでモーターを分けた。
&color(#FF0000){光センサー};は少し間隔を空けて2つ設置。その2つのセンサーで黒い線を挟み、左右の光センサーが度数40以下を感知したときを条件に何か動作が起こるようにする。
&color(#FF0000){タッチセンサー};は前方に1つ設置。障害物に当たったときに条件が作動するようにする。
**ロボット制作過程での問題点と解決策 [#q2f29672]
++右左折がうまくいかない
→前後のタイヤの軸の距離を近づけてタイヤの摩擦を減らした
++タッチセンサーが反応しない
→設置位置が低かったので高い位置に変え接触面を縦に長くした
++タッチセンサーが何もないところで反応する
→写真にあるように後ろに錘をつけることで板をある程度安定させる
**ロボットの写真 [#tc3ebbe7]
&ref(SN310023[2].JPG); &color(red){タッチセンサー};の部分→&ref(SN310024[1].JPG);
***ロボット(改良版) [#c47cdcdc]
誤動作でタッチセンサーが押されないように改良
&ref(SN310025[2].JPG);
**プログラム [#qa3908b5]
***ライントレースロボット(障害物を右側にさける) [#y863ff5f]
task main()
{
SetPower(OUT_A,1); //*誤差を減らすためモーターの力を弱く*/
SetPower(OUT_C,1);
SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーに設定
SetSensor(SENSOR_2,SENSOR_TOUCH);//タッチセンサーに設定
SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーに設定
while(true){
if((SENSOR_1>40)&&(SENSOR_3>40)) {
OnFwd(OUT_A+OUT_C); //*どちらのセンサーとも何も書かれていなければ前進*/
}
if(SENSOR_3<40) {
OnFwd(OUT_A); OnRev(OUT_C);//*センサー3が黒い線に触れたら右に回転*/
}
if(SENSOR_1<40) {
OnFwd(OUT_C); OnRev(OUT_A);//*センサー1が黒い線に触れたら左に回転*/
}
if((SENSOR_1<40)&&(SENSOR_3<40)) {
Off(OUT_A+OUT_C);Wait(30); //*どちらのセンサーも黒い線に触れたら少し前進の後、右に回転*/
OnFwd(OUT_A+OUT_C);Wait(4);
OnFwd(OUT_A);OnRev(OUT_C);Wait(40);
}
if(SENSOR_2==1) {
SetPower(OUT_A,7); //*タッチセンサーに触れたら右に旋回*/
SetPower(OUT_C,7);
Off(OUT_A+OUT_C);Wait(10);
OnRev(OUT_A+OUT_C);Wait(200);
OnFwd(OUT_A);OnRev(OUT_C);Wait(364/4);
SetPower(OUT_C,7);
OnFwd(OUT_A+OUT_C);Wait(150);
OnFwd(OUT_C);OnRev(OUT_A);Wait(364/4);
OnFwd(OUT_A+OUT_C);Wait(150);
OnFwd(OUT_C);OnRev(OUT_A);Wait(364/5);
OnFwd(OUT_A+OUT_C);
}
}
}
***ライントレースロボット(タッチセンサーに触れたら反転) [#c6a8ace4]
#define A 40 //*黒の線と何も書かれていない場所の区別の値を定義する*/
task main()
{
SetPower(OUT_A,4);//*確実性を出すため力を弱く*/
SetPower(OUT_C,4);//*上と同じ*/
SetSensor(SENSOR_1,SENSOR_LIGHT);//*センサー1を光センサーに*/
SetSensor(SENSOR_2,SENSOR_TOUCH);//*センサー2をタッチセンサーに*/
SetSensor(SENSOR_3,SENSOR_LIGHT);//*センサー3を光センサーに*/
while(true){
if((SENSOR_1>A)&&(SENSOR_3>A)) {
OnFwd(OUT_A+OUT_C);//*どちらとも書かれていない場所だと前進*/
}
if(SENSOR_3<A) {
OnFwd(OUT_A); OnRev(OUT_C);//*センサー3が黒い線の上に行くと時計回りに回転*/
}
if(SENSOR_1<A) {
OnFwd(OUT_C); OnRev(OUT_A);//*センサー1が黒い線の上に行くと逆時計回りに回転*/
}
if((SENSOR_1<A)&&(SENSOR_3<A)) {
Off(OUT_A+OUT_C);Wait(30);//*どちらも黒い線の上に行くと少し前進した後時計回りに回転*/
OnFwd(OUT_A+OUT_C);Wait(4);
OnFwd(OUT_A);OnRev(OUT_C);Wait(40);
}
if(SENSOR_2==1) {
SetPower(OUT_A,7);
SetPower(OUT_C,7);
Off(OUT_A+OUT_C);Wait(10);//*タッチセンサーが反応したら少し後ろに下がり180度回転*/
OnRev(OUT_A+OUT_C);Wait(100);
OnFwd(OUT_A);OnRev(OUT_C);Wait(364/2);
OnFwd(OUT_A+OUT_C);
}
}
}
**反省点 [#u45dc3a2]
-最初に作ったロボットは前輪と後輪との幅が広く曲がることができなかった。
-コース上のカーブの部分ではどちらのセンサーも黒色に反応して右左を繰り返し先に進まなくなってしまうことがあった。そこでどうするか考え、いったんバックさせてもう一度進ませるようにしたが、こうすると前進と後退を繰り返すだけになってしまった。次に少し前進して右に回転させることにした、そうすると行動の繰り返しがなくなったがラインから外れてしまうということが起きるようになった。
-最初のロボットを実際走らせてみるとカーブを曲がるときの揺れでタッチセンサーが何もないところで反応してしまうことが起きた。
***反省を踏まえて次に活かしたいこと [#d63cd2fa]
-ロボットの車体を曲がれるようにするには、小回りが利くようにするか、タイヤを滑りやすいような材質にするかであるこの場合タイヤは全部材質がゴムなので後者は無理である。
-ロボットの動きをある程度決めてしまうと、その間は動きの調節ができなくなる、だからセンサーを使って微調整をできるようにしたが、さらに微妙なところで問題が起こった。やはりセンサーを増やすしかないのだろうか?
-タッチセンサーが勝手に反応しないようにするにはタッチセンサー前の板を安定させるようにする必要がある。タッチセンサーは勝手に反応しないようにしっかりした作りにしなくてはいけない。
**コメント欄 [#j0797804]
***コメントをどうぞ [#s9bfcec0]
-障害物に当たっていない状態では誤動作でタッチセンサが押されることのないよう、ゴムなどを利用して一定のテンションを書けておくと動作が安定すると思います。 -- [[松本(教員)]] &new{2006-06-16 (金) 10:04:57};
#comment
ページ名: