Pull to refresh

Lego Mindstorms для программиста

Reading time 3 min
Views 6.1K
Mindstorms setМне очень нравится играть в Lego. Нравится собирать роботов и машинки.
А ещё мне очень нравится програмировать. Нравится писать программы и фреймворки.
А не так давно я нашел способ совместить эти два увлечения. Lego Mindstorms — это набор, включающий в себя несколько моторчиков, сенсоров и программируемый модуль, который может считывать информацию с сенсоров и управлять моторчиками.

В этом посте я расскажу больше о Mindstorms и о способах программирования.



Архитектура любого проекта выглядит так: сенсоры передают информацию на управляющий модуль. Программа, выполняемая на модуле обрабатывает информацию и передаёт управляющие команды на моторчики. Моторчики приводят конструкцию в движение.

Сенсоры


Стандартный набор сенсоров Mindstorms 2.0 включает в себя:
light sensor
Цветовой сенсор
Этот сенсор умеет делать довольно много. Во-первых, он умеет считывать текущий цвет (и возвращать его RGB-значения). Во-вторых, он умеет возвращать текущую освещённость. Ну, и в-третьих, он умеет работать как лампочка.

touch sensor
Два сенсора прикосновения
Эти сенсоры умеют регистрировать три события: пимпочку нажали, пимпочку отпустили и пимпочку нажали и тут же отпустили.

sonic sensor
Ультразвуковой сенсор
Этот сенсор умеет определять расстояние до преграды перед сенсором. Работает в радиусе 2ух метров.

Моторчики


servo motorВ комплект входят 3 моторчика. Каждый можно крутить на заданный угол (обещают точность до одного градуса), а также считывать текущий угол поворота. Последнее полезно, если к моторчику приделано колесо, которое пользователь крутит сам.

Программируемый модуль


servo motorЭто маленький компьютер. Процессор на 48 MHz, 64 KB оперативки, 256 KB флеш-памяти, порт USB 1.1 и bluetooth радио. Конечно, висту на нём не поднять, но приложения для управления роботами работают очень даже шустро.

Программы


Здесть начинается самое интересное. Вместе с набором поставляется диск с программой Mindstorms NXT. Это графическая оболочка для написания простеньких программ. Она показалась мне весьма неудобной. Вот, к примеру, как выглядит программа с одним циклом и if-ом:

program


К счастью, существует целый ряд проектов, который позволяют программировать на нормальных языках. Я остановился на проекте 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 и хочется почувствовать себя сумасшедшим профессором — очень рекомендую.

Буду рад ответить на вопросы про этот набор.
Tags:
Hubs:
+109
Comments 102
Comments Comments 102

Articles