Дерзай! Программирование мобильной робоплатформы в mBlock, конфигурация MakeBlock-Scratchduino Александр Григорьев (p&t) / 19.11.2016 В своей прошлой публикации я рассказал о новом продукте издательства «БХВ-Петербург», наборе «Мобильные роботы на базе Arduino + книга». Мы научились управлять моторами с использованием предлагаемой в книге схемы подключения. К сожалению, эта схема имеет недостатки, и нам придется поработать, чтобы от них избавиться. Давайте определим, чего мы хотим добиться.- Для управления моторами используется слишком много выходов Arduino, целых шесть, хотелось бы снизить их число до четырех (на большее пока не замахиваемся).- В будущем нам понадобятся пины D2, D3, D11 для специальных задач, освободим их от управления моторами.- Было бы удобно использовать какую-то общепринятую конфигурацию, это давало бы нам дополнительные возможности.О последнем пункте следует рассказать подробнее.То, что мы получим, выбрав общепринятую схему подключения, это возможность использования готовых библиотек для управления движением робоплатформы. Безусловно, мы уже один раз справились с задачей, только зачем снова и снова пытаться изобретать велосипед? Сосредоточимся лучше на чем-то более интересном.Самый же главный аргумент перехода к альтернативной аппаратной конфигурации выходит за рамки позиции «лень — двигатель прогресса». Мы с вами, как люди взрослые, в состоянии напрячься и понять, что такое широтно-импульсная модуляция (ШИМ), изучить принцип работы H-моста. Но зачем же сразу грузить детей этими излишними для начала подробностями? Всему свое время. Хотелось бы иметь возможность программировать нашу робоплатформу с использованием графической среды с простыми и понятными командами, без необходимости объяснять детям, в какой пин нам надо записать какое значение, чтобы поехать вперед.Попытаемся максимально упростить пользование робоплатформой во время занятий с детьми, а если говорить конкретнее, сделать так, чтобы можно было брать готовые блоки управления моторами при программировании в визуальной среде mBlock. Для этого нам придется изменить аппаратную конфигурацию робоплатформы, сделать ее совместимой с MakeBlock и ScratchDuino.Рассмотрим, каким образом здесь происходит управление моторами. ScratchDuino робоплатформа и все робоконтроллеры начального уровня MakeBlock (Me Orion, Me Uno Shield, mCore) совместимы с Arduino Uno, имеют сходную конфигурацию и управляются одинаково. Кстати, это означает, что если у вас есть ScratchDuino робоплатформа, вы можете работать с ней, как-будто бы это робот на базе Me Orion, используя программирование в среде mBlock. И если это вам зачем-то нужно, вы можете взять Arduino Uno, Me Uno Shield и работать с ними в среде визуального программирования ScratchDuino. После модификации нашу БХВ-робоплатформу тоже можно будет программировать в обоих визуальных средах с использованием готовых команд управления движением. Давайте договоримся, что левый двигатель у нас подключен как M1, правый как M2, при положительном значении мощности происходит движение вперед, при отрицательном — назад (для ScratchDuino робоплатформы это будет верно, если считать, что передняя часть у нее там, где два датчика).В конфигурации MakeBlock/ScratchDuino используется всего 4 выхода Arduino контроллера для управления движением — D4, D5, D6, D7.Наша робоплатформа должна управляться следующим образом:- D7 – задаем направление вращения левого двигателя (M1), если записываем в порт LOW (логический ноль), получается движение назад, HIGH (логическую единицу) – вперед;- D6 – задаем мощность левого двигателя (M1), генерируем ШИМ со скважностью 0 — остановка (нулевая мощность), со скважностью 255 — максимальная мощность;- D4 – направление правого двигателя (M2), LOW – назад, HIGH – вперед;- D6 – мощность правого двигателя (M2), ШИМ со скважностью 0 — остановка, со скважностью 255 — максимальная мощность.Между тем, и драйвер двигателя L293D робоплатформы ScratchDuino, и наш L298N, имеет 3 входа для управления каждым двигателем. Мы могли бы использовать самодельный драйвер из двух реле и транзистора, схема управления осталась бы той же.Рассмотрим все подробнее на примере управления правым двигателем. Нашей задачей является превратить два выходных сигнала в три. Сигнал ШИМ, получаемый с порта D5 контроллера Arduino, не трогаем и подаем напрямую на входной контакт «Enable» драйвера двигателя. А выходной сигнал с порта D4 преобразуем по следующей схеме:- когда на D4 логическая единица, на контакт In1 драйвера двигателя подаем логический ноль, а на In2 логическую единицу;- когда на D4 логический ноль, на In1 подаем логическую единицу, а на In2 логический ноль.Таким образом, H-мост драйвера двигателя будет всегда в одном из двух базовых состояний: вращение вперед или вращение назад. Мы потеряли возможность динамического торможения двигателя, зато освободили пару портов Arduino для выполнения других задач.Но каким образом преобразовать сигнал? Поможет нам использование микросхемы транзисторно-транзисторной логики (TTL) подобной SN7400N или КМ155ЛА3 (отечественный аналог).В блоге Леонида Захарова описано, как спаять необходимую простенькую схему. Для тех же, у кого нет возможности заниматься травлением или фрезеровкой, предлагаю вариант с монтажом на беспаечной плате. Итак, потребуется приобрести (либо извлечь из закромов - макетную беспаечную плату (берите сразу хотя бы парочку, пригодится);- микросхему КМ155ЛА3 или аналог (4 логических элемента 2и-не);- 4 резистора 1 кОм (в моем случае резисторы 10 кОм не подошли, все заработало лишь с 1,8 кОм, для надежности берем 1 кОм);- провода Dupont «папа-мама»;- провод одножильный изолированный сечением 0,5-0,9 мм (для монтажа).Для тестирования схемы понадобится:- пара светодиодов;- пара резисторов 220 Ом;- тактовая кнопка;- провода Dupont «папа-папа»;- макетная беспаечная плата (для подобных целей удобнее использовать вот такую).Согласитесь, сложно иметь дело с роботом, который так и норовит уехать со стола, стоит лишь подключить питание. Поэтому добытую тактовую кнопку после окончания тестирования подключим к контроллеру и в дальнейшем будем писать программы так, чтобы робот никуда не ехал, пока мы на нее не нажмем. Потребуется еще резистор на 10 кОм.Монтируем по следующей схеме (обратите внимание на вырез на корпусе микросхемы, он показывает, где расположены контакты 1 и 14). Пока не спешим устанавливать собранную схему в робоплатформу.Собираем схему для тестирования, подключаем вместо драйвера двигателя.Тестируем оба логических преобразователя (D4 – In1, In2 и D7 – In3, In4). Для тестирования достаточно просто соединять проводочком контакты +5V и D4 (D7) на логическом преобразователе, но для наглядности мы подключим кнопку. Когда кнопка не нажата должен гореть один светодиод, когда нажата — другой. В качестве источника питания можно использовать плату Arduino робоплатформы. Убедившись, что схема работает, устанавливаем ее в робоплатформу и все окончательно подключаем. Напомню, сигнал ШИМ идет напрямую от контроллера Arduino к драйверу двигателя (от D5 к EnA, от D6 к EnB).На ту же макетную плату монтируем тактовую кнопку по следующей простой схеме. Понадобится сама кнопка и резистор 10 кОм. Подключаем к контакту D12.Собираем робоплатформу. Вид на кнопку.Остается провести ходовые испытания. Выбираем в mBlock расширения «Arduino» и «MakeBlock», плату «Starter/Ultimate (Orion)». Соединяемся с нужным COM-портом, загружаем прошивку. Теперь можно вдоволь пощелкать по блокам управления двигателями. Не забудьте поставить робота на подставку, чтоб не уехал со стола! Полюбуемся открывшимся богатством. «Ultrasonic sensor», «3-осевой гироскоп»… Будем этим учиться пользоваться!В качестве побочного эффекта имеем заметное увеличение стабильности работы mBlock в режиме интерактивного управления. Теперь для управления двигателем от компьютера к контроллеру отправляется одна команда, а не три.Тестируем работу кнопки.Загружаем в робоплатформу тестовую программу для автономной работы. Обратите внимание, мы используем «шапку» «Orion program». Переключаемся в «Arduino mode», собираем программу из блоков, нажимаем на кнопку «Upload to Arduino».Как видите, теперь все проще и понятнее. Программа загружена, светодиод на плате сигналит, что робоплатформа готова стартовать, отсоединим USB провод, нажмем на кнопку, поехали!Стоит добавить, что возможно использовать и иные схемы управления двигателями. Например, собрать конфигурацию, аналогичную Robbo.robot. Для этого не потребуется никаких дополнительных деталей. Но нам сложнее будет работать с mBlock.Теперь мы можем использовать для занятий еще и вот такую книжку:Все mBlock проекты этой публикации: mBlock_article2.zip ( 117.91 килобайт ) Кол-во скачиваний: 90.Продолжение следует! Makeblock Scratch Scratchduino arduino mBlock робототехника