Popularny post Nawyk Napisano Luty 27, 2013 Popularny post Udostępnij Napisano Luty 27, 2013 Jest to kolejny odcinek kursu poświęconego budowaniu robota kategorii Minisumo. W ninejszej części zajmiemy się "tym, co tygryski lubią najbardziej" - programowaniem robota. Czas, by efekt naszej wielogodzinnej pracy nareszcie zaczął przejawiać szczątkową inteligencję ameby i spełnił swoją funkcję. Zakładam, że do tego momentu wszystko poszło po Waszej myśli i nie mieliście większych trudności z montażem. Na tym etapie elektronika robota powinna być w 100% zgodna ze schematem, silniki swobodnie obracają osiami, dalmierz(e) są na stałe przytwierdzone do podwozia, pług jest uformowany i naostrzony, a akumulator naładowany do pełna. Część I - Wstęp i wykonanie PCB Część II - Lutowanie i montaż Część III - Uruchomienie i programowanie Poniższe zdjęcia przedstawiają gotowego robota: Programator Napisałem w pierwszej części artykułu, że jednym z podstawowych narzędzi niezbędnych do uruchomienia naszego robota jest programator. Wymieniłem popularny STK500v2 - jest to jeden z wielu programatorów, których miałem okazję używać i uważam, że wersja z trybem HID sprawi najmniej problemów podczas konfiguracji. Właśnie na przykładzie tego programatora, przedstawiłem poniżej proces programowania. Moja wersja wygląda dokładnie tak: Programator znajdziecie np. na znanym portalu aukcyjnym - allegro.pl. W pole wyszukiwania wystarczy wpisać "STK500v2". W opisie aukcji szukajcie informacji o zabezpieczeniach nadprądowych/bezpiecznikach polimerowych oraz trybie pracy jako human interface device - HID to słowo klucz. Gdy już będziecie trzymać sprzęt w swoich rękach, zapoznajcie się z załączoną instrukcją od sprzedawcy. Będzie ona na pewno przedstawiała proces instalowania sterowników i konfigurację związaną z najpopularniejszymi "uploaderami". Jeśli kupiliście wersję z HID, wystarczy założyć odpowiednią zworkę i podłączyć urządzenie do portu USB - Windows sam powinien znaleźć niezbędne sterowniki (testowane na Windows XP oraz Windows 7 64-bit). Posiadaczom starszych komputerów, wysposażonych w stare złącze drukarkowe LPT, mogę polecić samodzielne złożenie programatora STK200 - szczegóły w googlach. Musicie liczyć się z koniecznością włączenia odpowiednich opcji trybu pracy w BIOSie płyty głównej, ale jest to opcja najtańsza z możliwych. Dość popularnym programatorem na USB jest także USBasp, który współpracuje z wieloma programami. Próba pierwszego połączenia z mikrokontrolerem Mamy już nasz programator podłączony do USB, z zainstalowanymi sterownikami lub założoną zworką HID. Czas na "chwilę prawdy", czyli sprawdzenie, czy nasza Atmega jest wykrywana (czyt.: prawidłowo podłączona). Do tego celu można skorzystać z bardzo fajnego, małego programu o nazwie SinaProg - nakładki graficznej na popularny AVRdude. Rozprowadzana jest na licencji Open Source, posiada wszystkie niezbędne funkcje, a dodatkowo została wzbogacona o zdefiniowane przez autorów ustawienia fusebitów dla najpopularniejszych mikrokontrolerów. SinaProg w wersji 2.0 działa bez problemu z Windows 7 64-bit, więc nie powinno być problemów również pod innymi systemami operacyjnymi. Pobieramy program z załącznika na dole posta, rozpakowujemy go np. na pulpicie i uruchamiamy plik SinaProg.exe. W międzyczasie łączymy nasz programator 10-żyłową taśmą ze złączem na płytce robota, a następnie podłączamy zasilanie - na razie najlepiej zasilacz, żeby uniknąć sytuacji, gdy akumulator nam się rozładuje w trakcie programowania. Na tym etapie będziemy dość często kasować pamięć i wgrywać nowy soft, więc tak jest po prostu wygodniej. Na razie odłączamy silniki robota! Przesuwamy włącznik robota i powinna nam się zaświecić dioda przy silniku. Poszerzamy sobie okno SinaProg, klikając na odpowiedni przycisk: Wybieramy z listy rozwijanej nasz programator i ustawiamy odpowiedni port, do którego jest podłączony*. Klikamy na przycisk "Search" - nie musimy z listy obok wybierać mikrokontrolera, SinaProg sam go wykryje. Szukanie może potrwać nawet ok. minuty - wszystko zależy od programatora. Po udanej operacji, powinniśmy uzyskać odpowiednią informację w prawej części okna. Jeśli wyświetlają się komunikaty w stylu "device not found" albo "target doesn't answer", musimy sprawdzić przede wszystkim, czy zasilanie dociera do mikrokontrolera (między pinem 7 i 8 atmegi powinno być napięcie 5V). Jeśli tak, to problem jest poważniejszy - należy jeszcze raz sprawdzić, czy na płytce nie ma zwarć albo przerw. Jeśli Atmega nie jest nowa i istnieje podejrzenie, że mogła mieć przestawione fusebity, to można jeszcze przetestować inną Atmegę - najlepiej taką prosto ze sklepu. * Dla programatorów innych, niż STK500v2 HID, porty można sprawdzić wchodząc w Start, klikamy prawym przyciskiem myszy na Mój Komputer -> "Właściwości", wybieramy po lewej stronie "Menedżer urządzeń", a następnie szukamy nazwy programatora na liście. Jak wgrać oprogramowanie? Skoro mamy już skonfigurowany i gotowy do działania programator, a nasza Atmega w robocie jest prawidłowo wykrywana, to nadszedł czas na próbę wgrania oprogramowania. Pobieramy z załącznika paczkę programów - są to zarówno pliki *.bas, które można edytować (później opiszę jak) oraz *.hex, czyli skompilowane programy - te ostatnie nas w tej chwili najbardziej interesują. Paczkę rozpakowujemy np. na pulpicie. Programowanie jest banalnie proste. Wystarczy, że klikniemy przycisk z ikoną folderu, wybierzemy plik, który nas interesuje (np. test-przycisku.hex) i w sekcji Flash klikniemy przycisk "Program". W zależności od obiętości programu oraz zastosowanego programatora, będziemy musieli poczekać krótszą lub dłuższą chwilę. Po prawej stronie wyświetli się "raport" z programowania - najważniejszą informacją jest "avrdude: XYZ bytes of flash verified" - nie wgłębiając się w szczegóły oznacza to, że mikrokontroler został zaprogramowany prawidłowo. Programy uruchomieniowe W paczce z załącznika znajdziecie garść programów, które służą do testowania poszczególnych peryferiów robota. Zaczynają się one od słowa "test-". Poniżej krótkie zestawienie, jakiego efektu działania należy się spodziewać po zaprogramowaniu przy użyciu danego hex'a: test-przycisku.hex Program jest wybitnie banalny - w momencie, kiedy naciśniemy przycisk z boku robota, powinna się zaświecić dioda przy mikrokontrolerze. Gdy przycisk puścimy - dioda zgaśnie. test-czujnikow-linii.hex Program ma za zadanie sprawdzić działanie czujników linii (jeśli ktoś na to nie wpadł po przeczytaniu nazwy;)). Zaprogramowanego robota należy postawić na gładkej, białej powierzchni, na którą można nakleić np. czarną taśmę izolacyjną. W momencie, gdy jeden z transoptorów znajdzie się nad taśmą, powinna się zaświecić dioda przy mikrokontrolerze. Jeśli tak się nie dzieje, albo dioda świeci się cały czas, należy sprawdzić podłączenie CNY70 (opis sprawdzania w części II tego artykułu), a następnie zmienić w kodzie programu test-czujnikow-linii.bas wartość stałej "Linia" - o edycji programów napiszę w kolejnym punkcie. test-sharpa.hex Program testuje działanie dalmierza optycznego. Podczas zbliżania do czujnika jakiegoś obiektu, np. dłoni, w pewnym momencie powinna zaświecić się dioda przy mikrokontrolerze. test-silnikow.hex Chyba najważniejszy z testów. Podłączamy silniki, zakładamy koła, a robota ustawiamy na podwyższeniu. Chodzi o to, by koła mogły swobodnie się obracać w powietrzu. Po wgraniu programu, robot powinien okresowo zwiększać i zmniejszać obroty silników. Oba muszą obracać się do przodu. Jeśli tak się nie dzieje, to istnieją dwie możliwości. Silnik/silniki obracające się do tyłu podłączamy odwrotnie, czyli zamieniamy miejscami 2 przewody w złączu - tak, jakbyśmy obrócili wtyczkę o 180 stopni. Druga opcja, to edycja pliku test-silnikow.bas i ponowna kompilacja. Należy przypisanie Mset1b Alias Portd.0 i Mset1a Alias Portd.1 zamienić nazwami, tzn. powinno być Mset1a Alias Portd.0 i Mset1b Alias Portd.1. Analogicznie w przypadku odwrotnego działania drugiego silnika - Mset2a i Mset2b zamieniamy miejscami. Edytowanie i kompilowanie programu Mamy gotowe pliki *.hex z działającymi programami, ale w jaki sposób je stworzyć? Możliwości jest kilka, wszystko zależy od naszych preferencji programistycznych. Istnieje kilka języków programowania, najpopularniejsze z nich to język C, Basic i Assembler. O ile do C prędzej czy później dojdziecie, jeśli chcecie rozwijać się w zagadnieniach robotyki, to na początek sugeruję poznanie języka Basic. Część osób pewnie mnie zlinczuje za ten wybór, ale argumentuję go tym, że sukcesy najbardziej mobilizują do rozwoju, a z Basic'em sukcesy pojawiają się po bardzo krótkim czasie nauki. Aby napisać program, potrzebujemy tzw. środowiska programistycznego obsługującego wybrany język. Dla Basic'a jest to środowisko BASCOM-AVR. Bascoma można pobrać za darmo w wersji demonstracyjnej - jedynym jej ograniczeniem jest limit rozmiaru pliku wynikowego równy 4kB. Na początku i tak trudno będzie nam go przekroczyć, więc nie ma czym się przejmować. Śrowoisko posiada zintegrowane najważniejsze narzędzia, jak edytor tekstu z kolorowaniem składni (zmienia kolor i pobgrubienie czcionki dla słów kluczowych w programie, co bardzo ułatwia pisanie) i kompilator. Kompilator służy właśnie do tworzenia plików *.hex, które są (mówiąc w uproszczeniu) tłumaczeniem naszego kodu napisanego w języku Basic na kod zrozumiały dla mikrokontrolera. Zaczynamy od pobrania wersji demo BASCOM-AVR, a następnie jej zainstalowania. Można zostawić domyślną ściezkę dostępu albo podać własną. Po instalacji uruchamiamy odpowiednią ikonkę na pulpicie i naszym oczom ukaże się taki widok: Klikamy na ikonę folderu, a następnie wybieramy jeden z plików *.bas z naszej paczki z programami uruchomieniowymi. Polecam np. test-czujnikow-linii.bas. Możemy teraz w kodzie wprowadzić dowolne zmiany, na początek zmieńmy wartość Const Linia na 900, czyli linia powinna wyglądać tak: Const Linia = 900. Poprawiliśmy program, a teraz chcemy "zgrać" go na naszą atmegę - musimy kod skompilować, klikając na odpowiedni przycisk: Na dole okna Bascoma wyświetlą się wszystkie ewentualne błędy - nalezy je zawsze dokładnie przeczytać, bo dopóki nie poprawimy tych błędów, program się nie skompiluje. Gdy ekran z paskiem postępu zniknie i nie pojawią się żadne ostrzeżenia i negatywne komunikaty, to znaczy, że utworzyliśmy nowy plik *.hex. Możemy go już wgrać, co opisałem we wcześniejszej części artykułu. Jeśli chcecie nauczyć się programować od zera (a nie tylko poprawiać cudze programy), to mogę Wam polecić darmowy kurs Bascoma Końcowy działający program, to napisany przeze mnie prosty-program.bas. Nie jest on super optymalny i być może ma kilka błędów, ale powinien wystarczyć do tego, by Wasz robot ożył i "z grubsza" spełnił Wasze oczekiwania. Jeśli będziecie mieli chęć, by go poprawić, to zachęcam do publikacji wyników eksperymentów. Ważna sprawa! Przepisowy ring minisumo jest cały czarny i ma białą obwódkę. Niestety, byłem zmuszony zbudować własny ring z materiałów dostępnych w domu i postanowiłem "odwrócić" te kolory, aby ułatwić sobie zadanie. Robot z domyślnym programem jest dostosowany do białego ringu z czarną obwódką. Aby to zmienić, wystarczy zmienić w kodzie programu: If Linia1 > Granicalinii Then 'jesli prawy czujnik wykryje linie Gosub Jazdatyl Waitms 500 Gosub Obrotlewo Waitms 500 Set Lewo Elseif Linia2 > Granicalinii Then Gosub Jazdatyl Waitms 500 Gosub Obrotprawo Waitms 500 Reset Lewo Else na If Linia1 < Granicalinii Then 'jesli prawy czujnik wykryje linie Gosub Jazdatyl Waitms 500 Gosub Obrotlewo Waitms 500 Set Lewo Elseif Linia2 < Granicalinii Then Gosub Jazdatyl Waitms 500 Gosub Obrotprawo Waitms 500 Reset Lewo Else Krótki film, pokazujący sposób działania robota: Zachęcam do zadawania pytań, postaram się na większość odpowiedzieć. Gdy zbierze się już większa ich ilość, to pomyślę o zredagowaniu FAQ w kolejnej częsci tego "Przepisu na robota". Powodzenia! minisumo-programy.zip 3
fazi787 Luty 27, 2013 Udostępnij Luty 27, 2013 Naprawdę super poradnik, kawał dobrej roboty. Gratulacje
Grabki Marzec 1, 2013 Udostępnij Marzec 1, 2013 Jakbym znalazł chwilę, to mógłbym poprzerabiać programy z bascoma na C, tylko czy byłby ktoś zainteresowany?
x21 Marzec 2, 2013 Udostępnij Marzec 2, 2013 Grabki - ja chętnie bym je zobaczył Od nie dawna uczę się c i fajnie by było zobaczyć taki podstawowy wsad do Minisumo .
Tomson1105 Kwiecień 16, 2013 Udostępnij Kwiecień 16, 2013 Jakbym znalazł chwilę, to mógłbym poprzerabiać programy z bascoma na C, tylko czy byłby ktoś zainteresowany? Ja bym był zainteresowany
Pikier Styczeń 14, 2014 Udostępnij Styczeń 14, 2014 Witam, czy ten programator avr http://botland.com.pl/programatory/2014-programator-avr-zgodny-usbasp-isp-tasma-idc-rozne-kolory.html#/programtor_usbasp_msx-czerwony Będzie działał z mikrokontrolerem: http://botland.com.pl/avr-tht-dip/1052-atmega88pa-pu-dip-.html lub tym? http://botland.com.pl/avr-tht-dip/78-atmega8a-pu-dip.html Bo będę robił zamówienie z tego sklepy i wziął bym od razu i jeszcze pytanko czy opłaca się brać ten programator?
Slawus Styczeń 14, 2014 Udostępnij Styczeń 14, 2014 W opisie programatora możesz przeczytać, że obsługuje te uC, które wymieniłeś...
fazi787 Styczeń 14, 2014 Udostępnij Styczeń 14, 2014 Pikier, Tak opłaca się wziąć ten programator, będzie działał z wymienionymi przez Ciebie mikrokontrolerami.
Pikier Styczeń 14, 2014 Udostępnij Styczeń 14, 2014 Dziękuję za odpowiedź, czytałem opis tego programatora, ale chciałem się jeszcze upewnić i zapytać czy warto go kupić.
komar93 Grudzień 6, 2014 Udostępnij Grudzień 6, 2014 Hej, udało się komuś zaprogramować w C++ i mógłby się podzielić ? Pozdrawiam
komar93 Styczeń 26, 2015 Udostępnij Styczeń 26, 2015 Cześć potrzebuję jakiejś wskazówki, każdy programik testowy działa oprócz czujnika sharpa gdzie może być coś nie tak, jeżeli jest napięcie na sharpie. Zwarć na płytce nie ma i połączenia miedzy prockiem a programatorem są ok ?
Ven_64 Styczeń 26, 2015 Udostępnij Styczeń 26, 2015 Sprawdź kamerką z telefonu czy czujnik świeci. Może źle podłączyłeś?
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »