Skocz do zawartości

Robot micro:bot


deshipu

Pomocna odpowiedź

Być może słyszeliście o płytce micro:bit, którą BBC chce rozdawać dzieciom w Wielkiej Brytanii? Otóż istnieje oddolna inicjatywa, żeby na tą płytkę zrobić Pythona, tak, żeby dzieci mogły poprogramować też troche na otwartej platformie, a nie tylko same Microsofty, mbedy i kompilacja "w chmurze". Jest to robione przez ochotników w wolnym czasie, ale myślę, że już stanowi całkiem niezłą alternatywę. Aby przyśpieszyć i polepszyć ten proces, powstał program Micro World Tour, który pozwala nam pobawić się przedpremierową wersją tej płytki przez tydzień -- potem musimy ją wysłać do następnej osoby. Wziąłem udział w tym programie i zbudowałem tego prostego robota.

Ponieważ miałem tylko tydzień i dużo planów, postanowiłem zacząć od najprostszej rzeczy, czyli robota jeżdżącego, omijającego przeszkody, zbudowanego z tego, co miałem pod ręką (nie było czasu na zamawianie części):

Tak więc mamy tu dwa 9-gramowe serwa przerobione na ciągłą rotację, małą płytkę prototypową, pojemnik na baterię (potem musiałem go zastąpić pudełkiem z LiPo), kulkę podporową, dwa kółka i trochę kabelków. Potem jeszcze dodałem czujnik odległości SHARP od Pololu (niestety wymagany jest taki na 3V). Do połączenia z płytką użyłem zwykłych śrub wkręconych w kawałek plastiku. Całość zebrana do kupy taśmą dwustronną.

Jak już wspomniałem, programowane toto jest w Pythonie. Mieliśmy trochę problemów z implementacją PWM na tej płytce i musiałem dodać obejscia przy inicjalizacji timera (to będzie naprawione w wersji finalnej). Kod wygląda mniej więcej tak:

import microbit


class Servo:
   def __init__(self, pin, trim=0):
       self.pin = pin
       self.trim = trim
       self.position = 90
       self.set_period()

   def set_period(self):
       self.pin.set_analog_period(20)
       self.write(self.position)
       microbit.sleep(80)
       self.pin.set_analog_period(20)
       self.write(self.position)
       microbit.sleep(80)
       self.pin.write_analog(0)

   def write(self, degrees):
       self.pin.write_analog(int(25 + 100 * degrees / 180 + self.trim))
       self.position = degrees


class Robot:
   def __init__(self):
       self.left_servo = Servo(microbit.pin0, 2)
       self.right_servo = Servo(microbit.pin1, 1)

   def go(self, distance):
       microbit.display.show(microbit.Image.ARROW_S)
       self.left_servo.write(0)
       self.right_servo.write(180)
       microbit.sleep(int(distance * 2000 / 17))
       self.stop()

   def turn(self, angle):
       if angle > 0:
           microbit.display.show(microbit.Image.ARROW_E)
           self.left_servo.write(0)
           self.right_servo.write(0)
           microbit.sleep(int(angle * 64 / 9))
       else:
           microbit.display.show(microbit.Image.ARROW_W)
           self.left_servo.write(180)
           self.right_servo.write(180)
           microbit.sleep(int(-angle * 64 / 9))
       self.stop()

   def stop(self):
       microbit.display.show(microbit.Image.DIAMOND)
       self.left_servo.write(90)
       self.right_servo.write(90)

   def get_distance(self):
       return microbit.pin2.read_analog()


robot = Robot()
while True:
   robot.go(5)
   if robot.get_distance() > 700:
       robot.turn(20)
       left_distance = robot.get_distance()
       robot.turn(-40)
       right_distance = robot.get_distance()
       robot.turn(20)
       if left_distance < right_distance:
           robot.turn(60)
       else:
           robot.turn(-60)

Jak widać, wielkiej filozofii nie ma. Natomiast genialnie się to testuje, bo mamy dostęp do konsoli Pythona po złączu szeregowym, więc wszystkie komendy możemy sobie "na żywo" wypróbować.

Na koniec robot w akcji:

IMG_20151125_105637s.thumb.jpg.43e83008cf1276f8657ea017dc245b13.jpg

  • Lubię! 1
Link do komentarza
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Zaznaczam tylko, że to jest wyłącznie moja prywatna opinia wyrobiona na podstawie niedokończonego prototypu z dopiero rozwijającym się oprogramowaniem i bez informacji o cenie.

Wydaje mi się, że o ile płytka ta będzie doskonałym narzędziem do nauki dla dzieci, które ją dostaną, o tyle nie stanowi ona praktycznie żadnej konkurencji czy alternatywy dla istniejących rozwiązań dla świata konstruktorów, takich jak Arduino, Raspberry Pi, Teensy, ESP8266, PyBoard czy inne atmegi, army, pice i propellery.

Jest to trochę armata na muchę -- potężny relatywnie mikrokontroler, którego możliwości zostały niestety mocno ograniczone tak poprzez domyślny firmware, który zabiera sporo zasobów, jak i sprzęt -- mała liczba wyprowadzonych gpio, wiele z nich użytych wewnętrznie do rzeczy, których potrzebować nie będziemy. Tak naprawdę bez specjalnych zabiegów dostępne mamy tylko trzy gpio. Jak użyjemy specjalnego konektora (do kupienia osobno), albo przylutujemy kabelki bezpośrednio do płytki, to kilka więcej. Dalsze możemy wykorzystać kosztem wbudowanych elementów -- nie będzie działać wyświetlacz, stracimy dostęp do kompasu i akcelerometru, etc.

Zasilanie może być problemem -- udało mi się spalić jedną z płytek za pomocą 4 alkalicznych "paluszków" AAA, a wiemy, że dużo prądu to one nie dają. Z lipo 3.7V już działało lepiej, ale nie wiem ile w tym było mojego szczęścia.

Co prowadzi do kolejnego dużego problemu, jakim jest kompletny brak technicznej dokumentacji. Nie ma schematu, nikt nie sprecyzował jakie napięcia i prądy są oczekiwane, ani nawet jaka jest polaryzacja gniazdka do baterii (odwrotna niż do lipo Turnigy, więc uwaga). Być może taka dokumentacja powstanie, na razie wszystko jest tajne i niedostępne. Dla dzieci oczywoście nie jest to problem, bo będą korzystać z gotowych części i materiałów edukacyjnych, ale do robienia czegokolwiek bardziej zaawansowanego by się przydało.

Na koniec jest cena i dostępność. Nie znamy jeszcze szczegółów, ale wątpię, żeby pobili cenowo Pro Mini z Chin czy Raspberry Pi Zero. Oczywiście, jeśli dostajesz płytkę za darmo w szkole to nie jest to taki problem, ale dla innych zastosowań już owszem.

Podsumowując, płytka będzie świetna dla dzieci w UK, ale dla majsterkowiczów na świecie już znacznie mniej interesująca, chyba, że ktoś akurat coś dla tych dzieci robi.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.