Дерзай! Программирование мобильной робоплатформы в mBlock, первые шаги Александр Григорьев (p&t) / 02.11.2016 Издательство «БХВ-Петербург» подготовило новый продукт серии «Дерзай!». Это набор электронных компонентов вместе с книгой, обучающей работе с ним. Юрий Винницкий в своей публикации уже рассказал об одном из продуктов этой серии. На сей раз нас ждет набор «Мобильные роботы на базе Arduino + книга», продажи которого начнутся в ближайшем месяце.Не могу не повторить за Юрием мысль о том, что подход, применяемый в серии продуктов «Дерзай!», видится очень продуктивным. Акцент сделан на книгу, в которой пошагово описано, как использовать Arduino IDE для программирования мобильной робоплатформы, идущей в комплекте. Ее аппаратная конфигурация позволяет реализовать любой из описываемых примеров, и достаточно интересна, кстати. В частности, помимо стандартных датчиков препятствия и датчиков линии, в набор входит дальномер на поворотной голове с сервомотором и магнитометр (магнитный компас). А также набор литиевых аккумуляторов с зарядным устройством, Bluetooth модуль, инфракрасный пульт с приемником для дистанционного управления. Получается полноценный комплект начального уровня, позволяющий реализовать массу интересных проектов. Возможности собранной робоплатформы выгодно отличают ее от «одноклассников» - других распространенных робоплатформ начального уровня на базе Arduino. А с учетом цены, обозначенной на сайте «БХВ-Петербург», этот набор превращается просто в «MUST HAVE» для каждого начинающего любителя робототехники.Автором книги, входящей в комплект, является Михаил Викторович Момот, доцент кафедры информационных систем Томского политехнического университета. На FTP-сервере издательства «БХВ-Петербург» размещен электронный архив методических материалов, скачать который может любой желающий. Этот архив включает в себя скетчи Arduino IDE по каждому проекту, набор файлов для лазерной резки и модели для печати на 3D-принтере. При желании можно приобрести лишь книгу и собрать подобную робоплатформу самостоятельно из собственных деталей. А поскольку набор проектов начинается со стандартной элементарной программы мигания светодиодом, появляется возможность осваивать программирование в Wire и основы микроэлектроники на примере решения типичных (и нетипичных) практических задач образовательной робототехники. И мигать светодиодом с определенной частотой мы будем уже не просто так, а со смыслом, для того, чтобы просигнализировать о том или ином состоянии нашего робота.Добавим пол-ложки дегтя, ничуть не умаляющих достоинств издания. Как показало изучение тестового образца, попавшего в наши руки, конструктив робоплатформы все еще нуждается в доработке, датчики расположены в уязвимых местах и плохо защищены. Предложенная схема подключения драйверов двигателей и других электронных компонентов имеет недостатки, я бы использовал альтернативную (об этом позже). А также добавил пару датчиков, очень логично вписывающихся в предложенную конфигурацию и сильно расширяющих возможности робоплатформы. Не всякий имеет доступ к 3D-принтеру и лазерному граверу, можно было бы предложить пару схем сборки робоплатформы на базе пластикового конструктива типа Lego или Meccano (мы у себя используем вот такой компактный вариант):Но самый главный недостаток, на мой взгляд, заключается не в этом. Текстовое программирование на языке Wire в Arduino IDE требует освоения синтаксиса языка и не позволяет нам использовать робоплатформу для занятий в младших классах. Между тем существуют средства визуального программирования типа Scratch, существенно снижающие порог вхождения в интереснейший мир робототехники как для взрослых, так и для детей. Вот об этих средствах и поговорим.Итак, будем учиться программировать мобильную робоплатформу в визуальной среде mBlock, базирующейся на Scratch 2. Для начала освоим управление моторами и напишем тестовую программу автономной работы робоплатформы, в следующих статьях перейдем к беспроводному дистанционному управлению и другим задачам образовательной робототехники.Прежде всего нам понадобится сам mBlock. Это OpenSource программа, доступная в версии для Windows и macOS. Скачиваем ее с официального сайта: http://www.mblock.cc/download.В составе дистрибутива уже есть драйвера для всех распространенных Arduino контроллеров (включая китайские клоны), а также встроенный Arduino IDE с подключенными библиотеками MakeBlock. Инсталлируем mBlock, дожидаемся конца установки.Прежде, чем запустить, давайте проверим, что все подготовлено правильно. Размещаем робоплатформу на какую-нибудь подставку, чтобы она могла свободно вращать колесами в воздухе. Включаем питание от аккумуляторов, четырем мощным моторам будет не хватать того тока, который в состоянии обеспечить USB. Подключаем проводом Arduino контроллер нашей робоплатформы к USB разъему компьютера, проверяем, что операционная система корректно «подклеила» драйвера, у компьютера появился соответствующий COM-порт (Пуск — Панель управления — Диспетчер устройств — Порты COM и LPT). Запоминаем его номер, он нам понадобится.Теперь можно продолжать. Запускаем mBlock. Первым делом идем в главное меню и меняем настройки. Выбираем русский язык (Language – Русский). Включаем расширение «Arduino» (Extensions – Arduino). Выбираем Arduino Uno контроллер (Boards – Arduino Uno). От этого выбора зависит используемая система команд, в будущем мы научимся использовать иные Arduino Uno совместимые варианты. Подключаемся к нашей плате (Соединить — Serial Port – нужный нам COM-порт). Загружаем на нее прошивку mBlock, позволяющую работу в интерактивном режиме (Соединить — Обновить прошивку). Дожидаемся сообщения о том, что загрузка прошивки прошла успешно. Все, можно начинать работать.Перед нами модифицированная среда Scratch 2.Scratch великолепен и сам по себе, и применительно к самым разным предметным областям. Не хватит толстенной книжки, чтобы описать все его возможности, но пусть вас это не смущает. Его в состоянии использовать даже первоклассники, важно знать и понимать некоторые моменты, остальное осваивается шаг за шагом. Так и будем двигаться. Любой, кто хочет большего, может погуглить «Scratch быстрый старт» или «Scratch первые шаги». А тот, кто уже знаком с этой замечательной программой, будет чувствовать себя как рыба в воде.Следует учитывать, что в среде Scratch может существовать множество объектов, каждый из которых имеет собственную программу поведения (то есть обладает собственным полем со скриптами). В данном случае мы видим два объекта — «Сцена» и «M-Panda». Панда это спрайт, спрайтов в сложном проекте обычно бывает много. Спрайт может прогуливаться по сцене и исполнять иные «финты», сцена тоже кое-что умеет делать. Если мы хотим запрограммировать работу контроллера Arduino, у нас есть возможность задействовать любое удобное нам поле со скриптами. Напишем первую программу, используя рабочее поле спрайта «M-Panda». Обратите внимание, что именно этот объект выбран, и его значок отображается в правом верхнем углу.Скрипты собираются из блоков (элементарных команд) и соединяются как кирпичики в конструкторе Lego. Посередине экрана располагается палитра блоков. Откроем категорию блоков «Робот», найдем и вытащим на рабочее поле блок «Установить цифровой pin...»:Эта команда имеет два параметра — номер пина и состояние (HIGH, LOW). Поменяем номер пина на 13. Если теперь щелкнуть по блоку мышью, мы увидим, что встроенный светодиод на нашем Arduino контроллере зажегся. Поменяем состояние на LOW (щелкнув по стрелочке), щелкнем по блоку, светодиод погас. Соберем скрипт из нескольких блоков. Нам понадобится дубль блока «Установить цифровой pin…» (щелчок по блоку правой кнопкой мыши, «дубликат»). Из категории «Контроль» блок «Ждать...секунд», а из категории «События» блок «Когда клавиша пространство нажата». Блоки подклеиваются друг к другу, стоит лишь их переместить в соответствующую позицию. Скрипт можно разрывать на части и собирать заново, если что-то склеилось не так. В результате должно получиться вот что:Нажмем клавишу «пробел» на клавиатуре. Светодиод на плате загорелся на одну секунду и погас. Работает. Время осваивать управление моторами. Еще раз проверьте, что робоплатформа никуда не уедет и может свободно вращать колесами в воздухе.Выкинем собранный скрипт целиком обратно на палитру блоков. Пространство освободили, начнем все заново. Разместим на рабочем поле следующие скрипты:Чтобы упростить себе работу, активнее используйте дублирование c последующей правкой параметров.Давайте изучим используемую схему управления моторами.На робоплатформе установлен драйвер двигателей L298N. Он имеет две пары выходных контактов и позволяет управлять двумя мощными моторами, каждый из которых может потреблять до двух ампер, а кратковременно до четырех.У нас к каждому выходу подключено сразу два мотора, к одному выходу два левых, к другому два правых. Каждая пара двигателей работает синхронно и управляется состоянием трех контактов. Всего требуется шесть. Выходные контакты контроллера Arduino соединены с управляющими драйвера двигателей следующим образом:- D10 (Arduino) – EnA (L298N)- D11 (Arduino) – EnB (L298N)- D8 (Arduino) – In1 (L298N)- D7 (Arduino) – In2 (L298N)- D4 (Arduino) – In3 (L298N)- D3 (Arduino) – In4 (L298N)Для управления правой моторной парой используются контакты EnA, In1, In2. Для управления левой — EnB, In3, In4. Соответственно выходы D10, D8, D7 контроллера Arduino управляют правыми моторами, а D11, D4, D3 – левыми.Посмотрим на левую моторную пару. Обычно контакт «Enable» (в данном случае контакт EnB) используется для управления мощностью, на него подают сигнал широкоимпульсной модуляции (ШИМ). Такой сигнал у нас генерирует пин D11. Если записать сюда ноль, получим мощность ноль (ноль процентов времени импульса нагрузка включена), 255 — получим 100% (100% времени импульса нагрузка включена). Но только в том случае, если определено направление вращения, которое зависит от состояния пары других контактов (у нас это D4 и D3). Если на одном контакте логическая единица, а на другом ноль, двигатель вращается в одну сторону. Если наоборот — в противоположную. Если состояние контактов одинаковое, двигатель не вращается. Если на обоих контактах логическая единица и логическая единица (то есть ШИМ 255) на контакте «Enable», дополнительно включается динамическое торможение. Попробуйте пощелкать по управляющим скриптам и проверить, как работают двигатели.Надо сказать, что предложенная в книге схема подключения драйвера двигателей требует использования аж шести выводов платы Arduino и отнимает у нас ценные контакты D3 и D11 с уникальными возможностями. Об альтернативных схемах подключения и о том, что нам это дает, а что отнимает, мы поговорим в следующих публикациях. Забегая вперед, скажу, что выбор той же схемы, что в контроллерах MakeBlock, позволит нам использовать готовые блоки управления моторами. Аналогичную MakeBlock схему управления имеет робоплатформа ScratchDuino, кстати.Давайте поуправляем двигателями с клавиатуры. Воспроизведите следующий набор скриптов:Потребуется 5 «шапочек» «когда клавиша.. ..нажата», для четырех из которых мы выберем другое значение вместо «пространство» (клавиша «пробел»).Отдельно следует сказать о добавленных блоках «ждать». Никто из нас не безглючен, и, к сожалению, не всегда mBlock работает стабильно. Особенно это касается управления контроллером Arduino в интерактивном режиме. Если отправлять команды на плату слишком часто, не все они могут оказаться исполненными. Одна десятая секунды — цена, которую мы вполне сейчас в состоянии заплатить для большей стабильности работы.Понажимайте на клавиши, понаблюдайте, как работают двигатели.Мы подошли к самому «вкусному». Изучим те возможности mBlock, которые заставляют простить ему все недостатки. Переключимся в режим «Arduino mode», именно его можно считать главным и основным при работе в mBlock.Начните новый проект («Файл», «Новый»). Выберите в меню «Редактировать», «Arduino mode». Вы увидите, что экран изменился, и не все блоки стали доступны.Первым делом мы создадим свой собственный блок (высокоуровневую команду) для управления моторами.Выберите на палитре «Данные и блоки», нажмите кнопку «Сделайте блок». Укажите его имя («motors») и имена двух числовых параметров («power1» и «power2»). На рабочем поле у вас появится «шапочка» для определения новой подпрограммы. Далее воспроизведите следующее:После того, как мы загрузим данную программу в контроллер кнопкой «Upload to Arduino», наша робоплатформа автономно начнет исполнять следующую последовательность действий:- подождать;- проехать вперед, проехать назад (на максимальной скорости, будьте внимательны, чтобы не свалилась со стола!), подождать;- покрутить левыми моторами вперед и назад, подождать;- покрутить правыми моторами вперед и назад;- ждать, пока единица не станет меньше единицы (а этого не произойдет никогда, таким образом мы предотвратили повторение всей процедуры).На всякий случай прикладываю готовый проект mBlock. roboBHV_test1.zip ( 3.13 килобайт ) Кол-во скачиваний: 118Для надежности лучше взять робоплатформу в руки. Нажимаем на кнопку «Upload to Arduino», дожидаемся конца загрузки. Наблюдаем, как весело крутятся моторы. Отсоединяем USB провод, отключаем питание. Теперь можно поставить робоплатформу на пол, снова включить питание и убедиться, что все работает и без участия компьютера.Продолжение следует! Scratch arduino mBlock быстрый старт первые шаги робоплатформа