6-kołowy robot terenowy ze sterownikiem na STM32

Kolejnym konkursowym projektem, opisanym w tym artykule, jest robot o nazwie R66. Urządzenie zostało skonstruowane przez autora jako nowa konstrukcja, bazująca na doświadczeniach z budowy robota TWIN-CATT, który zajmował miejsca w pierwszej trójce w różnych zmaganiach robotów. W związku z rozwojem mikrokontrolerów bazujących na rdzeniach firmy ARM jednym z przyjętych założeń było wykorzystanie właśnie takiego układu, wybór padł na układ z rodziny STM32 firmy STMicroelectronics.

Robot R66 jest sześciokołowym robotem mobilnym, posiadającym niezależny napęd dla każdego koła w postaci komutatorowego silnika prądu stałego z przekładnią. Każde dwa koła zgrupowane są w jedną oś. Każda z trzech osi stanowi ruchomy moduł ze swobodą ruchu w kierunku góra-dół oraz obrotu lewo-prawo. Taka konstrukcja robota sprawia, że kinematyka robota jest z jednej strony złożona, jednak z drugiej strony umożliwia dokładną i stabilną pracę robota w trudnych warunkach terenowych.

Przed rozpoczęciem konstruowania robota przyjęte zostały następujące założenia projektowe:

  • długość robota nie może przekraczać 100 cm,
  • szerokość robota nie może przekraczać 35cm,
  • należy dążyć do minimalnej wagi robota,
  • robota będzie wyposażony w 3 niezależnie pracujące osie,
  • przednia oraz tylnia oś będą osiami skrętnymi,
  • robot będzie zasilany napięciem stałym o wartości 27 V (założenie wynika z zastosowanych silników),
  • w układzie wykorzystane zostaną akumulatory litowo-jonowych,
  • robot będzie wyposażony w czujniki ultradźwiękowe służące do wykrywania przeszkód,
  • w komunikacji zastosowana zostanie technologia Bluetooth.

 

Mechanika robota

Konstrukcja robota została zaprojektowana przy użyciu programu Autodesk Inventor 2011. Program ten umożliwia już na etapie projektowania sprawdzenie słuszności przyjętych założeń oraz pozwala wyeliminować wady konstrukcyjne. Narzędzia dostępne w Autodesk Inventor pozwalają na projektowanie elementów mechanicznych 3D, symulowanie elementów, tworzenie narzędzi i prezentację projektu w postaci schematów. Wygląd ogólny robota, po zaprojektowaniu w programie, przedstawiono na rysunku 1.


Rys. 1. Model robota R66 wykonany w Autodesk Inventor 2011

Rys. 1. Model robota R66 wykonany w Autodesk Inventor 2011

 

Długość robota zgodnie ze stworzonym modelem 3D wynosi 70,5 cm. W trakcie wykonywania elementów robota zdecydowano się na wydłużenie rur łączących moduły poszczególnych osi, tak aby robot mógł łatwiej pokonywać wzniesienia. W robocie R66 układ skrętny bazuje na samochodowych układach kierowniczych. Wygląd robota podczas skrętu w prawo przedstawiony został na rysunku 2.


Rys. 2. Układ robota R66 podczas skrętu w prawo

Rys. 2. Układ robota R66 podczas skrętu w prawo

 

W celu zabezpieczenia przed zbyt mocnym skręceniem kół na osiach zamontowane zostały czujniki krańcowe. Robot może skręcać kołami w lewo lub w prawo, przy czym wychylenie kół obu osi skrętnych wykonywane jest jednocześnie z taką samą wartością z przeciwnym kierunkiem skrętu kół. W konstrukcji niedozwolone są takie ustawienia skrętu kół jak ustawienia tylniej osi w kierunku na jazdę na wprost a przedniej do skrętu w zadaną stronę lub ustawienie kół obu osi skrętnych do skrętu w przeciwną stronę. Takie i podobne konfiguracje są nieefektywne i niekorzystnie obciążają konstrukcję.

Robot został zaprojektowany w taki sposób aby bez problemów mógł pokonywać trudne przeszkody terenowe, umożliwia to właśnie 3-osiowa konstrukcja. Wygląd modelu z różnorakimi ustawieniami robota został przedstawiony na rysunku 3.


Rys. 3. Model robota R66 podczas różnorakiej konfiguracji członów

Rys. 3. Model robota R66 podczas różnorakiej konfiguracji członów

 

Po zweryfikowaniu modelu oraz naniesieniu drobnych poprawek rozpoczęto proces budowy robota. Jednym z efektywnych udoskonaleń wykonywanego robota jest wykorzystanie specjalnych przewodów oraz łożysk ślizgowych firmy igus. Łożyska ślizgowe wykorzystano do zminimalizowania tarcia występującego w układzie skrętnym robota. Stabilizują one dodatkowo ruchome mocowania silników z kołami. Przykładowe miejsce zainstalowania przedstawiono na fotografii 4, a na kolejnym rysunku przedstawiono omawiane łożysko.

 

Fot. 4. Przykładowe miejsce montażu ślizgowego łożyska polimerowego IGLIDUR

Fot. 4. Przykładowe miejsce montażu ślizgowego łożyska polimerowego IGLIDUR


Rys. 5. Wygląd wykorzystanych łożysk ślizgowych

Rys. 5. Wygląd wykorzystanych łożysk ślizgowych

 

Nie bez powodu również zdecydowano się na użycie przewodów z firmy igus. Zastosowane przewody sterujące Chainflex charakteryzują się bardzo małym promieniem zgięcia (bez uszkadzania przewodu), spełniają normy użytkowe i posiadają certyfikaty zgodności, są odporne na skręcanie, mogą być wykorzystywane przy wysokich prędkościach i przyspieszeniach, są dostępne w wersji z ekranem lub bez.

W zaproponowanej konstrukcji robota wykorzystanie tych przewodów było podyktowane faktem, że przewody sygnałowe będą poddawane częstym zgięciom oraz skręcaniu. Typowe przewody stosowane w elektrotechnice uległyby mechanicznym uszkodzeniom. W projekcie zastosowano przewód o wiązce 18×0,25 mm2 z dodatkową linką zabezpieczającą przed rozerwaniem. Sposób montażu oraz wprowadzenie przewodu do kopuły z układem sterującym przedstawiono na fotografii 6.


Fot. 6. Montaż i prowadzenie przewodów typu Chainflex

Fot. 6. Montaż i prowadzenie przewodów typu Chainflex

 

W celu zapewnienia pewności ruchowej, na zasadzie góra-dół, wykorzystano zawias motylkowy. Natomiast obrót lewo-prawo umożliwia zespół łożyskowy w oprawie typu UCF204. Wygląd łożyska przedstawiono na fotografii 7.


Fot. 7. Łożysko UCF204

Fot. 7. Łożysko UCF204

 

Przednia oraz tylna cześć robota została wykonana z zespawanej stali. Po wykonaniu obudowy elementy stalowe zostały oddano do malowania. W malowaniu wykorzystano specjalistyczną farbę stosowaną w środowiskach słonych oraz kwaśnych, odporną na ciągłe zawilgocenie. Mimo tego, iż robot nie będzie narażony na takie warunki, dołożono wszelkich starań aby robot był solidny, trwały oraz odporny na liczne zagrożenia środowiskowe. Wygląd złożonego robota (bez pokrywy na środkowym członie) przedstawiono na fotografii 8.


Fot. 8. Wygląd robota R66

Fot. 8. Wygląd robota R66

 

ELEKTRONICZNY UKŁAD STERUJĄCY

Jako układ sterujący wybrano mikrokontroler STM32F051R8T6, który jest dostępny w zestawie uruchomieniowym STM32F0DISCOVERY. Mikrokontroler STM32F051R8T6 bazuje na rdzeniu ARM Cortex-M0. Charakteryzuje się częstotliwością taktowania CPU do 48 MHz, 64 kB pamięci Flash oraz 8 kB pamięci SRAM. Układ wyposażony jest w 51 linii ogólnego przeznaczenia, spośród których aż 36 toleruje napięcie 5 V. Układ STM32F051R8T6 posiada interfejsy komunikacyjne takie jak: I2C, SPI, I2S, HDMI CEC, USART. Poza tym do dyspozycji programisty jest 12-bitowy przetwornik ADC, 12-bitowy przetwornik DAC oraz pełna gama rozbudowanych liczników sprzętowych. Na rysunku 9 przedstawiono schemat ideowy prezentujący przepływ informacji i wykorzystywane elementy poszczególnych układów.


Rys. 9. Schemat ideowy połączeń pomiędzy układem STM32F051R8T6 i pozostałymi elementami robota R66

Rys. 9. Schemat ideowy połączeń pomiędzy układem STM32F051R8T6 i pozostałymi elementami robota R66

 

Płytkę drukowaną zaprojektowano z użyciem oprogramowania Altium Designer 2009. Jest to potężne narzędzie, które zapewnia kompletne, zunifikowane środowisko dla całego procesu projektowego. Do projektowania płytki zastosowano podejście wykorzystania zestawu STM32FDISCOVERY w postaci układu nadzorującego pracę pozostałych elementów umieszczonych na zaprojektowanej płytce. Schemat elektryczny płytki przedstawiono na rysunku 10.


Rys. 10. Schemat elektryczny zaprojektowanej płytki głównej robota R66

Rys. 10. Schemat elektryczny zaprojektowanej płytki głównej robota R66

 

Najważniejszym elementem płytki jest blok stabilizacji napięcia zasilania oraz konwersji napięcia. Jak już wcześniej wspomniano silniki robota wymagają zasilania napięciem stałym o wartości 27 V. Natomiast logika robota pracuje na poziomie napięć o wartości 5 V i 3,3 V. Do uzyskania napięcia o wartości 5V wykorzystana została przetwornica napięcia stałego w postaci układu LM2576HVS-ADJ firmy Texas Instruments. Aby zbudować układ wykorzystano schemat przykładowej aplikacji przedstawionej w dokumentacji dla układu. Należy tu zaznaczyć, iż zestaw ewaluacyjny STM32F0DISCOVERY posiada własny blok stabilizacji napięcia do wartości 3,3 V, który został użyty dla uzyskania napięcia o tej właśnie wartości poprzez podanie napięcia 5 V na odpowiednią nóżkę złącza płytki.

Poza samym blokiem zasilania na płytce umiejscowiono także scalone mostki H w postaci układu L298N służące do sterowania silnikami oraz złącza ułatwiające podłączenie: silników, czujników krańcowych, modułu BTM-222, magnetometru HMC6352 oraz czujników ultradźwiękowych HCSR04. Mozaikę zaprojektowanej płytki PCB przedstawiono na rysunku 11. Natomiast na fotografii 12 przedstawiono zmontowaną płytkę umieszczoną na robocie.


Rys. 11. Mozaika zaprojektowanej płytki głównej PCB robota R66

Rys. 11. Mozaika zaprojektowanej płytki głównej PCB robota R66


Fot. 12. Płyta sterująca zainstalowana w robocie R66

Fot. 12. Płyta sterująca zainstalowana w robocie R66

 

Oprogramowanie dla układu STM32F051R8T6 zostało utworzone z użyciem środowiska programistycznego Keil µVision 4. Zaletą powyższego programu jest możliwość pełnej pracy przy wykorzystaniu tego narzędzia, od etapu pisania kodu poprzez debugowanie.

Poniżej przedstawiono ważniejsze fragmenty programu, pełny projekt można znaleźć w załącznikach do artykułu. Pierwszym krokiem jest zdefiniowanie makr, które ułatwiają wprowadzanie zmian i zwiększają czytelność kodu.

List. 1. Definicje sterujące stanem wyjść mikrokontrolera

W powyższym fragmencie przedstawiono makra związane ze sterowaniem osiami lewo-prawo, oraz obsługą wyjścia trigger pierwszego czujnika ultradźwiękowego. Każda oś sterowana jest z użyciem dwóch wyjść – IN1 i IN2. Oba te wyjścia określają kierunek przepływu prądu przez wirnik silnika. Wyjście ENABLE służy do uruchomienia całego układu L298. Poprzez szybkie przełączanie stanu linii ENABLE można sterować prędkością silnika. Jest to realizowane poprzez sterowanie metodą PWM – modulacja szerokości impulsu. Sposób działania PWM przedstawiono na rysunku 13.


Rys. 13. Przebiegi PWM wykorzystywane do regulacji prędkości silnika

Rys. 13. Przebiegi PWM wykorzystywane do regulacji prędkości silnika

 

Zasada takiego sterowania silnikami jest następująca – im większe wypełnienie tym większe jest napięcie średnie, a co za tym idzie większa prędkość silnika. W zastosowanym układzie częstotliwość sygnału PWM została ustalona na 28 300 Hz. Do celów sterowania silnikami prądu stałego stosuje się częstotliwości z zakresu od 15 kHz do 50 kHz. W układzie mikrokontrolera do celów generacji sygnału PWM wybrano licznik TIM3. Wartość wypełnienia można zadawać z zakresu od 0 do 1000, dla przykładu wartość 500 oznacza wypełnienie 50%, a wartość 725 to wypełnienie 72,5%. W związku z dostępnymi czterema silnikami, którymi odbywa się sterowanie. wykorzystane zostały cztery kanały PWM. Funkcja, którą należy wywołać w celu ustawienie kierunku oraz prędkości jazdy została przedstawiona na listingu poniżej.

List. 2. Funkcja sterująca i prędkością obracania się koła pierwszego

Powyżej przedstawiona funkcja przeznaczona jest dla obsługi pierwszego koła robota. Funkcja przyjmuje dwa parametry: prędkość (jako wartość wypełnienia) oraz tryb działania. Każda oś ma możliwość: jazdy w przód, jazdy w tył, STOP z hamulcem oraz STOP bez hamulca – FREERUN. Analogicznie zdefiniowane są funkcje sterujące pozostałymi kołami.

W celu zabezpieczenia przed przejściem osi w zakresy zabronione w konstrukcji robota zostały wykorzystane czujniki krańcowe. Wygląd zainstalowanych czujników krańcowych przedstawiono na fotografii 14.


Fot. 14. Czujniki krańcowe wraz z trzpieniem mocującym mechanizm skrętny

Fot. 14. Czujniki krańcowe wraz z trzpieniem mocującym mechanizm skrętny

 

Funkcja obsługi czujników jest bardzo prosta. W ramach jej działania sprawdzany jest stan wartości konkretnego bity rejestru IDR (Input Data Register), który następnie jest zwracany przez funkcję. Przy czym funkcja sprawdza stan bitu dwukrotnie. W identyczny sposób wykonane są wszystkie funkcje obsługujące 4 krańcówki (po dwie krańcówki na każdej ze skrętnych osi). Na listingu 3 przedstawiona została omawiana funkcja.

List. 3. Kod funkcji sprawdzający stan pojedynczego czujnika krańcowego

W aplikacji zastosowano także elementy do pomiaru odległości w postaci czujników ultradźwiękowych HC-SR04. Zostały one wykorzystane w celu zabezpieczenia robota przed kolizją z przeszkodami, które mogą pojawić się na drodze. Czujnik ten charakteryzuję się następującymi parametrami (wygląd czujnika przedstawiono na fotografii 15):

  • napięcie zasilania – 5 V,
  • pobór prądu – do 2 mA,
  • kąt działania – poniżej 15°,
  • odległość mierzona – od 2 cm do 500 cm,
  • rozdzielczość – 0,3 cm.


Fot. 15. Czujnik ultradźwiękowy HC-SR04

Fot. 15. Czujnik ultradźwiękowy HC-SR04

 

W praktyce dokładność czujnika nie przekracza 1 cm a zasięg jest mniejszy niż deklarowane 5 m i w środowisku pracy robota wynosi około 3 m. Kod programu obsługujący czujnik odległości reaguje zatrzymaniem robota w przypadku wykrycia przeszkody w odległości mniejszej niż 5 cm. Sekwencja przedstawiająca sposób działania i obsługi czujnika przedstawiono na rysunku 16.


Rys. 16. Sekwencja ilustrująca obsługę i działanie czujnika odległości HC-SR04

Rys. 16. Sekwencja ilustrująca obsługę i działanie czujnika odległości HC-SR04

 

Zgodnie z przedstawioną sekwencją pierwszym krokiem jest ustawienie stanu wysokiego na czas 10 ms na wejściu TRIGGER czujnika. Powoduje to inicjację czujnika oraz wysłanie w przestrzeń sygnału o częstotliwości 40 kHz. Następnie na wyjściu ECHO czujnika pojawia się stan wysoki o czasie trwania proporcjonalnym do zmierzonej odległości. Czas trwania stanu wysokiego jest zależny zgodnie ze wzorem przedstawionym na rysunku 16. Jeśli w bliskim otoczeniu czujnika nie ma żadnej przeszkody wówczas stan wysoki trwa 38 ms.

Kolejnym elementem zainstalowanym w robocie jest moduł Bluetooth BTM-222. Komunikacja z nim odbywa się przez magistralę USART mikrokontrolera STM32F051R8T6. Układ skonfigurowano w taki sposób aby dane przesyłane były z prędkością 19200 bitów na sekundę, słowo miało 8 bitów, 1 bit stopu bez kontroli parzystości ani przepływu danych. Moduł komunikacji bezprzewodowej Bluetooth BTM-222 został wykorzystany jako element bezprzewodowej transmisji danych służących do sterowania robotem. Inicjalizacja magistrali USART do obsługi modułu BTM-222 przedstawiona została na listingu 4.

List. 4. Inicjalizacja magistrali USART do obsługi modułu BTM-222

Moduł Bluetooth BTM-222, uruchomiony na płytce sterującej, działa w trybie slave. Oznacza to bardzo prostą obsługę po stronie mikrokontrolera oraz konieczność inicjalizacji połączenia przeprowadzaną po stronie urządzeń mobilnych. W aplikacji moduł został wykorzystany jako odbiornik danych przesyłanych z urządzeń inicjalizujących połączenie. Obsługa transmisji danych realizowana jest w ramach obsługi przerwania USART.

Program główny dla mikrokontrolera nie jest zbyt skomplikowany i sprowadza się do inicjalizacji wszystkich używanych peryferii i wykonywania zasadniczych zadań w nieskończonej pętli while oraz warunkowej obsługi przerwań. Na listingu 5 przedstawiony został fragment programu wykonywanego w ramach pętli while.

List. 5. Kod programu głównego wykonywanego w nieskończonej pętli while

Powyższy kod programu można opisać w następujący sposób: w pierwszym kroku działania programu odczytywane są stany czujników krańcowych, następnie obsługiwana jest jazda do przodu bądź do tyłu, kolejnym krokiem jest warunkowe wykonanie skrętu w lewo lub w prawo. Jeśli spełniony jest warunek (odpowiednia wartość zmiennej licznik_czegos) następuje ustawienie wyjść TRIGGER czujników i wykonanie pomiarów odległości od ewentualnych przeszkód. Zmienna licznik_czegos służy do określenia z jakim okresem ma odbywać się pomiar odległości od przeszkód. W końcowym etapie działania pętli sprawdzane są wyniki pomiaru odległości. Jeśli wynik pomiaru jest mniejszy od 5 cm, robot jest unieruchamiany.

 

URZĄDZENIA STERUJĄCE

Jednym ze sposobów sterowania robotem jest skorzystanie z przygotowanej aplikacji na komputery klasy PC. Oprogramowania to zostało przygotowane przy użyciu środowiska Microsoft Visual C# 2010. Do komunikacji komputera z robotem wykorzystywany jest wbudowany w komputer moduł Bluetooth, który tworzy bezprzewodowy most transmisji szeregowej. Pierwszym krokiem, by umożliwić kontrolowanie robota przy użyciu aplikacji, jest sparowanie urządzeń przy pomocy menadżera urządzeń Bluetooth po stronie komputera. Po włączeniu zasilania robota oraz dwukrotnym kliknięciu na ikonę o nazwie „ROBOT” następuje ustanowienie połączenia. Klikając prawym przyciskiem myszy na pozycji „ROBOT” i klikając „Szczegóły” należy zwrócić uwagę na poprawność numeru portu COM, który został przypisany urządzeniu w systemie komputerowym. Wygląd okna głównego programu przedstawiono na rysunku 17.

 

Rys. 17. Wygląd okna głównego aplikacji sterującej robotem R66

Rys. 17. Wygląd okna głównego aplikacji sterującej robotem R66

 

Okno programu składa się z dwóch elementów. Pierwszym z nich jest zakładka służąca do nawiązywania połączenia. Natomiast drugi element służy do sterowania robotem oraz wyświetlania informacji o pomiarach odległości z czujników ultradźwiękowych. Wszystkie możliwe operacje na robocie są wykonywane tylko w przypadku nawiązania połączenia poprzez wciśnięcie przycisku „POŁĄCZ”. Po inicjacji połączenia można usłyszeć dźwięk zablokowania silników układu napędowego (spowodowane jest to włączeniem hamulca magnetycznego) oraz zauważyć zapalenie informacyjnych diod LED.

Oprogramowanie graficzne do sterowania robotem zostało oparte na obsłudze zdarzeń takich jak kliknięcie myszą przez użytkownika w odpowiedni element, naciśnięcie klawiszy klawiatury. W przypadku sterowania klawiaturą należy pamiętać o przytrzymaniu klawisza ALT. Przytrzymując go można sterować robotem poprzez wciskanie kolejnych klawiszy z klawiatury: strzałka do przodu, strzałka do tyłu, strzałka w lewo, strzałka w prawo oraz enter jako rozkaz stop.

