Дерзай! Готовим робоплатформу BHV к подвигам. Bluetooth управление в mBlock Александр Григорьев (p&t) / 26.11.2016 Первая и вторая публикации о наборе «Мобильные роботы на базе Arduino» были ориентированы на родителей и педагогов, желающих адаптировать робоплатформу для занятий с детьми и максимально упростить пользование ею. По сути, мы с вами выступали в роли инженеров, пытающихся «заточить» продукт под собственные нужды. Хотелось бы, чтобы уже со следующей статьи можно было не увлекаться сугубо инженерными задачами и приступить к практической робототехнике, обучая детей и обучаясь вместе с ними. Чего же не хватает нашей робоплатформе? Ответ прост: необходимо обеспечить возможность дистанционного управления ею с компьютера, а заодно и с разных других устройств. Поможет нам Bluetooth как наиболее универсальный тип беспроводной связи.Надо сказать, что опыт использования Bluetooth очень быстро убеждает в том, что это средство, далекое от идеала. О методах борьбы я рассказывал в отдельной публикации («Как связать два микроконтроллера по Bluetooth. Настраиваем HC-05 для работы в режиме Master.»). Когда полтора десятка учеников по очереди обращаются к Вам с проблемой потери связи, это может привести к срыву всего занятия. Не зря тот же MakeBlock предлагает альтернативное решение для рабочих групп: наборы mBot v 1.1 - (2.4G Version), в которых используется 2.4G Wireless Serial for mBot, представляющий собой два изначально сопряженных друг с другом компонента, один из которых подключается в роботу, а другой к компьютеру.Наборы, кстати, замечательные, отличаются продуманностью и имеют готовые расширения (в отличие от того же Scratchduino, сходного по концепции), легко собираются, легко дополняются всем необходимым, годятся для занятий «из коробки». Любой из наборов MakeBlock можно смело рекомендовать родителям, которые хотели бы приобрести своему ребенку что-то «этакое» для самостоятельных занятий. Эти родители будут избавлены от необходимости заниматься пайкой. В общем, легкий путь Вам теперь известен.Но раз мы не боимся сложностей и с самого начала «подписались» на пайку и прочую головную боль, будем осваивать матчасть. Лучший способ увлечь чем-то ребенка это увлечься самому, а на нашем тернистом пути мы многому научимся. Постараемся максимально приблизиться к увиденному идеалу, пользуясь наработками MakeBlock и пытаясь реализовать что-то аналогичное своими силами. Модули 2.4G очень хорошее решение, однако нельзя недооценивать универсальность Bluetooth. Поэтому все-таки будем ориентироваться на этот тип беспроводной связи. А чтобы уменьшить число проблем, я настоятельно рекомендую приобрести преобразователь USB-UART и дополнительный Bluetooth модуль, укомплектовать робоплатформу собственным управляющим «брелком» как я описал.Раз уж зашла речь о наработках MakeBlock. На официальном сайте лежат сценарии занятий на английском языке для обучения детей программированию и работе с робототехническими наборами: «Scratch 2.0, The adventures of Mike» и «Kids maker rocks with the robots». Существует еще и русскоязычная версия сайта и переводы этих материалов на русский язык.Вернемся к теме. Можно ли обойтись без настройки беспроводного соединения? Можно, но мы многое потеряем. Робоплатформа наша мобильная, негоже, чтобы она была как сторожевой пес на привязи. А связь с компьютером это не только работа в режиме радиоуправляемой машинки, но и отладка, переключение программ автономной работы (поиск и автоматический захват банки, например, если она находится в зоне досягаемости), включение режима ассистирования при дистанционном управлении («автопилот», «парктроник»). И самое главное, это возможность работы в интерактивном режиме, что позволяет пройти весь путь от формулировки задачи до ее решения значительно быстрее.Поэтому настраиваем Bluetooth. Основная проблема в том, что наш Bluetooth модуль (HC-05) прошит на какую-то одну определенную скорость обмена, и сменить ее можно лишь при помощи затейливых процедур. Только что купленный имеет скорость 9600. Если ее не поменять, нам недоступна полноценная работа в mBlock с возможностью интерактивного управления. Кроме того, мы будем испытывать сложности при составлении программ в режиме «Arduino mode». Нам требуется сменить скорость на ту, что использует mBlock, 115200. Мы по-прежнему будем сталкиваться с типичными проблемами Bluetooth соединения: теряющимся коннектом и необходимостью заново устанавливать сопряжение при подключении робоплатформы к другому компьютеру. Поэтому удобнее всего использовать пару заранее сопряженных модулей и USB-UART конвертер, так, как это описано в вышеуказанной статье. И если мы попытаемся упростить себе задачу сейчас, то приобретем массу проблем в будущем.Резюмируем. Можно не подключать Bluetooth вообще. Можно использовать Bluetooth модуль в том виде, в котором мы его получили, на скорости 9600. Можно перепрошить модуль на использование адекватной нашим задачам скорости. Можно приобрести USB-UART конвертер, дополнительный HC-05 и перепрошить оба модуля таким образом, чтобы они использовали скорость 115200 и самостоятельно устанавливали соединение, стоит на них лишь подать питание. Каждый следующий вариант будет давать нам принципиально новые возможности. В дальнейшем я буду ориентироваться на то, что Вы справились с задачей перепрошивки модуля (или двух), скорость 115200, и мы можем работать в среде mBlock с интерактивным управлением робоплатформой. А со скоростью 9600 нам доступно лишь программирование в стиле создания скетчей для Arduino IDE с загрузкой программы в контроллер для автономной работы. Этим пока и займемся.Напишем программу, загрузим в контроллер, вначале проверим ее работу по проводу, а затем по Bluetooth соединению. Итак, вводные данные. Наш HC-05 модуль по-прежнему прошит на скорость 9600 и пока еще не подключен к контроллеру.Ставим робоплатформу на подставку, чтобы крутила колесами в воздухе. Включаем питание, соединяем с компьютером при помощи USB кабеля. Запускаем mBlock. Проверяем настройки. «Extensions» — «Arduino» и «MakeBlock». «Boards» — «Starter/Ultimate (Orion)». Коннектимся на нужный COM-порт, «Соединить» — «Serial Port». Теперь можно пощелкать по блокам управления моторами либо помигать светодиодом на плате (пин D13), чтобы убедиться, что все получилось.Переключитесь в режим Arduino mode, «Редактировать» — «Arduino mode». Соберите следующую программу из блоков. Вам потребуется создать переменную с именем «code». В блоке «слить» первый параметр просто текст, а второй — переменная.Нажмите на кнопку «Upload to Arduino», дождитесь конца загрузки. Скорее всего, Вам придется заново установить коннект с платой («Соединить» — «Serial Port»). Теперь хотелось бы пообщаться с Arduino контроллером, отправлять ему символы и видеть, что он нам отвечает. В правом нижнем углу программного окна mBlock находятся нужные нам инструменты. Переключитесь в «Char mode», отправьте на плату строчные латинские символы «w», «s», «a», «d». Мы узнали, что их коды 119, 115, 97, 100.Усложним программу, загрузим в контроллер.Заново установим соединение, проверим работу. У нас получился пульт дистанционного управления. Только пользоваться им неудобно. Давайте сохраним программу и закроем mBlock, нам он пока не нужен. Запустим любой терминальный клиент, умеющий отправлять символы, не дожидаясь нажатия на кнопку «Enter». Например, «Tera Term». Соединимся с COM-портом нашей платы, поменяем скорость на 115200 («Настройка» — «COM-порт»; чтобы не делать этого каждый раз, настройки можно сохранить, «Настройка» — «Сохранить настройки»). Управлять стало гораздо удобнее, робоплатформа сразу исполняет команду, стоит нажать на клавишу. Ко всему прочему, мы убедились, что программа действительно исполняется автономно на Arduino контроллере.Однако мы по-прежнему привязаны проводом, а робоплатформа крутит колесами в воздухе. Если мы сейчас попытаемся использовать Bluetooth вместо провода, никакого соединения не получится, наш Bluetooth модуль работает на скорости 9600. Поэтому закрываем Tera Term и заново запускаем mBlock.У нас есть пара способов решить проблему. Созданная нами программа транслируется в текстовой скетч, и его можно отредактировать перед загрузкой в контроллер, если нажать на кнопку «Edit with Arduino IDE» вместо «Upload to Arduino». Пробуем. Находим инструкцию «Serial.begin(115200)», меняем на «Serial.begin(9600)».Но так делать придется каждый раз. Давайте пожалеем себя и детей, добьемся того, чтобы текстовой скетч сразу генерировался «правильно» (так, как это нужно нам).Откроем меню mBlock «Extensions» — «Manage Extensions». Обратите внимание, оказывается, в mBlock можно добавлять собственные расширения! Выберем «Installed», найдем «Arduino», щелкнем «Просмотреть код».Откроется папка с файлами, описывающими работу в данным устройством. Отредактируем файл «Arduino.s2e» при помощи WordPad , заменим везде «Serial.begin(115200)» на «Serial.begin(9600)». На всякий случай стоит сделать резервную копию оригинальной версии файла. Готово, осталось перезапустить mBlock.Снова загружаем сохраненный проект. Не забываем переключиться в Arduino mode и установить соединение с платой. Проверяем текст сгенерированного скетча. И видим там скорость 9600!Загружаем в контроллер нажатием на кнопку «Upload to Arduino». Проверить работу программы при помощи строки и кнопки справа внизу не получится, mBlock сгенерировал скетч по нашему заказу, но все равно пытается устанавливать соединение на скорости 115200. Закрываем mBlock, либо просто сбрасываем соединение с контроллером (снимаем галочку в меню «Соединить» — «Serial Port»). Проверять работу дистанционного управления будем в Tera Term. Нужно только не забыть выставить скорость 9600 через меню «Настройка» — «COM-порт». По проводу все получается, осталось проверить работу по Bluetooth.Отсоединяем USB кабель, отключаем питание робоплатформы. Пора подсоединять HC-05 модуль. С использованием Arduino Sensor Shield возможно несколько вариантов подключения, удобнее всего через разъем «COM» (меньше риска запутаться в контактах). Схема подключения такова:«VCC» (HC-05) — «+» (Sensor Shield)«GND» (HC-05) — «-» (Sensor Shield)«TXD» (HC-05) — «RX» (Sensor Shield)«RXD» (HC-05) — «TX» (Sensor Shield)С контакта «TXD» («transmit data») данные бит за битом передаются по последовательному протоколу на контакт «RX» («receive data») платы «Sensor Shield» (и далее на Arduino контроллер), и подобным же образом в обратном направлении.Поскольку подключать и отключать HC-05 модуль придется часто, скрепите разъемы изолентой, чтобы контакты шли в правильном порядке.Кстати, на фотографии Вы можете увидеть, что я уже подключил к своей робоплатформе трехосевой гироскоп-акселерометр GY-521 MPU-6050. Мотайте на ус, скоро будем с ним работать в mBlock.При работе с Arduino по Bluetooth протоколу важно всегда помнить одну вещь. Когда Вы загружаете собственную программу или прошивку в Arduino контроллер, Вам следует подключить USB кабель и ОТКЛЮЧИТЬ Bluetooth модуль. Когда Вы пользуетесь загруженной программой (например, работаете в интерактивном режиме mBlock с Bluetooth подключением), не забыть подключить HC-05 модуль снова. И если у Вас что-то не получается, не паникуйте, а первым делом вспомните об этом простом правиле.Итак, Bluetooth модуль подключили. Щелкаем клавишей питания робоплатформы, светодиод на модуле должен начать часто мигать. Устанавливаем сопряжение средствами операционной системы компьютера. «Пуск», «Устройства и принтеры», «Добавление устройства». Windows покажет нам найденный модуль, и поскольку мы еще ничего не меняли, его имя будет «HC-05». Вводим код образования пары — «1234». Готово. Светодиодная индикация модуля изменилась. Открываем свойства «НС-5», вкладку «Оборудование» и видим номер связанного с устройством виртуального COM-порта. В моем случае это COM44. Запоминаем. Закрываем лишние окна и программы. Открываем Tera Term, соединяемся с нужным портом на нужной скорости. Проверяем. Можно поздравить себя, дистанционное управление по Bluetooth работает!Теперь можно заняться совершенствованием управляющей программы. Добавить пропорциональное управление (с регулировкой мощности), использовать вместо примитивного Tera Term собственноручно написанные либо готовые приложения, например «Arduino Bluetooth RC Car» для Android устройств.Напоследок в качестве маленького бонуса демонстрационный проект для двух Arduino контроллеров из моей статьи про настройку Bluetooth, «Bluetooth Ping-Pong».Скачать все проекты этой публикации: article3_sb2_projects.zip ( 119.05 килобайт ) Кол-во скачиваний: 83Продолжение следует!P.S. Кстати, создатели робоплатформы демонстрируют большую заинтересованность в совершенствовании набора и устранении найденных недочетов. Уже готов новый вариант корпуса, в котором датчики будут лучше защищены. Это очень приятно, некоторым российским разработчикам не хватает именно такой оперативности. Пожелаем издательству «БХВ-Петербург» успехов! Bluetooth Scratch arduino mBlock робототехника