2012a/A3/imoto/M2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012a/Member]]
目次
#contents
*課題2 ライントレースをするロボット[製作者]萩原 孝幸 [#...
**コース [#g0b7b48e]
コースの条件
?交差点×2
?ヘアピンカーブ×1
?直角×1
&ref(2012a/A3/imoto/M2/IMAG0284.jpg,45%,コース);
**ロボット本体 [#l0c496dd]
ドライブベースは説明書の通り組みました。
&ref(2012a/A3/imoto/M2/NXT.gif,45%,ロボット本体);←1秒こと...
&ref(2012a/A3/imoto/M2/IMAG0293.jpg,40%,ロボット本体);←光...
**ライントレースの仕組み [#d0dcb519]
&ref(2012a/A3/imoto/M2/黒.PNG,55%,コース);
黒に乗ったら閾値で判断して左に曲がり
白に乗ったら閾値で判断して右に曲がることを繰り返して進ん...
**脱出について [#qea71d1d]
&ref(2012a/A3/imoto/M2/ライントレース.png,55%,脱出);
タイマー制御で行っています。
図の赤線のように脱出手前の直線でタイマー制御し
ライントレースのサイドを変えて脱出します。
**1秒でも早くする周回する [#j66140c5]
閾値を2つ作り、その2つの閾値以外のところでは直進加速する...
トレースの右へ、左への動きの出力を見失わないギリギリまで...
直角の曲がり方として右車輪と左車輪の回転を逆にし、最短で...
これにより直角もスムーズに回れるようになっています。
*動画 [#w202de45]
http://www.youtube.com/watch?v=bHZ48P824-k&feature=youtu.be
↑youtubeにアップロードしてみました。(NEW! 6月23日完成版...
*音が小さいです。授業で使っているOSでは「alsamixer」とい...
*プログラム [#i8c670bc]
/* マクロ(動作) */
#define Right OnFwd(OUT_A,60);Off(OUT_C);//右へ曲がれ
#define Left OnFwd(OUT_C,60);OnRev(OUT_A,60);//左へ曲がれ
#define Straight OnFwd(OUT_A,28);OnFwd(OUT_C,30)//直進しろ
#define WBODER 59 //閾値が59以上なら白の上に乗っている...
#define BBODER 43 //閾値が43以下なら黒の上に乗っている...
/* マクロ(音階) */
#define Do 523//ド
#define Re 587//レ
#define Mi 659//ミ
#define Fa 698//ファ
#define Sol 784//ソ
#define Ra 880//ラ
#define Ti 988//シ
/* 演奏タスク(勝利のファンファーレ(FINAL FANTASYより) */
task music()
{
/*ドドドドー*/
PlayTone(Do,100);//ドの音を0.1秒間ならせ
Wait(160);
PlayTone(Do,100);
Wait(160);
PlayTone(Do,100);
Wait(160);
PlayTone(Do,290);
Wait(500);
/*ラ♭ーシ♭ードッシ♭ドー*/
PlayTone(415,400);
Wait(500);
PlayTone(466,340);
Wait(430);
PlayTone(Do,200);
Wait(310);
PlayTone(466,200);
Wait(190);
PlayTone(Do,800);
Wait(1200);
/*ソーファソファー*/
while(true)//以下からはループさせよ
{
PlayTone(392,360);
Wait(380);
PlayTone(349,360);
Wait(380);
PlayTone(392,340);
Wait(370);
PlayTone(349,280);
Wait(200);
/*シシ♭ーラーソーファー*/
PlayTone(466,200);
Wait(400);
PlayTone(466,330);
Wait(200);
PlayTone(440,360);
Wait(360);
PlayTone(392,330);
Wait(200);
PlayTone(349,400);
Wait(600);
/*ソーファーミーファレー*/
PlayTone(392,330);
Wait(400);
PlayTone(349,330);
Wait(400);
PlayTone(330,330);
Wait(400);
PlayTone(349,200);
Wait(200);
PlayTone(294,1000);
Wait(2000);
/*ソーファソファー*/
PlayTone(392,360);
Wait(380);
PlayTone(349,360);
Wait(380);
PlayTone(392,340);
Wait(370);
PlayTone(349,280);
Wait(200);
/*シシ♭ーラーソーファー*/
PlayTone(466,200);
Wait(400);
PlayTone(466,330);
Wait(200);
PlayTone(440,360);
Wait(360);
PlayTone(392,330);
Wait(200);
PlayTone(349,400);
Wait(600);
/*ソーファーソーシ♭ドー*/
PlayTone(392,330);
Wait(400);
PlayTone(349,330);
Wait(400);
PlayTone(392,330);
Wait(400);
PlayTone(466,200);
Wait(200);
PlayTone(523,1000);
Wait(2000);
}
}
/* ライントレースタスク */
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサ...
SetSensorLight(IN_1);//1のライトを点灯せよ
long time1,timeX;
time1 = CurrentTick();//ストップウォッチ1のスタートを押せ
while( 42000 >= timeX)//ストップウォッチ1が42秒以内な...
{ timeX = CurrentTick()-time1;
if (SENSOR_1 > WBODER)//白上なら左に曲がる
{Left;}
else if (SENSOR_1 < BBODER)//黒上なら右に曲がる
{Right;}
else
{Straight;}
}
long time2,timeY;
time2 = CurrentTick();//ストップウォッチ2のスタートを...
while( 1000 >= timeY)//ストップウォッチ2が1秒以内なら以...
{ timeY = CurrentTick()-time2;
Off(OUT_AC);
Wait(3000);
OnFwd(OUT_C,30);
Wait(0800);
Off(OUT_C);
}
long time3,timeZ;
time3 = CurrentTick();//ストップウォッチ3のスタートを押せ
while( 7000 >= timeZ)//ストップウォッチ3が7秒以内なら以...
{ timeZ = CurrentTick()-time3;
if (SENSOR_1 > WBODER)//白上なら右に曲がる
{Right;}
else if (SENSOR_1 < BBODER)//黒上なら左に曲がる
{Left;}
else
{OnFwd(OUT_A,30);OnFwd(OUT_C,30);}
}
while(timeZ >= 7000)//ストップウォッチ3が7秒以上なら止まれ
{
Off(OUT_AC);
}
}
*感想 [#r4c990ce]
センサーが1つしか使えなかったのでとても難しかったです。
1つの場合、黒い線上の時にまっすぐ進めと言う動作は非常に難...
今回のように黒い線、白い線を交互に辿って行くのが正解かな...
音階のマクロは結局ドしか使わなかったです。
このくらいの長さの曲なら1つ1つ振動数を手入力でもなんとか...
終了行:
[[2012a/Member]]
目次
#contents
*課題2 ライントレースをするロボット[製作者]萩原 孝幸 [#...
**コース [#g0b7b48e]
コースの条件
?交差点×2
?ヘアピンカーブ×1
?直角×1
&ref(2012a/A3/imoto/M2/IMAG0284.jpg,45%,コース);
**ロボット本体 [#l0c496dd]
ドライブベースは説明書の通り組みました。
&ref(2012a/A3/imoto/M2/NXT.gif,45%,ロボット本体);←1秒こと...
&ref(2012a/A3/imoto/M2/IMAG0293.jpg,40%,ロボット本体);←光...
**ライントレースの仕組み [#d0dcb519]
&ref(2012a/A3/imoto/M2/黒.PNG,55%,コース);
黒に乗ったら閾値で判断して左に曲がり
白に乗ったら閾値で判断して右に曲がることを繰り返して進ん...
**脱出について [#qea71d1d]
&ref(2012a/A3/imoto/M2/ライントレース.png,55%,脱出);
タイマー制御で行っています。
図の赤線のように脱出手前の直線でタイマー制御し
ライントレースのサイドを変えて脱出します。
**1秒でも早くする周回する [#j66140c5]
閾値を2つ作り、その2つの閾値以外のところでは直進加速する...
トレースの右へ、左への動きの出力を見失わないギリギリまで...
直角の曲がり方として右車輪と左車輪の回転を逆にし、最短で...
これにより直角もスムーズに回れるようになっています。
*動画 [#w202de45]
http://www.youtube.com/watch?v=bHZ48P824-k&feature=youtu.be
↑youtubeにアップロードしてみました。(NEW! 6月23日完成版...
*音が小さいです。授業で使っているOSでは「alsamixer」とい...
*プログラム [#i8c670bc]
/* マクロ(動作) */
#define Right OnFwd(OUT_A,60);Off(OUT_C);//右へ曲がれ
#define Left OnFwd(OUT_C,60);OnRev(OUT_A,60);//左へ曲がれ
#define Straight OnFwd(OUT_A,28);OnFwd(OUT_C,30)//直進しろ
#define WBODER 59 //閾値が59以上なら白の上に乗っている...
#define BBODER 43 //閾値が43以下なら黒の上に乗っている...
/* マクロ(音階) */
#define Do 523//ド
#define Re 587//レ
#define Mi 659//ミ
#define Fa 698//ファ
#define Sol 784//ソ
#define Ra 880//ラ
#define Ti 988//シ
/* 演奏タスク(勝利のファンファーレ(FINAL FANTASYより) */
task music()
{
/*ドドドドー*/
PlayTone(Do,100);//ドの音を0.1秒間ならせ
Wait(160);
PlayTone(Do,100);
Wait(160);
PlayTone(Do,100);
Wait(160);
PlayTone(Do,290);
Wait(500);
/*ラ♭ーシ♭ードッシ♭ドー*/
PlayTone(415,400);
Wait(500);
PlayTone(466,340);
Wait(430);
PlayTone(Do,200);
Wait(310);
PlayTone(466,200);
Wait(190);
PlayTone(Do,800);
Wait(1200);
/*ソーファソファー*/
while(true)//以下からはループさせよ
{
PlayTone(392,360);
Wait(380);
PlayTone(349,360);
Wait(380);
PlayTone(392,340);
Wait(370);
PlayTone(349,280);
Wait(200);
/*シシ♭ーラーソーファー*/
PlayTone(466,200);
Wait(400);
PlayTone(466,330);
Wait(200);
PlayTone(440,360);
Wait(360);
PlayTone(392,330);
Wait(200);
PlayTone(349,400);
Wait(600);
/*ソーファーミーファレー*/
PlayTone(392,330);
Wait(400);
PlayTone(349,330);
Wait(400);
PlayTone(330,330);
Wait(400);
PlayTone(349,200);
Wait(200);
PlayTone(294,1000);
Wait(2000);
/*ソーファソファー*/
PlayTone(392,360);
Wait(380);
PlayTone(349,360);
Wait(380);
PlayTone(392,340);
Wait(370);
PlayTone(349,280);
Wait(200);
/*シシ♭ーラーソーファー*/
PlayTone(466,200);
Wait(400);
PlayTone(466,330);
Wait(200);
PlayTone(440,360);
Wait(360);
PlayTone(392,330);
Wait(200);
PlayTone(349,400);
Wait(600);
/*ソーファーソーシ♭ドー*/
PlayTone(392,330);
Wait(400);
PlayTone(349,330);
Wait(400);
PlayTone(392,330);
Wait(400);
PlayTone(466,200);
Wait(200);
PlayTone(523,1000);
Wait(2000);
}
}
/* ライントレースタスク */
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサ...
SetSensorLight(IN_1);//1のライトを点灯せよ
long time1,timeX;
time1 = CurrentTick();//ストップウォッチ1のスタートを押せ
while( 42000 >= timeX)//ストップウォッチ1が42秒以内な...
{ timeX = CurrentTick()-time1;
if (SENSOR_1 > WBODER)//白上なら左に曲がる
{Left;}
else if (SENSOR_1 < BBODER)//黒上なら右に曲がる
{Right;}
else
{Straight;}
}
long time2,timeY;
time2 = CurrentTick();//ストップウォッチ2のスタートを...
while( 1000 >= timeY)//ストップウォッチ2が1秒以内なら以...
{ timeY = CurrentTick()-time2;
Off(OUT_AC);
Wait(3000);
OnFwd(OUT_C,30);
Wait(0800);
Off(OUT_C);
}
long time3,timeZ;
time3 = CurrentTick();//ストップウォッチ3のスタートを押せ
while( 7000 >= timeZ)//ストップウォッチ3が7秒以内なら以...
{ timeZ = CurrentTick()-time3;
if (SENSOR_1 > WBODER)//白上なら右に曲がる
{Right;}
else if (SENSOR_1 < BBODER)//黒上なら左に曲がる
{Left;}
else
{OnFwd(OUT_A,30);OnFwd(OUT_C,30);}
}
while(timeZ >= 7000)//ストップウォッチ3が7秒以上なら止まれ
{
Off(OUT_AC);
}
}
*感想 [#r4c990ce]
センサーが1つしか使えなかったのでとても難しかったです。
1つの場合、黒い線上の時にまっすぐ進めと言う動作は非常に難...
今回のように黒い線、白い線を交互に辿って行くのが正解かな...
音階のマクロは結局ドしか使わなかったです。
このくらいの長さの曲なら1つ1つ振動数を手入力でもなんとか...
ページ名: