Professional Documents
Culture Documents
OJEKTY
ROBOrobak,
cz 1
Zasada dziaania/zachowanie
27
ROBOrobak
ne. Jeli nie generuj one impulsw
odzwierciedlajcych obrt k, w wypadku ruchu do przodu nastpuje
zatrzymanie i wycofanie z obrotem
w ty, w wypadku obrotu nastpuje zatrzymanie. Potem ROBOrobak
porusza si do przodu lub pozostaje
jaki czas w bezruchu. Zdarzaj si
sytuacje, e ruch w ty, w zwizku
z powyszymi wypadkami, jest nie
wskazany (np. ROBOrobak wpada
w puapk: porusza si do przodu
i do tyu bez moliwoci obrotu).
Po kolejnym napotkaniu przeszkody,
w trakcie ruchu do przodu, ROBOrobak obrci si wic o 90o w prawo lub w lewo w ty, a nastpnie
ruszy do przodu. O podjciu tej akcji zadecyduje okrelona liczba nieudanych (nie wykonanych do koca) obrotw. Sytuacje takie mog
List. 1.
#includeHead.h
////////////////////////////////////
////////////////////////////////////
/////
int main(void)
{
io_init();
//inicjacja portw
extint_init(); //przerwa od encoderw k
timers_init(); //timerw
sei();
//zezw.glob.na przerwania
wdt_enable(WDTO_500MS);
//zezwolenie dla Watchdog Timer na timeout
= 0,5s
MovRotate = BackRight ;
while(1)
{
refSpeedMotR = refSpeedMotL =
setSpeed;
// nastawa prdkoci
TimerOper = RandGen(1,20);
//oblicz czas trwania ruchu w przd
TimerOper_FlagZero = 0;
//rozpocznij odliczanie
CommMoveRegister = Forward;
//komenda w przd
ControlMove();
//wysteruj
silniki
//////////////////////////////
///////// RUCH W PRZD
do
{
wdt_reset (); //kasuj
Watchdog Timer
if(ReactionFlag)
//reakcja na ag uaktywnion przez kontakt
z przeszkod
ReactionControl();
if(FlagEmergencyMove)
//reakcja na stan awaryjny
MoveEmerg();
ControlGround();
trola kontaktu z podoem
//kon-
}while(!TimerOper_FlagZero);
//ptla ,dopki nie minie czas ruchu
//////////////////////////////
///////// POSTJ
Stopover();
//zatrzymanie
count45 = RandGen(1,3);
//
oblicz czas po jakim ,pierwszy odgos
TimerOper = RandGen(2,10);
//oblicz czas trwania postoju
TimerOper_FlagZero = 0;
//rozpocznij odliczanie
do
{
wdt_reset (); //kasuj
Watchdog Timer
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
if(!feelerL)
//jeli
aktywny lewy czuek w czasie postoju
{
++counterIntruderMove;
reaktion(BackRight);
}
28
//odgos
if (!count45)
{
FlagStopp = 1;
Tickk(6,20000);
test_battery();
//kontrola poziomu napicia baterii
count45 = RandGen(1,8);
//oblicz czas po jakim ,kolejny odgos
w czasie postoju
}
if(FlagIntruderMove)
//jeli nastpi obrt koa w czasie
postoju wznowienie ruchu(ucieczka)
break;
if(counterIntruderMove == 4)
//jeli 3 krotna,w czasie postoju,
reakcja na uaktywnienie czuek
{
counterIntruderMove = 0;
Delay_ms(20000);
//stan
bezczynnoci
}
}while(!TimerOper_FlagZero);
//ptla ,dopki nie minie czas postoju
FlagIntruderMove = 0;
FlagStopp = 0;
if (randReg & 0x01)
//wybr
midzy :jazda na wprost lub obrt
{
angle_Imp = angle(20,60);
//obliczenie kta obrotu
if (MovRotate == BackLeft)
//jeli poprzednio ,nastpowa obrt
w lewo w ty
MovRotate = BackRight;
//zmiana na kierunek obrotu przeciwny
else
MovRotate = BackLeft;
CommMoveRegister = MovRotate;
//komenda:obrt zgodnie
z powyszym wysterowanie silnikw
Rotate();
}
}
}
/////////////////////////////////////
/////////////////////////////////////
/// END
Budowa
Ko n s t r u k c j n o n z a b a w k i
(rys. 1) stanowi plastikowa rama
(wykonana z pokrywki korytka od
kabli elektrycznych), do ktrej jest
przymocowana platforma gowy
wycity z plastiku gruby krek
podobnie jak koa opasane nastpnie gumkami.
Poniewa zabawka powica sporo czasu na poruszanie si, istnieje
potrzeba uoyskowania k. oyska z osiami oraz nasunitymi na
nie koami, wcinite s do plastikowych rurek a te nastpnie wklejone w boki ramy. W platform gowy
wcinita jest tuleja dla osi pionowej przedniego koa. Na platformie
umocowane s za pomoc zagitych
szpilek czujniki. S to miniaturowe
spryny stykowe (wymontowane
z mechanizmw magnetofonowych).
Trzy spryny zostay odpowiednio
sprzone z czukami wykonanymi
z rozwinitej czciowo linki stalowej (bardzo wane by czuki byy
spryste i odpowiednio elastyczne). Czwarty czujnik (do kontroli kontaktu z podoem) zosta ju
opisany. Od czujnikw do ukadu
sterowania biegn cienkie przewody odzyskane z uzwojenia anteny
ferrytowej.
Drug cz ROBOrobaka stanowi platforma z silnikami, akumulatorami i elektronik. Jest ona
przytwierdzona do przodu ramy
za porednictwem zawiasu. Kolejne
punkty jej kontaktu z doln czci
zabawki stanowi punkty oparcia
osi na koach. Sia docisku tych
ROBOrobak
osi do k zwikszana jest przez
tyln spryn. Poza tym do tyu
platformy przylutowany jest koek,
ktry ustala jej pooenie wzgldem
ramy (koek z platform jest wzgldem ramy ruchomy).
W skad opisanej powyej platformy wchodz pytki drukowane.
Na dolnej pytce (stanowicej podstaw tej platformy) znajduje si
m.in. driver silnikw oraz od jej
spodu czujniki optyczne. Grna
pytka to ukad sterowania z procesorem. Pytka ta poczona jest
Na pocztku programu gwnego (list. 1) nastpuje inicjacja portu, zewntrznych przerwa oraz
timerw cznie z watchdogiem.
Po ustawieniu prdkoci, generator
liczb losowych zbudowany w oparciu o rejestr przesuwny i Timer0,
generuje liczb, z ustalonego przez
programist zakresu, stanowic
29
ROBOrobak
ustawiana w podprogramie obsugi
przerwa zewntrznych, a sygnalizujca prb przesuwania ROBOrobaka w czasie postoju. Jeli prba
taka miaa miejsce (nastpi obrt
koa) nastpuje wyjcie z ptli postoju. Jeli nie, sprawdzany jest
licznik reakcji na uaktywnianie
czuek w czasie postoju. Jeli reakcji takich byo kilka, nastpuje wejcie w ptl czasow ROBOrobak
wchodzi w stan bezczynnoci.
Po wyjciu z ptli postoju, jeli warto rejestru generatora jest
w danej chwili nieparzysta, po wygenerowaniu wartoci kta, nastpi
skok do podprogramu obrotu w ty
(kierunek obrotu bdzie przeciwny
do poprzedniego). Po wykonaniu
obrotu lub te nie, nastpuje przejcie do pocztku ptli gwnej.
Co 125 ms nastpuje przepenienie timera. Jeli podprogram wykryje uaktywniony czuek, ustawia a-
30
g (jeli poprzednio nie bya ustawiona), po czym na 50 ms wysterowuje silniki na prac wstecz, nastpnie je zatrzymuje. Jeli program
gwny wykryje, e wspomniana
aga jest ustawiona, przechodzi do
podprogramu, w ktrym podejmuje
nastpujce dziaanie: jeli nie byo
trzech stanw awaryjnych, w zalenoci od tego, ktry czuek jest
aktualnie uaktywniony, przechodzi
do podprogramu reakcji z odpowiednim parametrem. Oznacza to ruch
w ty przez okrelony czas, obliczenie wartoci kta obrotu, ustawienie jego kierunku (w zalenoci od
wspomnianego parametru) i przejcie
do podprogramu obrotu.