2015a/Member/ko-rusuro-/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
今回の課題は、
&br;「半径1m以内にある空き缶を探して、25cmの距離からボー...
結果を述べた後、解説を加えていく。
#Contents
*結果 [#s6d27242]
**目標の達成度 [#w9b64a9a]
無事に成功した。
**ロボットの画像 [#o4181f65]
注)これらの画像は時計回りに90度回転させて見てほしい。決...
&ref(2015a/Member/ko-rusuro-/Mission3/kadai3-3.jpg,25%,zo...
&ref(2015a/Member/ko-rusuro-/Mission3/kadai3-1.jpg,25%,zo...
&ref(2015a/Member/ko-rusuro-/Mission3/kadai3-2.jpg,25%,zo...
前についてある超音波センサーで缶との距離を測定している。...
**作成時間 [#x270801d]
+マシーンの組み立て・・・10分
+プログラムの作成・・・2時間半
+レポートの作成・・・4時間
マシーンは大体完成していたのでどの端子がどのモーターにつ...
**プログラム [#afd28acb]
先生が配布した紙に書いてあったプログラムをオマージュして...
***定義と変数値の確定 [#l9a215e4]
#define SPEED 50
#define SPEED_SLOW 30
const float diameter = 5.45; //タイヤの直径(cm)
const float track = 12; //タイヤのトレッド幅(cm)
const float pi = 3.1415; //円周率
***サブルーチン [#h3a378d3]
-d(cm)前進するプログラム
void fwdDist(float d){ //距離d(cm)前進
long angle;
angle = d/(diameter*pi)*360.0; //角度を計算する
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, tr...
}
このプログラムは進みたい距離を設定するだけで、プログラム...
-旋回するプログラム
void turnAng(long ang){ // 角度ang度の時計回りの旋回
long angle;
angle = track/diameter * ang;
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true, ...
}
このプログラムも回転したい角度を設定するだけで旋回を始め...
-缶を探して、缶の方向を向き、缶までの距離の値を返すプログ...
このプログラムは他のプログラムと比べて長いので細かく説明...
int searchDirection(long ang){ //現在の方向を中心にang度...
//障害物までの距離...
long angle, tacho_min=0, tacho_corr;
int d_min;
d_min=300; //仮の最小値
ここまででlong型の変数値が三つ,int型の変数値が一つ用意さ...
angle = (track/diameter)*ang; //旋回角度からタイヤ...
turnAng(ang/2); //指定された角度の半分を旋回
ResetTachoCount(OUT_BC); //角度計測をリセット
OnFwdSync(OUT_BC,SPEED_SLOW,-100);
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S1)<d_min){
d_min=SensorUS(S1); //仮の最小値を更新
tacho_min=MotorTachoCount(OUT_B);
}
}
ここのマシーンの動きは、初めに設定したマシーンの回転角度...
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1...
Wait(14); //微調整
Off(OUT_BC);Wait(500);
return d_min; //ここで値を返す
}
上から二行目のプログラムは一番近い障害物の方を向くまで旋...
***メインプログラム [#k2d82e57]
task main(){
SetSensorLowspeed(S1);
// 缶の方向を探したあと、近づいて10cm手前で停止
int d = searchDirection(360);
if (d > 25) {
fwdDist(d-25.0);
}
RotateMotor(OUT_A,30,150);
}
上で説明を加えたものに球を射出するプログラムを付け足した...
*考察と感想 [#kb4fc5ae]
プリントを配られた後、なかなかプログラムが理解できずに困...
疑問を少しずつ解消していくのは時間が掛かるが、有意義な時...
終了行:
今回の課題は、
&br;「半径1m以内にある空き缶を探して、25cmの距離からボー...
結果を述べた後、解説を加えていく。
#Contents
*結果 [#s6d27242]
**目標の達成度 [#w9b64a9a]
無事に成功した。
**ロボットの画像 [#o4181f65]
注)これらの画像は時計回りに90度回転させて見てほしい。決...
&ref(2015a/Member/ko-rusuro-/Mission3/kadai3-3.jpg,25%,zo...
&ref(2015a/Member/ko-rusuro-/Mission3/kadai3-1.jpg,25%,zo...
&ref(2015a/Member/ko-rusuro-/Mission3/kadai3-2.jpg,25%,zo...
前についてある超音波センサーで缶との距離を測定している。...
**作成時間 [#x270801d]
+マシーンの組み立て・・・10分
+プログラムの作成・・・2時間半
+レポートの作成・・・4時間
マシーンは大体完成していたのでどの端子がどのモーターにつ...
**プログラム [#afd28acb]
先生が配布した紙に書いてあったプログラムをオマージュして...
***定義と変数値の確定 [#l9a215e4]
#define SPEED 50
#define SPEED_SLOW 30
const float diameter = 5.45; //タイヤの直径(cm)
const float track = 12; //タイヤのトレッド幅(cm)
const float pi = 3.1415; //円周率
***サブルーチン [#h3a378d3]
-d(cm)前進するプログラム
void fwdDist(float d){ //距離d(cm)前進
long angle;
angle = d/(diameter*pi)*360.0; //角度を計算する
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, tr...
}
このプログラムは進みたい距離を設定するだけで、プログラム...
-旋回するプログラム
void turnAng(long ang){ // 角度ang度の時計回りの旋回
long angle;
angle = track/diameter * ang;
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true, ...
}
このプログラムも回転したい角度を設定するだけで旋回を始め...
-缶を探して、缶の方向を向き、缶までの距離の値を返すプログ...
このプログラムは他のプログラムと比べて長いので細かく説明...
int searchDirection(long ang){ //現在の方向を中心にang度...
//障害物までの距離...
long angle, tacho_min=0, tacho_corr;
int d_min;
d_min=300; //仮の最小値
ここまででlong型の変数値が三つ,int型の変数値が一つ用意さ...
angle = (track/diameter)*ang; //旋回角度からタイヤ...
turnAng(ang/2); //指定された角度の半分を旋回
ResetTachoCount(OUT_BC); //角度計測をリセット
OnFwdSync(OUT_BC,SPEED_SLOW,-100);
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S1)<d_min){
d_min=SensorUS(S1); //仮の最小値を更新
tacho_min=MotorTachoCount(OUT_B);
}
}
ここのマシーンの動きは、初めに設定したマシーンの回転角度...
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1...
Wait(14); //微調整
Off(OUT_BC);Wait(500);
return d_min; //ここで値を返す
}
上から二行目のプログラムは一番近い障害物の方を向くまで旋...
***メインプログラム [#k2d82e57]
task main(){
SetSensorLowspeed(S1);
// 缶の方向を探したあと、近づいて10cm手前で停止
int d = searchDirection(360);
if (d > 25) {
fwdDist(d-25.0);
}
RotateMotor(OUT_A,30,150);
}
上で説明を加えたものに球を射出するプログラムを付け足した...
*考察と感想 [#kb4fc5ae]
プリントを配られた後、なかなかプログラムが理解できずに困...
疑問を少しずつ解消していくのは時間が掛かるが、有意義な時...
ページ名: