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

Михаил Семионенков • 2 октября 2019

Идея "Гросс-курса". Конспект курса по азам программирования и робототехники

Эта публикация предлагает для обсуждения формат занятий для дополнительного образования, а также содержит авторский пример курса в предлагаемом формате по азам робототехники и программирования. 

Идея "Гросс-курса"

 

Давно вынашивал идею формата занятий для дополнительного образования, который я назвал "Гросс-курс", и вот созрел поделиться и идеей, и первым примером (ещё не обкатанным на занятиях).
Идея названия восходит к "гросс - дюжина дюжин", иными словами, 12х12. Расшифровка такая:


Первые 12 - это продолжительность курса: 12 академических часов.

С одной стороны, 12 часов - достаточно много (по одному уроку в неделю - целая четверть "с хвостиком"). С другой - 12 часов можно компактно уложить в 2 дня (например, выходные) по 6 часов, или 3 дня - по 4 часа, или, например, в вечерний интенсив на неделю по 2 часа.
Что можно "упаковать" в такой формат? Да много чего: от введения в какую-то интересную область до плотного разбора узкоспециальной темы, например, для ЕГЭ, главное, чтобы тема была востребована, материал подобран квалифицированно, а занятия проводились нескучно.


Вторые 12 - число участников.

Представляется, что с большим числом трудно оказать достаточно внимания всем участникам, не имея ассистента, который "в теме". Кроме того, для предполагаемой проектно-конкурсной составляющей курса число участников, имеющее много делителей, оставляет большой выбор по разбиению участников на команды.

Гросс-курс меняет фокус от длительных занятий с одними и теми же учениками к многократному проведению занятий с разными учениками. 
Годовой курс можно в принципе разбить на несколько "гроссов".
Кроме выходных, гросс-курс достаточно легко вписать в программу фестивалей, сделать "гастрольным", т.е. посещать с курсом другие города, а также реализовывать его для приезжих: компактность во времени открывает широкие возможности. Гросс-курс может быть хорош как отбор для формирования серьёзного традиционного кружка, куда придут те, кто проявил заинтересованность и склонность на интенсивном "пробнике".
Не последнее дело - формат удобен для монетизации: даже при весьма скромной часовой оплате с участника преподаватель за два-три дня может заработать заметные деньги.      

Пример "Гросс-курса"

 

Мой первый "Гросс" - по азам робототехники и программирования.
Курс ориентирован на 5-6 класс (с отбором нижнюю границу можно, думаю, опустить до 3-его класса).
В сухом остатке курс вводит в мир программирования и робототехники, знакомит с контроллером micro:bit и с графической средой программирования makecode, позволяет поучаствовать в робототехнических соревнованиях.
Курс построен вокруг робота Maqueen (фирма dfrobot, Китай) - бюджетного и, вместе с тем, добротно реализованного и хорошо оснащенного. Робот удачно дополняется возможностями контроллера micro:bit.

После завершения курса учащимся открываются возможности самостоятельной работы с контроллером micro:bit..

Практическая проверка курса намечена на осенние каникулы, в формате "3 дня по 4 часа".

Конспект курса "Азы программирования и робототехники с роботом Maqueen"

 

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

 

Класс:

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

Комплект для раздачи учащимся: (робот Maqueen, кабель microUSB, контроллер micro:bit, 3 батарейки ААА) - 12

Файлы на учительском компьютере:

  • Инструкция по сборке робота (блок 1)

Файлы на ученических компьютерах:

  • Файл с адресом расширения maqueen  

Предварительная подготовка материалов для раздачи

  •  открыть коробки с роботами и вскрыть запаянные упаковки (чтобы не пользоваться на занятии ножницами).

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

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

Содержание курса

В курс включены 10 учебных блоков, средняя продолжительность блока предположительно 30 минут, суммарно 6-7 академических часов. Оставшиеся часы - проектно-конкурсная программа

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

На экране преподавателя - инструкция по сборке:
 

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

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

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

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

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

Новый проект показывается на экране учителя - смотри вложение "НовыйПроект".
Объясняем главные части: 

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

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

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

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

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

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

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

===
Возможная предварительная подготовка - ставим кабели microUSB
===

  • убедиться, что питание на роботе выключено: лампочки не горят, выключатель в положении OFF.
  • соединить компьютер с контроллером робота: проверить узкую и широкую части разъёма на контроллере и вставлять аккуратно, без грубой силы, в разъём (на контроллере загорится лампочка, теперь контроллер использует питание компьютера)
  • внизу, в поле "Название" ввести название программы (Пропеллер)
  • нажать икону справа "Сохранить"
  • при появление вопроса "What do you want to do..." (что вы хотите сделать с файлом) выбрать "Save" (Сохранить)
  • выбрать ""Open folder" - появится список файлов с курсором на файле с программой
  • нажать правую кнопку мыши, выбрать "Copy"
  • в списке слева, открыть папку MICROBIT
  • в папке нажать правую кнопку мыши, выбрать "Paste" (Вставить)

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

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

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

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

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

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

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

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

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

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

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

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

Теперь

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

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

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

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

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

- создать новый проект
- открыть файл с адресом расширения maqueen и скопировать адрес (https://github.com/DFRobot/pxt-maqueen)
- в верхнем меню справа нажать "шестерёнку", выбрать "Расширения"
- в поле URL-адреса вставить запомненный адрес расширения и нажать Ввод (Enter)
- выбрать расширение maqueen - в центральном меню на основном экране появится папка maqueen

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


Motor (мотор(ы): M1 - левый|M2 - правый|ALL - оба) dir (направление: CW - вперед| CWW - назад) speed (скорость: 0:255)

проверим раздельную и совместную моторов. Для примера смотри 

https://makecode.microbit.org/_d5r4ywFpP0Co

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

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

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

  •  LEDLeft - левая лампочка
  •  LEDRight - правая лампочка

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

  •  turnOn - включить
  •  turnOff - выключить

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

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

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

Поворотники
Программа "Поворотники"

 

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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


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

Развилка

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

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

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

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

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

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

  • из папки maqueen переносим блок "led LEDLeft ledswitch turnOn" в ветку "то" блока "если"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Блок 10.2 Условный оператор. Сравнение строк

Следующий шаг - модифицируем программу, чтобы по нажатию кнопки на одном контроллере на другом исполнялась определённая мелодия. 

если А то 
  запустить мелодию-1 1 раз
если В то
  запустить мелодию-2 2 раза
если А+В то
  запустить мелодию-3 3 раза

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

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

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

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

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

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

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

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


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

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

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

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

Задача:

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

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

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

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

Блок 11.2 Гонки

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

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

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

Файлы

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

Лора Кравченко
Михаил, спасибо за достаточно подробную программу. Я не знакома с micro:bit (только читаю об этом), но коллегам информатикам, наверняка будет полезно. Что качается формата, то для знакомство с темой изучения - вполне может и хватить 12 часов с небольшой группой. Мы проводим курсы по 15 часов (почти такое количество часок в полугодии, если проводит 1 занятие в неделю) На "Микроэлектронике" на базе Arduino Uno успеваем выйти на мини-проект, который демонстрируем 5-6 классам.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Михаил Семионенков
    Лора, мнения практиков были бы очень интересны. Ардуино, конечно, заслуженный старец, обросший литературой, "железом", традициями, но ... пора уступать нишу молодым. Тем, кто начинает, рекомендовал бы сразу начинать с микробит. К сожалению, в России микробит ещё толком не укоренился: ему 3 года, но первое время в Россию его не отгружали, с книгами плохо (только-только вышел перевод "Официального руководства" , завтра получу, посмотрю), даже статьи в Вики ещё нет (у меня руки не доходят). Замахиваюсь со временем на книги, но сначала надо получить живой опыт и отклики.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Ольга Тузова
    Михаил, спасибо! Об этом роботе слышала давно, но как-то руки не доходили. Теперь, при такой подробной инструкции - ещё раз спасибо! - надо будет посмотреть на него внимательней. Мы в школе уже как раз три года работаем с микробитом, мне даже удалось поучаствовать в вычитке упомянутого перевода. Мне кажется, для микробита важен вектор развития в сторону мейкерства, что собственно мы и разрабатываем в школе. Но, конечно, от робот на колёсах не убежать :)) Дети этого ждут.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Михаил Семионенков
    Ольга, я уже успел заметить, что Вы руку приложили к книге: "Издательство выражает благодарность ...Тузовой Ольге Алексеевне". С нетерпением буду ждать новостей о Maqueen. А Синий зуб попробую, когда будет время.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Михаил Семионенков
    подозреваю, просто перепаковывают. Документацию перевели - уже хорошо. Я некоторое время назад обращался на Амперку и в ешё одну компанию, обращая внимание на робота, может, сработало, может, кто-то независимо вышел.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии