robo robak

robo robak, Elektronika(1), Projekty
[ Pobierz całość w formacie PDF ]
//-->PROJEKTYROBOrobakROBOrobak,część 1Postanowiłem połączyć przyjemnez pożytecznym budujączabawkę, która przysporzymoim pociechom radości. I otopowstał samodzielnie i wedługswego widzimisię – podejmującyproste decyzje – sympatycznyROBOrobak. Jedynym zadaniemROBOrobaka jest poruszanie siępo pomieszczeniu, wydawałobysię, w celach poznawczych,do momentu wyczerpania sięakumulatorków.Rekomendacje:projekt iście wakacyjny,dający jednocześnie możliwośćpoznania od strony praktycznejpodstawowych zagadnieńzwiązanych ze sterowaniemsilników elektrycznych zapomocą mikrokontrolerów.Zasada działania/zachowaniePrezentowana zabawka poruszasię na trzech kółkach. Pierwsze kół-ko – wolne, bez napędu, obraca siętakże swobodnie w płaszczyźnie po-ziomej, pozostałe koła są napędzanebezpośrednio przez silniki. ROBOro-bak jest zaopatrzony w czułki służą-ce do identyfikowania napotykanychpo drodze przeszkód. Czułek środ-kowy ma za zadanie wykrywanieprzeszkód umiejscowionych niżeji centralnie. Po napotkaniu prze-szkody ROBOrobak wycofuje sięa następnie wykonuje obrót w tył,po czym kontynuje przez jakiś czasjazdę w przód lub pozostaje jakiśczas w bezruchu, wydając charakte-rystyczne dźwięki – pomrukiwanie.Czasy: jazdy, postoju, częstotli-wości pomrukiwania, kątów obrotu,są czasami w określonym zakresiewyznaczonymi przez generator liczblosowych – są, więc przypadkowe.Przypadkowy jest też kierunek orazkąt obrotu, jaki obiera ROBOrobakpo upływie czasu postoju. Zacho-wanie zabawki jest, więc w dużymstopniu nieprzewidywalne.W trakcie postoju ROBOrobakjest wrażliwy jest na to, co sięz nim dzieje. Dotknięcie czułka,powoduje natychmiastową reakcję:w wypadku czułka skrajnego– wy-cofanie i obrót w tył, w wypadkuśrodkowego – tylko wycofanie. Poparokrotnych tego rodzaju manew-rach, zaniepokojony owad zamierana jakiś czas w bezruchu.Przemieszczenie ROBOrobakapowodujące obrót jednego z kół,w trakcie postoju, wymusza wyjściez tego stanu i wznowienie ruchu(ucieczkę). Zarówno w trakcie ruchujak i postoju, ROBOrobak kontrolujekontakt z podłożem. Funkcję czujni-ka spełnia przednie kółko. Pierwszystyk tego specyficznego czujnika sta-nowi końcówka jego pionowej ośki,pracującej w tulei, drugi – płaskasprężyna znajdująca się nad nią.Po podniesieniu zabawki z podłoża,ośka opada w tulei pod wpływemciężkości, tracąc tym samym kon-takt ze sprężyną i przerywając ob-wód (odcinając potencjał masy odukładu sterowania). Po kilku se-kundach, jeśli stan ten utrzymujesię – ROBOrobak zamiera w bezru-chu i nie wydaje dźwięków. To za-chowanie przeniosłem na zabawkęze świata owadów. Niektóre z nich(np. biedronka siedmiokropka), nie-pokojone przez intruzów, posuwająsię do zręcznych forteli – udającmartwe. Mało sensowne wydaje siępoza tym, by napędy pracowały,gdy ROBOrobak znajduje się w po-wietrzu. Gdy ma to miejsce, po za-marciu zabawki, co jakiś czas jed-nak, silniki uruchamiają się, dająctym samym ROBOrobakowi możli-wość wznowienia normalnej aktyw-ności. Zdarzają się, bowiem sytu-acje, gdy przód zabawki podnosisię w zetknięciu jej części z jakimiśprzeszkodami. Gdyby nie opisanazdolność, ROBOrobak pozostawałbyw bezruchu w nieskończoność. A tak,wycofując się, po odzyskaniu kon-taktu z podłożem, nabiera pewnościsiebie i wznawia swoją aktywność.Na tor ruchu zabawki składasię jazda w przód, tył oraz obrotyw prawo i lewo w tył. Zdarza się, żeROBOrobak natrafia na przeszkody,których nie jest w stanie zidentyfiko-wać za pomocą czułek. Co wtedy?Ruch w przód oraz obroty kon-trolowane są przez czujniki optycz-Elektronika Praktyczna 8/200527ROBOrobakne. Jeśli nie generują one impulsówodzwierciedlających obrót kół, w wy-padku ruchu do przodu – następujezatrzymanie i wycofanie z obrotemw tył, w wypadku obrotu – następu-je zatrzymanie. Potem ROBOrobakporusza się do przodu lub pozostajejakiś czas w bezruchu. Zdarzają sięsytuacje, że ruch w tył, w związkuz powyższymi wypadkami, jest niewskazany (np. ROBOrobak wpadaw pułapkę: porusza się do przodui do tyłu bez możliwości obrotu).Po kolejnym napotkaniu przeszkody,w trakcie ruchu do przodu, ROBO-robak obróci się więc o 90ow pra-wo lub w lewo w tył, a następnieruszy do przodu. O podjęciu tej ak-cji zadecyduje określona liczba nie-udanych (nie wykonanych do koń-ca) obrotów. Sytuacje takie mogąList. 1.#include”Head.h”/////////////////////////////////////////////////////////////////////////////int main(void){io_init();//inicjacja portˇwextint_init(); //przerwa˝ od enco-derˇw kˇ│timers_init(); //timerˇwsei();//zezw.glob.na prze-rwaniawdt_enable(WDTO_500MS);//ze-zwolenie dla Watchdog Timer na timeout= 0,5sMovRotate = BackRight ;while(1){refSpeedMotR = refSpeedMotL =setSpeed;// nastawa prŕdkoťciTimerOper = RandGen(1,20);//oblicz czas trwania ruchu w przódTimerOper_FlagZero = 0;//rozpocznij odliczanieCommMoveRegister = Forward;//komenda – w przˇdControlMove();//wysterujsilniki/////////////////////////////////////// RUCH W PRZËDdo{wdt_reset (); //kasujWatchdog Timerif(ReactionFlag)//reak-cja na flagŕ uaktywnion╣ przez kontaktz przeszkod╣ReactionControl();if(FlagEmergencyMove)//reakcja na stan awaryjnyMoveEmerg();ControlGround();trola kontaktu z pod│o┐em//kon-też mieć miejsce w wypadku, gdyROBOrobak identyfikuje przeszkodyza pomocą czułek, lecz nie może– parokrotnie, po wycofaniu, wyko-nać obrotu w tył.Wspomniane już czujniki optycz-ne zapewniają również stałą pręd-kość ruchu zabawki, wpływająctym samym na to, że tor ruchu nawprost lub w tył jest w miarę (wi-zualnie) liniowy. Sterowanie pręd-kością realizowane jest oczywiściepoprzez zmianę wypełnienia im-pulsów dostarczanych na uzwojeniasilników. Może się ono zmieniaćw zakresie 1…10. Częstotliwość pra-cy silnika wynosi 667 Hz.Wspomniana funkcja (stała pręd-kość) jest realizowana poprzezkontrolę liczby impulsów nadcho-dzących z czujników optycznychList. 1. cdif(!feelerR)//jeťliaktywny prawy czu│ekreaktion(BackLeft);if (!nose)//jeťli aktywny nos{FlagStopp = 0;++counterIntruderMove;BackMotion();//ruchwstecz}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//ControlGround();//kon-trola kontaktu z pod│o┐emif (!count45){FlagStopp = 1;Tickk(6,20000);– w jednostce czasu. Zbyt duża,rzeczywista prędkość koła w stosun-ku do prędkości zadanej, powodujezmniejszenie wypełnienia impulsów(zmniejszenie prędkości koła) i naodwrót.Na uwagę zasługuje to, w jakisposób, w wypadku zetknięcia czu-łek z przeszkodą (jazda w przód) wy-hamowywane są silniki. Gwałtownehamowanie odbywa się na skutekkrótkotrwałego ruchu wstecz (!).Kontrola akumulatorków, podczaspostoju, po każdym „mruknięciu”ROBOrobaka wykonana jest poprzezzliczenie czasu ładowania konden-satora. Jeśli czas jest zbyt długi(zbyt niskie napięcie akumulatorka)– ROBOrobak wchodzi w stan bez-czynności, sygnalizując to za pomo-cą dźwięku (dopominając się o „na-karmienie” – naładowanie”)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 odkabli elektrycznych), do której jestprzymocowana platforma głowy– wycięty z plastiku gruby krążek– podobnie jak koła opasane na-stępnie gumkami.Ponieważ zabawka poświęca spo-ro czasu na poruszanie się, istniejepotrzeba ułożyskowania kół. Łoży-ska z osiami oraz nasuniętymi nanie kołami, wciśnięte są do plasti-kowych rurek a te następnie wklejo-ne w boki ramy. W platformę głowywciśnięta jest tuleja dla osi piono-wej przedniego koła. Na platformieumocowane są za pomocą zagiętychszpilek czujniki. Są to miniaturowesprężyny stykowe (wymontowanez mechanizmów magnetofonowych).Trzy sprężyny zostały odpowiedniosprzężone z czułkami wykonanymiz rozwiniętej częściowo linki stalo-wej (bardzo ważne by czułki byłysprężyste i odpowiednio elastycz-ne). Czwarty czujnik (do kontro-li kontaktu z podłożem) został jużopisany. Od czujników do układusterowania biegną cienkie przewo-dy odzyskane z uzwojenia antenyferrytowej.Drugą część ROBOrobaka sta-nowi platforma z silnikami, aku-mulatorami i elektroniką. Jest onaprzytwierdzona do przodu ramyza pośrednictwem zawiasu. Kolejnepunkty jej kontaktu z dolną częściązabawki stanowią punkty oparciaosi na kołach. Siła docisku tychBudowa//odg│ostest_battery();//kontrola poziomu napiŕcia bateriicount45 = RandGen(1,8);//oblicz czas po jakim ,kolejny odg│osw czasie postoju}if(FlagIntruderMove)//jeťli nast╣pi│ obrˇt ko│a w czasiepostoju – wznowienie ruchu(ucieczka)break;if(counterIntruderMove == 4)//jeťli 3 –krotna,w czasie postoju,reakcja na uaktywnienie czu│ek{counterIntruderMove = 0;Delay_ms(20000);//stanbezczynnoťci}}while(!TimerOper_FlagZero);//pŕtla ,dopˇki nie minie czas postojuFlagIntruderMove = 0;FlagStopp = 0;if (randReg & 0x01)//wybˇrmiŕdzy :jazda na wprost lub obrˇt{angle_Imp = angle(20,60);//obliczenie k╣ta obrotuif (MovRotate == BackLeft)//jeťli poprzednio ,nastŕpowa│ obrˇtw lewo w ty│MovRotate = BackRight;//zmiana na kierunek obrotu przeciwnyelseMovRotate = BackLeft;CommMoveRegister = Mo-vRotate;//komenda:obrˇt zgodniez powy┐szym – wysterowanie silnikˇwRotate();}}}///////////////////////////////////////////////////////////////////////////// END}while(!TimerOper_FlagZero);//pŕtla ,dopˇki nie minie czas ruchu/////////////////////////////////////// POSTËJStopover();//zatrzymaniecount45 = RandGen(1,3);//oblicz czas po jakim ,pierwszy odg│osTimerOper = RandGen(2,10);//oblicz czas trwania postojuTimerOper_FlagZero = 0;//rozpocznij odliczaniedo{wdt_reset (); //kasujWatchdog Timer//~~~~~~~~~~~~~~~~~~~~~~~~-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-~~~~//if(!feelerL)//jeťliaktywny lewy czu│ek w czasie postoju{++counterIntruderMove;reaktion(BackRight);}28Elektronika Praktyczna 8/2005ROBOrobakosi do kół zwiększana jest przeztylną sprężynę. Poza tym do tyłuplatformy przylutowany jest kołek,który ustala jej położenie względemramy (kołek z platformą jest wzglę-dem ramy ruchomy).W skład opisanej powyżej plat-formy wchodzą płytki drukowane.Na dolnej płytce (stanowiącej pod-stawę tej platformy) znajduje sięm.in. driver silników oraz od jejspodu – czujniki optyczne. Górnapłytka to układ sterowania z pro-cesorem. Płytka ta połączona jestz dolną za pomocą szpilek (najle-piej długich goldpinów) wtykanychw dwa gniazda.Na początku programu główne-go (list.1)następuje inicjacja por-tu, zewnętrznych przerwań oraztimerów łącznie z watchdogiem.Po ustawieniu prędkości, generatorliczb losowych zbudowany w opar-ciu o rejestr przesuwny i Timer0,generuje liczbę, z ustalonego przezprogramistę zakresu, stanowiącączas ruchu ROBOrobaka po prostej(czas ten nie będzie wydłużanyprzez czas ruchów, jakie wykonana skutek kontaktu z przeszkodami).Po rozpoczęciu odliczania następujeustawienie wyjść procesora w kie-runku drivera silników i wejście dopętli ruchu.Tutaj skanowane są ciągle dwieflagi: detekcji przeszkody oraz ru-chu awaryjnego (inicjowanego naskutek parokrotnego zatrzymaniaprzez przeszkodę podczas ruchuw przód bez możliwości pełnegoobrotu w tył). Na-stępna czynność tokontrola kontaktuz podłożem.Pętla wykonywa-na jest do momen-tu ustawienia flagi(w programie obsłu-gi timera) wskazują-cej na to, iż upły-nął czas ruchu. Powyjściu z pętli na-stępuje wystawienieodpowiednich sy-gnałów STOP w kie-runku drivera. RO-BOrobak zatrzymujesię. Teraz oblicza-ne są przy pomocywspomnianego ge-neratora dwa czasy:postoju oraz czas,po którym nastąpipierwsze „mruknię-cie” (o zakresie cza-sów również decy-duje programista).Porozpoczęciu odlicza-nia następuje wej-ście w pętlę postoju.Teraz sprawdzanesą stany wejść czuj-ników sprzężonychz czułkami i jeśliktóreś będzie ak -tywne, wywołanabędzie odpowied-nia procedura reak-cji. Po sprawdzeniukontaktu z podło -żem, jeśli minąłczas do pierwszego„mruknięcia”, nastę-puje wygenerowaniego, przeprowadzeniekontroli baterii orazobliczenie przerwydo następnego od-g ł o s u . Te r a z s ka -nowana jest flagaOpis programu głównegoRys. 1. Budowa mechaniczna ROBOrobakaElektronika Praktyczna 8/200529ROBOrobakustawiana w podprogramie obsługiprzerwań zewnętrznych, a sygnali-zująca próbę przesuwania ROBOro-baka w czasie postoju. Jeśli próbataka miała miejsce (nastąpił obrótkoła) następuje wyjście z pętli po-stoju. Jeśli nie, sprawdzany jestlicznik reakcji na uaktywnianieczułek w czasie postoju. Jeśli reak-cji takich było kilka, następuje wej-ście w pętlę czasową – ROBOrobakwchodzi w stan bezczynności.Po wyjściu z pętli postoju, je-śli wartość rejestru generatora jestw danej chwili nieparzysta, po wy-generowaniu wartości kąta, nastąpiskok do podprogramu obrotu w tył(kierunek obrotu będzie przeciwnydo poprzedniego). Po wykonaniuobrotu lub też nie, następuje przej-ście do początku pętli głównej.gę (jeśli poprzednio nie była usta-wiona), po czym na 50 ms wyste-rowuje silniki na pracę wstecz, na-stępnie je zatrzymuje. Jeśli programgłówny wykryje, że wspomnianaflaga jest ustawiona, przechodzi dopodprogramu, w którym podejmujenastępujące działanie: jeśli nie byłotrzech stanów awaryjnych, w za-leżności od tego, który czułek jestaktualnie uaktywniony, przechodzido podprogramu reakcji z odpowied-nim parametrem. Oznacza to ruchw tył przez określony czas, oblicze-nie wartości kąta obrotu, ustawie-nie jego kierunku (w zależności odwspomnianego parametru) i przejściedo podprogramu obrotu.wartości rejestru kierunku). Wartośćwspomnianej zmiennej to odbicietego, co się dzieje z odpowiednimkołem. Stopień jego obrotu śledzonyjest poprzez podprogram przerwaniazewnętrznego, odpowiedniego dladanego koła. Pętla trwać będzie takdługo (tym samym dany obrót), jakwartość zmiennej (tym samym war-tość licznika odpowiedniego koła)będzie mniejsza od obliczonego kątaobrotu lub do momentu, gdy wystą-pi stan awaryjny, wynikły z unieru-chomienia danego koła. Po wyjściuz pętli, jeśli wystąpił stan awaryjny,następuje zwiększenie jego licznika.Kolejny krok to zatrzymanie silni-ków i wysterowanie ich we wcze-śniejszym podprogramie na pracęw przód, następnie powrót do pro-gramu głównego, do pętli ruchu.Reasumując: po zetknięciu sięczułka z przeszkodą, ROBOrobakgwałtownie zatrzymuje się (ruchwstecz i stop), cofa się przez okre-ślony czas, zatrzymuje, wykonujeobrót, zatrzymuje i wznawia ruchw przód.Grzegorz SipioraCo 125msnastępuje przepełnie-nie timera. Jeśli podprogram wykry-je uaktywniony czułek, ustawia fla-Co się dzieje, gdy ROBOrobak,podczas ruchu w przód,napotyka czułkiem naprzeszkodę?Na wstępie zerowane są licz-niki kół. W zależności od wartościrejestru kierunku, są wysterowywa-ne odpowiednio silniki. Podprogramwchodzi w pętlę, w której skanowa-na jest odpowiednia zmienna, którejprzypisywana jest wartość odpowied-niego licznika (zależy to również odJak jest wykonywanypodprogram obrotu koła?30Elektronika Praktyczna 8/2005PROJEKTROBOrobak YROBOrobak,część 2Postanowiłem połączyć przyjemnez pożytecznym budujączabawkę, która przysporzymoim pociechom radości. I otopowstał samodzielnie i wedługswego widzimisię – podejmującyproste decyzje – sympatycznyROBOrobak. Jedynym zadaniemROBOrobaka jest poruszanie siępo pomieszczeniu, wydawałobysię, w celach poznawczych,do momentu wyczerpania sięakumulatorków.Rekomendacje:projekt – co prawda – iściewakacyjny (niektórzy z naswakacje jeszcze mają), dającyjednocześnie możliwośćpoznania od strony praktycznejpodstawowych zagadnieńzwiązanych ze sterowaniemsilników elektrycznych zapomocą mikrokontrolerów.UwagiDo budowy zabawki użyłemczterech akumulatorków z telefonukomórkowego, czujników optycznychz kółkami zębatymi od starej myszykomputerowej oraz miniaturowychsilniczków od Walkmena. ROBO-robak „żywi się” poprzez czułki,przykładane do „wąsów karmnika”tzn. ładowarki.Z tyłu, na dolnej płytce, umiesz-czony jest włącznik podczas ładowa-nia musi być wyłączony – inaczej –ROBOrobak ucieknie od karmnika.Jak można wywnioskować z anali-zy układu oraz konstrukcji, w zabaw-ce przewidziałem możliwość roz-budowy. Górna płytka wrazz układem sterowaniajest wymienna.Można, więczaprojekto-wać a następ-nie umieścićnowy układz mocniejszymprocesorem, by zwiększyć możli-wości ROBOrobaka. Dlaczego niewzbogacić go np. o zmysł słuchuoraz wzroku (na głowie umieszczonesą już oczy – fototranzystory) lubzmysł dodatkowej kontroli podłoża,tak by nie spadł np. ze stołu?Czujniki optyczne w układziejezdnym, dzięki podwójnym odbiorni-kom, mogą spełniać funkcję enkode-rów (ROBOrobak mógłby, więc kon-trolować rzeczywisty kierunek ruchu– kwestia programowa). Poza tymmógłby lokalizować miejsce, gdzieregenerowałby siły (odbierając np.z nadajnika sygnał podczerwieni)!Procesor (rys.2)steruje silnika-mi za pośrednictwem drivera L293D(schemat blokowy tego układu poka-zano narys. 3),sterowanego cztere-ma sygnałami: N1/PWMR, EN2/PWML(prędkość) oraz IN1/DIRMR, IN2/DIRML (kierunek). Aby możliwe sta-ło się właściwe sterowanie silnikami,na wejścia IN2 oraz IN4 muszą byćpodane zanegowane sygnały kierunku.Rolę negatorów spełniają tranzystoryQ1 i Q2. W układzie zastosowano po-dwójne czujniki optyczne w celu mo-nitorowania kierunku ruchu poszcze-gólnych kół. Sygnały z obu fototranzy-storów (dla jednego koła) przesuniętesą względem siebie w fazie. Daje tomożliwość kontrolowania (poprzezprogram) rzeczywistego kierunkuruchu. Niestety, ze względu naograniczoną pojemność pamięciprogramu procesora, opcja tanie jest jednak wykorzy-stywana. Pomiar poziomunapięcia akumulatorkówodbywa się za pomocąMożliwości zmianOpis układu34Elektronika Praktyczna 9/2005 [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lemansa.htw.pl
  • Tematy
    Powered by wordpress | Theme: simpletex | © Smętna dusza może nas zabić prędzej, o wiele prędzej niż zarazek.