Obługa czujników do robota śledzącego linie. Michał Wendland 171628 15 czerwca 2011 1
Spis treści 1 Charakterystyka projektu. 3 2 Schematy układów elektronicznych. 3 2.1 Moduł czujników................................. 3 2.2 Jednostka centralna............................... 3 3 Opis protokołu komunikacji. 8 3.1 Format danych o stanie na czujnikach..................... 8 3.2 Format danych dla aplikacji........................... 8 4 Oprogramowanie. 9 4.1 Oprogramowanie mikrokontrolerów....................... 9 4.2 Aplikacja..................................... 9 5 Podsumowanie. 9 2
1 Charakterystyka projektu. Założeniem projektu było utworzenie modułu czujników do robota podążającego za linią. Dodatkowymi elementami projektu była wizualizacja 0/1 na listwie diodowej oraz wizualizacja w odcieniach szarości. Moduł czujników miał się komunikować z jednostką centralną (rysunek 1.) za pomocą protokołu komunikacyjnego I 2 C. Rysunek 1: Wygląd jednostki centralnej. 2 Schematy układów elektronicznych. 2.1 Moduł czujników. Czujniki TCRT5000 zostały kolektorem podpięte do mikrokontrolera Attiny26 do kanałów przetwornika ADC. Spadek napięcia na kolektorze odpowiadał kolorowi na jakim znalazł się czujnik. Moduł wykonano na płytce dwustronnej, gdzie z jednej strony zostały umieszczone czujniki zaś z drugiej pozostałe elementy. Zasilanie modułu jest poprowadzone z jednostki centralnej. Na rysunku 2 przedstawiono schemat podłączenia jednego z czujników oraz na rysunku 3 wygląd ukończonego modułu. 2.2 Jednostka centralna. W jednostce centralnej wykorzystano mikrokontroler Atmega8. Pomiary są dostarczane z modułu czujnika za pomocą komunikacji I 2 C i tam są dalej przetwarzane. Jednostka steruje listwą diodową oraz komunikuje się z komputerem za pomocą RS232. W sterowniku również zaprojektowano układ zasilania z wykorzystaniem stabilizatora napięcia 7805 stabilizującym napięcie na poziomie 5V. Na rysunkach 4,5,6, 7, 8 przedstawiono schematy poszczególnych części jednostki centralnej. Po wykonaniu płytek na podstawie wyżej przedstawionych schematów powstały dwa moduły, które przedstawiono na rysunku 9. 3
Rysunek 2: Schemat połączeń z czujnikiem TCRT5000. Rysunek 3: Moduł czujników. 4
Rysunek 4: Schemat jednostki obsługującej czujniki. 5
Rysunek 5: Schemat modułu diód LED. Rysunek 6: Schemat zasilania wszystkich modułów. 6
Rysunek 7: Schemat połączeń z układem MAX232. Rysunek 8: Schemat połączeń sterownika. 7
Rysunek 9: Moduły. 3 Opis protokołu komunikacji. 3.1 Format danych o stanie na czujnikach. Aktualny stan czujników zostaje zapisywany do zmiennej 8-bitowej (uint8 t) za pomocą sumy i iloczynu bitowego. Jeśli po pomiarze na danym kanale znaleziono czarny kolor to do zmiennej jest dodawana 1 w odpowiednie miejsce w bajcie, jeżeli nie to do maski dopisywane jest 0. Np. jeśli na kanale ADC0 jest czarna linia a na pozostałych nie ma to maska będzie miała postać 00000001. Po przejściu przez wszystkie kanały maska jest zapisywana w zmiennej, która następnie jest odczytywana przez master a, po czym według maski jest ustawiany odpowiedni port, który obsługuje listwę diodową. Na rysunku 10 przedstawiono funkcjonowanie opisanego formatu danych. Rysunek 10: Wizualizacja 0/1 na listwie diodowej. 3.2 Format danych dla aplikacji. W module czujników trasmitowany jest wynik pomiaru, który jest zapisywany w kolejnych komórkach tablicy, z której czyta master. Komórka tablicy określa numer czujnika. Po skończonym odczycie z modułu czujników master tworzy ramkę w postaci,,numer 8
pomiar K. Ramka danych jest nadawana przez RS232 po jednym znaku do komputera. Każdy nadany znak posiada bit parzystości, który jest sprawdzany przed przetworzeniem. Jeśli bit parzystości się nie zgadza to nadany znak uznany jest jako przekłamany i nie jest zapisywany do bufora (makro IGNPAR). Następnie sprawdzana jest ilość odebranych znaków. Jeśli się nie zgadza to nadawany jest rozkaz powtórzenia nadania danych z jednostki centralnej. Jeśli transmisja została nadana bez przeszkód, dane zostają przetwarzane i wizualizowane przez aplikację. Do generowania bitu parzystości od strony jendostki centralnej, wykorzystano sprzętowy generator zawarty w mikrokontrolerze Atmega8. Uruchomienie generatora wymagało ustawienie bitu UPM1 w rejestrze UCSRC. 4 Oprogramowanie. Oprogramowanie mikrokontrolerów zostało napisane w języku C. Aplikacja została napisana w języku C++ z wykorzystaniem biblioteki graficznej Qt4. 4.1 Oprogramowanie mikrokontrolerów. Program slave a obsługuje 8 kanałów ADC. Dokonany jest tam pomiar różnicowy tj. najpierw z włączoną diodą IR a następnie z wyłączoną. Następnie wyniki pomiarów są zapisywane w tablicy, która dalej jest przekazywana po I 2 C do master a. Master otrzymane dane przetwarza. Ramka związana ze stanem czujników jest przypisywana portowi, który obsługuje diody LED. Wykorzystując UART nawiązywana jest komunikacja poprzez transmisję szeregową RS232 z komputerem. Do komputera transmitowany po jednym znaku jest najpierw numer obsłużonego czujnika, następnie wartość pomiaru za pomocą przetwornika ADC a na końcu znak zakończenia transmisji K. 4.2 Aplikacja. Aplikacja wizualizuje otrzymane dane z komunikacji RS232. Aplikacja wyświetla wartość pomiaru poszczególnych czujników na lcdnumber. Odcienie szarości są odrysowywane za pomocą QPainter na przygotowanym do tego celu Widget cie. Działanie wizualizacji rozpoczęte jest wraz z kliknięciem przycisku Start. Na rysunku 11 przedstawiono panel aplikacji podczas wizualizowania. 5 Podsumowanie. Celem projektu było utworzenie działającego modułu czujników do robota podążającego za linią. Dodatkowo przewidziano wizualizację stanów czujnika na listwie diodowej oraz aplikacji. Po utworzeniu aplikacji wizualizującej odczyty z czujników znaleziono praktyczne jej zastosowanie. Dzięki niej łatwo jest ustalić próg, który odpowiada kolorowi linii. 9
Rysunek 11: Panel aplikacji. W trakcie projektu pojawiły się trudności związane z ograniczeniami sprzętowymi jednego mikrokontrolera. Attiny26 nie posiadał sprzętowego rozwiązania komunikacji I 2 C. Problem należało rozwiązać programowo. Do tego celu znaleziono bibliotekę na licencji publicznej i za jej pomocą rozwiązano problem komunikacji I 2 C. Po zakończeniu projektu moduł został sprawdzony na samym robocie spełniając swoje zadanie. Wszystkie założenia projektu zostały pomyślnie ukończone. Literatura [1] Dokumentacja techniczna dla mikrokontrolera Atmega8, 2011 [2] Dokumentacja techniczna dla mikrokontrolera Attiny26, 2011. [3] Martin Junghans, www.jtronics.de, USI TWI Slave driver - I2C/TWI-EEPROM. [4] http://pl.wikipedia.org/wiki/suma kontrolna. [5] http://students.mimuw.edu.pl/so/lablinux/struktury/wejscie- WYJSCIE/termios.html 10