FELADAT
MEGOLDÁS ( HARDVER )
MEGOLDÁS ( SZOFTVER )
PROGRAMKÓD
ELÔNYÖK
HÁTRÁNYOK
VIDEÓ FELVÉTELEK
KÉSZÍTÔK
FELADAT :
Feladatunk egy olyan robot készítése volt,
amely képes végighaladni egy kijelölt úton.
Útvonal alatt egy
- megfelelô szélességû
- tetszôlegesen kanyarodó
- a padlózat színétôl jelentôs mértékben
eltérô színû
csíkot értünk.
A mi esetünkben az út színe sötét,
a hátter színe világos.
MEGOLDÁS ( HARDVER ) :
A megépített robot egy 3-kerekû autó.
A két elsô nagy kereket két külön
motor hajtja, a hátsó kis kerék pedig szabadon mozog.
A roboton elôl a két kerék elôtt
fényérzekelô is van, továbbá elôl
középen egy nyomásérzekelô,
aminek megnyomása a robot megállását
eredményezi.
MEGOLDÁS ( SZOFTVER ) :
Az inicializálós részben állítjuk be a
szoftver paramétereit (sebességek),
illetve az érzékelôk fajtáit. Ezt követôen
egy ciklus fut addig, amíg a nyomásérzékelô
nem érzékel nyomást.
A fényérzékelôk jeleit folyamatosan olvasva az
alábbi esetek lehetnek:
balra fordulás, jobbra fordulás, egyenesen elôre.
Igazából a két érzékelô
értékének eltérését vizsgáljuk,
azaz -20-nál kisebb, +20-nál nagyobb, vagy -20 és +20
közötti értékeket.
A fordulásnál a belsô kerekek hátramenetben a
külsôk elôremenetben mennek.
A feladatot megvalósító programkódrészlet:
innen is letölthetô
#define LSENSOR SENSOR_3
#define RSENSOR SENSOR_2
#define MSENSOR SENSOR_1
#define LENGINE OUT_C
#define RENGINE OUT_B
#define LIGHTS OUT_A
int CarSpeedL, CarSpeedR, RoadColor, BackColor;
void OwnChangeCarSpeed()
{
SetPower(LENGINE, abs(CarSpeedL));
if(CarSpeedL<0)
Rev(LENGINE);
else
Fwd(LENGINE);
SetPower(RENGINE, abs(CarSpeedR));
if(CarSpeedR<0)
Rev(RENGINE);
else
Fwd(RENGINE);
}
void OwnInitialize()
{
SetSensor(LSENSOR, SENSOR_LIGHT);
SetSensor(MSENSOR, SENSOR_TOUCH);
SetSensor(RSENSOR, SENSOR_LIGHT);
SetSensorMode(LSENSOR, SENSOR_MODE_RAW);
SetSensorMode(MSENSOR, SENSOR_MODE_BOOL);
SetSensorMode(RSENSOR, SENSOR_MODE_RAW);
SetPower(LIGHTS,7);
CarSpeedL = 0;
CarSpeedR = 0;
RoadColor = MSENSOR;
BackColor = (RSENSOR-LSENSOR)/2;
On(LENGINE);
On(RENGINE);
On(LIGHTS);
}
void OwnDestroy()
{
Off(LENGINE);
Off(RENGINE);
Off(LIGHTS);
}
void Futtat()
{
int GoSpeed, TurnSpeedFwd, TurnSpeedRev, Difference;
/* Parameterek beallitasa */
GoSpeed = 9;
TurnSpeedFwd = 9;
TurnSpeedRev = -9;
Difference = 5;
OwnInitialize();
CarSpeedL = GoSpeed;
CarSpeedR = GoSpeed;
OwnChangeCarSpeed();
while(MSENSOR==0)
{
/* Balra fordul */
if(RSENSOR+Difference-LSENSOR>20)
{
CarSpeedL = TurnSpeedRev;
CarSpeedR = TurnSpeedFwd;
OwnChangeCarSpeed();
}
/* Jobbra fordul */
if(LSENSOR-RSENSOR-Difference>20)
{
CarSpeedL = TurnSpeedFwd;
CarSpeedR = TurnSpeedRev;
OwnChangeCarSpeed();
}
/* Egyenesen megy */
if(abs(LSENSOR-RSENSOR)<=20)
{
CarSpeedL = GoSpeed;
CarSpeedR = GoSpeed;
OwnChangeCarSpeed();
}
}
OwnDestroy();
}
task main()
{
Futtat();
}
A ROBOT ELÔNYEI :
- kb. 90 foknál nagyobb szögû kanyarokkal ellátott
úton gyorsan es megbízhatóan halad
- egyszerû szoftver
- egyszerû hardver
A ROBOT HÁTRÁNYAI :
- az éles kanyarokat nem tudja bevenni
- ha egyszer elhagyta a pályát, akkor nem képes
visszatérni
- nem érzékeli a különbséget a között,
ha mindkét érzékelô az út mellett van
vagy az úton van (ez utóbbi éles kanyar esetén lehet)
VIDÓ FELVÉTELEK :
Video 4.avi (2815K)
Video 5.avi (11283K)
.
KESZÍTETTÉK :
Baksa Klára
Kovács Gábor Zsolt
Rózsai Máté
Terray Tamás