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

Александр Григорьев • 14 октября 2018

Зачем и как мы учим программировать микроконтроллеры. Как?

Учить программированию можно по-разному. У себя в 169-ой мы пришли к тому, что один из наиболее продуктивных подходов — программирование микроконтроллеров на примере создания компьютерных игр. Почему так? Зачем вообще нужны какие-то микроконтроллеры? Давайте разбираться.
Для начала полезно будет вспомнить, зачем мы в принципе учим детей программированию. Только лишь для решения прикладных задач? Призываю всех перечитать ещё раз Сеймура Пейперта, "Переворот в сознании: Дети, компьютеры и плодотворные идеи".

Переворот в сознании


Сеймур Пейперт использует метафору естественного для ребенка освоения нового языка в новой стране. "Две основополагающие идеи проходят через эту книгу. Первая состоит в утверждении, что можно придумать такие компьютеры, научение общению с которыми превратится в естественный процесс, скорее напоминающий изучение французского живущими во Франции людьми, а не мучительную процедуру постижения иностранных языков в американских школах. Вторая идея состоит в утверждении, что научение общению с компьютерами позволит изменить и другие формы обучения. Компьютер может говорить как на языке математика, так и на языке, использующем обычный алфавит. Мы учимся делать компьютеры, с которыми детям нравилось бы общаться. Когда происходит такое общение, дети осваивают математику наподобие живого языка". "Компьютер - это технический Протей. Это сущность - в его универсальности, в его способности к имитации".
Иными словами, с точки зрения обучения важно то, что компьютер способен стать средством имитации, моделирования  физической реальности. А программирование - это инструмент, позволяющий самим детям заниматься компьютерным моделированием физической реальности, и свободно экспериментируя, глубоко осваивать ее законы.
Давайте вспомним и о том, что любая компьютерная игра, воссоздающая реальное поведение объектов, включает соответствующую физическую модель. Чтобы предметы падали, нужно научить их падать. Чтобы предметы сталкивались, нужно научить их сталкиваться. Создавая компьютерную игру, дети создают физические модели, то есть занимаются компьютерным моделированием физической реальности. Именно это и является самым главным с точки зрения обучения. Кроме того, создание игр вызывает у детей живой интерес.
Оправдано ли использовать игры в учебном процессе? Думаю, вряд ли мне следует сильно агитировать за геймификацию, но всё-таки выскажусь: как бы мы не относились к играм, они во все времена были и во все времена будут именно той деятельностью, которой занимаются дети, и биологическая функция игры у людей и прочих животных — именно обучение!
Только есть одна загвоздка... Игры — это как атомная энергия. Чтобы использовать её в мирных целях, ею необходимо очень и очень хорошо управлять. Но человек (уж мы с вами точно!), в отличие от прочих животных, в большей степени способен осознанно контролировать происходящее. И несмотря на существование такого феномена как "компьютерная зависимость" (ru.wikipedia.org/wiki/Компьютерная_зависимость) и "зависимость от компьютерных игр" (ru.wikipedia.org/wiki/Зависимость_от_компьютерных_игр), мы всё-таки храбро будем продолжать программировать игры на занятиях.
Какую роль играют микроконтроллеры в свете всего вышеописанного? Это тот самый "мостик", который связывает два мира, физический и виртуальный, не дает "увязнуть" в иллюзорности. 
Использование микроконтроллеров позволяет продемонстрировать детям применимость созданных компьютерных моделей для решения практических задач,  в том числе для управления реальными объектами. Пример — проект "Умный домик" из книги "Scratch и Arduino для юных программистов и конструкторов". В зависимости от реального уровня освещенности не только меняется изображение на экране, но и щелкает вполне реальный модуль реле, включая и выключая вполне реальную лампочку.

Умный домик


Пример проекта продвинутого уровня из нашей новой книги "Игровая робототехника для юных программистов и конструкторов: mBot и mBlock". Робот сканирует пространство вокруг себя, с использованием показаний дальномера на экране компьютера рисуется "карта" препятствий, в результате можно управлять перемещениями компьютерного персонажа так, чтобы он объехал метки препятствий, а робот воспроизводит траекторию перемещения компьютерного персонажа на местности.
http://www.instagram.com/p/BjWtpOBAtvQ/?taken-by=projectlab169

Марсоходик


Но оба примера выше — достаточно сложны, чтобы с них начинать. Что можно предложить поначалу? Программируя игры, мы стараемся использовать такие проекты, в которых управление будет осуществляться именно на основании показаний датчиков, подключенных к роботу или микроконтроллеру. Это позволяет детям не "увязать" в игровом процессе, акцентирует внимание на инженерных задачах, например, создании эргономичных игровых пультов, вопросах считывания и преобразования значений и т.д.

Игровой пульт


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

Звездные гонки


Хотите узнать на практике, как всё это выглядит? Давайте создадим очень простой, первоначальный вариант несложной игры. Управление будет осуществляться одной кнопкой. Можно использовать готовый контроллер mCore робота mBot с уже встроенной кнопкой и готовым блоком "кнопка нажата" в визуальной среде mBlock. Но не надо забывать, что нажатие и отпускание кнопки это всего лишь замыкание и размыкание контакта, появление и исчезновение электрического напряжения на "ноге" (pin) микроконтроллера. Поэтому с тем же самым успехом можно использовать распространенную и доступную плату Arduino в сочетании с кнопочным модулем или платой расширения "Joystick Shield", а также базовый блок чтения состояния порта "digitalRead" (на русский переведено в mBlock как "читать цифровой pin").

Джойстик


Сюжет: голодная рыбка плавает влево-вправо, разворачиваясь у края экрана, кроме того, ее можно развернуть в произвольный момент, нажав на кнопку игрового пульта. Сверху периодически опускаются съедобные предметы, которые вовремя надо суметь подобрать.
Итак, первым делом скачиваем и устанавливаем mBlock for PC версии 3.4.11 (mBlock5 использовать пока не будем, о нем поговорим позже) с сайта разработчиков (www.mblock.cc).
Проверяем настройки: "Language" — "Русский", "Boards" — "Arduino Uno", "Extensions" — "Arduino".
Подключаем игровой пульт на базе Arduino Uno и Joystick Shield к компьютеру при помощи кабеля USB. Устанавливаем соединение через последовательный порт. "Соединить" — "Serial Port" — "COM3" (предположим). Загружаем прошивку: "Соединить" — "Обновить прошивку". Проверяем наличие соединения, щелкаем мышью по блоку "читать аналоговый pin (A) 0" из группы "Робот" на палитре блоков. Мы должны увидеть какое-то значение, отличное от нуля.
Удаляем спрайт "M-Panda" (базовые навыки работы в Scratch у всех есть?), добавляем спрайт "Fish3" из библиотеки. Далее собираем для этого спрайта следующий набор скриптов (необходимо будет создать переменную "датчик"). Кнопку будем использовать нижнюю, связанную с пином 4.

Fish3
Добавляем из библиотеки спрайт "Apple", создаем для него скрипт.

Apple


Дублируем спрайт "Apple" один или несколько раз, при желании заменяем костюм. Пробуем!
Ваша программа работает? Есть ли ошибки, всё ли происходит именно так, как вам хотелось бы? "Ошибки приносят нам пользу, поскольку они заставляют нас разобраться в том, что произошло, понять, где мы пошли по ложному пути, и через такое понимание исправить их. Опыт программирования на компьютере эффективнее любой другой деятельности заставляет уверовать в отладку" (Сеймур Пейперт).
Функционирующий проект — это "лакмусовая бумажка", заменяющая оценку учителя и наглядно демонстрирующая ребенку, что он добился результата, достиг поставленной цели. И это тот самый путь, идя по которому, ребенок в конце концов перестанет лишь пассивно усваивать информацию, сможет заняться самообучением, осознанно формулируя персональные задачи и выбирая методы, позволяющие их решить. 
P.S. Процесс создания и отладки проекта "Голодная рыбка" подробно описан в книге "Scratch и Arduino для юных программистов и конструкторов".

 

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

Екатерина Алексеева
Александр, спасибо за теоретическо-деятельный материал. У меня вопрос. А были ли случаи в Вашей практике, когда дети, начавшие рано общаться со сложными конструкторами, уставали от робототехники?
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Александр Григорьев
    Спасибо! :) Безусловно были такие случаи, в частности один такой ребенок сидит сейчас недалеко от меня, мой собственный сын! :) Немного непонятно, что Вы имеете ввиду, когда говорите "устал" и "сложные конструкторы". Если у человека получается, то чем сложнее, тем интереснее. Для меня "сложный" - лишь тот, который абсолютно не "по зубам". И то, это еще вопрос, что нас больше способно смотивировать в жизни - опыт достижений или опыт неудач, опыт обладания какой-то супер-игрушкой или опыт мечтаний и любований на неё издалека... Раз вопрос о персональной практике - вот вам вполне персональный пример: мне в детстве подарили супер-игрушку, набор для сборки радиоприёмника, куча деталей, которые надо было припаять к плате. Я не справился, задача оказалась неподъемной. Безусловно, это была серьёзная психотравма для детской психики. И я надолго застрял в восприятии электроники как чего-то непостижимо-магического и неподвластного мне. Но в конце концов, как видите, эта позиция поменялась на диаметрально противоположную :) Так что в конечном итоге тот опыт оказался для меня крайне позитивным. А что касается моего сына, я не склонен называть это словом "устал" (разве что устал от постоянно ноющего папы: "ну давааай попрограммииируем!.."), скорее "переключился на другие интересы". Гуманитарные, технические - разные! И это хорошо! Нет такой задачи, чтобы все стали именно робототехниками. Но любому человеку, "гуманитарий" он или "технарь", необходимо уметь логически мыслить, необходимо уметь разбивать задачу на составные части и находить подходящие способы решения, необходимо обладать "искусством интеллектуального моделирования", как называл это Пейперт. Всему этому и учит программирование.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Екатерина Алексеева
    Спасибо большое, Александр, за такой развернутый ответ. Родительство и преемственность - это еще одна интересная тема. Интересно, в каком возрасте Ваш сын "переключился" на другие, отличные от программирования интересы, и Вы его "отпустили"? И еще вопрос. А к Вам приходят дети именно на урок (все как один) или на занятие по выбору (добровольно, внутренне мотивированные)?
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Александр Григорьев
    Если отвечать не особо развернуто, то лет в 12-13 :) Я веду внеурочные занятия, и у детей есть выбор, ходить ли на них. В этом есть и свои плюсы, и свои минусы. Из очевидных минусов - ребенок сегодня пришел, а завтра нет, на очередном занятии половина (условно) детей в прошлый раз не присутствовала, приходится заново обращаться к тому же материалу, другая половина скучает. Это если пытаешься придерживаться системы :) Когда внутренне разрешаешь себе согласиться с мыслью, что никакой системы нет и быть не может, всё это иллюзии, можно галопом по Европам нестись дальше, становится проще :)
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Елена Шарикова
    Александр, интересуюсь визуальной средой программирования "Scratc", но не знала, что к ней можно привязать и микроконтроллер.Спасибо Вам большое!
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Александр Григорьев
    Спасибо, Елена! Визуальные Scratch-подобные среды программирования, способные взаимодействовать с микроконтроллерами в интерактивном режиме, появились уже достаточно давно. Так же давно появились визуальные "блочные" средства создания автономных программ для микроконтроллеров (например, Ardublock). Достоинство среды mBlock в том, что она первой объединила оба подхода, это оказалось очень продуктивной идеей. Теперь mBlock версии 3 тоже уже "старичок", появились новые программные среды, позволяющие и работать с микроконтроллерами в интерактивном режиме, и создавать для них программы автономной работы.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии