Мне очень нравится играть в Lego. Нравится собирать роботов и машинки.
А ещё мне очень нравится програмировать. Нравится писать программы и фреймворки.
А не так давно я нашел способ совместить эти два увлечения. Lego Mindstorms — это набор, включающий в себя несколько моторчиков, сенсоров и программируемый модуль, который может считывать информацию с сенсоров и управлять моторчиками.
В этом посте я расскажу больше о Mindstorms и о способах программирования.
Архитектура любого проекта выглядит так: сенсоры передают информацию на управляющий модуль. Программа, выполняемая на модуле обрабатывает информацию и передаёт управляющие команды на моторчики. Моторчики приводят конструкцию в движение.
Стандартный набор сенсоров Mindstorms 2.0 включает в себя:
В комплект входят 3 моторчика. Каждый можно крутить на заданный угол (обещают точность до одного градуса), а также считывать текущий угол поворота. Последнее полезно, если к моторчику приделано колесо, которое пользователь крутит сам.
Это маленький компьютер. Процессор на 48 MHz, 64 KB оперативки, 256 KB флеш-памяти, порт USB 1.1 и bluetooth радио. Конечно, висту на нём не поднять, но приложения для управления роботами работают очень даже шустро.
Здесть начинается самое интересное. Вместе с набором поставляется диск с программой Mindstorms NXT. Это графическая оболочка для написания простеньких программ. Она показалась мне весьма неудобной. Вот, к примеру, как выглядит программа с одним циклом и if-ом:
К счастью, существует целый ряд проектов, который позволяют программировать на нормальных языках. Я остановился на проекте lejos. Программы пишутся на Java, компилируются в классы, а потом транслируются в бинарный формат, который понимает перепрошитый управляющий модуль.
Java вполне настоящая: есть довольно много стандартный библиотек, есть нити, кое-что из IO. Даже есть API для работы с bluetooth. Более того, есть плагин для eclipse. В общем, всё, о чём может мечтать разработчик.
Приведу пример простой программы:
А ещё мне очень нравится програмировать. Нравится писать программы и фреймворки.
А не так давно я нашел способ совместить эти два увлечения. Lego Mindstorms — это набор, включающий в себя несколько моторчиков, сенсоров и программируемый модуль, который может считывать информацию с сенсоров и управлять моторчиками.
В этом посте я расскажу больше о Mindstorms и о способах программирования.
Архитектура любого проекта выглядит так: сенсоры передают информацию на управляющий модуль. Программа, выполняемая на модуле обрабатывает информацию и передаёт управляющие команды на моторчики. Моторчики приводят конструкцию в движение.
Сенсоры
Стандартный набор сенсоров Mindstorms 2.0 включает в себя:
Цветовой сенсор
Этот сенсор умеет делать довольно много. Во-первых, он умеет считывать текущий цвет (и возвращать его RGB-значения). Во-вторых, он умеет возвращать текущую освещённость. Ну, и в-третьих, он умеет работать как лампочка.Два сенсора прикосновения
Эти сенсоры умеют регистрировать три события: пимпочку нажали, пимпочку отпустили и пимпочку нажали и тут же отпустили.Ультразвуковой сенсор
Этот сенсор умеет определять расстояние до преграды перед сенсором. Работает в радиусе 2ух метров.Моторчики
В комплект входят 3 моторчика. Каждый можно крутить на заданный угол (обещают точность до одного градуса), а также считывать текущий угол поворота. Последнее полезно, если к моторчику приделано колесо, которое пользователь крутит сам.
Программируемый модуль
Это маленький компьютер. Процессор на 48 MHz, 64 KB оперативки, 256 KB флеш-памяти, порт USB 1.1 и bluetooth радио. Конечно, висту на нём не поднять, но приложения для управления роботами работают очень даже шустро.
Программы
Здесть начинается самое интересное. Вместе с набором поставляется диск с программой Mindstorms NXT. Это графическая оболочка для написания простеньких программ. Она показалась мне весьма неудобной. Вот, к примеру, как выглядит программа с одним циклом и if-ом:
К счастью, существует целый ряд проектов, который позволяют программировать на нормальных языках. Я остановился на проекте lejos. Программы пишутся на Java, компилируются в классы, а потом транслируются в бинарный формат, который понимает перепрошитый управляющий модуль.
Java вполне настоящая: есть довольно много стандартный библиотек, есть нити, кое-что из IO. Даже есть API для работы с bluetooth. Более того, есть плагин для eclipse. В общем, всё, о чём может мечтать разработчик.
Приведу пример простой программы:
public static void main(String[] aArg) throws Exception {
ColorLightSensor cs = new ColorLightSensor(SensorPort.PORTS[0],
ColorLightSensor.TYPE_COLORNONE);
for (int i = 0; i < 3; i++) {
cs.setFloodlight(true);
LCD.drawString("Hello Habr", 3, 4);
Thread.sleep(500);
Motor.A.rotate(i % 2 == 0 ? 90 : -90);
cs.setFloodlight(false);
}
}
* This source code was highlighted with Source Code Highlighter.
Как вы поняли, робот катается туда-сюда, мигает лампочкой и говорит «Hello Habr».
Ещё про сенсоры
Здорово, что сторонние разработчики также производят сенсоры для Mindstorms. Покопавшись в интернете можно найти акселерометр, компас, GPS-приёмник, градусник, ИК-сенсор, читатель RFID и многое другое. К сожалению, к одному программируемому модулю можно подключить не более чем четыре сенсора. Так что для сложных проектов зачастую используют несколько модулей, работающих вместе.
Итого
В общем, Mindstorms — это отличный способ провести время. Если нравится Lego и хочется почувствовать себя сумасшедшим профессором — очень рекомендую.
Буду рад ответить на вопросы про этот набор.