- 追加された行はこの色です。
- 削除された行はこの色です。
*目次 [#jefb00fb]
#contents
*課題 [#o97581ef]
-(1)黒いライン上から外れることなく、ライン上の牛乳パックをよけて進め!
-(2)黒いライン上から外れることなく、ある交差点上にある牛乳パックを次の交差点に運び進め!
-(3)黒いライン上から外れることなく、最初の交差点では右、次の交差点では左...のように進め!
以上のようなプログラミングを作成せよ!! By Boss松本
*コースの紹介 [#w0d5b93f]
僕たちのコースの特徴は以下の3点です。
-(1)曲がり角の角度が急である
#ref(090616_1900~0003.jpg)
-(2)交差点が2つある
#ref(090616_1900~0002.jpg)
-(3)コースがシンプルである
#ref(090616_1900~0001.jpg)
*ロボットの紹介 [#x5377f26]
-足部
タイヤを小さくすることによって、全体的に見た目をよくし、小回りを聞くようにしました。こうすることによって、コースの特徴(1)にあげた「曲がり角の角度が急である」ということを難なくこなすロボットに仕上げました。
#ref(090616_1736~0001.jpg)
-タッチセンサー部
#ref(090612_1949~0001.jpg)
上にある写真のように初めは作りました。しかし、真中にきちんと当たった場合にしかタッチセンサーが反応せず、牛乳パックが軽すぎるせいもあり、このスタイルはボツにせざるをえませんでした。
-光センサー部
はじめは、光センサーの幅を広くし過ぎうまくプログラミングができませんでした。そこで、今度は二つの光センサーをくっつけ他ものを作成したが、これもうまくいかず...試行錯誤の結果、写真の幅にたどり着き、プログラムもなんとかうまくいきました。
#ref(090616_1737~0001.jpg)
*プログラミングの紹介 [#h36edba7]
-課題2-(1)
#define T 40
#define Run_time 5000
#define a OUT_A
#define c OUT_C
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
ClearTimer(0);
while(Timer(0) <= Run_time){
if(SENSOR_1>T){
if(SENSOR_3>T){
OnFwd(a+c);
}
else{
if(SENSOR_1>T){
OnFwd(a);
OnRev(c);
}
}
}
else{
if(SENSOR_3>T){
OnFwd(c);
OnRev(a);
}
else{
Off(a+c);
Wait(100);
OnFwd(a+c);
Wait(40);
}
if(SENSOR_2 == 1){
Off(a+c);Wait(50);
OnRev(a+c) ; Wait(80);
Off(a+c);Wait(50);
OnFwd(a);
OnRev(c);
Wait(120);
OnFwd(a+c);
Wait(140);
OnFwd(c);
OnRev(a);
Wait(120);
OnFwd(a+c);
Wait(340);
OnFwd(c);
OnRev(a);
Wait(120);
OnFwd(a+c);
Wait(140);
OnFwd(a);
OnRev(c);
Wait(120);
}
}
}
Off(a+c);
}
-課題2-(2)
#define T 40
#define Run_time 5000
#define a OUT_A
#define c OUT_C
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
ClearTimer(0);
while(Timer(0) <= Run_time){
if(SENSOR_1>T){
if(SENSOR_3>T){
OnFwd(a+c);
}
else{
if(SENSOR_1>T){
OnFwd(a);
OnRev(c);
}
}
}
else{
if(SENSOR_3>T){
OnFwd(c);
OnRev(a);
}
else{
Off(a+c);
Wait(100);
OnFwd(a+c);
Wait(40);
}
if(SENSOR_2 == 1){
ClearTimer(1);
while(Timer(1) >=120){
Off(a+c);Wait(50);
OnFwd(a+c);
Wait(500);
OnFwd(a);
OnRev(c);
Wait(300);
OnRev(a+c);
Wait(180);
OnFwd(a);
Off(c);
Wait(430);
Off(a+c);Wait(50);
}
}
}
}
}
}
}
Off(a+c);
}
-課題2-(3)
#define T 40
#define Run_time 5000
#define a OUT_A
#define c OUT_C
int flag = 0;
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
ClearTimer(0);
while(Timer(0) <= Run_time){
if(SENSOR_1>T){
if(SENSOR_3>T){
OnFwd(a+c);
}
else{
if(SENSOR_1>T){
OnFwd(a);
OnRev(c);
}
}
}
else{
if(SENSOR_3>T){
OnFwd(c);
OnRev(a);
}
else{
if((SENSOR_1<T)&&(SENSOR_3<T)){
Wait(100);
OnFwd(a+c);
Wait(40);
OnFwd(c);
OnRev(a);
Wait(115);
FastTimer(1);
if((FastTimer(1)>2000)&&(SENSOR_1<T)&&(SENSOR_3<T)){
OnFwd(a+c);
Wait(40);
OnFwd(a);
OnRev(c);
Wait(115);
FastTimer(1);
}
}
if(SENSOR_2 == 1){
Off(a+c); Wait(50);
OnRev(a+c) ; Wait(100);
Off(a+c); Wait(50);
}
}
}
Off(a+c);
}
}
*工夫や頑張った点 [#a4200492]
・タッチセンサーのところで、はじめ箱にあたっても反応しなかったので少し当たっただけで反応するようにしました。すると、今度は動いてる時の振動で反応するようになってしまってとても困りました。軽い箱に反応して、かつ動いてる時の振動に反応しないようにする微調整がとても大変でした。
・ライントレースを細かい動きですることで、急なカーブも曲がれるようにしました。
*感想 [#i3755bd6]
・今回の課題もとても難しく、大苦戦でした…。
**コメント欄 [#y0cb6c56]
ご自由にどうぞ^^
#comment