Zdalnie sterowany robot (via Android) rysujący na zestawie STM32F0DISCOVERY (Cortex-M0)

W niniejszym artykule przedstawiona została aplikacja ruchomej platformy rysującej, kontrolowana przy użyciu zewnętrznego programu zainstalowanego w telefonie komórkowym lub tablecie wyposażonym w system Android. Jako układ nadzorujący pracę robota zastosowano mikrokontroler STM32F051R8T6 w postaci zestawu uruchomieniowego STM32F0DISCOVERY.

Komunikacja z robotem realizowana jest jako szeregowa transmisja poleceń, wzorowanych na komendach języka LOGO, z użyciem technologii Bluetooth. Polecenia te mogą być wysyłane z dedykowanej aplikacji LOGO-Bot przeznaczonej dla systemu Android lub z wykorzystaniem dowolnego terminala łączącego się z robotem przez moduł Bluetooth. Na poniższym rysunku przedstawiony został omawiany robot.

 

Fot. 1. Wygląd robota rysującego

Fot. 1. Wygląd robota rysującego

 

Dodatkowo, w ramach niniejszego projektu, przygotowana została druga aplikacja – STERsil – umożliwiająca sterowanie pojedynczym silnikiem krokowym, podłączonym poprzez układ sterujący (np. układ ULN2003) do zestawu uruchomieniowego STM32F0DISCOVERY. Aplikację tą można polecić osobom, które nie chcą budować pełnego układu mechanicznego robota, ale są zainteresowane przetestowaniem aplikacji i oprogramowania dołączonego do projektu.

Aplikacja powstała z wykorzystaniem ogólnodostępnych przykładów dla poszczególnych elementów tworzących całość projektu. Przy tworzeniu projektu skorzystano między innymi z przykładowego projektu dla zestawu uruchomieniowego STM32F0DISCOVERY oraz porad i przykładów dotyczących programowania z wykorzystaniem języka Basic4android.

Schemat przedstawiający układ elektroniczny stworzonej aplikacji został przedstawiony na rysunku 2. Układ elektroniczny, poza zestawem uruchomieniowym STM32F0DISCOVERY, składa się z modułu Bluetooth, przetwornika piezo, stabilizatora napięcia oraz dwóch układów ULN2003 służących do sterowania silnikami unipolarnymi. Do złącza ZLPIS podłączony jest solenoid, który kontroluje pracę pisaka.

 

Rys. 2 Schemat układu elektronicznego

Rys. 2 Schemat układu elektronicznego

 

Bardzo ważnym elementem jest moduł Bluetooth realizujący proces bezprzewodowej komunikacji z aplikacją sterującą. Jako moduł Bluetooth został użyty moduł HC-05, który pełni funkcję portu szeregowego transmitującego dane. Moduł domyślnie działa jako element slave i nie wymaga przeprowadzania dodatkowej konfiguracji. Domyślne parametry transmisji są następujące:

  • prędkość transmisji – 9600 b/s,
  • liczba bitów danych – 8 bitów,
  • liczba bitów stop – 1 bit,
  • parzystość – wyłączona.

Na rysunkach poniżej przedstawiono blok modułu Bluetooth HC-05 z opisanymi wejściami i wyjściami sygnałowymi oraz moduł przygotowany do montażu na złączu o rastrze 2,54 mm.

 

Rys. 3. Schemat blokowy modułu Bluetooth HC-05

Rys. 3. Schemat blokowy modułu Bluetooth HC-05

 

Fot. 4. Moduł Bluetooth HC-05 przystosowany do zamocowania w złączu o rastrze 2,54 mm

Fot. 4. Moduł Bluetooth HC-05 przystosowany do zamocowania w złączu o rastrze 2,54 mm

 

Do zestawu STM32F0DISCOVERY fabrycznie dołączono uniwersalną płytkę umożliwiającą szybkie przygotowanie układu elektronicznego. W poniższym projekcie została ona wykorzystana jako baza do przygotowania układu elektronicznego sterującego robotem. Na fotografii 5 przedstawiono zmontowany układ.

 

 Fot. 5. Zmontowany i zlutowany układ elektroniczny

Fot. 5. Zmontowany i zlutowany układ elektroniczny

 

Działanie programu stworzonego dla mikrokontrolera, kontrolującego działanie robota, sprowadza się do odbierania poleceń, ich interpretowania oraz odpowiedniego sterowania silnikami na podstawie wcześniej odebranych poleceń. Program automatycznie wszystkie odebrane polecenia odsyła realizując funkcję echa przesłanych danych. W przypadku wprowadzenia polecenia błędnego układ przekaże informację o braku rozpoznania polecenia. Przy wysyłaniu ciągu komend należy pamiętać, że ciąg rozkazów nie może przekroczyć jednorazowo 1000 znaków. Wynika to z przyjętego ograniczenia dotyczącego bufora. Przykładowe polecenia mają następującą postać:

  • a=10;pd;dp25;lea;dt123;
  • pi;
  • ko25;
  • me1;

Polecenia mogą być przekazywane pojedynczo lub w ciągu. Należy przy tym pamiętać o rozdzieleniu kolejnych poleceń z parametrami oraz zakończeniu linii ze zbiorem poleceń znakiem średnika. Poniżej przedstawiono zestawienie poleceń interpretowanych przez mikrokontroler.

Zmienne a i b:

  • a=[parametr]; – operacja przypisania wartości zmiennej,
  • a+[parametr]; – operacja sumy arytmetycznej,
  • a*[parametr]; – operacja iloczynu arytmetycznego,
  • b=[parametr]; – operacja przypisania wartości zmiennej,
  • b*[parametr]; – operacja sumy arytmetycznej,
  • b+[parametr]; – operacja iloczynu arytmetycznego.

Polecenia:

  • le[parametr]; – w lewo,
  • pr[parametr]; – w prawo,
  • dt[parametr]; – do tyłu,
  • dp[parametr]; – do przodu,
  • pa[parametr]; – pauza,
  • to[parametr]; – ton,
  • me[parametr]; – melodyjka,
  • ol[parametr]; – silnik odlicz w lewo,
  • op[parametr]; – silnik odlicz w prawo,
  • sl – silnik stale w lewo (65000 kroków, bez czekania na stop),
  • sp – silnik stale w prawo (65000 kroków, bez czekania na stop),
  • ra[parametr]; – pętla a,
  • rb[parametr]; – pętla b,
  • rc[parametr]; – pętla c,
  • na – kolejne wywołanie pętli a,
  • nb – kolejne wywołanie pętli b,
  • nc – kolejne wywołanie pętli c,
  • pi – pip,
  • pg – pisak do góry,
  • pd – pisak w dół,
  • pp –przełącz/zmień stan pisaka.

Funkcje:

  • ko[parametr]; – rysuje koło,
  • kw[parametr]; – rysuje kwadrat,
  • tr[parametr]; – rysuje trójkąt.

Dane/Zmienne:

  • nnn; nn; n; – liczba 3,2 lub 1 cyfrowa,
  • a; b; – zmienne programowe,
  • r – zmienna rnd – niezrealizowane!!!

Bezpośrednie:

  • st – stop,
  • ok – odesłanie OK.,
  • ? – jesteś?  tel->ok; stm->dane? –  niezrealizowane!!!

Błędy (ex, gdzie x numer błędu):

  • e1 – program ponad 1000 bajtów
  • e6 – rozkaz ponad 5 znaków
  • e8 – złe dane

Parametry:

  • nk[parametr]; – nastawa kroków na stopień,
  • np[parametr]; – nastawa prędkości,
  • uk; – ustawia kro,ki
  • up; – ustawia pół kroki,
  • uf; – ustawia falę,
  • uz; – ustawia stop z zasilaniem,
  • ub; – ustawia stop bez zasilania,
  • wr; – echo wykonywanych rozkazów (0 – wyłącz, <>0 – włącz).

 

Do dyspozycji tworzonych mini programów są dwie wirtualne zmienne a i b, którym można przypisywać wartości, wykonywać na nich działania arytmetyczne mnożenia i dodawania z wykorzystaniem liczb lub zmiennych. Ponadto do dyspozycji są typowe komendy LOGO służące do sterowania obrotem w lewo lub w prawo, wykonujące ruch do przodu lub do tyłu, realizujące pętle lub sterujące pisakiem. W układzie dodatkowo zdefiniowano trzy funkcje rysujące zadane figury: koło, kwadrat lub trójkąt. Wartości podawane jako parametry – [parametr] – mogą być liczbą trzycyfrową (nnn), dwucyfrową (nn), jednocyfrową (n) lub mogą być zmienną a lub b.

Poza podstawowymi poleceniami sterującymi silnikami, których głównym przeznaczeniem jest rysowanie, dostępne są też inne polecenia. Komendy te służą między innymi do ustalania prędkości i sposobu sterowania silnikami oraz generowania dźwięku lub odegrania zapisanej w pamięci prostej melodii. Należy zaznaczyć, że program dla mikrokontrolera STM32F051R8T6 jest skonstruowany w sposób umożliwiający sterowanie z pominięciem modułu Bluetooth – bezpośrednio przez port szeregowy z zachowaniem odpowiednich wartości napięć.

W programie głównym wykonywane jest ustawianie parametrów i analiza przesyłanych rozkazów i danych. Natomiast algorytmy kontrolujące działanie silników i generujące dźwięki wykonywane są w ramach obsługi przerwania licznika SysTick. Przerwanie od licznika SysTick występuje 71642 razy na sekundę. Dane określające zadania do wykonania w ramach obsługi przerwania przekazywane są przez zmienne globalne.

 

Konstrukcja mechaniczna pojazdu

Konstrukcja mimo swojej małej złożoności pozwala osiągnąć zadowalającą precyzję ruchu i duży moment obrotowy. Zalety te uzyskano dzięki zastosowaniu przełożeń mechanicznych. Przy konstruowaniu mechaniki napędowej należy zadbać o dobór dwóch jednakowych unipolarnych silników krokowych i zestawu zębatek na koła. Części te pozyskać można na przykład ze starych drukarek. W modelu zastosowano dwa silniki na napięcie 24 V, o oporności uzwojeń 50 Ω.

Podstawą konstrukcji są dwa kątowniki, które są dostępne w sklepach z artykułami metalowymi. Na każdym z kątowników jest symetrycznie zamontowany silnik i odpowiednio umieszczona większa zębatka. Całość jest ustawiona w taki sposób, że zębatka na wale silnika napędza dużą zębatkę, do której dokręcone jest koło. Na koła nałożone są pierścienie o-ring, które spełniają rolę opon i zapobiegają wpadaniu kół w poślizg. Trzeci punkt podparcia stanowi plastikowa kula pozyskana z kosmetyku. Jest to bardzo proste rozwiązanie, które znakomicie się sprawdza. Przy montażu należy zwrócić szczególną uwagę na symetryczne ustawienie kół. Osie powinny być umiejscowione na jednej prostej, a płaszczyzny kół powinny być równoległe względem siebie. Złącza służące do podłączenia silników zostały tak skonstruowane, że obrócenie złącza o 180 stopni spowoduje kręcenie się silnika w odwrotną stronę.

W celu zapewniania poprawnego wykonywania zadawanych poleceń i wykonywanych ruchów przez robota należy odpowiednio skonfigurować liczbę kroków silnika przypadającą na jeden obrót. Wartość tą można dobrać doświadczalnie lub odczytać z parametrów silnika. Uzyskaną wartość należy podać jako parametr polecenia nk, służącego właśnie do określenia liczby kroków na jeden obrót. W przypadku poprawnie dobranej wartości program dla polecenia LEWO #180; LEWO #180; powinien obrócić robot dokładnie o 360°.

 

Program Logo-Bot dla systemu Android

W tworzeniu programu dla systemu Android, sterującego robotem, natrafiono na środowisko programistyczne Basic4android. Przy pisaniu programu z wykorzystaniem powyższego środowiska osoba mająca już niewielkie doświadczenie w pisaniu programów w Visual Basic poradzi sobie bez większych problemów. Na rysunkach 6, 7 i 8 przedstawiono zrzuty ekranu przedstawiające stworzoną aplikację.

 

Rys. 6. Zrzut ekranu z aplikacji LOGO-Bot – pierwszy zestaw klawiszy

Rys. 6. Zrzut ekranu z aplikacji LOGO-Bot – pierwszy zestaw klawiszy

 

Rys. 7. Zrzut ekranu z aplikacji LOGO-Bot podczas wyboru urządzenia

Rys. 7. Zrzut ekranu z aplikacji LOGO-Bot podczas wyboru urządzenia

 

Rys. 8. Zrzut ekranu z aplikacji LOGO-Bot – drugi zestaw klawiszy

Rys. 8. Zrzut ekranu z aplikacji LOGO-Bot – drugi zestaw klawiszy

 

Na rysunku 6 przedstawiono aplikację podczas normalnej pracy. Kolejny rysunek zawiera zrzut aplikacji podczas wyboru urządzenia i nawiązywania połączenia przez Bluetooth. Przy połączeniach z wykorzystaniem technologii Bluetooth należy pamiętać o wcześniejszym sparowaniu telefonu (bądź innego urządzenia z systemem Android) z modułem Bluetooth zamontowanym po stronie robota.

Po uzyskaniu połączenia przez program można edytować polecenia sterujące zgodnie z opisanymi zasadami. Aplikacja została wyposażona w interfejs klawiaturowy służący do bezpośredniego wprowadzania wybranej komendy po naciśnięciu zadanego klawisza. W celu przesłania przygotowanych poleceń, przeznaczonych do wykonania przez robota, należy wcisnąć klawisz WYŚLIJ. Dla przejrzystości dostępnych poleceń klawisze i przypisane pod nie funkcje rozdzielono na dwa ekrany. Przełączanie następuje przy użyciu klawisza DO INNYCH FUNKCJI, przy wciśnięciu klawisza DO FUNKCJI PODSTAWOWYCH następuje powrót do okna pierwszego aplikacji. Średnik po poleceniu wprowadzany jest przy użyciu klawisza OK;. Polecenia niewymagające podania parametru automatycznie uzupełniane są o średnik. Klawisz DEL służy do usuwania ostatnio wprowadzonych poleceń, dłuższe przytrzymanie spowoduje skasowanie całej zawartości pola edycyjnego.

Należy zaznaczyć, że na chwilę obecną program nie realizuje wszystkich funkcji. Nie działa między innymi funkcja RYSUJ, która w zamyśle ma otwierać nowe okno prezentujące rysunek stworzony zgodnie z wprowadzonymi poleceniami, umożliwiając obejrzenie końcowego efektu przed wysłaniem polecenia do robota. Nie działa też kilka funkcji z drugiej części klawiatury, które na chwilę obecną zamiast realizować zadaną operację, wypisują jedynie kod operacji na panelu edycyjnym.

W załącznikach umieszczone są pliki źródłowe programów. Stworzone aplikacje wykorzystują biblioteki, które nie są dostępne w testowej, darmowej wersji kompilatora programu Basic4android. W związku z powyższym załączone są także pliki w wersji instalacyjnej na systemy Android. Dodatkowo w załącznikach dostępna jest aplikacja umożliwiającą testowe sterowanie silnikiem krokowym. Widok interfejsu aplikacji przedstawiony jest na rysunku 9.

 

Rys. 9. Zrzut ekranu aplikacji STERsil

Rys. 9. Zrzut ekranu aplikacji STERsil

 

Przygotowane aplikacje zostały przetestowane na telefonach z systemem Android 4 (Galaxy S2 i Galaxy S3) oraz na telefonie z systemem w wersji 2.3. Programy powinny pracować na systemach od wersji 2.2 w górę. Podczas testów pojawił się tylko jeden problem z wielkością czcionki na klawiszach aplikacji. Rozwiązaniem tej usterki jest zmiana wielkości czcionki w ustawieniach systemowych.

Do pobrania

Autor: