Difference between revisions of "Omnibot(Krajči,Dluhý)"
From RoboWiki
(→Zdrojový kód pre pohyb) |
(→Zdrojový kód pre pohyb) |
||
Line 38: | Line 38: | ||
void move(int angle,int speed,int time) | void move(int angle,int speed,int time) | ||
{ | { | ||
− | + | ||
− | + | ||
int uhol=0; | int uhol=0; | ||
float zvislo = 0.0; | float zvislo = 0.0; | ||
float vodorovne = 0.0; | float vodorovne = 0.0; | ||
− | + | ||
− | + | ||
if (angle>=0 && angle <90){ | if (angle>=0 && angle <90){ | ||
uhol = angle; | uhol = angle; | ||
Line 55: | Line 55: | ||
setMotor(1,v,1); | setMotor(1,v,1); | ||
setMotor(4,v,0); | setMotor(4,v,0); | ||
− | + | ||
wait(time); | wait(time); | ||
setMotor(1, 0, 0); | setMotor(1, 0, 0); | ||
Line 62: | Line 62: | ||
setMotor(4, 0, 0); | setMotor(4, 0, 0); | ||
} | } | ||
− | + | ||
if (angle>=90 && angle <180){ | if (angle>=90 && angle <180){ | ||
− | + | ||
uhol = angle-90; | uhol = angle-90; | ||
zvislo = (90.0-uhol)/90.0*speed; | zvislo = (90.0-uhol)/90.0*speed; |
Revision as of 16:24, 25 June 2013
Úvod
Cieľom nášho projetku bolo zostrojiť a naprogramovať všesmerového robota.
Robota sme programovali v jazyku C vo vývojovom prostredí AVR Studio 4.
Použili sme čip ATmega 162V a dva radiče typu L293D.
Čo to z technického hľadiska
Prepojenie riadiacich pinov ATmega 162V s L293D radičmi
OC3B-1A(1) PA0-2A(1) OC3A-4A(1) PA5-3A(1)
OC1A-1A(2) PA4-2A(2) OC1B-4A(2) PA3-3A(2)
TIMER 1 a 3 pobeží na frekvencii 2kHz, s prescaler 8, TOP=499
TCCR1A/TCCR3A 0b10100010 TCCR1B/TCCR3B 0b00011010 ICR1/ICR3 = 499 OCR1A, OCR1B, OCR3A, OCR3B = 0..499 => motor speed
M1 = v reali 4 M2 = v reali 1 M3 = v reali 3 M4 = v reali 2
Zdrojový kód pre pohyb
void move(int angle,int speed,int time) { int uhol=0; float zvislo = 0.0; float vodorovne = 0.0; if (angle>=0 && angle <90){ uhol = angle; zvislo = (90.0-uhol)/90.0*speed; vodorovne = uhol/90.0*speed; int z = zvislo; int v = vodorovne; setMotor(3,z,1); setMotor(2,z,1); setMotor(1,v,1); setMotor(4,v,0); wait(time); setMotor(1, 0, 0); setMotor(2, 0, 0); setMotor(3, 0, 0); setMotor(4, 0, 0); } if (angle>=90 && angle <180){ uhol = angle-90; zvislo = (90.0-uhol)/90.0*speed; vodorovne = uhol/90.0*speed; int z = zvislo; int v = vodorovne;
setMotor(3,v,0); setMotor(2,v,0); setMotor(1,z,1); setMotor(4,z,0); wait(time); setMotor(1, 0, 0); setMotor(2, 0, 0); setMotor(3, 0, 0); setMotor(4, 0, 0); }
if (angle>=180 && angle <270){
uhol = angle-180; zvislo = (90.0-uhol)/90.0*speed; vodorovne = uhol/90.0*speed; int z = zvislo; int v = vodorovne;
setMotor(3,z,0); setMotor(2,z,0); setMotor(1,v,0); setMotor(4,v,1); wait(time); setMotor(1, 0, 0); setMotor(2, 0, 0); setMotor(3, 0, 0); setMotor(4, 0, 0); }
if (angle>=270 && angle <=360){
uhol = angle-270; zvislo = (90.0-uhol)/90.0*speed; vodorovne = uhol/90.0*speed; int z = zvislo; int v = vodorovne;
setMotor(3,v,1); setMotor(2,v,1); setMotor(1,z,0); setMotor(4,z,1); wait(time); setMotor(1, 0, 0); setMotor(2, 0, 0); setMotor(3, 0, 0); setMotor(4, 0, 0); }