Lego mindstorm - Robot triedič: Rozdiel medzi revíziami
(Vytvorená stránka „Kategória:Študentské práce Kategória:Ročníkové práce {{Praca_uvod|3|Návrh a realizácia robota na báze lego mindstorm s využitím vyšších programovac…“) |
|||
Riadok 49: | Riadok 49: | ||
} | } | ||
} | } | ||
+ | </source> |
Verzia zo dňa a času 13:51, 19. máj 2010
1. | Základné časti stavebnice LEGO Mindstorms NXT |
2. | Programovací jazyk NXC |
3. | Lego mindstorm - Robot triedič |
4. | Možnosti využitia vyšších programovacích jazykov pri tvorbe LEGO robotov
|
V predchádzajúcich kapitolách bola venovaná pozornosť základným komponentom stavebnice LEGO Mindstorms Education a programovaciemu jazyku NXC. S danými znalosťami môžeme pristúpiť k navrhovaniu a programovaniu LEGO robota.
Návrh robota
Úlohou bude navrhnúť a naprogramovať robota, ktorý by bol schopný triediť LEGO kocky troch farieb. Na internete je možné nájsť veľké množstvo rôznych robotov z LEGA. Konštrukcia robota sa dá pomerne ľahko odpozorovať, avšak samotné know-how spočíva v tvorbe programu, ktorým by sme daného robota oživili. Pri návrhu robota sme sa nechali inšpirovať robotom zo stránky: http://www.youtube.com/watch?v=jDQgvLB_wnA&feature=player_embedded
Robot triedič na obr. 8. sa skladá z NXT kocky, dvoch servomotorov, svetelného senzora a iných technických častí. V najvrchnejšej časti sa nachádza zásobník na LEGO kocky. Každá kocka, ktorá sa nachádza na spodku zásobníka je zosnímaná pomocou svetelného senzora. Svetelný senzor je vhodné umiestňovať čo najbližšie k snímanému povrchu. Má tu vlastnosť, že dokáže generovať vlastné svetlo a čím bližšie je umiestnený, tým su vplyvy okolitého svetla menšie. Na základe hodnoty zo senzora sa rampa pripojená k servomotoru otočí tak, aby kocka mohla byť zatriedená do príslušnej krabičky podľa farby. Druhým servomotorom posúvame kocky zo zásobníka na rampu, alebo priamo do prostrednej krabičky. Senzor a servomotory sú pripojené pomocou káblov k NXT kocke. Svetelný senzor je pripojený k portu 1. Servomotor ktorým vysúvame kocky zo zásobníka je pripojený k portu A a servomotor ku ktorému je pripevnená rampa je pripojený k portu B.
Programovanie robota
Predpokladajme, že kocky ktoré chceme roztriediť sú žltej, šedej a čiernej farby. Aby sme vedeli hodnoty v programe správne nastaviť, musíme poznať intenzitu odrazeného svetla každej z nich. Vložíme kocku ktorej intenzitu chceme poznať na spodok zásobníka a pomocou tlačidiel na NXT kocke vyberieme možnosť „View“ a „Reflected light“. Týmto spôsobom sa presvedčíme že intenzita odrazeného svetla žltej kocky je približne 67%, šedej 47% a čiernej 27%.
Ďalej predpokladajme, že počet kociek v zásobníku je práve 10. Robíme tak z dôvodu, že intenzita odrazeného svetla žltej kocky a hodnota, keď sa v zásobníku žiadna kocka nenachádzala bola takmer rovnaká. Program k takémuto robotovi môže vyzerať nasledovne:
task main ( ){ // začiatok hlavnej úlohy
int a,i; // deklarácia premenných a a i
SetSensorLight(IN_1); /* nastaví premenné tak, že na porte IN_1 sa nachádza svetelný senzor */
a = Sensor(IN_1); // nameranú hodnotu zo senzora zapíšeme do premennej a
for(i=0;i<10;i+=1){ // začiatok for cyklu – slučku opakujeme 10 krát
if(a<35){ /* prvé rozhodovanie – podmienka je pravdivá ak snímač zosnímal čiernu kocku */
RotateMotor(OUT_A,30,-85); // vysunie kocku zo zásobníka
RotateMotor(OUT_A,30,85); // vráti rameno vysúvača späť
}
else{ // ak prvá podmienka nie je pravdivá pokračuje nasledovným rozhodovaním
if (a>54){ // podmienka je pravdivá ak snímač zosnímal žltú kocku
RotateMotor(OUT_B,30,52); // otočí rampu o 30° vľavo
RotateMotor(OUT_A,30,-85); // vysunie kocku zo zásobníka
RotateMotor(OUT_A,30,85); // vráti rameno vysúvača späť
RotateMotor(OUT_B,30,-52); // vráti rampu späť do zvislej polohy
}
else{ // ak podmienka nie je splnená, snímač zosnímal šedú kocku
RotateMotor(OUT_B,30,-52); // otočí rampu o 30° vpravo
RotateMotor(OUT_A,30,-85); // vysunie kocku zo zásobníka
RotateMotor(OUT_A,30,85); // vráti rameno vysúvača späť
RotateMotor(OUT_B,30,52); /* vráti rampu späť do zvislej polohy */
}
}
ResetSensor(S1); // inicializácia senzora
}
}