mBlock - достойный преемник ArduBlock. Scratch-программирование автономных Arduino роботов. Александр Григорьев (p&t) / 15.03.2016 В настоящее время появляется все больше робототехнических наборов на базе Arduino, пригодных для обучения детей программированию и другим аспектам робототехники. Содержание этих наборов и направленность обучения - большая тема, достойная отдельного разговора, но можно указать на одну общую проблему, связанную с их использованием. Существует большой разрыв между визуально-ориентированными (преимущественно Scratch-подобными) программными средствами и "взрослым" программированием в Arduino IDE (Integrated Development Environment), проводимом в текстовом режиме. Это является и причиной и следствием того, что робототехнические Arduino наборы пока в основном делятся на две большие и очень разные категории. Либо это нечто "начального" уровня с весьма ограниченными возможностями, жесткой конструкцией, простое в сборке и использовании, но с трудом поддающееся совершенствованию и адаптации к текущим учебным задачам. Либо это обширный набор электронных компонентов, предполагающий обучение в стиле «как заставить мигать светодиоды», с возможностью подключать что угодно к чему угодно (в том числе неправильно), и собрать из этого набора полноценное законченное устройство без паяльника, лобзика и прочих атрибутов Самоделкина вряд ли получится. Между тем эту пропасть вполне можно (а по мнению автора, нужно) преодолеть. Путем усложнения конструкции "шаг-за-шагом", путем постепенного усложнения средств и методов программирования. Переход от простого к сложному должен быть плавным и поэтапным. В результате один робототехнический комплект становится возможно (и интересно!) использовать на протяжении всего курса обучения.На слуху российского пользователя робототехнический набор ScratchDuino отечественной разработки, в двух вариантах, лаборатория и робоплатформа. Продукт, несомненно, не без недостатков. Однако на время отвлечемся от критики и укажем на ряд неоспоримых плюсов. Наборы комплектуются одноименной средой визуального программирования и позволяют детям даже младших классов начать работу с контроллером Arduino в простой и понятной форме. ПО бесплатное, проект открытый, каждый может (но не каждый сумеет) собрать по схемам своего собственного робота или лабораторию. Вопреки расхожему мнению есть возможность расширять аппаратные возможности готовых покупных наборов (пример здесь и здесь). Но что дальше? Как пользоваться полученными возможностями? Можно подключить сервомотор, но как им управлять? В настоящий момент среда ScratchDuino не позволяет даже менять скорость вращения колес. Как сделать автономного робота? Наличие BlueTooth несколько снимает остроту проблемы, но не решает ее. Мы по-прежнему привязаны к компьютеру, а хочется-то получить автономное устройство. Кроме того, хочется иметь возможность программировать любое Arduino устройство, простое или сложное, а не только лишь специфических роботов ScratchDuino.Одним из способов решения данной проблемы является использование плагина ArduBlock для Arduino IDE, описанное Юрием Винницким в серии публикаций. Там он справедливо сетует на то, что проект перестал развиваться. ArduBlock - хорошее решение, но давайте посмотрим, какие в настоящий момент есть альтернативы? Итак, обозначим задачи. Продукт должен быть бесплатным. Должен быть легким в использовании, должен быть максимально похож на привычный Scratch (тут ArduBlock слегка подкачал). Должен давать возможность полноценно управлять Arduino и на уровне отдельных вводов-выводов и с помощью высокоуровневых команд (моторы вперед, назад). Наконец, должен позволять загружать программу в контроллер для работы Arduino в автономном режиме (а в большинстве случаев это необходимое условие для участия робота в соревнованиях). В качестве существенного бонуса было бы здорово, если бы был стимул перехода от визуального программирования к текстовому, генерировался код Arduino, как это происходит в ArduBlock. Достаточно противоречивые требования, но, тем не менее, попробуем присмотреться к вариантам.1. S4A - Scratch for Arduino (http://s4a.cat). Достаточно известный и зарекомендовавший себя проект. Роботы под управлением S4A приобретут массу новых возможностей. Подключайте к любой плате Arduino датчики, потенциометры и получите аналог ScratchDuino лаборатории. Управляйте разнообразными внешними устройствами. Однако робот не всякой аппаратной конфигурации будет полностью совместим с S4A. ScratchDuino робоплатформа - не полностью. Конечно, если вы собираете робоплатформу своей собственной конфигурации, почему бы не воспользоваться совместимой? Базируется на Scratch 1.4, а это значит, что программа легко "крутится" на старых слабеньких компьютерах. Другой стороной этой медали является то, что придется забыть о чудесной библиотеке векторных спрайтов Scratch 2, а для некоторых проектов это существенно. Не получится создавать свои собственные блоки. И самое главное, никакой автономности, робот по-прежнему привязан к компьютеру. Для использования S4A требуется предварительно загрузить в контроллер прошивку при помощи Arduino IDE.2. Snap4Arduino (http://s4a.cat/snap)Очень интересный, хоть и пока достаточно сырой проект. Для наших задач принципиально несколько особенностей данной программной среды. Есть возможность работы с любым цифровым или аналоговым портом, то есть аппаратная конфигурация нашего робота может быть произвольной. Можно определять собственные блоки, а значит, легко научить робота выполнять высокоуровневые команды. Более того, эти блоки могут быть с параметрами и использовать рекурсию. Мы получили возможность применять рекурсивные алгоритмы, теперь наши роботы и спрайты будут рисовать фракталы! Управлять можно любой Arduino-совместимой платой, поскольку используется стандартный протокол Firmata, а скетч для прошивки входит в состав Arduino IDE. Скорость обмена данными между платой и компьютером увеличена в 7 раз по сравнению с S4A. И самое "вкусное". Заявлена возможность экспорта простых программ в скетчи Arduino!Пока это экспериментальная функция, работает она не без ошибок. И тем не менее, это огромный шаг вперед! В тестовом экспортированном скетче мне пришлось сделать несколько простых исправлений, и все заработало.Почитать о "Snap!" можно здесь (http://progopedia.ru/implementation/snap).3. mBlock (http://mblock.cc)Данной средой программирования комплектуются очень интересные китайские робототехнические наборы MakeBlock. Именно эту торговую марку можно указать в качестве примера последовательного использования изложенной выше концепции «от простого к сложному». Радует то, что русский есть в списке поддерживаемых языков. Давайте посмотрим внимательнее. Установочный пакет уже включает в себя Arduino IDE. И это неспроста! Но обо всем по-порядку.Этот программный продукт бесплатный, базируется на Scratch 2 (поэтому все знакомо и понятно) и позволяет программировать Arduino роботов произвольной конфигурации. Для некоторых из них уже есть готовые наборы высокоуровневых команд. Если вашего робота нет в списке, не беда! Надо лишь выбрать в качестве используемого расширения базовой системы команд «Arduino» ("Extentions", "Arduino").Определяйте и используйте свои собственные блоки, как в "Snap!" и Scratch 2, с параметрами и возможностью рекурсии. Контроллер Arduino нет нужды прошивать заранее. Вам только нужно указать тип платы и используемый COM порт. Выбираете его ("Соединить", "Serial Port").Указываете тип контроллера ("Boards"). Платы поддерживаются не все, но самые распространенные есть в списке.Остается залить прошивку, и можно начинать программирование ("Соединить", "Обновить прошивку").Робот послушно исполняет наши команды, работает под управлением скриптов Scratch. Приятный бонус - можно использовать показания ультразвукового дальномера! Но... прелести на этом не заканчиваются, а только начинаются! Выбираем "Редактировать", "Arduino mode" и видим до боли знакомые "void setup", "void loop"... Начинаем собирать из блоков программу и наблюдаем, как тут же меняется текстовой скетч. Закончив, нажимаем на кнопку "Upload to Arduino". Наблюдаем за процессом. Программа загружена в контроллер, нам больше не нужен компьютер!Вуаля, наш первый простейший автономный робот для езды по линии, запрограммированный в Scratch, готов! Makeblock S4A Scratch Scratchduino Snap4Arduino arduino mBlock робототехника