Jak to działa?
Schemat ideowy jest przedstawiony na rysunku 1. Sercem całego układu jest mikrokontroler ATmega8. Jego zegar jest stabilizowany zewnętrznym kwarcem o częstotliwości 8MHz. Nie będę opisywać całego schematu, ponieważ jest to standardowa aplikacja tego układu. ATmega8 wykrywa linie za pomocą pięciu czujników. W ich roli zostały użyte transoptory odbiciowe CNY70. Wybrałem je, ponieważ są one łatwo dostępne, ponadto są przeznaczone do montażu przewlekanego. Sygnał z czujników jest podciągnięty do „+” zasilania poprzez drabinkę zawierającą w swojej strukturze osiem rezystorów. Pozostałe trzy rezystory podciągają „reset” mikrokontrolera, przełącznik startu oraz wejście z odbiornika podczerwieni. Sygnał z czujników trafia na nóżki przetwornika analogowego ATmega8. W zależności od wyników pomiarów mikrokontroler odpowiednio wysterowuje silniki. Są one podłączone poprzez dwa scalone mostki H. W tej konstrukcji wykorzystałem układy L293D, ponieważ są one łatwo dostępne i to w obudowach DIL. Niestety owe mostki charakteryzują się niskim prądem maksymalnym oraz dużym spadkiem napięcia. Aby zwiększyć ich maksymalne osiągi, zmostkowałem układy tak, że każdy steruje oddzielnie jednym silnikiem. Dużą zaletą tych mostków jest fakt, że zawierają w swojej strukturze odpowiednie diody zabezpieczające, w związku z czym nie musimy stosować zewnętrznych, które zajmowałyby miejsce na płytce. Warto jednak zaznaczyć, że mimo połączenia układów prąd maksymalny na kanał może wynosić jedynie 1,2 A.
Musimy to brać pod uwagę przy doborze źródła zasilania i silników. Mój robot pracuje na silnikach mikro pololu HP 50:1 i pakiecie Li-Po 400mAh 5C 2S i w takiej konfiguracji robot pracuje prawidłowo, a mostki się nie grzeją. Większym problemem jest stabilizator napięcia. W jego roli pracuje stary układ 7805, który z racji sporego poboru prądu przez czujniki oraz dużego spadku napięcia, jaki na nim występuje, potrafi dość mocno się rozgrzać. Niewielki radiator rozwiąże ten problem. Polecam zastosować nowsze stabilizatory typu Low-drop (musimy sprawdzić kolejność wyprowadzeń, ponieważ nie wszystkie układy są pod tym względem kompatybilne). Należy również zaznaczyć, że układ NIE ma zabezpieczenia przed odwrotną polaryzacją, dlatego też należy zastosować wtyczki, które uniemożliwią odwrócenie polaryzacji. Zamiana biegunów będzie skutkować uszkodzeniem stabilizatora. Do komunikacji ze światem zewnętrznym zostały użyte dwa sposoby. Do przesyłania danych do komputera PC lub innego mikrokontrolera został wyprowadzony interfejs USART z pinami zasilającymi. Nie będę tutaj opisywał sposobów komunikacji przy wykorzystaniu tego interfejsu, ponieważ z łatwością znajdziemy na ten temat informacje. Drugim sposobem jest odbiornik podczerwieni, za pomocą którego będziemy mogli wysyłać proste komendy do robota (start/stop/jazda w przód/w tył itp.). W roli tego odbiornika został użyty układ TSOP2236 pracujący na częstotliwości 36kHz. Częstotliwość należy dobrać w zależności od użytego pilota.
Zasada działania robota. Zwykle najprostsze roboty typu LF działają na następującej zasadzie: do przetwornika ADC podłączone są czujniki, mikrokontroler wykrywa linię i wysterowuje silniki zgodnie ze swoim położeniem względem niej. W takim rozwiązaniu wartości PWM dla poszczególnych silników są na „sztywno” przypisane do danego czujnika. A więc przy 3 czujnikach mamy 9 możliwości do opisania. Przy 4 będzie ich już 16. Co prawda część sytuacji możemy odrzucić, ale i tak opisanie wszystkich będzie bardzo pracochłonne, a cała nasza praca pójdzie na marne w momencie np. spadku napięcia akumulatora lub zmiany kształtu trasy. Regulator P uwalnia nas od tego problemu, ponieważ czułość całego robota ustawiamy za pomocą jedynie dwóch zmiennych. Aby lepiej zrozumieć, jak działa taki programowy regulator proporcjonalny (typu P), posłużę się pseudokodem pokazanym na listiningu 1.
Montaż i uruchomienie
Elektronika robota mieści się na płytce drukowanej o wymiarach 85 x 75mm, pokazanej na rysunku 2. Płytka jest jednostronna, co ułatwia jej wykonanie w domowych warunkach. Musimy tylko uważać na miejsca, w których ścieżki przechodzą pomiędzy nóżkami układów scalonych i szczególnie pilnie sprawdzić, czy nie powstały tam zwarcia lub podtrawienia. Ponieważ płytka ma tylko jedną warstwę, montaż czujników jest wykonany w sposób nietypowy, mianowicie są one montowane po stronie ścieżek. Montaż owych elementów najlepiej zostawić sobie na koniec, a połączenie dodatkowo należy wzmocnić klejem na gorąco.
Montaż poszczególnych elementów rozpoczynamy według ogólnie przyjętych zasad, to jest od elementów najniższych (zworki, rezystory itp.), a kończymy na wysokich (kondensatory, złącza). Należy jednak zwrócić uwagę na właściwe podłączenie złącza zasilającego, ponieważ jak już wcześniej wspomniałem, układ nie jest zabezpieczony przed zmianą polaryzacji. Diody LED1 i LED2 służą jako podpórki, na których opiera się robot.
Wartości kondensatorów elektrolitycznych nie są krytyczne. Warto zastosować takie, które mają możliwie dużą pojemność oraz niewielkie gabaryty. Najlepiej byłoby zastosować kondensatory ESR, ale nie jest to konieczne. Na złączach silników warto zamocować dwa kondensatory 100nF połączone równolegle, co dodatkowo zabezpieczy układ przed zakłóceniami, które mogłyby być generowane przez ich szczotki.
Uruchomienie układu zaczynamy od wgrania odpowiednich fuse-bitów. Ponieważ układ działa na zewnętrznym oscylatorze, operacja ta jest doskonale znana wszystkim użytkownikom mikrokontrolerów AVR, więc nie będę jej tutaj opisywał.
Jeżeli jesteś początkujący i boisz się, że mógłbyś przypadkiem zablokować uC, to na razie możesz pozostać przy zegarze wewnętrznym układu – powinien on także pracować prawidłowo. Na płytce znajdują się dwie diody LED (w modelu są one koloru czerwonego i zielonego). Zielona oznacza działanie robota i powinna się świecić przez cały czas jego działania. Miganie czerwonej diody oznacza natomiast odliczanie czasu po naciśnięciu przycisku „Start”, zaś jej ciągłe świecenie oznacza podążanie za linią.
Jeśli powyższe czynności nie sprawiły żadnych problemów, możemy spróbować uruchomić konstrukcję na torze. Tor najlepiej wykonać z arkusza brystolu 100 x 70cm. Możemy taki zakupić w sklepie dla plastyków. Samą linię wykonamy z czarnej taśmy izolacyjnej. Na początek proponuję zbudować tor w kształcie elipsy.
Możliwości zmian
Warto również zaznaczyć, że program zajmuje jedynie 25% pamięci, co pozostawia nam spore pole do własnych ulepszeń. Na początek polecam dokładnie wyregulować wartości zmiennych użytych w algorytmie. Kiedy robot będzie poruszał się płynnie po trasie, możemy spróbować dodać w programie człon różniczkujący. Dodatkowo możemy napisać prostą instrukcję, która w momencie przekroczenia maksymalnej wartości PWM zmienieni polaryzację silników tak, aby robot wykonał bardzo ostry zakręt. Kolejną sprawą jest dobór odpowiednich silników. Jak już wspomniałem, użyłem silników mikro pololu 50:1, jednak wartość tego przełożenia jest zdecydowanie za duża, więc proponuję użyć przekładni 30:1 lub nawet 10:1. W tym ostatnim przypadku warto zastanowić się nad zmniejszeniem pojemności akumulatora w celu obniżenia jego wagi z racji tego, że moment obrotowy może okazać się niewystarczający. Do złącza USART możemy podłączyć kit AVT1595 i tym sposobem uzyskać możliwość komunikacji między robotem a komputerem. Zamiast ATmegi8 możemy użyć jej nowszego odpowiednika tj. ATmegi88.