Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z

Transkrypt

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z
Wizualizacja stanu czujników robota
mobilnego.
Sprawozdanie z wykonania projektu.
Maciek Słomka
4 czerwca 2006
1
Cel projektu.
Celem projektu było zbudowanie modułu umożliwiającego wizualizację stanu
czujników IR oraz czujników białej linii robota mobilnego na ekranie komputera oraz napisanie odpowiedniego oprogramowania.
2
Podział na podproblemy.
Aby sprawnie zrealizować powyższe zadanie podzieliłem pracę nad projektem
na następujące etapy:
1. Zbudowanie modułu komunikacyjnego między czujnikami a komputerem w oparciu o procesor ATmega8 firmy Atmel oraz układ MAX232N
firmy Texas Instruments.
2. Oprogramowanie mikrokontrolera, tak aby zbierał informacje z czujników i przesyłał je za pośrednictwem układu MAX232N do komputera.
3. Napisanie oprogramowania dla systemu GNU/Linux pobierającego dane
za pośrednictwem portu COM komputera i dokonującego ich wizualizacji.
1
3
3.1
Realizacja projektu.
Strona sprzętowa projektu.
Strona sprzętowa została zrealizowana zgodnie ze schematem dołączonym do
niniejszego sprawozdania.
Początkowo planowałem zastosować mikrokontroler ATmega16 firmy Atmel.
Okazało się jednak, że do moich celów wystarczy ATmega8. Posiada on wbudowany 10-bitowy przetwornik analogowo cyfrowy o sześciu kanałach. Właśnie do jednego z kanałów podłączony jest czujnik odległości (na schemacie złącze J1). Czujnik cyfrowy podłączony jest do cyfrowego portu wejścia/wyjścia (na schemacie złącze J2). Przy wykryciu ’zderzenia’ styk zwiera
port do masy, co można łatwo wykryć.
Jako czujnik analogowy zastosowałem czujnik GP2D120 firmy Sharp. Umożliwia on określenie odległości od przedmiotu w zakresie od 3 do 30 centymetrów. Zasilany jest napięciem 5V. Standardowy pobór prądu wynosi 33 mA.
Komunikacja z komputerem prowadzona jest przy użyciu protokołu RS232
poprzez port COM. Aby było to możliwe niezbędne było wykorzystanie
układu scalonego MAX232N. Umożliwia on konwersję napięć na zgodną ze
standardem protokołu RS232.
Do procesora podłączona jest także dioda LED. Pozwala ona na sygnalizację
błędów komunikacji. Zaświeca się ona, gdy procesor otrzyma od komputera
niezrozumiałe dla siebie polecenie.
Zasilanie układu realizowane jest za pośrednictwem układu LM7805. Na wejście należy podłączyć baterię 9V lub zasilacz, a na wyjściu otrzymamy napięcie 5V potrzebne do zasilania procesora, czujnika GP2D120 oraz układu
MAX232N.
3.2
Oprogramowanie dla mikrokontrolera.
Oprogramowanie tworzone było przy pomocy darmowej biblioteki AVR-GCC
w środowisku Programmers Notepad. Programowanie mikrokontrolera odbywało się z użyciem programu ISP Programmer za pośrednictwem SPI (Serial
Programming Interface). Bardzo ciekawą i ułatwiającą pracę możliwością jest
programowanie procesora w trybie ISP (In System Programming), pozwalające na ładowanie programu bez konieczności wyciągania mikrokontrolera z
układu.
Oprogramowanie jest bardzo proste. Procesor odbiera za pośrednictwem USART
(układ realizujący komunikację sybchroniczną lub asynchroniczną) polecenie.
Jeżeli jest to znak ’a’, to odczytuje wartość z przetwornika analogowo cyfrowego, zwiększa ją o 100 i odsyła tą samą drogą do komputera. Dane prze2
syłane są w postaci znakowej i zwiększenie wartości o 100 gwarantuje mi,
że zawsze będę musiał odczytać trzycyfrową wartość (maksymalny pomiar
wartości z przetwornika wynosi około 530). Jeżeli procesor otrzyma komendę
’d’ to odczytuje stan portu, do którego podłączony jest czujnik cyfrowy i
wysyła go. W przypadku otrzymania innego znaku zapala się na około jedną
sekundę wspomniana wcześniej dioda sygnalizacyjna.
Komunikacja odbywa się z prędkością 1200 Bd. Znaki przesyłane są w trybie
8-N-1 co oznacza, że pole danych ramki transmisyjnej ma długość ośmiu bitów, zakończona jest pojedynczym bitem stopu i nie ma kontroli parzystości.
3.3
Oprogramowanie dla komputera PC.
Oprogramowanie zostało napisane w środowisku GNU/Linux z wykorzystaniem biblioteki Qt w wersji 3.3.4 z wykorzystaniem programu Qt Assistant
do niej dołączonego.
3.3.1
Opis okna programu.
Po skompilowaniu i uruchomieniu programu pojawia się okienko. Należy podłączyć układ do komputera za pośrednictwem portu COM i włączyć zasilanie.
Program zakłada, że do portu jest utworzony link symboliczny /dev/modem
i za jego pośrednictwem komunikuje się z urządzeniem.
Po wciśnięciu przycisku Start program rozpoczyna właściwą pracę. Okienko
Rysunek 1: Wygląd okna programu. Od lewej: zatrzymany pomiar, w trakcie
pomiaru, w trakcie pomiaru ze zwartym czujnikiem stykowym.
można podzielić na trzy części. W górnej części okna znajduje się część wizualizująca działanie czujnika analogowego. Progress Bar pokazuje względną
wartość pomiaru odczytanego z czujnika. Założyłem, że pomiar maksymalny
wynosi 530. Z lewej strony Progress Bar znajduje sie wskaźnik LCD pokazujacy wartosc odczytywaną z przetwornika.
Poniżej, po lewej stronie znajduje się część dotycząca czujnika analogowego.
Jest to Ramka w kolorze szarym. W przypadku, kiedy czujnik jest wciśnięty
przyjmuje ona kolor czcerwony.
3
Na prawo znajdują się przyciski sterujące programu. Pozwalają one na uruchomienie/zatrzymanie pracy programu oraz jego zakończcenie.
3.3.2
Opis algorytmu.
Program działa bardzo podobnie do tego napisanego na potrzeby mikroprocesora. Wysyła cyklicznie (za pomocą klasy QTimer ) żądanie do urządzenia
o podanie stanu czujnika analogowego i odczytuje z portu zwrócony stan
(zmniejsza wartość o 100) oraz wyświetla go odpowiednio na Progress Bar i
LCD Display. Następnie prosi o stan czujnika cyfrowego, odbiera jedną cyfrę
i ustawia kolor ramki na czerwony lub szary. Następnie cały cykl się powtarza.
W momencie naciśnięcia przycisku Stop praca programu zostaje wstrzymana
a na elementach wizualizujących stan czujników ustawiana jest wartość zero.
3.3.3
Dokumentacja.
Do programu dołączona jest dokumentacja wykonana przy pomocą programu
Doxygen w wersji 1.4.6.
4
Podsumowanie.
Udało się w pełni zrealizować założenia projektowe. Ukończone zostały wszystkie podzadania. W najbliższym czasie planuję poszerzenie możliwości programu o rysowanie w czasie rzeczywistym wykresu stanu czujnika analogowego.
Poznanie sposobu komunikacji komputera PC z urządzeniem zewnętrznym
za pośrednictwem protokołu RS232 pozwoliło już zapoznać się z wartościami
występującymi na przetworniku ADC z podłączonym czujnikiem GP2D120.
Wszystkie kolejne zbudowane przezemnie roboty planuję wyposażyć w tego
typu możliwości komunikacyjne. Znacznie ułatwia to projektowanie dla nich
oprogramowania przy stosunkowo niewielkim nakładzie finansowym i niewielkiej pracy. Funkcje dotyczcące komunikacji od strony komputera i procesora
mam już gotowe, a koszt sprzętu zwiększa się jedynie o cenę układu MAX232
i kilka kondensatorów.
4
Rysunek 2: Schemat urządzenia zbudowanego na potrzeby projektu.
5