Sterowanie robotem może odbywać się również przy użyciu dedykowanego kontrolera. Pomysł na kontroler bazuje na bezprzewodowej kierownicy do gier wyścigowych.

Przy konstruowaniu kontrolera przyjęto następujące założenia:

  • własne źródło zasilania w postaci akumulatorów litowo-jonowymi,
  • dodanie przełącznika włączającego zasilanie,
  • możliwość łatwego podłączenia do ładowania,
  • odczyt analogowych parametrów sterujących: LEWO, PRAWO, GAZ, HAMULEC,
  • wykorzystanie transmisji bezprzewodowej w technologii Bluetooth,
  • wykorzystanie Arduino Uno,
  • przeróbka mechaniczna powinna zmieścić się w objętości posiadanej kierownicy.

Po określeniu założeń rozpoczęto pracę nad modyfikacją kontrolera gier. Pierwszym krokiem było wykonanie pomiarów napięć i analiza sygnałów z potencjalnie wykorzystywanych czujników i przycisków. W aplikacji kontrolera postanowiono wykorzystać układ Arduino Uno. Na rysunku 18 przedstawiono schemat ideowy kontrolera.


Rys. 18. Schemat ideowy układu kontrolera opartego o Arduino Uno

Rys. 18. Schemat ideowy układu kontrolera opartego o Arduino Uno

 

Oprogramowanie dla układu płytki zostało stworzone przy użyciu środowiska o nazwie Arduino. Poniżej przedstawiony został fragment kodu odpowiadający za określenie używanych wejść analogowych, zdefiniowanie zmiennych związanych z odczytem wartości oraz odczytujący wartości napięć na poszczególnych przetwornikach analogowo-cyfrowych.

List. 6. Definicja używanych wejść analogowych oraz ich odczyt

Również odczyt wejścia binarnego jest realizowany w bardzo prosty sposób. W przypadku napisanej aplikacji stan odczytywany jest dwukrotnie. Eliminuje to ewentualne zakłócenia mogące pojawić się w przypadku przycisków mechanicznych. Po włączeniu kierownicy najpierw należy wcisnąć przycisk MODE, umożliwiający pracę modułu Bluetooth poprzez nawiązanie połączenia. Wygląd gotowej kierownicy wraz z zaznaczonymi używanymi elementami przedstawiono na fotografii 19. Natomiast na listingu 7 przedstawiono kod odczytujący stan przycisku.

List. 7. Listing programu odczytującego stan przycisku

Fot. 19. Tył kierownicy z zaznaczonymi elementami: 1) gaz, 2) hamowanie/jazda w tył, 3) złącze dla modułu BTM-222, 4) włącznik kontrolera, 5) wejście do podłączenia ładowarki

Fot. 19. Tył kierownicy z zaznaczonymi elementami: 1) gaz, 2) hamowanie/jazda w tył, 3) złącze dla modułu BTM-222, 4) włącznik kontrolera, 5) wejście do podłączenia ładowarki

 

Robotem R66 można sterować na trzy różne sposoby. Pierwsze dwa to wyżej wspomniane: sterowanie przy użyciu aplikacji przeznaczonej dla komputera PC oraz sterowanie przy użyciu kontrolera w postaci kierownicy. Istnieje także trzeci sposób kontrolowania robota, również poprzez dedykowany kontroler, przy użyciu manipulatora w postaci rękawicy wyposażonej w akcelerometr. Aplikacja ta została zrealizowana na mikrokontrolerze ATmega32 z użyciem pakietu WinAVR oraz Programmers Notepad. Jako układ pomiarowy zastosowano akcelerometr MMA7361L firmy Freescale.

Głównym problemem sterowania przy pomocy pomiarów pochodzących z akcelerometru jest odpowiednia interpretacja otrzymywanych danych. Zastosowany akcelerometr informacje z pomiarów prezentuje w postaci napięcia na wyjściach układu. W związku z powyższym, w celu uzyskania cyfrowej informacji o stanie akcelerometru, należy użyć przetwornik analogowo-cyfrowy dostępny w mikrokontrolerze ATmega32.

Obsługę gestów rozpoczęto od pobrania i zbadania danych pomiarowych pochodzących z osi akcelerometru podczas wykonywania przykładowych gestów. Pierwszym badanym elementem działania układu przetwornika analogowo-cyfrowego było zarejestrowanie szumu pomiarowego pojawiającego się w stanie gdy nie są wykonywane żadne gesty. Wyniki pomiarów przedstawiono na rysunku 20. W przypadku gdy nie są wykonywane żadne gesty na wyjściach akcelerometru można zaobserwować wahania napięcia w zakresie od 1,79 V do 1,83 V.


Rys. 20. Zarejestrowany szum pomiarowy

Rys. 20. Zarejestrowany szum pomiarowy

 

Podczas zwiększania kąta między poziomą pozycją rękawicy a aktualną pozycją zauważono wzrost napięcia do wartości około 2,6V. Podczas projektowania oprogramowania dla rękawicy wykorzystano jedynie zakres do wartości 2,22 V. Jest to spowodowane nienaturalnym i bolesnym ugięciem dłoni powyżej tego zakresu Na rysunkach 21 i 22 przedstawiono zmiany napięcia dla kanału Y podczas zmiany położenia do przodu i do tyłu. Podczas wykonywania ruchu do tyłu napięcie maleje do wartości około 0,97 V.


Rys. 21. Wykres przedstawiający zmianę napięcia na osi Y podczas ruchu rękawicy do przodu

Rys. 21. Wykres przedstawiający zmianę napięcia na osi Y podczas ruchu rękawicy do przodu


Rys. 22. Wykres przedstawiający zmianę napięcia na osi Y podczas ruchu rękawicy do tyłu

Rys. 22. Wykres przedstawiający zmianę napięcia na osi Y podczas ruchu rękawicy do tyłu

 

Oprogramowanie rękawicy po skompilowaniu zajmuje 2788 bajtów, co stanowi 8,5% całej pamięci mikrokontrolera ATmega32. Poniżej przedstawiono ważniejsze fragmenty programu wraz z komentarzami. W celu prawidłowej komunikacji z robotem, rękawica musi automatycznie łączyć się z modułem Bluetooth robota R66. Pierwszą sprawą jest prawidłowa implementacja komunikacji szeregowej. Poniższy kod przedstawia funkcję, odpowiedzialną za inicjację układu USART.

List. 8. Inicjalizacja USART mikrokontrolera ATmega32 obsługującego rękawicę

Funkcja ta określa jakie linie będą wykorzystywane w transmisji, tryb działania magistrali oraz pośrednio określa prędkość transmisji (baud rate – liczba bitów na sekundę). W projekcie płytki rękawicy zastosowano oscylator kwarcowy o częstotliwości 16 MHz. W celu uzyskania transmisji z prędkością 19200 bps należy do rejestru UBRR wpisać wartość 51, która zapewni dokładność na poziomie 0,2 %. Sama obsługa transmisji realizowana jest w oparciu o obsługę przerwań wywoływanych przez kontroler USART.

Jak zostało zaznaczone wykorzystany akcelerometr na wyjściach podaje odpowiednie wartości napięcia prezentujące wychylenie. W związku z tym należało wykorzystać dostępny w mikrokontrolerze ATmega32 przetwornik analogowo-cyfrowy. Jego konfiguracja jest bardzo prosta i sprowadza się do ustawienia odpowiednich bitów jednego rejestru – ADCSRA. Kod programu poniżej przedstawia konfigurację przetwornika.

List. 9. Polecenie konfiguracji przetwornika A/C w ATmega32

Konfiguracja przetwornika analogowo-cyfrowego i resetu ADCSRA:

  • ADEN –uruchomienie układu A/C,
  • ADIE – wywołanie przerwania po każdorazowym zakończeniu przetwarzania,
  • ADATE – ustawia ciągły tryb działania przetwarzania,
  • ADCS – uruchamia pierwszą konwersję danych pomiarowych,
  • ADPSx – powoduję wybranie dzielnika częstotliwości zegara taktującego (przez ustawienie stanów wysokich wszystkich bitów ADPSx wybrano dzielnik równy 128).

Obsługa przerwania wywołanego po zakończeniu procesu konwersji przedstawiono w poniższym fragmencie kodu źródłowego.

List. 10. Kod przerwania wykonywany po zakończeniu konwersji przez przetwornik analogowo-cyfrowy

Wartość odczytana z konwersji stanowi stosunek napięcia na wejściu do przetwornika analogowo-cyfrowego do napięcia referencyjnego. Powoduje to, że rzeczywistą wartość napięcia uzyskuje się ze po obliczeniach zgodnych ze wzorem:

 

Odczytana wartość napięcia zapisywana jest w zmiennej fconvResult. Następnie, jeśli przyciśnięto odpowiedni przycisk, następuje obsługa wyniku. Przycisk ten odpowiada za wybór kierunku działania, w której aktualnie przeprowadzana jest praca (przód/tył lub lewo/prawo). Na listingu 11 przedstawiono fragment kodu odpowiedzialny za interpretowanie otrzymanych wyników z przetwornika analogowo-cyfrowego.

List. 11. Kod programu interpretujący otrzymane wyniki z przetwornika analogowo-cyfrowego

W zależności od ustawionych bitów multipleksera przetwornika analogowo-cyfrowego wynik zostaje zapisany do tablicy fMeasSensor pod odpowiedni indeks. Rejestr odpowiedzialny za wybrany kanał multipleksera nosi nazwę ADMUX. Pierwszy kanał odpowiada pomiarowi z osi X, drugi z osi Y. W zależności od napięcia danej osi, następuje wysłanie stosownego komunikatu z trybem jazdy oraz zadaną prędkością zależną od kąta pochylenia rękawicy.

Na rysunku 23 przedstawiono zależność odczytanej wartości napięcia akcelerometru z osi X i Y w stosunku do zadanego ruchu jaki ma zostać wykonany przez robot R66.


Rys. 23. Zależności napięcia w stosunku do zadanego ruchu robota R66 jaki ma zostać wykonany

Rys. 23. Zależności napięcia w stosunku do zadanego ruchu robota R66 jaki ma zostać wykonany

 

Zauważyć można, że zrezygnowano z jednoczesnej jazdy do przodu/tyłu oraz wykonywania manewru skręcania. Sama pętla główna programu jest bardzo prosta i sprowadza się do inicjalizacji portów, konfiguracji przerwań oraz cyklicznego sprawdzania stanu przycisków.

Rękawica stanowi innowacyjny sposób sterowania robotami mobilnymi, ukazując silny trend integracji elektroniki i odzieży codziennej. Po odpowiednim zamocowaniu wszystkich elementów składowych, rękawicę założono na dłoń i rozpoczęto testy oprogramowania. Na fotografii 24 przedstawiono stworzony kontroler.


Fot. 24. Kontroler sterujący robotem R66 w postaci rękawicy

Fot. 24. Kontroler sterujący robotem R66 w postaci rękawicy

 

W zależności od sposobu ułożenia dłoni (akcelerometru) robot wykonuje ruch, z prędkością tym większą, im większy jest kąt wychylenia. Układ pomiarowy jest bardzo szybki i cechuje go duża czułość. Już delikatne wahania powodują zmianę prędkości jazdy. Dane z rozkazami wysyłane są od razu po zakończeniu obsługi przetwornika analogowo-cyfrowego układu ATmega32. Lekkie kołysanie rękawicą w lewo i prawo powodują delikatne ruchu układu skrętnego robota w tych kierunkach. Tak jak założono, maksymalny kąt związany z największa zadaną prędkością nie powoduje uczucia dyskomfortu dla użytkownika.

 

PODSUMOWANIE

Robot R66 jest nietypową konstrukcją. Posiada trzy osie o dużej swobodzie ruchu. Podczas jego budowy postawiono na wypróbowane sposoby mechanicznej obróbki części, ich połączenia oraz zastosowano stosowne zabezpieczenia. Robot zasilany jest akumulatorami litowo-jonowymi o łącznym napięciu 27 VDC. Baterie starczają na około 6 godzin ciągłej pracy robota.

Elektronika robota bazuje na zestawie STM32F0DISCOVERY. Pod ten układ zaprojektowana została płyta główna, na której zainstalowano wszelkie elementy wykonawcze takie jak mostki scalone L298, oraz złącza ułatwiające połączenie z zewnętrznymi elementami robota. Zagadnienie komunikacji zostało rozwiązane przy pomocy technologii Bluetooth.

W projekcie zostały zaproponowane trzy sposoby sterowania robotem: kierownica stanowiąca połączenie kontrolera do gry z praktycznym urządzeniem sterującym, rękawica przedstawiająca możliwości połączenia ubioru z elektronicznym urządzeniem sterującym oraz aplikacja przeznaczona dla komputera PC, która umożliwia również wyświetlanie danych wysyłanych przez robota.

Łukasz Przystalski

Do pobrania

Autor: