az útvonal egy világos (fehér) felületre ragasztott néhány cm széles ragasztószalag
volt.
a meghajtást 2 motor végezte, a fordulásokat az egyik oldali motor megállításával,
illetve hátrafelé forgatásával oldottuk meg. 3 fényérzékelőt használtunk,
bár elég lett volna 2 is, de végül is 3 lett a tuti. a 3 érzékelő közül
2 az úton kell hogy legyen, ha nem így van, akkor a megfelelő irányba
mozdul a cucc.
a
jobb oldali képen látható az érzékelők elhelyezkedése, a két egymás melletti
van az úton, a harmadik mellette...
több-kevesebb
sikerrel megpróbáltunk egy infrás távirányítót is építeni, az építéssel
nem is volt semmi gond, mint az a képen látható. a gond a két rcx közötti
kommunikációval volt, elég ritkán észlelték egymás jeleit, és így a küldött
irányváltoztatások döntő hányada elveszett...
érdemes még megemlíteni a járgány elején látható, lényegében funkció
nélküli 2 motort, viszont a hangja gyönyörű volt... :-)
a robotról készült videók:
video17.avi
video18.avi
video19.avi
video20.avi
video21.avi
video22.avi- a pilótafülkében ülve...
a program forrása:
#define balsensor SENSOR_1
#define legbalsensor SENSOR_2
#define jobbsensor SENSOR_3
#define balmotor OUT_A
#define jobbmotor OUT_C
int ut,nemut;
int irany; //-1:bal, 0:kozep, 1:jobb
int m;
task main(){
SetSensor(balsensor, SENSOR_LIGHT);
SetSensor(jobbsensor, SENSOR_LIGHT);
SetSensor(legbalsensor, SENSOR_LIGHT);
SetSensorMode(balsensor, SENSOR_MODE_PERCENT);
SetSensorMode(jobbsensor, SENSOR_MODE_PERCENT);
SetSensorMode(legbalsensor, SENSOR_MODE_PERCENT);
m=0;
if ((legbalsensor-10) > jobbsensor){
ut=jobbsensor;
nemut=(legbalsensor-10);
}
else
{
ut=(legbalsensor-10);
nemut=jobbsensor;
}
irany=0;
SetPower(balmotor,100);
SetPower(jobbmotor,100);
On(balmotor);
On(jobbmotor);
Rev(balmotor);
Rev(jobbmotor);
while (0==0){
/*if ((balsensor >= (nemut-5)) && (jobbsensor >= (nemut-5)))
{
if (irany==1){
Off(jobbmotor);
OnFwd(balmotor);
}
else{
OnFwd(jobbmotor);
Off(balmotor);
}
}
else { */
// lb, b az ut mellett, j az uton =>
if ((jobbsensor <= (ut+5)) && (balsensor >= (nemut-5))
&& ((legbalsensor-10) >= (nemut-5))) {
irany=1;
Off(jobbmotor);
OnRev(balmotor);
}
// lb, j az ut mellett, b az uton =>
if ((jobbsensor >= (nemut-5)) && (balsensor <= (ut+5))
&& ((legbalsensor-10) >= (nemut-5))) {
irany=-1;
OnRev(jobbmotor);
Off(balmotor);
}
// j, b az uton, lb az ut mellett => egyenesen kell menni
if ((jobbsensor <= (ut+5)) && (balsensor <= (ut+5)) &&
((legbalsensor-10) >= (nemut-5))) {
OnRev(balmotor);
OnRev(jobbmotor);
}
// j, b, lb az ut mellett =>
if ((jobbsensor >= (nemut-5)) && (balsensor >= (nemut-5))
&& ((legbalsensor-10) >= (nemut-5))) {
OnRev(balmotor);
OnFwd(jobbmotor);
/*if (m==0) {OnRev(balmotor);
OnFwd(jobbmotor); m=1; Wait(10); }
else { OnFwd(balmotor);
OnRev(jobbmotor); m=0; Wait(10); }*/
}
// b az ut mellett, lb, j az uton =>
if ((jobbsensor <= (ut+5)) && (balsensor >= (nemut-5))
&& ((legbalsensor-10) <= (ut+5))) {
irany=1;
OnFwd(jobbmotor);
OnFwd(balmotor);
}
// j az ut mellett, lb, b az uton =>
if ((jobbsensor >= (nemut-5)) && (balsensor <= (ut+5))
&& ((legbalsensor-10) <= (ut+5))) {
irany=-1;
OnRev(jobbmotor);
Off(balmotor);
}
// lb, j, b az uton
if ((jobbsensor <= (ut+5)) && (balsensor <= (ut+5)) &&
((legbalsensor-10) <= (ut+5))) {
OnFwd(balmotor);
OnRev(jobbmotor);
}
// j, b az ut mellett, lb az uton =>
if ((jobbsensor >= (nemut-5)) && (balsensor >= (nemut-5))
&& ((legbalsensor-10) <= (ut+5))) {
Off(balmotor);
OnRev(jobbmotor);
}
}
Off(jobbmotor);
Off(balmotor);
}
|