Mały robot sterowany przez Bluetooth – micro:bit w akcji

Od pewnego czasu bardzo mi się podoba Micro:Bit. Od momentu, kiedy mogłem samemu coś na nim zrobić bardzo polubiłem tą platformę. Jeśli nie wiesz zupełnie o co chodzi to może zobacz to krótkie wideo, które nagrałem:

Płytka Micro:Bit oferuje dwa podstawowe sposoby programowania – Python oraz składanie programu w sposób graficzny z dostępnych komponentów (kto widział już Scratcha ten dokładnie wie o co chodzi).

Zajmiemy się dziś tym drugim, bo wydaje się to doskonałym rozwiązaniem, gdy chcesz przedstawić Micro:Bita młodszym użytkownikom. Jednocześnie system ten jest łatwy i zrozumiały jak i dopracowany. Korzystając z przeglądarki składamy elementy blokowe a gdy program jest gotowy, to ściągamy skompilowany plik .hex. Wystarczy teraz podłączyć Micro:Bit do komputera i wgrać plik hex na niego (tak jak się wgrywa pliki na pendrive), to cała filozofia.

Dobra, zrobimy robota, którego można sterować przez Bluetooth. Będzie to wyglądało mniej więcej tak:

 

Dobra, co potrzebujemy? Micro:bit, sterownik silników moto:bit i jakaś platforma robota, tutaj jest to Magician Chassis ale może to być dowolna, dwusilnikowa platforma. Do sterowania potrzebny jest telefon z Bluetooth 4.0 pod kontrolą Androida.

Robocik po zmontowaniu

Gotowy program jest do zobaczenia tutaj: https://makecode.microbit.org/_arAAUz7gMi1b Tam możecie użyć opcji „Download” by ściągnąć plik .hex.

Program dla micro:bit

Jak wygląda program? Ano tak:

Jeśli nawet wcześniej nie widziałeś Scratcha, to chyba łatwo zrozumieć o co chodzi. By jednak nie zostawiać Was bez pomocy omówmy szczegóły.

Programowanie micro:bita oparte jest o reakcję na zdarzenia. Nie ma tutaj jak w Arduino sekwencyjnego przetwarzania, można po prostu stworzyć nowy blok reagujący na jakieś zdarzenie. Tak mamy np bloki on gamepad button A down – kod umieszczony wewnątrz jest wywoływany gdy na gamepadzie (skąd go wziąć o tym za chwilę) naciśnięty zostanie przycisk A. Miejsce w którym ten blok leży nie ma znaczenia. Takie podejście wydaje się bardziej intuicyjne dla osób które wcześniej nie miały doświadczenia z programowaniem.

Tutaj nie jesteś narażony na problem, który trapi wielu początkujących użytkowników Arduino. Używają oni delay by opóźnić jakąś akcję i spodziewają się, że Arduino będzie jednocześnie reagować na inne zdarzenia. Tutaj jeśli użyjesz pause w jednym bloku, nie wpłynie to na działanie innych bloków.

Więc mamy bloki on gamepad button. Ponadto pojawiają się on start, forever, on bluetooth connected/disconnected. On start wykonywane jest raz podczas startu (jak setup w Arduino). Kod w bloku forver jest wykonywany ciągle, zaś on bluetooth connected/disconnected wykonywane jest po podłączeniu urządzenia BT.

Kontrola micro:bit przez Bluetooth

Tym urządzeniem jest u nas telefon, z Androidem a na nim aplikacja micro:bit Blue. Po zainstalowaniu i wgraniu kodu na micro:bit (z użyciem kabla USB) trzeba za każdym sparować na nowo urządzenia. Na telefonie usuwamy stare sparowanie (zapominamy urządzenie) następnie na micro:bit wciskamy oba przyciski (A i B) oraz wciskamy reset. Puszczamy reset ale trzymamy dalej A i B aż na wyświetlaczu zacznie się przewijać napis Pairing. Wtedy można sparować urządzenia.

Gdy już są, w aplikacji łączymy się z naszym microbitem, pojawi się lista dostępnych trybów pracy wybieramy Dual D-Pad Controller:

 

Na ekranie pojawią się przyciski:

Kontrolera z lewej ma przyciski oznaczone A, B, C i D – odpowiednio góra, dół, lewo, prawo. Z prawej – 1, 2, 3, 4 kolejność ta sama.

Program dla micro:bit kawałek po kawałku

Wiedząc który przycisk jest który – możemy omówić dokładniej kod.

Na początku ustaw dwie zmienne direction_delta oraz throttle na zero. Pierwsza określa różnicę w pracy silników by uzyskać skręcanie a druga jak szybko mają się obracać silniki (i w którą stronę).  Następnie wyświetlamy symbol, by było widać, że czekamy na podłączenie.

Tutaj, gdy podłączy się nasz telefon to sygnalizujemy buźką na diodach i włączamy silniki przy podłączeniu kontrolera lub wyłączamy przy odłączeniu.

Na naciśnięcie przycisków A i B (góra dół lewego pada) zwiększ ciąg o 7 pkt procentowych lub zmniejsz.

Tu zmieniamy zmienną wpływającą na kierunek jazdy. Sterujemy okrągłymi przyciskami prawo/lewo na prawym padzie. Do tego zostały komunikaty które używałem by określić który przycisk jest który, bo nie mogłem tego znaleźć w dokumentacji. Jak już skręcimy mocno to przydaje się reset do jazdy w miarę prosto:

Po naciśnięciu górnego okrągłego przycisku, różnica między pracą lewego i prawego silnika zostanie skasowana do zera.

Zostaje część sterująca silnikami:

Elementy biblioteki moto:bit przyjmują trzy argumenty – kierunek obrotów, który silnik i ile procent ciągu. Ciekawostka jest taka, że przy ujemnym ciągu np -45 silnik będzie pracował z mocą 45% ale do przodu. Dlatego jest taka konstrukcja z if. Chyba czytelna.

Silniki są wysterowane z zadaną mocą a direction_delta służy do różnicowania ich pracy. Dzięki temu można skręcać robotem.

Jak widać micro:bit to naprawdę fajna platforma. Przygotujcie, się na to, że  w najbliższym czasie tuta pojawi się znacznie więcej wpisów o tej platformie. W tym projekcie użyliśmy: