2007b/A1/課題2左
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#lb7cde19]
#contents
*ロボットについて [#a0b8dc92]
#ref(全体像_01.jpg)
**今回の目的 [#fbc977bb]
今回のロボットはライントレースを行うためのものです。ライントレースとは、ロボットに光センサーを取り付け、線に沿って動かすことです。コースについては後ほど...
#ref(光センサー拡大図_01.jpg)
ロボット上部から見て左側にある光センサーを光センサー1,右側にある光センサーを光センサー2とする。今回は黒い線の上ではなく、その両サイドの白い部分に沿って進むませ、黒い部分に光センサーが反応した場合、軌道修正を行うように設計しました。
***直線部分走行の場合... [#tcda9f61]
#ref(光センサー.jpg)
白い部分に両光センサーがある限り、直進する以外の行動を起こさないので、直進し続けます。
***右折部分走行の場合... [#yed9762b]
#ref(1.jpg)
光センサー2が黒い部分に反応すると...
#ref(右方向修正.jpg)
ロボットは赤い矢印の方向に軌道修正し、再び動き始めます。
***左折部分走行の場合... [#ad2567d6]
#ref(2.jpg)
センサー1が黒い部分に反応すると...
#ref(左方向修正.jpg)
ロボットは赤い矢印の方向に軌道修正し、再び動き出します。
***交差点での一時停止... [#ia9098c8]
#ref(交差点.jpg)
黒い部分に両光センサーが反応し、後退と停止を行います。
***激突した場合... [#mb0454c1]
#ref(タッチセンサー拡大図_01.jpg)
前方タッチセンサーが反応し、後退と停止を行い、再び動き出します。
***ラインを挟んで進む利点... [#p1eb518e]
交差点で直行させるラインを描く必要はありますが、黒いラインの上を沿わせる光センサーよりも二つのセンサーの幅が広くなることにより、速いスピードでカーブを曲がる場合でもコースから外れにくいです。
*コース [#d4207bab]
上記したように、交差点にて、コースと直角に黒い線を描くことによって、その位置に達すると両光センサーが反応します。すると、後退と停止を行い、再び動き出します。
#ref(コース_01.jpg)
*プログラム [#e87b7303]
**ライントレース用プログラム [#ma4ec1be]
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
while (true)
{
while(SENSOR_2 == 0)
{
if (SENSOR_1 < THRESHOLD) {
if (SENSOR_3 < THRESHOLD) {
Off(OUT_A+OUT_C); //停止
Wait(100);
OnFwd(OUT_A+OUT_C); //直進
Wait(100);
} else {
OnFwd(OUT_C); //右に方向修正
OnRev(OUT_A);
}
} else {
if (SENSOR_3 < THRESHOLD) {
OnFwd(OUT_A); //左に方向修正
OnRev(OUT_C);
} else {
OnFwd(OUT_A+OUT_C); //直進
}
}
}
OnRev(OUT_A+OUT_C); //ぶつかった時に後退、停止、直進する
Wait(100);
Off(OUT_A+OUT_C);
Wait(500);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
}
ライントレースを行うためのプログラムです。
**音楽用プログラム [#l39fcba8]
***マリオのテーマ(スター状態) [#l903cc82]
#define C1 131
#define C2 262
#define C3 523
#define Ds1 139
#define Ds2 277
#define Ds3 554
#define D1 147
#define D2 294
#define D3 587
#define Es1 156
#define Es2 311
#define Es3 622
#define E1 165
#define E2 330
#define E3 659
#define F1 175
#define F2 349
#define F3 698
task play_music()
{
while(true)
{
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(12);
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(7);
PlayTone(F3, 7); Wait(12);
PlayTone(D3, 7); Wait(7);
PlayTone(F3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(12);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(7);
PlayTone(E3, 7); Wait(12);
PlayTone(C3, 7); Wait(7);
PlayTone(E3,14); Wait(19);
}
}
通常走行状態で流れる音楽です。タッチセンサーが反応しない限りは流れ続けます。
***マリオのテーマ(地下ステージ) [#af9d3b55]
#define DO1 262
#define DO2 523
#define RA1 110
#define RA2 220
#define SI1 117
#define SI2 233
#define RE1 147
#define RE2 294
#define MI1 165
#define MI2 330
#define FA1 175
#define FA2 349
task play_music()
{
while (true)
{
PlayTone(DO1, 15); Wait(20);
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(DO1, 15); Wait(20);
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
}
}
激突した場合に流れる音楽です。
**トレース&音楽プログラム [#adae56d6]
下のプログラムは、前述した3つのプログラムをまとめて実際に使用したプログラムです。
#define THRESHOLD 40 // 閾値
#define DO1 262
#define DO2 523
#define RA1 110
#define RA2 220
#define SI1 117
#define SI2 233
#define RE1 294
#define RE2 587
#define MI1 311
#define MI2 622
#define FA1 349
#define FA2 698
#define C3 523
#define Ds3 554
#define D3 587
#define Es3 622
#define E3 659
#define F3 698
task play_music_1()
{
while(true)
{
PlayTone(F3,14); Wait(19); //マリオのテーマ(スター状態)
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(12);
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(7);
PlayTone(F3, 7); Wait(12);
PlayTone(D3, 7); Wait(7);
PlayTone(F3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(12);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(7);
PlayTone(E3, 7); Wait(12);
PlayTone(C3, 7); Wait(7);
PlayTone(E3,14); Wait(19);
}
}
task play_music_2() // 音楽を演奏するタスク
{
while (true)
{
PlayTone(DO1, 15); Wait(20); //マリオのテーマ(地下ステージ)
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(DO1, 15); Wait(20);
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
}
}
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
while (true)
{
stop play_music_2 ; // 後退用音楽(マリオのテーマ(地下ステージ))を停止
start play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を開始
while(SENSOR_2 == 0)
{
if (SENSOR_1 < THRESHOLD) {
if (SENSOR_3 < THRESHOLD) {
stop play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を停止
Off(OUT_A+OUT_C); //停止
Wait(100);
OnFwd(OUT_A+OUT_C); //直進
Wait(100);
start play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を開始
} else {
OnFwd(OUT_C); //右に方向修正
OnRev(OUT_A);
}
} else {
if (SENSOR_3 < THRESHOLD) {
OnFwd(OUT_A); //左に方向修正
OnRev(OUT_C);
} else {
OnFwd(OUT_A+OUT_C); //直進
}
}
}
stop play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を停止
start play_music_2 ; // 後退用音楽(マリオのテーマ(地下ステージ))を開始
OnRev(OUT_A+OUT_C); //ぶつかった時に後退、停止、直進する
Wait(100);
Off(OUT_A+OUT_C);
Wait(500);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
}
*工夫した点 [#p3e9934c]
-タッチセンサーのバンパーをできるだけ低くし、相手のロボットに衝突したときにちゃんと反応するようにしたこと。
-光センサーを白い部分に反応するようにしたのではなく、黒い部分に反応した場合に行動を起こすようにしたことによって、コースからはずれにくくしたこと。
*苦労した点 [#we955858]
-相手ロボットに衝突されたとき、相手の動作(例:一回転)に巻き込まれてコースから外れてしまったこと。
-アクシデントにより、交差点以外の場所で黒いラインを両光センサーが同時に反応してしまった場合、交差点の時と同じ動作をしてしまうため、コースから外れてしまうこと。
コメントをお願いします。
#comment
終了行:
*目次 [#lb7cde19]
#contents
*ロボットについて [#a0b8dc92]
#ref(全体像_01.jpg)
**今回の目的 [#fbc977bb]
今回のロボットはライントレースを行うためのものです。ライントレースとは、ロボットに光センサーを取り付け、線に沿って動かすことです。コースについては後ほど...
#ref(光センサー拡大図_01.jpg)
ロボット上部から見て左側にある光センサーを光センサー1,右側にある光センサーを光センサー2とする。今回は黒い線の上ではなく、その両サイドの白い部分に沿って進むませ、黒い部分に光センサーが反応した場合、軌道修正を行うように設計しました。
***直線部分走行の場合... [#tcda9f61]
#ref(光センサー.jpg)
白い部分に両光センサーがある限り、直進する以外の行動を起こさないので、直進し続けます。
***右折部分走行の場合... [#yed9762b]
#ref(1.jpg)
光センサー2が黒い部分に反応すると...
#ref(右方向修正.jpg)
ロボットは赤い矢印の方向に軌道修正し、再び動き始めます。
***左折部分走行の場合... [#ad2567d6]
#ref(2.jpg)
センサー1が黒い部分に反応すると...
#ref(左方向修正.jpg)
ロボットは赤い矢印の方向に軌道修正し、再び動き出します。
***交差点での一時停止... [#ia9098c8]
#ref(交差点.jpg)
黒い部分に両光センサーが反応し、後退と停止を行います。
***激突した場合... [#mb0454c1]
#ref(タッチセンサー拡大図_01.jpg)
前方タッチセンサーが反応し、後退と停止を行い、再び動き出します。
***ラインを挟んで進む利点... [#p1eb518e]
交差点で直行させるラインを描く必要はありますが、黒いラインの上を沿わせる光センサーよりも二つのセンサーの幅が広くなることにより、速いスピードでカーブを曲がる場合でもコースから外れにくいです。
*コース [#d4207bab]
上記したように、交差点にて、コースと直角に黒い線を描くことによって、その位置に達すると両光センサーが反応します。すると、後退と停止を行い、再び動き出します。
#ref(コース_01.jpg)
*プログラム [#e87b7303]
**ライントレース用プログラム [#ma4ec1be]
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
while (true)
{
while(SENSOR_2 == 0)
{
if (SENSOR_1 < THRESHOLD) {
if (SENSOR_3 < THRESHOLD) {
Off(OUT_A+OUT_C); //停止
Wait(100);
OnFwd(OUT_A+OUT_C); //直進
Wait(100);
} else {
OnFwd(OUT_C); //右に方向修正
OnRev(OUT_A);
}
} else {
if (SENSOR_3 < THRESHOLD) {
OnFwd(OUT_A); //左に方向修正
OnRev(OUT_C);
} else {
OnFwd(OUT_A+OUT_C); //直進
}
}
}
OnRev(OUT_A+OUT_C); //ぶつかった時に後退、停止、直進する
Wait(100);
Off(OUT_A+OUT_C);
Wait(500);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
}
ライントレースを行うためのプログラムです。
**音楽用プログラム [#l39fcba8]
***マリオのテーマ(スター状態) [#l903cc82]
#define C1 131
#define C2 262
#define C3 523
#define Ds1 139
#define Ds2 277
#define Ds3 554
#define D1 147
#define D2 294
#define D3 587
#define Es1 156
#define Es2 311
#define Es3 622
#define E1 165
#define E2 330
#define E3 659
#define F1 175
#define F2 349
#define F3 698
task play_music()
{
while(true)
{
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(12);
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(7);
PlayTone(F3, 7); Wait(12);
PlayTone(D3, 7); Wait(7);
PlayTone(F3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(12);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(7);
PlayTone(E3, 7); Wait(12);
PlayTone(C3, 7); Wait(7);
PlayTone(E3,14); Wait(19);
}
}
通常走行状態で流れる音楽です。タッチセンサーが反応しない限りは流れ続けます。
***マリオのテーマ(地下ステージ) [#af9d3b55]
#define DO1 262
#define DO2 523
#define RA1 110
#define RA2 220
#define SI1 117
#define SI2 233
#define RE1 147
#define RE2 294
#define MI1 165
#define MI2 330
#define FA1 175
#define FA2 349
task play_music()
{
while (true)
{
PlayTone(DO1, 15); Wait(20);
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(DO1, 15); Wait(20);
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
}
}
激突した場合に流れる音楽です。
**トレース&音楽プログラム [#adae56d6]
下のプログラムは、前述した3つのプログラムをまとめて実際に使用したプログラムです。
#define THRESHOLD 40 // 閾値
#define DO1 262
#define DO2 523
#define RA1 110
#define RA2 220
#define SI1 117
#define SI2 233
#define RE1 294
#define RE2 587
#define MI1 311
#define MI2 622
#define FA1 349
#define FA2 698
#define C3 523
#define Ds3 554
#define D3 587
#define Es3 622
#define E3 659
#define F3 698
task play_music_1()
{
while(true)
{
PlayTone(F3,14); Wait(19); //マリオのテーマ(スター状態)
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(12);
PlayTone(F3,14); Wait(19);
PlayTone(F3,14); Wait(19);
PlayTone(D3, 7); Wait(7);
PlayTone(F3, 7); Wait(12);
PlayTone(D3, 7); Wait(7);
PlayTone(F3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(12);
PlayTone(E3,14); Wait(19);
PlayTone(E3,14); Wait(19);
PlayTone(C3, 7); Wait(7);
PlayTone(E3, 7); Wait(12);
PlayTone(C3, 7); Wait(7);
PlayTone(E3,14); Wait(19);
}
}
task play_music_2() // 音楽を演奏するタスク
{
while (true)
{
PlayTone(DO1, 15); Wait(20); //マリオのテーマ(地下ステージ)
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(DO1, 15); Wait(20);
PlayTone(DO2, 15); Wait(20);
PlayTone(RA1, 15); Wait(20);
PlayTone(RA2, 15); Wait(20);
PlayTone(SI1, 15); Wait(20);
PlayTone(SI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
PlayTone(FA1, 15); Wait(20);
PlayTone(FA2, 15); Wait(20);
PlayTone(RE1, 15); Wait(20);
PlayTone(RE2, 15); Wait(20);
PlayTone(MI1, 15); Wait(20);
PlayTone(MI2, 15); Wait(20);
Wait(60);
}
}
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
while (true)
{
stop play_music_2 ; // 後退用音楽(マリオのテーマ(地下ステージ))を停止
start play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を開始
while(SENSOR_2 == 0)
{
if (SENSOR_1 < THRESHOLD) {
if (SENSOR_3 < THRESHOLD) {
stop play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を停止
Off(OUT_A+OUT_C); //停止
Wait(100);
OnFwd(OUT_A+OUT_C); //直進
Wait(100);
start play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を開始
} else {
OnFwd(OUT_C); //右に方向修正
OnRev(OUT_A);
}
} else {
if (SENSOR_3 < THRESHOLD) {
OnFwd(OUT_A); //左に方向修正
OnRev(OUT_C);
} else {
OnFwd(OUT_A+OUT_C); //直進
}
}
}
stop play_music_1 ; // 直進用音楽(マリオのテーマ(スター状態))を停止
start play_music_2 ; // 後退用音楽(マリオのテーマ(地下ステージ))を開始
OnRev(OUT_A+OUT_C); //ぶつかった時に後退、停止、直進する
Wait(100);
Off(OUT_A+OUT_C);
Wait(500);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
}
*工夫した点 [#p3e9934c]
-タッチセンサーのバンパーをできるだけ低くし、相手のロボットに衝突したときにちゃんと反応するようにしたこと。
-光センサーを白い部分に反応するようにしたのではなく、黒い部分に反応した場合に行動を起こすようにしたことによって、コースからはずれにくくしたこと。
*苦労した点 [#we955858]
-相手ロボットに衝突されたとき、相手の動作(例:一回転)に巻き込まれてコースから外れてしまったこと。
-アクシデントにより、交差点以外の場所で黒いラインを両光センサーが同時に反応してしまった場合、交差点の時と同じ動作をしてしまうため、コースから外れてしまうこと。
コメントをお願いします。
#comment
ページ名: