Nauka programowania bywa dla początkujących abstrakcyjna, dopóki kod nie zacznie sterować czymś widocznym: kołami, diodami, czujnikami albo dźwiękiem. Bit Bot rozwiązuje ten problem w prosty sposób. To mały robot edukacyjny dla BBC micro:bit, który pozwala szybko przejść od pierwszych bloków w MakeCode do realnego sterowania sprzętem, a później także do programowania w MicroPythonie.
W tym artykule porządkujemy najważniejsze informacje o Bit Bocie: co znajduje się na płytce, jak przygotować robota do pracy oraz jak sterować silnikami, diodami FireLED, czujnikami i brzęczykiem z poziomu MakeCode oraz Pythona.
Co to jest Bit Bot?
Bit Bot, często zapisywany także jako Bit:Bot, to gotowa platforma robota dla BBC micro:bit. W podstawowej konfiguracji nie wymaga lutowania ani budowania układu od zera: użytkownik wkłada micro:bita do złącza krawędziowego, podłącza zasilanie bateryjne i może zacząć pisać program. Do prostych ćwiczeń wystarcza środowisko Microsoft MakeCode, a bardziej zaawansowane projekty można przygotować w MicroPythonie.

GiggleBot, robot o konstrukcji podobnej do Bit Bota.
Źródło: Wikimedia Commons.
Cechy robota Bit Bot
Bit Bot łączy na jednej płytce elementy potrzebne do nauki podstaw robotyki mobilnej. Typowa wersja robota oferuje:
Dwa mikrosilniki przekładniowe z programową kontrolą prędkości i kierunku jazdy.
Dwa tylne koła z gumowymi oponami zapewniającymi przyczepność.
Przednie kółko podporowe, najczęściej w formie kulki jezdnej.
12 adresowalnych diod RGB FireLED, po sześć z każdej strony robota.
Dwa analogowe czujniki światła: lewy i prawy.
Dwa cyfrowe czujniki podążania za linią.
Brzęczyk do prostych sygnałów dźwiękowych i efektów audio.
Koszyk na trzy baterie AA, zwykle z wyłącznikiem zasilania.
Złącze krawędziowe do podłączenia płytki BBC micro:bit.

BBC micro:bit.
Źródło: Wikimedia Commons.
Przednie złącza rozszerzeń do akcesoriów, takich jak chwytak Talon lub ultradźwiękowy czujnik odległości.
Złącza rozszerzeń do dodatkowych diod, serw lub modułów zgodnych z daną wersją robota.
Montaż Bit Bota
Bit Bot jest dostarczany jako robot niemal gotowy do pracy. Zakres montażu zależy od wersji, ale zwykle sprowadza się do kilku prostych czynności.
1: Sprawdź, czy w zestawie są wszystkie wymagane elementy: podwozie robota, koła, element podporowy, koszyk baterii i śruby.
2: Zamocuj przednie kółko podporowe, jeśli nie zostało już zainstalowane fabrycznie.
3: Przykręć koszyk baterii do mosiężnych dystansów albo użyj fabrycznie zamontowanego uchwytu, jeśli występuje w Twojej wersji.
4: Załóż tylne koła z gumowymi oponami na osie silników.
5: Wsuń BBC micro:bit w złącze krawędziowe zgodnie z orientacją zalecaną dla konkretnego modelu, zwykle z diodami LED i przyciskami dostępnymi od góry lub od przodu.
Programowanie Bit Bota w MakeCode
Microsoft MakeCode to najprostszy sposób na rozpoczęcie pracy z Bit Botem. Otwórz edytor MakeCode dla micro:bita, utwórz nowy projekt, a następnie przejdź do ustawień, sekcji Advanced i pozycji Extensions. Wyszukaj rozszerzenie BitBot. Po dodaniu rozszerzenia w menu pojawią się bloki do sterowania robotem.

W sekcji modelu można zostawić automatyczne wykrywanie albo wymusić konkretną wersję robota, na przykład Classic, XL lub PRO. Ma to znaczenie, ponieważ poszczególne wersje korzystają z innych pinów dla silników i czujników.

Sterowanie silnikami
W kategorii silników znajdują się bloki do jazdy do przodu, cofania, skręcania i obracania robota w miejscu. W typowych blokach MakeCode prędkość podaje się w zakresie od 0 do 100.

Dostępny jest również blok zatrzymania, z hamowaniem lub swobodnym wybiegiem, oraz bloki do niezależnego sterowania lewym i prawym silnikiem. Warto pamiętać, że małe silniki DC nie zawsze obracają się z identyczną prędkością przy tej samej wartości sterowania. Jeśli robot ściąga w jedną stronę, w modelach obsługujących korekcję można dodać niewielki bias kierunku.
Sterowanie diodami FireLED
Bit Bot ma 12 adresowalnych diod FireLED. Każdą z nich można ustawić osobno, korzystając z koloru zapisanego jako RGB. Domyślnie diody aktualizują się po każdej zmianie, co jest wygodne w prostych ćwiczeniach, ale przy animacjach lepiej przełączyć je w tryb ręcznej aktualizacji i wyświetlić wszystkie zmiany naraz.

Można sterować pojedynczymi diodami o indeksach od 0 do 11 albo ustawić ten sam kolor dla wszystkich naraz. Rozszerzenie udostępnia też funkcje czyszczenia, tęczy, przesuwania i obracania wzoru świetlnego o jedną pozycję.
Zaawansowane ustawienia diod FireLED
W sekcji zaawansowanej można ustawić jasność diod. Domyślna wartość w rozszerzeniu wynosi 40, a maksymalna 255. Przy wysokiej jasności rośnie pobór prądu i nie należy patrzeć bezpośrednio w diody z małej odległości. Jeśli używasz trybu ręcznej aktualizacji, po zmianie kolorów trzeba wywołać blok pokazujący zmiany LED.
Dodatkowe bloki pozwalają zbudować kolor z osobnych składowych czerwonej, zielonej i niebieskiej. Każda z nich ma zakres od 0 do 255, a wynik jest liczbą reprezentującą kolor RGB.

Bit Bot: wejścia i wyjścia (brzęczyk, czujniki, serwa)
Ostatnia grupa bloków dotyczy wejść i wyjść: brzęczyka, czujnika ultradźwiękowego, czujników linii, czujników światła oraz serw. Brzęczyk można włączać i wyłączać albo wykorzystać razem ze standardowymi blokami muzycznymi MakeCode, aby robot sygnalizował zdarzenia dźwiękiem.

Czujnik ultradźwiękowy mierzy odległość od najbliższej przeszkody. W zależności od bloku wynik można odczytać w centymetrach, calach albo jako czas impulsu. Czujniki linii zwracają wartości cyfrowe: zwykle 0 oznacza brak czarnej linii pod czujnikiem, a 1 wykrycie czarnej linii.
Lewy i prawy czujnik światła są analogowe. Zwracają wartość od 0 do 1023, gdzie wyższa liczba oznacza silniejsze oświetlenie.

Obsługa standardowego serwa zależy od modelu robota, natomiast chwytak Talon działa jak specjalizowany mechanizm serwowy. Zakresy sterowania nie są takie same: dla Talona stosuje się mniejszy zakres pozycji, a klasyczne serwo zwykle przyjmuje kąty od 0 do 180 stopni. Po zakończeniu ruchu można wyłączyć sygnały serw, aby zmniejszyć pobór prądu i nagrzewanie elementów.
Programowanie Bit Bota w Pythonie
Po opanowaniu bloków warto przejść do MicroPythona. Kod tekstowy daje większą kontrolę nad pinami, opóźnieniami, pętlami i bibliotekami, ale wymaga dokładniejszego zrozumienia tego, do których pinów podłączone są poszczególne elementy robota.
Bit Bot: sterowanie silnikami
Każdy silnik wymaga sygnału prędkości i kierunku. W Bit Bot Classic lewy silnik korzysta z pinów P0 i P8, a prawy z P1 i P12. W Bit Bot XL lewy silnik korzysta z P16 i P8, a prawy z P14 i P12. Dla lewego silnika w modelu XL podstawowe ustawienie jazdy do przodu zaczyna się od ustawienia kierunku i wypełnienia PWM na pinie prędkości.
pin16.write_analog(1023)
pin8.write_digital(0)
Aby odwrócić kierunek, zmień stan pinu kierunku, pozostawiając sterowanie prędkością na pinie PWM.
pin16.write_analog(1023)
pin8.write_digital(1)
Prędkość reguluje się przez PWM, czyli modulację szerokości impulsu. W MicroPythonie dla micro:bita wartość analogowa mieści się w zakresie od 0 do 1023. Około połowy mocy to 511, choć rzeczywiste obroty silnika nie są liniowo równe tej wartości.
pin14.write_analog(511)
pin12.write_digital(0)
Przy bardzo małym wypełnieniu PWM silnik może buczeć, ruszać skokowo albo w ogóle nie wystartować. Dlatego w praktyce ustawia się minimalną użyteczną prędkość eksperymentalnie dla konkretnego egzemplarza robota i poziomu naładowania baterii.
Bit Bot: sterowanie diodami FireLED
W modelach Bit Bot sygnał sterujący diodami FireLED jest prowadzony przez P13. Do obsługi używa się biblioteki neopixel. Diody są indeksowane od 0 do 11: sześć po lewej stronie i sześć po prawej. Poniższy przykład pokazuje ustawienie trzeciej diody, czyli indeksu 2, na kolor fioletowy.

Bit Bot: czujniki podążania za linią
W Bit Bot Classic lewy czujnik linii jest dostępny na P11, a prawy na P5. W Bit Bot XL odczyt odbywa się przez układ I2C: bit 0 odpowiada lewemu czujnikowi, a bit 1 prawemu. Ta różnica jest ważna, bo kod dla modelu Classic nie zadziała bez zmian na XL.
Dla modelu Classic odczyt czujników może wyglądać następująco.

W przypadku XL trzeba odczytać rejestr układu przez I2C i rozdzielić bity odpowiadające obu czujnikom.


Czujniki światła
Czujniki światła są analogowe, więc ich odczyty mieszczą się w zakresie od 0 do 1023. W modelu Classic można odczytywać je bezpośrednio z odpowiednich pinów micro:bita.

W Bit Bot XL odczyt jest prostszy z użyciem funkcji lub biblioteki przygotowanej dla tego modelu, ponieważ obsługa elektroniki pomocniczej jest ukryta pod gotowym interfejsem.

Bit Bot: brzęczyk
W Bit Bot Classic brzęczyk jest podłączony do P14 i aktywuje się stanem wysokim. W Bit Bot XL pin brzęczyka jest inny, dlatego w kodzie dla XL najlepiej używać biblioteki lub definicji pinów przeznaczonych dla tej wersji. Aby uzyskać ciągły sygnał w modelu Classic, wystarczy prosty program ustawiający pin w stan 1.

Bit Bot: ultradźwiękowy czujnik odległości
Ultradźwiękowy czujnik odległości wymaga programu mierzącego czas między wysłaniem impulsu a odebraniem echa. W MicroPythonie używa się do tego modułu czasu, a funkcja sonaru przelicza opóźnienie na odległość, zwykle w centymetrach. Pętla programu może odświeżać pomiar co sekundę i wyświetlać wynik na matrycy LED micro:bita albo wykorzystywać go do zatrzymania robota przed przeszkodą.


Podsumowanie
Bit Bot jest dobrym narzędziem do nauki programowania, ponieważ natychmiast pokazuje skutki kodu: robot jedzie, skręca, reaguje na linię, zapala diody albo wydaje dźwięk. MakeCode obniża próg wejścia, a MicroPython pozwala później zrozumieć sterowanie pinami, PWM, czujnikami i magistralą I2C. W projektach edukacyjnych i prototypowych warto jednak pamiętać, że nawet prosta platforma robota jest w praktyce układem elektronicznym: jakość zasilania, poprawne połączenia i właściwe przypisanie pinów decydują o tym, czy program będzie działał przewidywalnie.