В хакспейсе мы довольно много занимаемся со школьниками, но в основном это продвинутые старшеклассники. С ними достаточно просто, они, в общем, почти как студенты. В прошлом году мне захотелось расширить свою компетенцию, попробовать что-то по-сложнее.
Под катом будет рассказ о том, как я подружил адресную RGB-гирлянду с ардуиной, ардуину со Scratch, а Scratch с младшеклассниками.
Предыстория
В предыдущей серии я уже немного описывал школу, в которой в основном преподаю. После сильных старшеклассников я сначала решил взяться за восьмой (ныне уже девятый) класс, однако он на удивление оказался совершенно никаким, не часто можно встретить школьников, которые настолько ничем не интересуются. За девятым классом идет пятый, как и самые старшие очень сильный. Однако пятый — это уже другая история, научить писать код его уже почти невозможно, нужна графическая среда программирования. Собственно, с этого и начинается интересное.
Исходные данные
Адресная светодиодная RGB гирлянда 50PCS WS2801:
Для тех, кто не сталкивался: каждая лампочка в ней — это три светодиода и чип, который получает команды по протоколу SPI и зажигает соответствующие светодиоды.
Arduino Uno:
Графическая среда программирования Scratch:
Наверно, по хорошему все это нужно было сделать на ArduBlock, но в тот момент мне показалось, что на Scratch получися гораздо быстрее.
Пятый класс — 14 человек (фотографию выкладывать не буду).
Проще всего было подключить ардуину к гирлянде, есть специальная библиотека: github.com/adafruit/Adafruit-WS2801-Library
Далее нужно написать скрипт, который будет обрабатывать команды по последовательному порту с компьютера и зажигать гирлянду. Здесь возникла проблема: при подаче достаточно длинной строки гирлянда ни за что не хотела загораться нужным цветом. Каким-то шаманством мне удалось это побороть, но в чем была проблема — так и не понял (код выкладывать не буду, ибо сам не понимаю, как он работает).
Далее нужно было подружить последовательный порт со Scratch. Scratch умеет писать в сокет по протоколу UDP (среди графических блоков там есть блок “broadcast”, которому можно передать строку), и это единственный способ получить из него текстовую строку. Решил написать переходник на питоне, который бы считывал строки из соответствующего порта, сохранял в буфер и с интервалами отправлял в последовательный порт. Для этого нашлись хорошие библиотеки: github.com/pilliq/scratchpy — для взаимодействия со скрэтчем, библиотека serial (идет из коробки) — для последовательного порта.
Итак получилась немного глючная, но в целом работающая графическая среда для управления гирляндой:
Далее нужно объяснить детям, как ей пользоваться. Я вообще не люблю что-то объяснять, а люблю, когда дети читают методичку и сами все делают. Собственно, такую методичку я написал: docs.google.com/document/d/1XdhVsTQvrjNnEUoqMiRrYoqEJPDo2HTAs6YYHc0dJag/edit
По сути учатся они там следующему:
- Работа с графической средой: как перетаскивать блоки, какой блок за что отвечает.
- Как цифрами задавать цвета в формате RGB.
- Циклы
- Работа с переменными
- Работа с массивами (для зажигания гирлянды мы отправляем ей массив, каждый элемент которого — цвет, которым должна загореться лампочка)
Что в итоге получилось
Поначалу полный восторг, два урока дети сидели не отрываясь, даже девочки, только возгласы доносились: “Ой, она загорелась!” Однако сейчас, когда около восьми часов мы уже отзанимались, интерес пропадает, бесцельное зажигание лампочек не так интересно. На нашу удачу появилась прикладная задача — сделать декорации для школьной театральной постановки: костер, звездное небо, переливающийся рубин. Сейчас этим занимаемся, вроде интересно.
Основная проблема, с которой я сталкиваюсь — дети очень плохо помнят, что они делали на прошлом занятии, всякий раз приходится пролистывать методичку на несколько страниц назад и все повторять. Как с этим бороться пока плохо понимаю. Можно, конечно, заставлять их делать много однотипных заданий, чтобы хорошенько запоминали, но при этом у них падает мотивация.
В процессе выяснилось, что девочкам обычный скретчевский котик нравится больше, чем гирлянда, поэтому они у меня теперь занимаются по обычному курсу безо всяких железок.
После пятого класса я взял еще третий, с ним в общем все то же самое. В целом опыт очень удачный, теперь я знаю, что даже для занятий с младшеклассниками не нужно особых педагогических способностей, нужно лишь дать им интересный предмет для изучения, и они сами все будут делать.
Автор: ddavydov