2017b/Member/Masa/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題説明 [#tf0f6ee4]
今回の課題は、紙に書かれた黒い線の上をなぞって進み、途中...
*コース [#i3b3d179]
#ref(2017b/Member/Masa/Mission2/ko-su.jpg,75%,コースの画像)
このコースを使ってライントレースする。3つの経路のうち私...
第1コース
-1. Aをスタート
-2. Bを直進
-3. Cを右折
-4. Fを直進
-5. Rを左折(一時停止)
-6. Pを直進
-7. X地点の紙コップを取得してコースに戻る
-8. Qを左折
-9. Sを直進(一時停止)
-10. Y地点に紙コップを置いてコースに戻る
-11. Sを直進(一時停止)
-12. Fを左折(一時停止)
-13. Cを右折(一時停止)
-14. D地点へ(ゴール)
また、コースを作りで線を黒く塗るときに真ん中が一番黒くな...
*ロボット概要 [#bc29bc06]
**ロボット本体 [#l1f7fb7f]
#ref(2017b/Member/Masa/Mission2/torekitai1.jpg,150%,機体...
今回は、前回の課題1のときより動く距離が長いためできるだ...
**センサーについて [#k2fbf3a3]
#ref(2017b/Member/Masa/Mission2/sensorkakudo.jpg,150%,セ...
最初センサーの値の計測をしたときに少し角度がつくようにし...
**紙コップを取る機構 [#t91751e3]
紙コップを取るには紙コップを取れる位置まで移動しないとい...
&ref(2017b/Member/Masa/Mission2/kamicp1.jpg,150%,紙コップ...
機体の前についた棒にはまるように紙コップを移動させ
&ref(2017b/Member/Masa/Mission2/kamicp2.jpg,150%,紙コップ...
紙コップをつかむ
*交差点、カーブの判断方法について [#nb9f329c]
#ref(2017b/Member/Masa/Mission2/keiro1.jpg,140%,コースの...
コースの色の大体の値は一番黒いところが30%、その次に黒いと...
#ref(2017b/Member/Masa/Mission2/keiro2.jpg,140%,走るとこ...
基本的に40%のところをまっすぐ走るようにし、黒いところ、...
**交差点の判定 [#l3bdbcee]
今からの説明は右側を走っている場合である。
#ref(2017b/Member/Masa/Mission2/keiro3.jpg,140%,交差点の...
交差点に行くと一番黒い線にぶつかる。
#ref(2017b/Member/Masa/Mission2/keiro4.jpg,140%,交差点の...
プログラムによって右のタイヤを支点として右に曲がるが、し...
#ref(2017b/Member/Masa/Mission2/keiro5.jpg,140%,交差点の...
すると、カウンターが設定していた値を超え実行していたプロ...
#ref(2017b/Member/Masa/Mission2/keiro6.jpg,140%,交差点の...
次のプログラムは、交差点から抜け出すもので光センサーが白...
#ref(2017b/Member/Masa/Mission2/keiro7.jpg,140%,交差点の...
白いところまで行くとカウンターをカウントし始める。この時...
#ref(2017b/Member/Masa/Mission2/keiro8.jpg,140%,交差点の...
交差点を抜けたら、最初に説明したプログラムを実行する。そ...
**カーブの判定 [#ze73f4c2]
#ref(2017b/Member/Masa/Mission2/cab1.jpg,140%,カーブのの...
カーブに入ってくる直進用のプログラムも少し変えている。
#ref(2017b/Member/Masa/Mission2/cab2.jpg,140%,カーブのの...
まだ緩やかなところでは、
#ref(2017b/Member/Masa/Mission2/cab3.jpg,140%,カーブのの...
ライントレースを続ける。
#ref(2017b/Member/Masa/Mission2/cab4.jpg,140%,カーブのの...
しかし、カーブがきつくなると白いところから抜け出すのが遅...
#ref(2017b/Member/Masa/Mission2/cab5.jpg,140%,カーブのの...
そして、カーブ用のプログラムが実行される。このプログラム...
#ref(2017b/Member/Masa/Mission2/cab6.jpg,140%,カーブのの...
また、このカーブのプログラムにもカウンターをつけており、2...
*プログラムについて [#aa137803]
**定義 [#mb6c9767]
#define speedA 28 //モーターAの出力
#define speedB 26 //モーターBの出力
#define Cpower 20 //モーターCの出力
#define THRESHOLD 50 //しきい値
#define STEP 1 //1回の判定で進む時間
#define sA2 speedA/2 //Aの出力1/2
#define sB2 speedB/2 //Bの出力1/2
#define sA3 speedA/3 //Aの出力1/3
#define sB3 speedB/3 //Bの出力1/3
#define sA4 speedA/4 //Aの出力1/4
#define sB4 speedB/4 //Bの出力1/4
パワーが大きいと動きが速くなり反応しないことがあったので...
**サブルーチン [#fd36586f]
sub go_forward(int x,int y) //前進
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_back(int x,int y) //後進
{
OnFwd(OUT_A,-speedA-x);OnFwd(OUT_B,-speedB-y);
}
sub go_right1(int x,int y) //右の車輪を軸に右へ
{
OnFwd(OUT_B,speedB-y);Off(OUT_A);
}
sub go_left1(int x,int y) //左の車輪を軸に左へ
{
OnFwd(OUT_A,speedA-x);Off(OUT_B);
}
sub go_right2(int x,int y) //その場で右へ
{
OnFwd(OUT_A,-speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_left2(int x,int y) //その場で左へ
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,-speedB-y);
}
ロボットの基本的な動きである前進、後進、右回転、左回転を...
sub gogo_b(int x,int y) //黒い線まで前進
{
while (SENSOR_1 > THRESHOLD -9){
go_forward(x,y);
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub gogo_w(int x,int y) //白い線まで前進
{
while (SENSOR_1 < THRESHOLD -9){
go_forward(x,y);
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub lele(int x,int y) //黒い線まで左回転
{
while (SENSOR_1 < THRESHOLD -9){
go_left1(x,y);
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
センサーが指定された値を読み取るまで動くようにすることで...
sub r_left(int x,int y) //右側で左カーブ
{
int n = 0;
while (n<400){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD +10) {
go_left1(x,y);
} else {
go_left2(x,y);n=0;
}
Wait(STEP);
}
PlayTone(587,50); //音が鳴る
}
sub l_right(int x,int y) //左側で右カーブ
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left2(x,y);n=0;
} else if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD +10) {
go_right1(x,y);
} else {
go_right2(x,y);n=0;
}
Wait(STEP);
}
PlayTone(587,50); //音が鳴る
}
sub r_right(int x,int y) //右側で右カーブ
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -15) {
go_right2(x,y);
n=0;
} else if (SENSOR_1 < THRESHOLD -13) {
go_right1(x,y);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);
n=n+1;
} else if (SENSOR_1 < THRESHOLD +10) {
go_left1(x,y);
} else {
go_left2(x,y);
n=0;
}
Wait(STEP);
}
PlayTone(587,50); //音が鳴る
}
カーブのプログラムで、行う動作に付け加えてカウンターを増...
sub l_straight1(int x,int y) //左側で直進1
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub l_straight2(int x,int y) //左側で直進2
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right2(x,y);n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub l_straight3(int x,int y) //左側で直進3
{
int n = 0;
while (n < 250){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);
} else {
go_right1(x,y);n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub l_straight4(int x,int y) //左側で直進4
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=0;
} else if (SENSOR_1 < THRESHOLD - 9) {
go_forward(x,y);
} else {
go_right2(x,y);n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
左側を直進するプログラムで、4つつくった。これらの違いとし...
sub r_straight1(int x,int y) //右側で直進1
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(0,0);
n=n+1;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub r_straight2(int x,int y) //右側で直進2
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(0,0);
n=0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub r_straight3(int x,int y) //右側で直進3
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_right1(0,0);
n=0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub r_straight4(int x,int y) //右側で直進4
{
int n = 0;
while (n < 250){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(0,0);
n=n+1;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
右側を直進するプログラムで、基本左側と同じ理由で分けられ...
sub l_w() //白くなるまで左へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_left1(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub l_w2() //白くなるまで左へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_left2(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub l_w3() //白くなるまで左へ3
{
int n = 0;
while (n<150){
if (SENSOR_1 < THRESHOLD +15) {
go_left1(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
これは、ずっと左に回転し、白い部分の値を読み取るとカウン...
sub r_w() //白くなるまで右へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_right1(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub r_w2() //白くなるまで右へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_right2(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
これは、白くなるまでずっと右回転するバージョンである。こ...
sub r_b() //黒くなるまで右へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_right1(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub r_b2() //黒くなるまで右へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_right2(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
上のプログラムを黒くなるまで右にしたものである。これも、...
sub l_b() //黒くなるまで左へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_left1(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub l_b2() //黒くなるまで左へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_left2(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
同じように、黒くなるまで左に行くプログラムである。
sub c_ca() //紙コップをつかむ
{
OnFwd(OUT_C,Cpower);Wait(1100);
Off(OUT_C);
}
sub c_re() //紙コップを放す
{
OnFwd(OUT_C,-Cpower);Wait(1100);
Off(OUT_C);
}
紙コップをつかむのと放すプログラムである。時間で調整した...
**サブルーチンが多い理由 [#oa9c9e9f]
今回プログラムを作成するのに、ベースとしてはカウンターを...
**本文 [#mb4a6e33]
最初は枠の内側の右寄りに置いてスタートする。
task main()
{
SetSensorLight(S1); //端子1に光センサー
gogo_b(0,0); //最初の枠から出る
gogo_w(0,0);
lele(0,0);
r_straight1(0,0); //Bまで
l_w(); //進路修正
r_straight1(0,0); //Cまで
r_w();
r_straight1(0,0); //Fまで
l_w(); //進路修正
↑枠からでた後のトレースは右側を通っていきBのまがり角を認...
r_straight2(0,0);
r_left(sA3,sB3);//カーブ1
l_w();//車線変更
l_straight4(0,0);
PlayTone(523,50);
l_right(sA3,sB3);//カーブ2
long t0 = CurrentTick();
while (CurrentTick() - t0 < 10000){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(0,0);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(0,0);
} else {
go_right2(0,0);
}
Wait(STEP);
}
PlayTone(880,100); //音が鳴る
l_straight2(sA2,sB2);
Off(OUT_AB);//Rまで
Wait(1000);
l_w(); //進路修正
l_straight2(0,0);
r_w();//Pまで
r_b();
↑カーブは外側のラインをトレースしたかったので1つ目のカー...
r_w2();
r_b2();
Off(OUT_AB);Wait(300);
go_forward(0,0);Wait(500);Off(OUT_AB);
c_ca(); //紙コップを取る
Off(OUT_AB);Wait(300);
go_back(0,0);Wait(450);Off(OUT_AB);
go_left2(0,0);Wait(1500); //コースに戻る
↑これは、紙コップを回収するプログラムで、機体を回転させ棒...
l_straight2(0,0);
PlayTone(880,100);
l_w3();//Qまで
long t1 = CurrentTick();
while (CurrentTick() - t1 < 2000){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(0,0);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(0,0);
} else {
go_right1(0,0);
}
Wait(STEP);
}
PlayTone(880,100);
l_straight3(0,0);
Off(OUT_AB);Wait(1000);//Sまで
r_w(); //進路変更
r_straight3(0,0);
r_straight4(0,0);
↑途中のwhile文はそこの部分の色の塗り方の問題でうまく反応...
r_w2();
r_b2();
r_w2();
go_right2(0,0);Wait(800);
Off(OUT_AB);Wait(300);
c_re(); //紙コップを放す
Off(OUT_AB);Wait(300);
l_b2();
go_forward(0,0);Wait(1200); //コースに戻る
go_left2(0,0);Wait(1800);
↑紙コップを放すプログラム。棒を取り付けた影響で紙コップを...
r_straight4(0,0);
Off(OUT_AB);Wait(1000);//Sまで
l_w(); //進路変更
l_straight3(sA4,sB4);
Off(OUT_AB);Wait(1000);//Fまで
l_w(); //進路変更
r_straight1(0,0);
Off(OUT_AB);Wait(1000);//Cまで
gogo_w(0,0);
l_straight2(0,0);
gogo_w(0,0);
go_right2(0,0);Wait(750); //枠の中に入れる
go_forward(0,0);Wait(1200);
Off(OUT_AB);
PlayTone(880,200); //ゴール
}
↑最後に枠の中にゴールするまでのプログラム。ここではライン...
*結果 [#x24738f3]
本番では、電池の消耗でプログラムがうまく動かず最初はダメ...
*感想 [#ld31eb27]
今回の課題ではカーブを曲がるところが難しく自分たちで作っ...
終了行:
目次
#contents
*課題説明 [#tf0f6ee4]
今回の課題は、紙に書かれた黒い線の上をなぞって進み、途中...
*コース [#i3b3d179]
#ref(2017b/Member/Masa/Mission2/ko-su.jpg,75%,コースの画像)
このコースを使ってライントレースする。3つの経路のうち私...
第1コース
-1. Aをスタート
-2. Bを直進
-3. Cを右折
-4. Fを直進
-5. Rを左折(一時停止)
-6. Pを直進
-7. X地点の紙コップを取得してコースに戻る
-8. Qを左折
-9. Sを直進(一時停止)
-10. Y地点に紙コップを置いてコースに戻る
-11. Sを直進(一時停止)
-12. Fを左折(一時停止)
-13. Cを右折(一時停止)
-14. D地点へ(ゴール)
また、コースを作りで線を黒く塗るときに真ん中が一番黒くな...
*ロボット概要 [#bc29bc06]
**ロボット本体 [#l1f7fb7f]
#ref(2017b/Member/Masa/Mission2/torekitai1.jpg,150%,機体...
今回は、前回の課題1のときより動く距離が長いためできるだ...
**センサーについて [#k2fbf3a3]
#ref(2017b/Member/Masa/Mission2/sensorkakudo.jpg,150%,セ...
最初センサーの値の計測をしたときに少し角度がつくようにし...
**紙コップを取る機構 [#t91751e3]
紙コップを取るには紙コップを取れる位置まで移動しないとい...
&ref(2017b/Member/Masa/Mission2/kamicp1.jpg,150%,紙コップ...
機体の前についた棒にはまるように紙コップを移動させ
&ref(2017b/Member/Masa/Mission2/kamicp2.jpg,150%,紙コップ...
紙コップをつかむ
*交差点、カーブの判断方法について [#nb9f329c]
#ref(2017b/Member/Masa/Mission2/keiro1.jpg,140%,コースの...
コースの色の大体の値は一番黒いところが30%、その次に黒いと...
#ref(2017b/Member/Masa/Mission2/keiro2.jpg,140%,走るとこ...
基本的に40%のところをまっすぐ走るようにし、黒いところ、...
**交差点の判定 [#l3bdbcee]
今からの説明は右側を走っている場合である。
#ref(2017b/Member/Masa/Mission2/keiro3.jpg,140%,交差点の...
交差点に行くと一番黒い線にぶつかる。
#ref(2017b/Member/Masa/Mission2/keiro4.jpg,140%,交差点の...
プログラムによって右のタイヤを支点として右に曲がるが、し...
#ref(2017b/Member/Masa/Mission2/keiro5.jpg,140%,交差点の...
すると、カウンターが設定していた値を超え実行していたプロ...
#ref(2017b/Member/Masa/Mission2/keiro6.jpg,140%,交差点の...
次のプログラムは、交差点から抜け出すもので光センサーが白...
#ref(2017b/Member/Masa/Mission2/keiro7.jpg,140%,交差点の...
白いところまで行くとカウンターをカウントし始める。この時...
#ref(2017b/Member/Masa/Mission2/keiro8.jpg,140%,交差点の...
交差点を抜けたら、最初に説明したプログラムを実行する。そ...
**カーブの判定 [#ze73f4c2]
#ref(2017b/Member/Masa/Mission2/cab1.jpg,140%,カーブのの...
カーブに入ってくる直進用のプログラムも少し変えている。
#ref(2017b/Member/Masa/Mission2/cab2.jpg,140%,カーブのの...
まだ緩やかなところでは、
#ref(2017b/Member/Masa/Mission2/cab3.jpg,140%,カーブのの...
ライントレースを続ける。
#ref(2017b/Member/Masa/Mission2/cab4.jpg,140%,カーブのの...
しかし、カーブがきつくなると白いところから抜け出すのが遅...
#ref(2017b/Member/Masa/Mission2/cab5.jpg,140%,カーブのの...
そして、カーブ用のプログラムが実行される。このプログラム...
#ref(2017b/Member/Masa/Mission2/cab6.jpg,140%,カーブのの...
また、このカーブのプログラムにもカウンターをつけており、2...
*プログラムについて [#aa137803]
**定義 [#mb6c9767]
#define speedA 28 //モーターAの出力
#define speedB 26 //モーターBの出力
#define Cpower 20 //モーターCの出力
#define THRESHOLD 50 //しきい値
#define STEP 1 //1回の判定で進む時間
#define sA2 speedA/2 //Aの出力1/2
#define sB2 speedB/2 //Bの出力1/2
#define sA3 speedA/3 //Aの出力1/3
#define sB3 speedB/3 //Bの出力1/3
#define sA4 speedA/4 //Aの出力1/4
#define sB4 speedB/4 //Bの出力1/4
パワーが大きいと動きが速くなり反応しないことがあったので...
**サブルーチン [#fd36586f]
sub go_forward(int x,int y) //前進
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_back(int x,int y) //後進
{
OnFwd(OUT_A,-speedA-x);OnFwd(OUT_B,-speedB-y);
}
sub go_right1(int x,int y) //右の車輪を軸に右へ
{
OnFwd(OUT_B,speedB-y);Off(OUT_A);
}
sub go_left1(int x,int y) //左の車輪を軸に左へ
{
OnFwd(OUT_A,speedA-x);Off(OUT_B);
}
sub go_right2(int x,int y) //その場で右へ
{
OnFwd(OUT_A,-speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_left2(int x,int y) //その場で左へ
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,-speedB-y);
}
ロボットの基本的な動きである前進、後進、右回転、左回転を...
sub gogo_b(int x,int y) //黒い線まで前進
{
while (SENSOR_1 > THRESHOLD -9){
go_forward(x,y);
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub gogo_w(int x,int y) //白い線まで前進
{
while (SENSOR_1 < THRESHOLD -9){
go_forward(x,y);
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub lele(int x,int y) //黒い線まで左回転
{
while (SENSOR_1 < THRESHOLD -9){
go_left1(x,y);
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
センサーが指定された値を読み取るまで動くようにすることで...
sub r_left(int x,int y) //右側で左カーブ
{
int n = 0;
while (n<400){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD +10) {
go_left1(x,y);
} else {
go_left2(x,y);n=0;
}
Wait(STEP);
}
PlayTone(587,50); //音が鳴る
}
sub l_right(int x,int y) //左側で右カーブ
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left2(x,y);n=0;
} else if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD +10) {
go_right1(x,y);
} else {
go_right2(x,y);n=0;
}
Wait(STEP);
}
PlayTone(587,50); //音が鳴る
}
sub r_right(int x,int y) //右側で右カーブ
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -15) {
go_right2(x,y);
n=0;
} else if (SENSOR_1 < THRESHOLD -13) {
go_right1(x,y);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);
n=n+1;
} else if (SENSOR_1 < THRESHOLD +10) {
go_left1(x,y);
} else {
go_left2(x,y);
n=0;
}
Wait(STEP);
}
PlayTone(587,50); //音が鳴る
}
カーブのプログラムで、行う動作に付け加えてカウンターを増...
sub l_straight1(int x,int y) //左側で直進1
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub l_straight2(int x,int y) //左側で直進2
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right2(x,y);n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub l_straight3(int x,int y) //左側で直進3
{
int n = 0;
while (n < 250){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=n+1;
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(x,y);
} else {
go_right1(x,y);n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub l_straight4(int x,int y) //左側で直進4
{
int n = 0;
while (n<300){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(x,y);n=0;
} else if (SENSOR_1 < THRESHOLD - 9) {
go_forward(x,y);
} else {
go_right2(x,y);n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
左側を直進するプログラムで、4つつくった。これらの違いとし...
sub r_straight1(int x,int y) //右側で直進1
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(0,0);
n=n+1;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub r_straight2(int x,int y) //右側で直進2
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(0,0);
n=0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub r_straight3(int x,int y) //右側で直進3
{
int n = 0;
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_right1(0,0);
n=0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=n+1;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
sub r_straight4(int x,int y) //右側で直進4
{
int n = 0;
while (n < 250){
if (SENSOR_1 < THRESHOLD -13) {
go_right2(0,0);
n=n+1;
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_left1(x,y);
n=0;
}
Wait(STEP);
}
PlayTone(523,50); //音が鳴る
}
右側を直進するプログラムで、基本左側と同じ理由で分けられ...
sub l_w() //白くなるまで左へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_left1(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub l_w2() //白くなるまで左へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_left2(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub l_w3() //白くなるまで左へ3
{
int n = 0;
while (n<150){
if (SENSOR_1 < THRESHOLD +15) {
go_left1(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
これは、ずっと左に回転し、白い部分の値を読み取るとカウン...
sub r_w() //白くなるまで右へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_right1(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub r_w2() //白くなるまで右へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 < THRESHOLD +15) {
go_right2(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
これは、白くなるまでずっと右回転するバージョンである。こ...
sub r_b() //黒くなるまで右へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_right1(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub r_b2() //黒くなるまで右へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_right2(sA4,sB4);
} else {
go_right1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
上のプログラムを黒くなるまで右にしたものである。これも、...
sub l_b() //黒くなるまで左へ1
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_left1(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
sub l_b2() //黒くなるまで左へ2
{
int n = 0;
while (n<50){
if (SENSOR_1 > THRESHOLD - 9) {
go_left2(sA4,sB4);
} else {
go_left1(sA4,sB4);n=n+1;
}
Wait(STEP);
}
PlayTone(659,50); //音が鳴る
}
同じように、黒くなるまで左に行くプログラムである。
sub c_ca() //紙コップをつかむ
{
OnFwd(OUT_C,Cpower);Wait(1100);
Off(OUT_C);
}
sub c_re() //紙コップを放す
{
OnFwd(OUT_C,-Cpower);Wait(1100);
Off(OUT_C);
}
紙コップをつかむのと放すプログラムである。時間で調整した...
**サブルーチンが多い理由 [#oa9c9e9f]
今回プログラムを作成するのに、ベースとしてはカウンターを...
**本文 [#mb4a6e33]
最初は枠の内側の右寄りに置いてスタートする。
task main()
{
SetSensorLight(S1); //端子1に光センサー
gogo_b(0,0); //最初の枠から出る
gogo_w(0,0);
lele(0,0);
r_straight1(0,0); //Bまで
l_w(); //進路修正
r_straight1(0,0); //Cまで
r_w();
r_straight1(0,0); //Fまで
l_w(); //進路修正
↑枠からでた後のトレースは右側を通っていきBのまがり角を認...
r_straight2(0,0);
r_left(sA3,sB3);//カーブ1
l_w();//車線変更
l_straight4(0,0);
PlayTone(523,50);
l_right(sA3,sB3);//カーブ2
long t0 = CurrentTick();
while (CurrentTick() - t0 < 10000){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(0,0);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(0,0);
} else {
go_right2(0,0);
}
Wait(STEP);
}
PlayTone(880,100); //音が鳴る
l_straight2(sA2,sB2);
Off(OUT_AB);//Rまで
Wait(1000);
l_w(); //進路修正
l_straight2(0,0);
r_w();//Pまで
r_b();
↑カーブは外側のラインをトレースしたかったので1つ目のカー...
r_w2();
r_b2();
Off(OUT_AB);Wait(300);
go_forward(0,0);Wait(500);Off(OUT_AB);
c_ca(); //紙コップを取る
Off(OUT_AB);Wait(300);
go_back(0,0);Wait(450);Off(OUT_AB);
go_left2(0,0);Wait(1500); //コースに戻る
↑これは、紙コップを回収するプログラムで、機体を回転させ棒...
l_straight2(0,0);
PlayTone(880,100);
l_w3();//Qまで
long t1 = CurrentTick();
while (CurrentTick() - t1 < 2000){
if (SENSOR_1 < THRESHOLD -15) {
go_left1(0,0);
} else if (SENSOR_1 < THRESHOLD -9) {
go_forward(0,0);
} else {
go_right1(0,0);
}
Wait(STEP);
}
PlayTone(880,100);
l_straight3(0,0);
Off(OUT_AB);Wait(1000);//Sまで
r_w(); //進路変更
r_straight3(0,0);
r_straight4(0,0);
↑途中のwhile文はそこの部分の色の塗り方の問題でうまく反応...
r_w2();
r_b2();
r_w2();
go_right2(0,0);Wait(800);
Off(OUT_AB);Wait(300);
c_re(); //紙コップを放す
Off(OUT_AB);Wait(300);
l_b2();
go_forward(0,0);Wait(1200); //コースに戻る
go_left2(0,0);Wait(1800);
↑紙コップを放すプログラム。棒を取り付けた影響で紙コップを...
r_straight4(0,0);
Off(OUT_AB);Wait(1000);//Sまで
l_w(); //進路変更
l_straight3(sA4,sB4);
Off(OUT_AB);Wait(1000);//Fまで
l_w(); //進路変更
r_straight1(0,0);
Off(OUT_AB);Wait(1000);//Cまで
gogo_w(0,0);
l_straight2(0,0);
gogo_w(0,0);
go_right2(0,0);Wait(750); //枠の中に入れる
go_forward(0,0);Wait(1200);
Off(OUT_AB);
PlayTone(880,200); //ゴール
}
↑最後に枠の中にゴールするまでのプログラム。ここではライン...
*結果 [#x24738f3]
本番では、電池の消耗でプログラムがうまく動かず最初はダメ...
*感想 [#ld31eb27]
今回の課題ではカーブを曲がるところが難しく自分たちで作っ...
ページ名: