Dawno temu postanowiłem sobie, że zrobię robota micromouse z prawdziwego zdarzenia. Nie interesowało mnie samo wykonanie konstrukcji, która jest w stanie przejechać labirynt. Chociaż realizacja tego zadania jest sama w sobie osiągnięciem. Mój robot miał być szybki i wykorzystywać złożone algorytmy np. filtr Kalmana do pozycjonowania. Do tej pory wszystkie próby kończyły się porażkami. Mam już w głowie koncepcję na kolejne podejście. Pomyślałem jednak, że zanim opiszę tu nowe założenia projektu i kroki jakie już poczyniłem, najpierw napiszę coś o poprzednich próbach. Dlatego dzisiejszy wpis będzie o moim pierwszym podejściu do stworzenia robota micromouse.

Było to na studiach, zaraz po zrobieniu inżynierki. Miałem wtedy ułańską fantazję i nieograniczoną wiarę w swoje możliwości. W skutek czego postanowiłem między innymi, że użyję modułu żyroskopu i akcelerometru LSM320DL w obudowie LGA, którego samodzielnie polutuję lutownicą grzałkową. Footprint żyroskopu sam zrobię w Eaglu i specjalnie zrobię dłuższe pady, żeby je podgrzać i stopić cynę umieszczoną wcześniej na pinach układu. Oczywiście wcześniej miałem niewielkie doświadczenie z lutowaniem, głównie układów przewlekanych i nawet nie zrobiłem wcześniej żadnej przymiarki, żeby zobaczyć, czy to jest w ogóle wykonalne.

Wykorzystane elementy

Projekt zakładał użycie dwóch silników Pololu 10:1 z przedłużoną osią, dwóch kół i plastikowych mocowań silników tej samej firmy. Silniki miały być sterowane przy pomocy drivera TB6612. Na przedłużone osie silników założyłem magnesy neodymowe, a za nimi umieściłem małe płytki z enkoderami magnetycznymi AS5040 przymocowane pod kątem 90 stopni do głównej płytki PCB poprzez polutowanie czterech dużych padów. Oczywiście takie zamocowanie enkoderów powodowało problemy z odpowiednim wypozycjonowaniem magnesów, aby uzyskać dobre odczyty z enkodera. Jednak o tym miałem przekonać się dużo później. Czujnikami odległości miała być para dioda IR i fototranzystor. Przewidywałem czery czujniki – dwa patrzące na wprost i dwa diagonalne. W internecie do pierwszych konstrukcji polecają używać czujniki patrzące na boki albo jako dodatkowe, albo zamiast diagonalnych, bo wtedy jest łatwiej. Ale w końcu przeczytałem gdzieś, że same diagonalne wystarczą. A jak coś jest możliwe do zrobienia, to na pewno to zrobię.

Jako procesor użyłem STM32F103RB. Skoro jesteśmy przy procesorze, to kolejnym ciekawym założeniem projektowym było nieużywanie debuggera. Miałem zamiar wgrywać kod przez bootloader i nie mieć żadnego podglądu zmiennych. W końcu Atmegi tak programowałem i jakoś dawałem radę. Płytkę PCB robiłem w Satlandzie z bonu, który otrzymałem jako nagroda w konkursie. Jako student miałem ograniczone fundusze, dlatego projekt nie przewidywał poprawek, zapasowych części, czy kolejnych wersji PCB. W końcu jak dobrze przemyślę projekt, wszystko uda się za pierwszym razem. A na pewno go dobrze przemyślę, w końcu robię podobny projekt pierwszy raz, a wszystkie zastosowane rozwiązania na pewno się sprawdzą!

Wykonanie

W efekcie, jak można się spodziewać, wyszedł kompletny fail. Footprint żyroskopu LGA zrobiłem do góry nogami i piny nie pasowały. Może to i dobrze, bo oszczędziłem sobie próby przylutowania tego w założony wcześniej sposób. Poza tym był jeszcze inny błąd w projekcie płytki i dwie linie sygnałowe były ze sobą zwarte. Zauważyłem te rzeczy dopiero po przylutowaniu większości elementów, w tym procesora w obudowie SMD, co kompletnie mi nie wyszło. Gdyby doszło do uruchamiania, prawdopodobnie nigdy by nie wstał. Po raz kolejny – może to i dobrze, że go nie uruchamiałem. W końcu musiał bym się męczyć z wgrywaniem softu przez bootloader. Mimo, że płytka nie działała, zamontowałem silniki i koła, żeby chociaż zrobić robotowi parę zdjęć. Okazały się one później bardzo cenne. Niestety okazało się również, że przykręcone zbyt mocno plastikowe mocowania nie wytrzymują naprężeń i pękają.

Konsekwencje

Lista błędów, jakie popełniłem w tym projekcie jest długa i z perspektywy czasu śmieszna. Płytka nigdy nie została nawet uruchomiona, do dzisiaj się kurzy gdzieś na szafie (obrazek przedstawiający pozostałości płytki dołączony do artykułu). Miała jednak dla mnie wielką wartość. Niedługo po tym, jak ją zrobiłem, pomagałem jako wolontariusz przy Trójmiejskim Turnieju Robotów. Miałem być sędzią zawodów micromouse. Okazało się jednak, że żaden robot nie pojawił się na starcie. Na pierwszy rzut oka kompletna porażka. Żeby jakoś ratować sytuację miałem opowiedzieć na czym polega ta konkurencja. Odsłonięcie labiryntu przyciągnęło trochę gapiów, a ja tłumaczyłem pokazując na labiryncie jak działa algorytm wyznaczania trasy, jakie są trudności w pozycjonowaniu robota, na zdjęciach swojego robota pokazywałem jak wyglądają i działają czujniki odległości. Mimo, że konkurencja się nie odbyła, ludziom to się spodobało. A ja niedługo po TTR dostałem pierwszą ofertę pracy od osoby, której spodobało się to, jak opowiadałem.

Okazuje się, że czasem nawet najbardziej nieudane projekty mają wartość, której wcześniej byśmy nie przewidzieli. Projekt, dzięki któremu zacząłem zawodowo zajmować się systemami embedded był kompletnie nieudany i nigdy nie dokończony. Plany wykonania robota micromouse musiałem odłożyć na inne czasy, ale nie było to moje ostatnie słowo.