2017a/Member/kyo/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*Mission2 [#w8255cd2]
**課題について [#v855df8d]
今回の課題はライントレースロボットの作成である。光センサ...
**目標 [#a96430c4]
課題に臨むにあたって今回はプログラムをより簡単にするとい...
*ロボット [#z8d5ac24]
今回は機体の大きさに制限があり、より小さくより機敏に動け...
&br;タイヤは二輪だけにして、後輪のかわりに円盤状の部品を...
*プログラム [#r931b424]
今回のプログラムはライントレースとカウントを利用した。&br;
これらについて説明していきたいと思う。
**グローバル変数 [#c94c8e38]
int n=0;//カウント
&br;サブルーチン、メインプログラム、マクロの全てにカウン...
&br; ?ライントレース
&br; ↓
&br; ?曲がり角だと判別(左旋回を一定時間(今回は0.25秒)...
&br; ↓
&br; ?カウントを+1(F地点の場合n=0→n=1、Q地点ならばn=1→n=2)
&br; ↓
&br; ?n=1,2....になったときのアクション(対応のアクショ...
&br;以上のようにカウントを用いることで今回のような何番目...
**定数 [#ee93861d]
#define tmax 24//曲がり角を判別するための一般的な定数
#define tmid 26//曲がり角の判別を厳しくする定数
#define senter 42 //白と黒の境界の数値
#define right_turn OnFwd(OUT_A);OnRev(OUT_C);//右旋回
#define right OnFwd(OUT_A);Off(OUT_C);//右回転
#define left OnFwd(OUT_C);Off(OUT_A);//左回転
#define left_turn OnFwd(OUT_C);OnRev(OUT_A);//左旋回
#define teishi(t) Off(OUT_AC);Wait(t);//t秒間停止
#define sound_up PlaySound(SOUND_UP);//サウンドアップ
#define sound_down PlaySound(SOUND_DOWN);//サウンドダウン
&br;ライントレースについては後で説明するが、それに必要な...
&br;加えて音関係の動作やロボットの動作についてのプログラ...
**マクロ [#e6e7a248]
#define line_trase while(FastTimer(0)<tmax){if(SENSOR_2...
else if(SENSOR_2 >senter +0){OnFwd(OUT_AC);Clea...
else{SetPower(OUT_C,0);left_turn;}if(FastTimer(...
#define line_trase_curve while(FastTimer(0)<tmid){if(SE...
else if(SENSOR_2 >senter +0){OnFwd(OUT_AC);Clea...
else{left_turn;}if(FastTimer(0)>tmid){ClearTime...
&br;今回はライントレースを多用するためマクロ化した。ライ...
&br;?ラインの左端(白と黒の境界)の閾値を測定(定数tmax)
&br; ↓
&br;?もし光センサーが境界の閾値よりも大きな値を計測したら...
&br;??を繰り返すことで黒線の左端の境界に沿って進む。
&br;また、左旋回を一定時間(今回は0.25秒)以上行うとロボ...
&br;ちなみにマクロをこれほど大きくしてしまうのはあまり良...
**各ラインにおけるサブルーチン [#f53c10c8]
サブルーチンはすべて次のような構成となっている。
sub line_○○○()
{
ClearTimer(0);//タイマーをリセット
line_trase(_curve);//ライントレース
if(n==カウント数){ //カウントに対応したアクション
}
Off(OUT_AC);//一連の動作を終了
}
以上のように ライントレース→曲がり角でのカウント増加→カ...
sub line_one()//A〜F,R〜S、S〜G、S〜Pの経路
{
ClearTimer(0);
line_trase;
if((n==1)||(n==4)||(n==5)||(n==11)){//カウントが1また...
sound_up;
}
Off(OUT_AC);
}
sub line_two()//F〜Q、T〜R、S〜Pの経路
{
ClearTimer(0);
line_trase_curve;
if((n==2)||(n==9)||(n==12)){//カウントが2か9か12とな...
sound_down
teishi(100);
}
Off(OUT_AC);
}
sub line_three()//Q〜R、R〜Sの経路
{
ClearTimer(0);
line_trase;
if((n==3)||(n==10));{//カウントが3または10になったと...
sound_up;
right;Wait(45);
OnFwd(OUT_AC);Wait(20);
}
Off(OUT_AC);
}
sub line_four()//H〜T、T〜Tの経路
{
ClearTimer(0);
line_trase;
if((n==7)||(n==8)){//カウントが7または8になったとき ...
sound_down;
teishi(100);
right;Wait(45);
OnFwd(OUT_AC);Wait(20);
}
Off(OUT_AC);
}
sub line_five()//G〜Hの経路
{
ClearTimer(0);
line_trase_curve;
if(n==6){//カウントが6になったとき サウンドアップ
sound_up;
}
Off(OUT_AC);
}
基本的な動きはline_oneと同じだが道中で急な曲線があるため...
sub line_six()//E〜A
{
ClearTimer(0);
line_trase;
if(n==13){//カウントが13になったとき サウンドダウン
sound_down;
}
Off(OUT_AC);
}
**メインプログラム [#hb91490c]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetPower(OUT_AC,0);
line_one();//A〜F
line_two();//F〜Q
line_three();//Q〜R
repeat(2){//R〜G
line_one();
}
line_five();//G〜H
repeat(2){//H〜T〜T
line_four();
}
line_two();//T〜R
line_three();//R〜S
line_one();//S〜P
line_two();//P〜E
line_six();//E〜A
}
*感想 [#g28ea617]
**今回の課題を振り返って [#b040aa4f]
今回の課題では主にプログラムが大きな壁となったと思う。ロ...
しかし目標としたサブルーチンや引数を使用するということは...
**次回の課題に向けて [#ic4b7335]
次回の課題はいよいよロボコンである。前期で学んだことのす...
終了行:
#contents
*Mission2 [#w8255cd2]
**課題について [#v855df8d]
今回の課題はライントレースロボットの作成である。光センサ...
**目標 [#a96430c4]
課題に臨むにあたって今回はプログラムをより簡単にするとい...
*ロボット [#z8d5ac24]
今回は機体の大きさに制限があり、より小さくより機敏に動け...
&br;タイヤは二輪だけにして、後輪のかわりに円盤状の部品を...
*プログラム [#r931b424]
今回のプログラムはライントレースとカウントを利用した。&br;
これらについて説明していきたいと思う。
**グローバル変数 [#c94c8e38]
int n=0;//カウント
&br;サブルーチン、メインプログラム、マクロの全てにカウン...
&br; ?ライントレース
&br; ↓
&br; ?曲がり角だと判別(左旋回を一定時間(今回は0.25秒)...
&br; ↓
&br; ?カウントを+1(F地点の場合n=0→n=1、Q地点ならばn=1→n=2)
&br; ↓
&br; ?n=1,2....になったときのアクション(対応のアクショ...
&br;以上のようにカウントを用いることで今回のような何番目...
**定数 [#ee93861d]
#define tmax 24//曲がり角を判別するための一般的な定数
#define tmid 26//曲がり角の判別を厳しくする定数
#define senter 42 //白と黒の境界の数値
#define right_turn OnFwd(OUT_A);OnRev(OUT_C);//右旋回
#define right OnFwd(OUT_A);Off(OUT_C);//右回転
#define left OnFwd(OUT_C);Off(OUT_A);//左回転
#define left_turn OnFwd(OUT_C);OnRev(OUT_A);//左旋回
#define teishi(t) Off(OUT_AC);Wait(t);//t秒間停止
#define sound_up PlaySound(SOUND_UP);//サウンドアップ
#define sound_down PlaySound(SOUND_DOWN);//サウンドダウン
&br;ライントレースについては後で説明するが、それに必要な...
&br;加えて音関係の動作やロボットの動作についてのプログラ...
**マクロ [#e6e7a248]
#define line_trase while(FastTimer(0)<tmax){if(SENSOR_2...
else if(SENSOR_2 >senter +0){OnFwd(OUT_AC);Clea...
else{SetPower(OUT_C,0);left_turn;}if(FastTimer(...
#define line_trase_curve while(FastTimer(0)<tmid){if(SE...
else if(SENSOR_2 >senter +0){OnFwd(OUT_AC);Clea...
else{left_turn;}if(FastTimer(0)>tmid){ClearTime...
&br;今回はライントレースを多用するためマクロ化した。ライ...
&br;?ラインの左端(白と黒の境界)の閾値を測定(定数tmax)
&br; ↓
&br;?もし光センサーが境界の閾値よりも大きな値を計測したら...
&br;??を繰り返すことで黒線の左端の境界に沿って進む。
&br;また、左旋回を一定時間(今回は0.25秒)以上行うとロボ...
&br;ちなみにマクロをこれほど大きくしてしまうのはあまり良...
**各ラインにおけるサブルーチン [#f53c10c8]
サブルーチンはすべて次のような構成となっている。
sub line_○○○()
{
ClearTimer(0);//タイマーをリセット
line_trase(_curve);//ライントレース
if(n==カウント数){ //カウントに対応したアクション
}
Off(OUT_AC);//一連の動作を終了
}
以上のように ライントレース→曲がり角でのカウント増加→カ...
sub line_one()//A〜F,R〜S、S〜G、S〜Pの経路
{
ClearTimer(0);
line_trase;
if((n==1)||(n==4)||(n==5)||(n==11)){//カウントが1また...
sound_up;
}
Off(OUT_AC);
}
sub line_two()//F〜Q、T〜R、S〜Pの経路
{
ClearTimer(0);
line_trase_curve;
if((n==2)||(n==9)||(n==12)){//カウントが2か9か12とな...
sound_down
teishi(100);
}
Off(OUT_AC);
}
sub line_three()//Q〜R、R〜Sの経路
{
ClearTimer(0);
line_trase;
if((n==3)||(n==10));{//カウントが3または10になったと...
sound_up;
right;Wait(45);
OnFwd(OUT_AC);Wait(20);
}
Off(OUT_AC);
}
sub line_four()//H〜T、T〜Tの経路
{
ClearTimer(0);
line_trase;
if((n==7)||(n==8)){//カウントが7または8になったとき ...
sound_down;
teishi(100);
right;Wait(45);
OnFwd(OUT_AC);Wait(20);
}
Off(OUT_AC);
}
sub line_five()//G〜Hの経路
{
ClearTimer(0);
line_trase_curve;
if(n==6){//カウントが6になったとき サウンドアップ
sound_up;
}
Off(OUT_AC);
}
基本的な動きはline_oneと同じだが道中で急な曲線があるため...
sub line_six()//E〜A
{
ClearTimer(0);
line_trase;
if(n==13){//カウントが13になったとき サウンドダウン
sound_down;
}
Off(OUT_AC);
}
**メインプログラム [#hb91490c]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetPower(OUT_AC,0);
line_one();//A〜F
line_two();//F〜Q
line_three();//Q〜R
repeat(2){//R〜G
line_one();
}
line_five();//G〜H
repeat(2){//H〜T〜T
line_four();
}
line_two();//T〜R
line_three();//R〜S
line_one();//S〜P
line_two();//P〜E
line_six();//E〜A
}
*感想 [#g28ea617]
**今回の課題を振り返って [#b040aa4f]
今回の課題では主にプログラムが大きな壁となったと思う。ロ...
しかし目標としたサブルーチンや引数を使用するということは...
**次回の課題に向けて [#ic4b7335]
次回の課題はいよいよロボコンである。前期で学んだことのす...
ページ名: