Paweł Jakubowski Michał Zasłona Koło Naukowe Robotyków KoNaR www.konar.pwr.wroc.pl lutego 0
Spis treści Wstęp................................. Założenia............................... Projektowanie............................ Układ zasilania............................ 5 Układ napędowy........................... 6 Czujniki................................ 7 Komunikacja z robotem...................... 5 8 Oprogramowanie........................... 6 9 Wnioski................................ 6
Wstęp Wstęp Linefollower Pantera to robot skonstruowany na potrzeby warsztatów organizowanych przez koło naukowe KoNaR i jest wynikiem współpracy dwóch studentów drugiego roku z wydziału Elektroniki. Naszym głównym celem było stworzenie własnego, w pełni działającego robota oraz spróbowanie swoich sił na zawodach Robotic Arena 0. Od pomysłu do realizacji minęły dwa miesiące, jednak przez ten cały okres mogliśmy korzystać z dużej wiedzy i doświadczenia starszych kolegów prowadzących warsztaty oraz liczyć na pomoc ze strony znajomych. Nasze zamierzenia zostały osiągnięte z nawiązką pomimo braku doświadczenia w tworzeniu robotów, zdołaliśmy wystartować w zawodach, a nasza Pantera wskoczyła na. pozycję w kategorii linefollower. Rysunek : LF Pantera Założenia Ponieważ zdecydowaliśmy się na budowę robota typu linefollower, jedynym ograniczeniem ze strony regulaminu zawodów był wymiar robota - miał on zmieścić się na kartce formatu A. Oprócz tego zdecydowaliśmy się uściślić nasze założenia, aby łatwiej było wykonać projekt. Naszym głównym celem była możliwie najprostsza konstrukcja robota. O ile strona mechaniczna nie sprawiała kłopotów, o tyle często zastanawialiśmy się nad dodatkowymi układami (typu sczytywanie parametrów za pomocą USART czy startowanie robota za pomocą pilota). Jako, że nasza wiedza z elektroniki była wtedy na podstawowym poziomie, dobrze, że uniknęliśmy niepotrzebnego skomplikowania, które prawdopodobnie uniemożliwiłoby ukończenie robota na czas. Ważnym czynnikiem, uwzględnionym przez nas przy projekcie była masa Pantery. Stwierdziliśmy, że niska masa zapewni nam lepsze osiągi na torach, a umieszczenie jej możliwie nisko i blisko osi kół zapobiegnie nadmiernej bezwładności. Dodatkowo koszt robota miał być relatywnie niski.
Projektowanie Cały układ był sterowany za pomocą popularnego mikrokontrolera ATmega8A w obudowie TQFP. Projektowanie Do projektowania wykorzystaliśmy oprogramowanie Autodesk Inventor oraz Altium Designer. Projekt rozpoczęliśmy od stworzenia strony mechanicznej układu, a więc jego modelu w Inventorze. Dopiero gdy ustaliliśmy zakładane wymiary rozpoczęliśmy pracę nad stworzeniem schematu, a następnie projektu płytki PCB. Rysunek : Model robota w programie Autodesk Inventor 0 W Panterze zastosowaliśmy nieczęsto spotykane rozwiązanie w postaci umieszczenia elementów elektronicznych na spodzie robota. To, razem z wyborem większości części w obudowie SMD, pozwoliło na zmniejszenie rozmiarów płytki. Dzięki temu rozwiązaniu na górnej części robota oprócz kondensatorów elektrolitycznych pozostały jedynie elementy mechaniczne, bateria i gniazdo do podłączenia baterii, oraz elementy niezbędne do sterowania robotem. Układ zasilania Jako źródło zasilania zdecydowaliśmy się wykorzystać akumulator litowopolimerowy o pojemności 50mAh. Wybór ten wynikał z możliwości pożyczenia go od naszego kolegi z KoNaRu (a więc znacząco zmniejszył koszt konstrukcji). Zdawaliśmy sobie przy tym sprawę z nadmiernej wagi (ok. 80g) i wymiarów akumulatora, zdecydowały jednak ograniczone fundusze. Jednak
Układ napędowy podczas zawodów udało nam się pożyczyć mniejszą i lżejszą (ok. 6g) baterię o pojemności 00mAh, która w znaczący sposób przyczyniła się do poprawienia czasów na torach (na bardziej skomplikowanym torze różnica wynosiła nawet 5s!). Do zasilania silników wykorzystaliśmy bezpośredni prąd z baterii, natomiast część cyfrową poprzedziliśmy stabilizatorem L7805. Całość dodatkowo miała być zabezpieczona układem opracowanym przez Adama Pykę, jednak przez błędy w trakcie projektowania płytki zabezpieczenie nie działało poprawnie. Ponieważ na początku nie zdawaliśmy sobie z tego sprawy udało nam się spalić dwa mostki TB66. Po tych problemach zdecydowaliśmy się na mechaniczne zabezpieczenie przed odwrotną polaryzacją w postaci zwykłego podwójnego goldpina z kluczem. A B C D POPRZE³¹CZNIK Przełącznik COR COS 0 COBAT PIS0 PIS0 PIS0 PIR0 PIS0 PIR0 + PIBAT0 - PIBAT0 A_ DIP Switch COATmega8A0AU ATmega8A-AU COR PIS0 Przycisk PIS0 PIS0 PIS0 PIR0 PIR0 6 9 PIATmega8A0AU06 VCC ADC6 PIATmega8A0AU09 COS 0 COP PIATmega8A0AU0 VCC ADC7 PIATmega8A0AU0 PIL0 PIP06 6 5 PIP05 COL 8 PIATmega8A0AU08 AVCC PC0 (ADC0) PIATmega8A0AU0 PIP0 PIP0 0uH COR PC (ADC) PIATmega8A0AU0 PIP0 PIP0 Przycisk PIS0 PIS0 PIS0 PIS0 PIR0 PIR0 0 5 PIATmega8A0AU00 AREF PC (ADC) PIATmega8A0AU05POPIN PIN 5 5 COS 0 6 PC (ADC) PIATmega8A0AU06POPIN PIN 6 6 PIN 6 PIP06 6 5 PIP05 PIN 5 7 5 Układ PIL0 PC (ADC/SDA) PIATmega8A0AU07 PIN 7 PIN 7 PIC0 PIC0 napędowy POPIN 7 PIP0 PIP0 PIC0 8 PC5 (ADC5/SCL) PIATmega8A0AU08POPIN PIN 8 8 PIN 8 PIP0 PIP0 COC C COC C COC C 9 PC6 (RESET) PIATmega8A0AU09PORESET 00nF PIC0 00nF PIC0 00nF PIC0 COP 0 PD0 (RXD) PIATmega8A0AU00 Panterę PD (TXD) napędzały dwa silniki PIATmega8A0AU0 Przełącznik Pololu 0: z obustronną osią. Podobnie PD (INT0) PIATmega8A0AU0POPRZYCISK Przycisk PIR0 COR PD (INT) PIATmega8A0AU0POPRZYCISK Przycisk 0K jak akumulator wybraliśmy PD (XCK/T0) te PIATmega8A0AU0 silniki PODIODA Dioda ze względu na możliwość pożyczenia 9 PIR0 ich PD5 (T) PIATmega8A0AU09POAIN 0 PD6 (AIN0) PIATmega8A0AU00POAIN RESET i tym samym odciążenia PD7 naszych (AIN) PIATmega8A0AU0POBIN portfeli. Jako koła wykorzystaliśmy stare PIS50 PIS50 COS5 PB0 (ICP) PIATmega8A0AU0POBIN RESET koła z LEGO Technic o średnicy PB (OCA) PIATmega8A0AU0POPWMA 0mm. PWMA Niezbędne również były mocowania PIS50 PIS50 COISP PIR0 PB (SS/OCB) PIATmega8A0AU0POPWMB PWMB 5 C COC PIC0 COR PB (MOSI/OC) PIATmega8A0AU05 PIISP0 PIISP0 kół na osiach silników, które wykonaliśmy 6 z części LEGO. Stworzyliśmy 00nF 0je PB (MISO) PIATmega8A0AU06 PIISP0 PIISP0 7 PIATmega8A0AU0 PB5 (SCK) PIATmega8A0AU07 POPROG PROG RST RST 5 6 PIC0 PIR0 PIISP05 PIISP06 5 7 PIATmega8A0AU05 PB6 (XTAL/TOSC) PIATmega8A0AU07PODIODA Dioda PIISP07 7 8 PIISP08 z podwójnego gniazda i dwóch 8 krzyżaków. Jeden z nich został przyklejony, przecięty napół i przewiercony mm wiertłem. W tak stworzony otwór PIATmega8A0AU0 PB7 (XTAL/TOSC) PIATmega8A0AU08PODIODA Dioda PIISP09 9 0 PIISP00 Mikrokontroler KANDA Title Płyta główna oś od silnika weszła na wcisk, bez żadnych luzów. Silniki sterowane były Size: PIR0 PIR0 PIR0 PIR0 PID0 PID0 COR COQ 0 BC807-0 COR 50 COD 5V PIQ0 PIQ0 PIQ0 PIR60 PIC90 PIC90 PIQ0 PIR60 COR6 M COC9 C9 uf PIQ0 PIQ0 A_ PIS0 PIS0 COS PIS0 PIS0 BATT PIR50 COQ IRFZN pojedynczym mostkiem TB66. COR5 70 PIR50 PID0 PID0 COD Czerwona COL7805 VCC Stabilizator PIL78050 IN OUT PIL78050 PIR00 COR0 50 COC6 C6 COC8 C8 PIL78050 C COC C5 COC5 PIR00 00nF 000uF 0uF 00nF COD6 Czerwona PIC60 PIC60 Rysunek : Schemat zasilania Pantery PIC80 PIC80 PIC0 PIC0 PIC50 PIC50 PID60 PID60 PROG RST Date: File: * * A Number: * Revision: A * 0-0- Time: :0: Sheet of * D:\Paweł\Documents\Google Drive\Dysk Google\[KoNaR 0] Linefollower\Pliki_pro PID70 PID70 COD7 5V6 COTB66 AIN PITB660 AIN VM AIN PITB660 AIN VM PWMA PITB660 PWMA VM 7 BIN PITB6607 BIN VCC 6 BIN PITB6606 BIN 5 PWMB PITB6605 PWMB PITB6609 9 AO STBY AO PITB660 PITB660 PITB660 PITB6600 0 PITB660 PITB660 PITB6608 8 AO PITB6605 5 6 AO PITB6606 PITB660 P PITB660 P BO PITB660 PITB6609 9 P BO PITB660 0 PITB6600 P 7 BO PITB6607 8 BO PITB6608 Mostek Dioda Dioda Dioda VCC COR7 PIR70 PIR70 PID0 50 PISilnik0 PISilnik0 C COC 00 + Silnik COSilni PISilnik0 PISilnik0 Silnik COSilni COD Zielona PID0 COR8 PIR80 PIR80 PID0 PID0 50 COD Czerwona COR9 PIR90 PIR90 PID50 PID50 50 COD5 Zielona C7 COC7 0u PIC70 PIC0 6 Czujniki Jako czujniki wykorzystaliśmy popularne transoptory. W naszym robocie znalazło się ich osiem sztuk, ze względu na taką właśnie ilość
5 6 7 8 9 Linefollower Pantera Komunikacja z robotem A portów przetwornika analogowo-cyfrowego w mikrokontrolerze. Sama płytka została stworzona na wzór płytki z Bizonka. Jeśli chodzi zaś o rozmieszczenie czujników, to zdecydowaliśmy, aby dwa środkowe czujniki mogły widzieć linię jednocześnie, żeby szybciej wychwytywać odchyłki. Skrajne czujniki były za to wyraźniej dalej i niżej od innych, ponieważ w założeniu miały służyć do wykrywania kątów prostych. A B PIR90 PIR0 PIR00 PIR0 PIR0 PIR0 PIR0 PIR0 PIR0 PIR50 PIR0 PIR60 PIR50 PIR70 PIR60 PIR80 COR9 COR COR0 COR COR COR COR COR COR COR5 COR COR6 COR5 COR7 COR6 COR8 0 7K 0 7K 0 7K 0 7K 0 7K 0 7K 0 7K 0 7K PIR90 PIR0 PIR00 PIR0 PIR0 PIR0 PIR0 PIR0 PIR0 PIR50 PIR0 PIR60 PIR50 PIR70 PIR60 PIR80 COU COU COU COU COU5 COU6 COU7 COU8 KNLK ANLA PIU0A PIU0K PIU0A PIU0K PIU0A PIU0K PIU0A PIU0K PIU50A PIU50K PIU60A PIU60K PIU70A PIU70K PIU80A PIU80K B PIU0E E NLE CNLC PIU0C PIU0E PIU0C PIU0E PIU0C PIU0E PIU0C PIU50E PIU50C PIU60E PIU60C PIU70E PIU70C PIU80E PIU80C C PIP0 PIP0 PIP0 PIP0 PIP05 PIP06 PIP07 PIP08 PIP09 PIP00 C 0 COP Rysunek : Schemat płytki z czujnikami D Title D Size Number Revision A COR9 PAR90 COR PAR0 PAR90 PAR0 COU PAU0K PAU0C PAU0A PAU0E COR0 COR PAR00 PAR0 PAR00 PAR0 COU PAU0K PAU0C PAU0A PAU0E COR COR PAR0 PAR0 COR COR COR COR5 PAR0 PAR0 PAR0 PAR0 PAR0 PAR0 PAR50 PAR50 PAR0 PAR0 COU PAU0K PAU0C PAU50K PAU50C COU5 COU PAU0K PAU0C PAU0A PAU0E PAU50A PAU50E PAU0A PAU0E PAP0 PAP0 PAP06 PAP08 PAP00 PAP0 PAP0 PAP05 PAP07 PAP09 COR PAR0 PAR60 COR6 PAR0 PAR60 PAU60K PAU60C COU6 PAU60A PAU60E Date: 0-0- Sheet of File: D:\Paweł\..\Schemat_z_czujnikami_linefollower_0.SchDoc Drawn By: COR5 COR7 PAR50 PAR70 COR6 COR8 PAR50 PAR70 PAR60 PAR80 PAU70K PAU70C COU7 PAU70A PAU70E PAR60 PAR80 COU8 PAU80K PAU80C PAU80A PAU80E COP Rysunek 5: Projekt płytki z czujnikami 7 Komunikacja z robotem Cała komunikacja z robotem odbywała się za pomocą jednego podwójnego przełącznika, oraz pięciu przycisków. Jeden przełącznik odpowiadał za załączenie zasilania, natomiast drugi za ustawienie trybu serwisowego. Dwa z pięciu przycisków były zamieszczone w celu innym niż komunikacja z linefollowerem (jeden do zabezpieczenia li-pola, natomiast drugi do resetu mikrokontrolera), a pozostałe, podłączone pod piny ATmegi, odpowiadały za ustawienie robota. Naszym wyświetlaczem były trzy diody LED (zielona-czerwona-zielona), które informowały o stanie Pantery. I tak np. mruganie pierwszej (zielonej) diody informowało o gotowości do jazdy (wyłączony tryb serwisowy), mru- 5
Oprogramowanie ganie pierwszej diody i zapalenie się drugiej informowało o ustawieniu dokładnego trybu jazdy (maksymalna prędkość robota była teraz ustawiona na połowę jego maksymalnej prędkości) itd. 8 Oprogramowanie Przy pisaniu programu do linefollowera opieraliśmy się głównie na jednym z artykułów na forbot.pl. Program napisaliśmy w języku C. Do sterowania silnikami wykorzystany został tryb fast PWM, a obsługa przycisków została zawarta w przerwaniach. Czujniki były sczytywane bezpośrednio przez porty ADC i podczas włączenia robota została uruchomiana autokalibracja. Jak zostało wspomniane, zdecydowaliśmy się na dwa tryby pracy robota - tryb jazdy i tryb serwisowy. Dostęp do tych dwóch trybów zrealizowaliśmy jako dwie osobne pętle, które program wybiera na początku swojego działania. Ponieważ poza jazdą prędkość przetwarzania danych nie była dla nas istotna nie zajmowaliśmy się optymalizacją. Rozwiązaliśmy problem ograniczenia ilości instrukcji podczas jazdy zastosowaniem osobnej pętli po starcie robota i w czasie jej działania nie są sprawdzane żadne przyciski, a jedynie tryby jazdy oraz dane niezbędne do sterowania. Zatrzymanie robota następowało jedynie poprzez reset mikrokontrolera. W programie zawarliśmy dwa tryby jazdy - jeden normalny, a drugi powolny (nazywany przez nas dokładnym), gdzie brana była połowa wyniku sterowania dla trybu normalnego. Przełączanie między nimi było możliwe przed jazdą za pomocą jednego z przycisków. Tryb serwisowy umożliwiał testowanie silników oraz każdego z czujników. 9 Wnioski Podsumowując, tworzenie Pantery było prostsze, niż z początku sądziliśmy, jednak w trakcie konstrukcji natrafiliśmy również na parę problemów, których się nie spodziewaliśmy. Nowością były dla nas programy do projektowania. I tak jak Inventor okazał się zaskakująco prosty, tak Altium sprawił parę niespodzianek. Tworzenie schematu było bardzo proste i intuicyjne, ale nie mogliśmy ruszyć z projektem płytki, dopóki nie znaleźliśmy kursu na myelectronics.pl. Mnogość opcji przytłoczyła nas i ciężko nam było zacząć pracę z tym programem. Z drugiej strony korzystanie z Inventora było samą przyjemnością. Przydatną i zaskakująco dokładną opcją była możliwość wyliczenia masy dla naszego modelu (program wyliczył 6g, bez płyty z czujnikami i przedłużek do kół, natomiast waga faktyczna wyniosła 8g). Warto wspomnieć, że nie przyłożyliśmy się do szczegółowego określania materiałów - wszystkie plastiki oznaczyliśmy jako plastik ABS, elementy metalowe jako stal - prawdopodobnie, gdybyśmy poświęcili temu więcej uwagi szacowane wyliczenia 6
Wnioski byłyby jeszcze dokładniejsze. Rysunek 6: Masa obliczona w programie Rysunek 7: Wyznaczony środek ciężkości Przy programowaniu musieliśmy się zmierzyć z różnymi wartościami optymalnych parametrów regulatora PD w różnych warunkach. Z tego względu, za każdym razem tworzyliśmy inne wersje programu, które testowaliśmy w dniu zawodów - tylko jedna okazała się być właściwa, inne zazwyczaj gubiły tor dla normalnego trybu jazdy. Bardzo przydatną opcją okazał się spowolniony tryb jazdy robota. Umożliwiło to szybkie dostosowanie robota, gdy trasa okazała się zbyt wymagająca. Mieliśmy ciekawe spostrzeżenia dotyczące kół. Koła LEGO okazały się wyjątkowo przyczepne (chociaż nie robiliśmy dokładnych badań, widoczna była przewaga nad kołami Pololu). Ważną sprawą okazało się dokładne czyszczenie kół z brudu. Różnica między brudnymi a czystymi kołami wynosiła nawet do 0% (dla przykładu - robot na czystych kołach pokonał trasę z czasem 5,5s, natomiast na zabrudzonych 6,78s). Brud przyczepiający się do kół zwiększał boczny poślizg, a przez to częstsze wypadanie z toru. Oprócz tego, było parę spraw projektowych, które zmienilibyśmy przy następnej konstrukcji. Zastosowane przez nas połączenie między główną płytą robota, a płytką z czujnikami nie do końca nas zadowalało. Powodem były zbytnie luzy, przez co pomimo dokręcenia śrub płyta z czujnikami zmieniała swoje położenie względem płyty głównej (zwłaszcza po uderzeniu). Lepszym rozwiązaniem byłoby stworzenie jednej płyty bez żadnych łączeń. Poza tym mankamentem było również kiepskie ułożenie dipswitcha. Znajdowało się ono w miejscu, w którym ciężko go było dosięgnąć. Sam przełącznik też z pewnością byśmy wymienili, ponieważ jest on przystosowany do pracy z niższymi napięciami i do załączania zasilania lepiej zastosować pojedynczy przełącznik, który może pracować przy napięciu V. Z pewnością również zastosowalibyśmy od razu gniazdo, które mechanicznie zabezpiecza przed odwrotnym podłączeniem baterii. Pozytywną rzeczą z jaką się spotkaliśmy były elementy w obudowie SMD. Kiedy decydowaliśmy, że większość z nich będzie w takiej właśnie obudowie 7
Wnioski obawialiśmy się problemów przy lutowaniu. Okazało się, że mieliśmy więcej problemów z lutowaniem elementów THT (nadmienię tu jeszcze, że to była nasza pierwsza płytka, a mostek TB66, który jest przestawiany jako koszmarny do lutowania, udało nam się przylutować za pomocą zwykłej kolbówki). W następnym projekcie także będziemy dążyć, by jak najwięcej elementów było montowanych powierzchniowo. Prawdopodobnie zadbamy również o odpowiednie zabezpieczenie ścieżek. Zauważyliśmy, że przez ułożenie ścieżek na spodzie płytki, a także przez nie zabezpieczenie ich soldermaską, często zdarzało się przypadkowe włączenie przycisku, przez zwarcie ścieżek palcem (powodowało to niechciane starty robota, czy nieplanowane tryby jazdy). Podsumowując, robota tworzyliśmy przez mniej więcej dwa miesiące, z czego około miesiąc na projektowanie, trzy tygodnie na konstrukcję i tydzień na program. Udało nam się zminimalizować koszty do ok. 0zł (wliczając cynę, spalone mostki, wiertła, taśmy do tras i śrubki). Pantera spełniła z nawiązką nasze oczekiwania, czyli wystartowanie w Robotic Arena 0, zajmując przy tym. miejsce. 8