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

Михаил Семионенков • 5 марта 2020

Курс программирования и робототехники, глава 1

                                                                                                                                                   Посвящаю маме

 

Этот материал является переизданием "Азов программирования и робототехники с роботом Maqueen" в качестве первой главы аносированного курса основ программирования и робототехники

Переиздание связано с накопившимися изменениями в среде программирования makecode, изменениями комплектации и программной поддержки робота Maqueen. Увеличено число иллюстраций. Переиздание также отражает первый опыт преподавания курса школьникам и исправляет выявленные ошибки. 

Знакомым с предыдущей версией рекомендую обратить внимание на новую трактовку блоков 3 (Загрузка программы), 7 (Расширения makecode).

Рекомендуемый возраст учащихся - 5-7 классы (хотя материал, за вычетом блока 9, вероятно, может быть опробован и с ребятами младше).

Глава 1. Азы программирования и робототехники с роботом Maqueen

Оборудование и материалы

Описание оборудования выполнено исходя из численности класса до 12 человек, по 2 человека в команде.

Класс:

  • ученические компьютеры в выходом в интернет и USB - 6
  • учительский компьютер с проектором для показа экрана - 1
  • рекомендуемый браузер - Chrome

Замечание 1: прямая загрузка программ на контроллер micro:bit на момент написания материала возможна только в браузере Chrome, прочие ограничения, связанные с использованием других браузеров, автору не известны.

Замечание 2: материал опробован с браузером Chrome

Комплект для раздачи учащимся:

  • робот Maqueen (рекомендуемая версия - от 4.0) со схемой сборки, кабель microUSB, контроллер micro:bit, 3 батарейки ААА - 6 (с начала занятий)
  • плата расширения micro:bit с литиевым аккумулятором + micro:bit - 6 (с блока 10)

Предварительная подготовка ученических компьютеров: переключить среду программирования makecode на русский язык:

  • в браузере заходим на https://makecode.microbit.org/
  • выбираем "New Project", ожидаем окончания закрузки
  • в "шестерёнке" в верхнем меню справа выбираем "Language"
  • выбираем "Русский" - интерфейс меняется на русский
  • в "шестерёнке" выбираем "Удалить проект"

Предварительная подготовка контроллеров (не обязательный шаг)

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

Содержание главы

В главу включены 10 учебных блоков, общим объёмом 4 академических часа. Еще 2 часа - проектно-конкурсная программа.

Блок 1. Сборка робота

Начиная с версии 4.0, инструкция (рисунки) по сборке входит в комплектацию робота  Её можно продублировать текстовым вариантом на русском языке с экрана учительского компьютера:
 

  • убедиться, что выключатель находится в положении "OFF" (выключено)
  • установить колеса 
  • взять липучку, снять защитную бумагу с одной стороны
  • приклеить липучку к блоку питания снизу
  • вставить кабель блока питания в разъём на роботе
  • снять защитную бумагу со второй стороны липучки
  • приклеить липучку к моторам
  • вставить контроллер в разъем (правильность сверять по рисунку на упаковке)
  • поставить 3 батарейки ААА

Робот готов (датчик дальности пока использоваться не будет).

Блок 2. Программа, среда программирования makecode 

Чтобы робот заработал, в него надо загрузить программу.
Что такое программа?
Это набор инструкций, которые робот должен выполнить.
(При сборке робота учащийся исполнял программу)

Для создания программы нужен инструмент. Таким инструментом является среда программирования makecode.

Новый проект показывается на экране учителя:.

makecode
Система makecode в браузере


Объясняем главные части: 

  • слева - контроллер ("мозги" робота)
  • правее - "касса", из которой мы будем набирать нужные блоки, из которых формируется программа
  • справа - поле, в котором будет собираться программа

В поле уже есть 2 блока: "при начале" и "постоянно".
В блоке "при начале" будут помещены команды, которые будут исполнены один раз - прм запуске программы.

В блоке "постоянно" команды будут выполняться  после выполнения блока "при начале", и будут повторяться многократно: после завершения выполнения команд команды снова будут исполняться с начала блока "постоянно".
Преподаватель собирает на экране программу Пропеллер, используя блоки из папки "Основное".

Пропеллер
Программа "Пропеллер"

Вопросы по ходу: "Сколько ещё блоков нужно?"
"Сделайте последние 2 блока самостоятельно"

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

Блок 3. Загрузка программы на контроллер робота

  1. убедиться, что питание на роботе выключено: лампочки не горят, выключатель в положении OFF.
  2. соединить компьютер с контроллером робота: проверить узкую и широкую части разъёма на контроллере и вставлять аккуратно, без грубой силы, в разъём - на контроллере загорится лампочка, теперь контроллер использует питание компьютера, файловый менеджер откроет внешнее устройство MICROBIT
  3. внизу, в поле "Название" ввести название программы (Пропеллер)
  4. нажать иконку справа "Сохранить" (Save) - файл с программой появится слева в нижней строке браузера
  5. открыть менеджер файлов и перетащить мышкой сохранённый файл в нижней строке браузера на устройство  MICROBIT - программа начнёт загружаться
  6. после завершения загрузки программы - отсоединить кабель от контроллера (если кабель, присоединённый к контроллеру, не очень мешает, проще достать кабель из компьютера) 
  7. включить питание (выключатель - в положение .ON)

- программа начнёт работу

Замечания. 1. Завершённые программы или программы, представлющие интерес, рекомендуется сохранять с специально отдевённом для этого месте файловой системы.

2. В браузере Chrome доступна прямая загрузка программы из системы makecode на контроллер, но она тркбует выполнения большего числа операций, работает, на момент написания материала, нестабильно, и здесь не описывается. 

4. Закрепление, самостоятельная работа

Самостоятельно создать другие программы, используя блоки из меню "Основное", название которых начинается с "показать", посмотреть их работу на симуляторе и загрузить на контроллер.
Не забывайте переименовывать программы перед скачиванием.
Опробовать самостоятельно блок "пауза (ms)"
Обсуждение блока "пауза".

Блок 5.1 Понятие ввода и вывода. Работа с кнопками  

Программа "Пропеллер" это пример того, как информация из программы робота выводится наружу: робот "разговаривает". Но если бы робот не умел "слушать", то есть, получать информацию снаружи, его возможности были бы весьма ограничены.
У робота Maqueen есть много способов получать информацию снаружи, благодаря чему можно запрограммировать достаточно сложное поведение робота.
Самый простой пример ввода информации в программу робота - нажатие кнопок на контроллере. 

на изображении контроллера показаны кнопки А и B.
Каждая из кнопок может быть в двух состояниях: "нажата" и "не нажата".
Вопрос: сколько всего есть возможных комбинаций состояния двух кнопок?
 
Из четырёх комбинаций 3 комбинации мы будем рассматривать как "События": что-то произошло, и нужно на это отреагировать какими-то действиями.
Четвертое состояние - "обе кнопки не нажаты" - "Событием" считать не будем: ничего же не произошло.
Итак, нам нужно обработать 3 события. Для этого

  • из меню "Ввод" взять блок "кнопка А нажата".

Блок надо заполнить действием, которое будет выполняться при нажатии кнопки А. Например, можно вывести на экран контроллера название нажатой кнопки (блок "Основное.показать строку")
В блоке "показать строку" напишем "А" (Внимание - работают только латинские буквы, кириллица не работает).
Мы получили блок обработки нажатия кнопки А.  

  • проверить работу программы на симуляторе

Блок 5.2 Дублирование блоков

После проверки работы блока можно приступать к созданию аналогичных блоков для обработки других событий. Для ускорения работы иногда блоки удобно дублировать. Сейчас как раз такой случай. Для дублирования блоков нужно: 

  • навести курсор мыши на блок "Кнопка А нажата", нажать правую кнопку мыши
  • в появившемся меню выбрать "Дублировать" - появится бледная копия блока "Кнопка А нажата".
  • в меню кнопки блока "Кнопка А нажата" выбрать кнопку В. 
  • в блоке "показать строку" исправить "А" на "B"

Теперь

  • выполнить дублирование ещё раз и изменить кнопку и текст "А" на "А+В"
  • проверить работу программы на симуляторе
  • дать программе название и скачать на контроллер 

Блок 6. Звук. Самостоятельная работа

Задача: создать проект, в котором по нажатию кнопки контроллера издаётся звук, имитирующий сигнал автомобиля. Блоки для звука подобрать из папки "Музыка".
Отладить программу на симуляторе.
Присвоить имя и загрузить программу на контроллер.
Отсоединить кабель USB от контроллера, включить робота и проверить программу

Блок 7. Расширения среды makecode. Движение робота

Среда программирования makecode изначально ничего "не знает" о роботе Maqueen. Но среда makecode позволяет использовать не только её встроенные возможности, но и добавлять новые блоки, такие как блоки управления роботом Maqueen. Пока мы работали только с контроллером робота, платой micro:bit: чтобы использовать возможности робота, надо включить в среду makecode специальное расширение:

- создать новый проект
- в верхнем меню справа нажать "шестерёнку", выбрать "Расширения"
- в поле URL-адреса ввести maqueen и нажать Ввод (Enter)
- выбрать расширение maqueen - в центральном меню на основном экране появится папки Maqueen и MaqueenIR

За движение робота отвечает блоки управления моторами в папке Maqueen:

  1. motor move at speed
  2. motor stop

У блока motor move at speed есть два меню:

  motor = left (левый) | right (правый) | all (все)

  move = forward (вперёд) | backward (назад)

а также окно для ввода скорости (от 0 до 255).

Блок motor stop содержит меню motor, идентичное меню в блоке motor move at speed.

Пример управления моторами:

Моторы
Пример управления моторамм

 

Замечание: программы движения робота очень чувствительны к состоянию батареек. Если программа работает не так, как ожидается, причиной может быть старая батарейка.

Блок 8.1 Поворотники. Циклы 

На переднем крае робота есть две красные лампочки. Попробуем использовать эти лампочки в качестве поворотников.
Блок для работы с лампочками находится в папке Maqueen. Блок называется "LEDlight".
Первое меню в блоке позволяет выбрать лампочку: 

  •  left - левая
  •  right - правая

второе меню - операцию с лампочкой:

  •  ON - включить
  •  OFF - выключить

Как можно изобразить работу поворотника?
Поворотник "мигает": включается, выключается, опять включается, и так несколько раз.
Один фрагмент работы поворотника выглядит так:

  •  включить лампочку
  •  пауза
  •  выключить лампочку
  •  пауза

У нас есть соответствующие блоки. 
Как выполнить мигание несколько раз?
Для многократного повторения одних и тех же операций есть специальный блок: "повторить" из папки "Циклы".
Достанем блок "повторить" и включим туда одно "мигание". Теперь зададим нужное число миганий.
Если привязать работу поворотника к нажатию кнопки, то получится программа типа "Поворотники Maqueen"

Поворотники
Поворотники
  •  проверить программу

Блок 8.2 Переменная

В программе число миганий (5) стоит в каждом блоке. Если мы захотим поменять число миганий на другое, то нам придется внести изменения в 3 блока. Это неудобно и создаёт почву для ошибок (мы поменяли число не во всех местах или случайно поменяли в разных местах по-разному).  
Чтобы избежать таких ошибок, нужно хранить число в одном месте. Для этого есть специальный механизм - переменная.

  • в папке "Переменная" выбрать "Создать переменную"
  • ввести имя переменной: "Число миганий" (имя может быть произвольным, но, естественно, выбор содержательного имени гораздо удобнее для работы), нажать "ОК"  - в папке "Переменные" появится блок "задать для "Число миганий" значение "0"
  •  захватить блок "задать для "Число миганий" значение "0" и перенести его в блок программы "при начале"
  •  в блоке "задать для "Число миганий" значение "0" заменить 0 на желаемое число

Мы создали переменную "Число миганий" и задали её значение.
Осталось поставить переменную во все места, где она нужна:

  • в папке "Переменные" захватить переменную "Число миганий" и перенести в один из блоков "повторить" на место числа
  •  дублировать в блоке "повторить" переменную "Число миганий" и перенести копию в другой блок
  •  повторить предыдущую операцию для последнего блока

Теперь для изменения числа миганий во всех трех блоках достаточно поменять значение в одном месте: в блоке  "задать для "Число миганий" значение ..."

  • проверить изменённую программу с другим значением 


Блок 9   Переключатель: переменная в качестве памяти. "истина" и "ложь", блок "если...то".

В следующем проекте мы сделаем поворотник, который можно включать и выключать.

  • создать новый проект
  • добавить в проект расширение maqueen

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

Блок 9.1 Создание переменной состояния поворотника, задание начального значения. Пара логических значений "истина" и ложь"

  • создать переменную "Левый поворотник выключен" (она будет содержать информацию о левом поворотнике)
  • перенести блок "задать для Левый поворотник выключен значение 0" в блок "при начале"

Для обозначения одного из двух состояний в качестве значений переменной можно использовать не числа, а пару специальных значений: "истина" и "ложь".
"Истина" и "ложь" в нашем случае будут ответом на вопрос "Поворотник выключен?": "истина" - да, "ложь" - нет (поворотник включён).
Специальные значения "истина" и "ложь" находятся в папке "Логика".
В начале работы программы поворотник выключен, значит, начальное переменной "Левый поворотник выключен" будет ...? Правильно, "истина".

  • перенести "истина" из папки "Логика" на место нуля в блоке "задать для Левый поворотник выключен"

Блок 9.2 Переключение поворотника по нажатию кнопки. Блок "если ... то ... иначе". 

  • перенести в программу блок "кнопка А нажата"

При нажатии кнопки нам нужно переключить поворотник: 


если поворотник выключен то
    включить поворотник 
иначе (то есть, в случае, если поворотник включен)
    выключить поворотник 


Программа находится на развилке, как витязь на распутье: 

Развилка

"направо пойдёшь... налево пойдёшь".
Для проверки условия и выбора одного из двух возможных путей исполнения программы есть специальный блок "если ... то ... иначе" в папке "Логика":

  • перенести блок "если истина то ... иначе" внутрь блока "кнопка А нажата".

Верхняя "строчка" блока (если) выполняет проверку условия, проверку состояния нашего переключателя, то есть ...? проверку переменной "Левый поворотник выключен".

  • перенести переменную "Левый поворотник выключен" из папки "Переменные" в блок "если" на место блока "истина"

У нас получилось "если Левый поворотник выключен то"

Что нам надо сделать, если поворотник выключен? Включить поворотник.

  • из папки Maqueen переносим блок "LEDlight (left) turn (ON)" в ветку "то" блока "если"

Теперь надо заполнить вторую ветку - выключением левого поворотника (дубль блока "LEDlight", перенос копии в ветку "иначе", правка "ON" на "OFF")

Блок 9.3 Изменение состояния переключателя. Блок "не"

Полученная программа сработает при первом нажатии кнопки: выполнится ветка "то", и поворотник включится.
Что будет при втором нажатии кнопки? Поскольку значение переменной "Левый поворотник выключен" останется "истина",  то опять будет выполнен блок внутри ветки "то", то есть, поворотник опять будет включаться, а не выключаться.
Что нужно сделать, чтобы программа работала? После выполнения блока "если" нужно "задокументировать" произошедшее изменение состояния поворотника, то есть, изменить значение переменной "Левый поворотник выключен" на противоположное. Значение переменной "Левый поворотник выключен" нужно менять в блоке."задать для Левый поворотник выключен":

  • в блоке "при начале" дублировать блок "задать для Левый поворотник выключен" и перенести копию в блок "кнопка А нажата" после блока "если"
  • в копии удалить блок "истина" (меню правой кнопки мыши)

Теперь вместо удалённого значения "истина" нужно внести "значение, противоположное значению переменной "Левый поворотник выключен". Для того, чтобы "перевернуть" значение переменной, нужно использовать специальный блок "не"  в папке "Логика". 

  • из папки "Логика" перенести в поле сборки программы блок "не" из секции "Булевы операторы"
  • из папки "Переменные" перенести переменную "Левый поворотник выключен" внутрь блока "не"

блок "не" работает в качестве "переключателя" логической переменной, которая указывается внутри блока: 
если переменная внутри блока "не" имеет значение "истина", то блок возвращает значение ...? "ложь". И наоборот. 

  • поместить в блок "не" переменную "Левый поворотник выключен"
  • поместить блок "не" в пустое место блока "задать для Левый поворотник выключен":

в результате мы получили блок "задать для Левый поворотник выключен значение не Левый поворотник выключен", что, проще говоря, означает, "изменить значение "Левый поворотник выключен" на противоположное"

  • проверить полученную программу

Блок 9.4 Блок работы с правым поворотником

Мы убедились, что программа работает, значит, можно создавать аналогичный блок "кнопка В нажата".
Но сначала нам нужно создать переменную состояния для правого поворотника. Назовем её? "Правый поворотник выключен".

  • создать переменную "Правый поворотник выключен"
  • в блок "при начале" поместить блок "задать для Правый поворотник выключен" и задать значение "истина"

Теперь можно приступать к блоку "кнопка В нажата":

  • дублировать блок "кнопка А нажата"
  • заменить в копии "А" на "В"
  • все вхождения переменной "Левый поворотник выключен" заменить на "Правый поворотник выключен" (используя меню при имени переменной)

получили программу "поворотники maqueen с выключателем"

  • проверить программу

maqueen поворотники с выключателем

Блок 10.1 Радио (Bluetooth)

Два контроллера могут "общаться" между собой. Для обмена информацией им нужен канал связи.
Блоки из папки "Радио" позволяют определить канал и посылать по нему информацию.
Демонстрируем на учительском экране программу "Радио".

Программа "Радио"
Программа "Радио"


Каждой группе даётся свой номер канала.
Ученики должны воспроизвести программу у себя.

  • загрузить программу на 2 контроллера
  • проверить работу программы 

Блок 10.2 Кодирование (шифрование) сообщения

Сообщение, которое пересылает один контроллер другому, можно закодировать, то есть, вместо текстового сообщения посылать числа. смысл которых известен на передающей и принимаюшей стороне (закодированные сообщения используются не только шпионами: кодирование часто используется, чтобы сделать хранимую и передаваемую информацию компактнее. Если, например, пронумеровать все товары в магазине, то покупку можно описать как набор чисел, что будет короче словесного списка товаров в покупке).

  • в предыдущей программе, заменить блоки "радио: отправить строку" на блоки "радио; отправить число"
  • записать в блоках "радио; отправить число"  числа 1, 2, 3 соответственно.
  • заменить блок "радио: при получении данных receivedString" на блок "радио: при получении данных receivedNumber"
  • заменить блок "показать строку" на блок "показать число"
  • проверить программу

Блок 10.3 Каскад блоков "если ... то"

Следующий шаг - модифицируем программу, чтобы по нажатию кнопки на одном контроллере на другом исполнялась определённая мелодия. Поскольку у нас есть 3 варианта нажатия кнопок: А, В и А+В, то пользоваться блоком "если ...то ... иначе" (который хорош для оформления двух веточек программы), не очень удобно. Лучше воспользоваться несколькими более простыми блоками "если ... то"

если получено 1 то 
  запустить мелодию1 1 раз
если получено 2 то
  запустить мелодию2 1 раз
если получено 3 то
  запустить мелодию3 1 раз

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

  • поместить блок "если ... то" внутрь блока "радио: при получении данных"
  • поместить внутрь блока "если" блок "запустить мелодию"

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

  • в папке "Логика" захватить блок "сравнение чисел" и поместить его на место блока "истина" в блоке "если"

Осталось заполнить значения в блоке сравнения:

  • в блоке "радио: при получении данных" захватить мышью блок "receivedNumber" и переместить его внутрь блока сравнения
  • в блоке сравнения на втором месте написать 1
  • дублировать блок "если" и поместить его под оригинальным блоком "если"
  • в дубле заменить 1 на 2 и заменить мелодию в блоке "запустить мелодию
  • еще раз дублировать блок "если" с заданием 3 в качестве числа для сравнения и новой мелодией в блоке "запустить мелодию"

Программа готова.

  • проверить работу программы  


Блок 11. Конкурс 

Подготовка - батарейки для конкурса должны быть достаточно свежие. При необходимости надо сменить батарейки на роботах до начала (в противном случае роботы могут не работать из-за недостатка "тяги" батарейки).

Блок 11.1 Разработка пульта управления

Каждой команде дается свой номер канала радио

Задача:

Робот должен управляться по радио нажатиями кнопок А и В на пульте (втором контроллере).
Нажатие кнопки А должно включать левый мотор, повторное нажатие - выключать мотор, следующее - опять включать, и т.д.
Кнопка В должна аналогичным образом работать для правого мотора. 

Предупреждение: частые нажатия кнопок могут привести к сбою программы, поскольку программа не будет успевать обрабатывать команды.

После завершения разработки программы и её тестирования программа показывается преподавателю. При необходимости программа дорабатывается по рекомендациям преподавателя.

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

Блок 11.2 Гонки

Этот раздел пока не детализируется, разработка трасс и системы зачёта остаются на откуп преподавателя. 

Блок 12  Работа над собственными проектами в свободном режиме

Это резерв, на случай, если останется свободное время.

Приложение 1. Обновление прошивки на контроллере micro:bit

Прежде всего, нужно проверить версию прошивки на устройстве:

  • при подключённом к компьютеру контроллере micro:bit, откройте файл DETAILS.TXT на устройстве MICROBIT
  • найдите строку Interface Version:

если версия (число в строке Interface Version) равна 0249 или новее (число больше), обновление не обязательно

Если обновление требуется,

  • отключите micro:bit от компьютера 
  • нажмите на контроллере кнопку Reset (с "тыльной" стороны контроллера рядом с разъёмом USB)
  • не отпуская кнопку, подключите micro:bit к компьютеру
  • когда мигание лампочки на контроллере прекратится, отпустите кнопку - в файловой системе появится устройство MAINTENANCE (это говорит о том, что устройство готово к обновлению прошивки)
  • запустите браузер, откройте страницу https://microbit.org/guide/firmware/
  • найдите на странице кнопку Download the latest micro:bit firmware
  • нажмите кнопку - на компьютер загрузится файл с расширением hex с новой прошивкой
  • скопируйте загруженный файл на устройство MAINTENANCE - устройству вернётся имя MICROBIT

- контроллер micro:bit готов к подключению к системе makecode для прямой загрузки программы.