Публикации сообщества

Александр Григорьев • 23 апреля 2020

Моделирование в среде Makecode Microbit перемещения шарика по наклоняемой платформе

Сегодня мы создадим проект для платы Microbit, при помощи которого можно будет потренировать свои жонглёрские способности. Посмотрите, как ловко манипулирует шариком робототизированное устройство, наклоняя платформу в ту или иную сторону.
https://www.youtube.com/watch?v=ASe9uZmp-y0

image-20200423100945-1

 

Мы смоделируем поведение шарика, катающегося по наклоняемой платформе, в среде Makecode Microbit. Вместо платформы мы будем наклонять сам микроконтроллер, оборудованный акселерометром, а виртуальный шарик у нас будет отображаться как световое пятно на светодиодной матрице микроконтроллера точками разной яркости. Проект мы будем создавать поэтапно, проверяя его работу на эмуляторе платы Microbit в среде Makecode.

 

ЭТАП 1. Подготовка.

Запустите среду Makecode Microbit в своём браузере при помощи ссылки ниже, создайте новый проект. Откроется редактор с палитрой блоков и изображением платы Microbit.
https://makecode.microbit.org

image-20200423100945-2

 

Для реализации проекта нам понадобятся следующие переменные, создайте их.

image-20200423100945-3

 

Кроме того, давайте сразу создадим собственные блоки, иными словами, подпрограммы, которые помогут структурировать наш проект. В среде Makecode подпрограммы прячутся в разделе "Функции", там же располагается и кнопка "Создать функцию".

image-20200423100945-4

 

При создании подпрограммы "ОТОБРАЖЕНИЕ_ТОЧКИ" добавьте два числовых параметра, отредактируйте их имена.

image-20200423100945-5

 

Теперь можно начать собирать программу из блоков.

 

ЭТАП 2. Учимся отображать "шарик" на светодиодной матрице микроконтроллера.

Вначале соберите основную программу. Как видите, она очень проста.

image-20200423100945-6

 

Доработайте определение блока "ПОДГОТОВКА_ШАРИКА".

image-20200423100945-7

 

Мы будем использовать систему координат точек светодиодной матрицы: горизонтальная координата это номер столбца, начиная с нулевого, вертикальная - номер строки. Строка с номером ноль располагается в самом верху, точка с координатами ( 2 )( 2 ) расположена в центре матрицы, с координатами ( 2 )( 4 ) - в нижней строке по центру.

Определение блока "ИЗМЕНЕНИЕ_КООРДИНАТ_ШАРИКА" мы пока не меняем, оно не содержит никаких команд. Поначалу наш виртуальный шарик будет оставаться неподвижным.

image-20200423100945-8

 

Блок "ОТОБРАЖЕНИЕ_ШАРИКА" при своей работе изменяет яркость 25ти точек матрицы.

image-20200423100945-9

 

Осталось научить нашу программу вычислять яркость каждого элемента светодиодной матрицы. Эта яркость будет зависеть от расстояния до центра шарика, чем ближе, тем ярче. Если расстояние от элемента матрицы до центра шарика превышает 1,5 единицы, яркость равна нулю.

Для определения расстояния между двумя точками используется теорема Пифагора. Горизонтальная дистанция ("г_дист") и вертикальная дистанция ("в_дист") вычисляются как разность между координатами шарика и элемента матрицы.

image-20200423100945-10

 

Эти две переменных обозначают длины катетов прямоугольного треугольника, на их основании вычисляется длина гипотенузы ("дистанция").

Обратите внимание на правильный порядок сборки арифметического выражения, чтобы все вычисления производились корректно. Вначале нужно взять блоки умножения (г_дист*г_дист) и (в_дист*в_дист), целиком вставить их внутрь блока сложения, и наконец полученный блок целиком поместить внутрь блока "квадратный корень".

image-20200423100945-11

 

Целиком подпрограмма "ОТОБРАЖЕНИЕ_ТОЧКИ" выглядит так.

image-20200423100945-12

 

Блок "построить" можно найти в разделе "Светодиоды", "More" ("Дополнительно").

image-20200423100945-13

 

Как можно видеть, эмулятор платы Microbit уже отображает по центру светодиодной матрицы наш виртуальный "шарик".

image-20200423100945-14

 

 

ЭТАП 3. Учимся менять положение "шарика", моделируем "отскок" от границ при движении.

Доработайте определение блока "ИЗМЕНЕНИЕ_КООРДИНАТ_ШАРИКА". Мы сделаем так, чтобы "шарик" мог двигаться в любую сторону с произвольной скоростью и "отскакивать" от границ, если пытается покинуть ту область, в которой мы способны его видеть.

image-20200423100945-15

 

Теперь добавим два блока, чтобы можно было запускать движение шарика и останавливать его.

image-20200423100945-16

 

Блок "выбрать случайно" возвращает лишь целые значения, мы используем деление на 100, чтобы значения скорости могли плавно варьировать от 0 до 1.

Щёлкните по кнопке А эмулятора микроконтроллера. Вы увидите, как световое пятно, обозначающее шарик, начало перемещаться.

image-20200423100945-17

 

Движение можно прекратить нажатием на кнопку B, либо остановив и вновь запустив эмуляцию при помощи кнопки на панели управления.

image-20200423100945-18

 

 

ЭТАП 4. Учимся управлять "шариком" путём наклона микроконтроллера.

Осталось сделать совсем немного. Добавьте пару блоков в цикл "постоянно".

image-20200423100945-19

 

Кроме того, теперь будет лучше, если "шарик" будет останавливаться лишь через 2 секунды после нажатия на кнопку B микроконтроллера.

image-20200423100945-20

 

Проверьте работу программы. Для перемещении курсора мыши поверх изображения микроконтроллера он "наклоняется", в соответствии с этим начинает перемещаться и "шарик".

image-20200423100945-21

 

Осталось назвать свой проект и сохранить его, а при наличии самой платы Microbit проверить работу программы на реальном устройстве.

image-20200423100945-22

 

 

Итоги, планы на будущее.

Управлять виртуальным "шариком" оказалось очень сложно. Если внимательно понаблюдать за его поведением, можно прийти к выводу, что нашу физическую модель требуется доработать, чтобы учитывалось трение качения или трение скольжения при перемещении объекта. Тогда световое пятно будет вести себя более правдоподобно. Это будет более похоже на реальный шарик или кусочек льда, который останавливается и остаётся на месте, если платформа располагается горизонтально либо почти горизонтально.

Кроме того, можно усовершенствовать отображение шарика, чтобы при удалении от его центра яркость менялась нелинейно.

image-20200423100945-23

 

Наконец, с использованием доработанной физической модели можно будет придумать и реализовать какую-нибудь интересную игру для платы Microbit.

Кол-во комментариев: (6)

Николай M
Интересный проект! Спасибо! Даже не думал, что такое можно сделать на этой платке. Давно купил этот micro:bit просто поиграться и это пока самый мощный проект, что я видел, а я много всего пересмотрел. Но, правда, я не понял как именно это работает, но теперь есть мотивация разобраться.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Александр Григорьев
    Спасибо большое! Мне и хотелось сделать что-нибудь не чересчур банальное :) Хотя в реальности ничего особо сложного, конечно. Успехов!
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Елена Шарикова
    Такой проект можно реализовать и в урочной и во внеурочной деятельности в виде исследовательской работы. Радует факт, что результат можно увидеть сразу на эмуляторе платы. Александр, как я понимаю, при тестировании программы на эмуляторе "шарик" наклоняется при перемещении курсора мыши поверх изображения микроконтроллера. А как тогда происходит тестировании при запуске программы на реальной плате?
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Александр Григорьев
    При перемещении мыши "наклоняется" плата эмулятора. В случае с реальной платой мы наклоняем саму плату. "Шарик" начинает перемещаться под уклон.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии