Przeszukaj forum
Pokazywanie wyników dla tagów 'micro:bit'.
Znaleziono 2 wyniki
-
Dzień dobry. Czy mogę zasilić micro:bita za pomocą powerbanku? Posiadam ADATA P20000QCD 20000mAh. Nie próbowałem, martwie się o uszkodzenie micro:bita. Dziękuję za 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: