Это публикация - заготовка STEAM-проекта о светляках, дополненная моделированием режимов свечения светляка с помощью робота Maqueen. Моделирование предполагет опыт работы в системе MakeCode.
Светляки в естествознании и культуре
Светляки - очень интересные жучки, которые обладают способностью светиться в темноте. Увы, в современной городской жизни непросто увидеть светляка. Между тем, это очень красивое явление, а в Японии даже есть праздник любования светляками.
Светляки в культуре и быту
Японский праздник любования светляками называется Хотаругари.
Зрители любуются волшебными ночными картинами, а профессиональные фотографы запечатлевают их и позволяют прикоснуться к красоте тем, кто не может насладится её воочию. Светляки в Японии защищены законом.
Задание: найти фото- и видеоматериалы о празднике Хотаругари, репродукции гравюр любования светляками.
До изобретения лампочки накаливания светляков использовали в разных краях для освещения и украшения жилища.
Биология - Биолюминесценция
Биолюминесценция - это способность живых организмов излучать свет. Термин происходит от греческих слов "биос" - жизнь, и "люмен" - свет. Свечение светляков это проявление биолюминесценции.
Светляки - не единственные живые существа, способные излучать свет. Во многих морях и океанах можно наблюдать свечение моря - результат "работы" огромного числа микроорганизмов в толще выды, когда море буквально светится изнутри.
В России свечение моря можно наблюдать на Чёрном и Охотском морях (автору довелось наблюдать это незабываемое зрелище "на море Кортеса" - в Калифорнийском заливе). Наблюдение за регулярностью свечения моря позволяет учёным определять "здоровье" морских экосистем.
Кстати, а почему светляки, так откровенно обозначающие своё присутствие для окружающего мира, где живые существа обычно стремятся маскироваться от врагов, не становятся лёгкой добычей хищников? Да дело в том, что те самые вещества, которые задействованы в свечении (значит, демаскировке светляков), ядовиты, и таким образом защищают светляка: жаба или птица, неосмотрительно отведавшая светляка, в следующий раз серьёзно подумает, стоит ли переживать отравление ради этого сомнительного деликатеса.
Природа полна неожиданностей и парадоксов.
Задание. Найти информацию о других видах, обладающих способностью биолюминесценции.
Физика - почти абсолютная эффективность излучения света светляками
Источники света, окружающие нас, как правило, выделяют и тепло. Наш главный естественный источник света - Солнце, излучает ещё и неимоверное количество тепла, позволяющего нам в 150-ти миллионах километрах от космической печки жить в довольно комфортных температурных условиях.
Традиционная лампочка накаливания, специально разработанная именно для освещения, 90% энергии переводит в тепло. Это ужасно неэффективно, поэтому учёные и инженеры активно работают над созданием энергоэффективных ламп. Но даже и современные лампы заметную часть энергии теряют на тепло.
Светлячок при своём излучении практически не выделяет тепла, его эффективность близка к 100%.
Инженеры могут восхищаться и завидовать молча
Биохимия излучения света
Cвет при биолюминесценции является продуктом химической реакции (строго говоря - цепи химических реакций). Субстратом, то есть, исходным материалом для реакции, являются вещество класса люциферинов, от латинского "люцифер" - несущий свет.
Реакция биолюменесценции протекает не самопроизвольно, а под управлением фермента - специального белка, выполняющего роль биологического катализатора (ускорителя реакции).
Химические процессы биолюминесценции являются предметом серьёзного научного интереса.
В 2008 году лауреатами Нобелевской премии по химии стали учёные, изучавшие фермент реакции биолюминесценции в медузах.
Биоинформатика светляков
А зачем, собственно, светляки светятся? Не для нашего же эстетического удовольствия (а было бы приятно).
Свечение светляков - это сигнальная система, с помощью разных видов свечения светляки посылают сообщения сородичам. Сигнал может быть приглашением на свидание, согласием, отказом, обозначением своей территории. Магическая картина свечения большой колонии светляков - это множество разговоров, которые мы "подслушиваем" глазами и не понимаем (если мы не специалисты по данному виду светляков).
Различаются 4 основных типа световых сигналов светляков:
- Непрерывное свечение
- Прерывающееся свечение - яркость света может изменяться от полного прекращения свечения до максимальной яркости
- Пульсация. Данный тип сигналов представлен короткими вспышками света, которые испускаются светляками с регулярными интервалами
- Вспышки - длитольность и яркость вспышек не регулярны.
Теперь нам предстоит изучить
Инструменты моделирования свечения светлячка с помощью робота Maqueen
Для моделирования светлячка мы будем использовать светодиоды на нижней стороне платы Maqueen (они описаны чуть ниже), а также датчик освещённости контроллера микро:бит, чтобы включать светлячка в темноте.
Поскольку мы имеем дело с двумя новыми устройствами: группой светодиодов и датчиком освещённости, то нашу систему можно считать сложной.
Инженерный урок.
Испытания сложной системы неразумно начинать сразу с тестирования системы целиком: если система не заработает (что отнюдь не редкое событие для первых испытаний инженерных систем),тто систему придётся "разбирать" на части и выяснять, какая часть нас подвела. Поэтому систему собирают из частей, работоспособность которых уже проверена
Если же составляющие работают, а весь комплекс - нет (что тоже, увы, не редкость), то проблему, как правило, надо искать в интеграции частей, а не в отдельных частях, что упрощает поиски проблемы.
Значит, сначала будем отрабатывать "узлы" нашей системы
Светодиоды на нижней стороне платы Maqueen
Группа светодиодов включает 4 светодиода, помеченных
- RGB0(P15)
- RGB1
- RGB2
- RGB3
RGB - это традиционное обозначение цветного сигнала на телевидении и компьютерах,
является сокращением от английских названий основных цветов телевизионной палитры: Red, Green, Blue (красный, зелёный, синий). В скобках заметим, что основные цвета в живописи - это красный, жёлтый и синий, но это предмет отдельного разговора.
0, 1, 2, 3 - это номера светодиодов в группе (мы помним о программистской традиции начинать нумерацию с нуля).
P15 - указывает номер порта (пина), через который группа светодиодов на борту робота Maqueen подключается к контроллеру микро:бит (эта информация нам скоро пригодится).
Программирование светодиодов. NeoPixel
Термин NeoPixel рождён в индустрии производства украшений, включающих в себя программируемые цветные светодиоды.
Среда программирования MakeCode поддерживает программирование группы светодиодов в стандарте NeoPixel (открытый стандарт фирмы adafruit), а на роботе Maqueen группа светодиодов RGB 0-3 реализована в стандарте NeoPixel.
Инженерный урок
Наличие открытого стандарта NeoPixel позволило производителю системы программирования MakeCode и производителю робота Maqueen создать совместимое решение, работая независимо друг от друга. Удачные открытые стандарты обладают большой притягательностью для разработчиков и дают широкие возможности для интеграции разнообразных технических и программных продуктов.
Начнём:
Создадим новый проект
Добавим расширения maqueen и neopixel
Из папки Neopixel перенесём блок "задать для *strip" значение..." в блок "при начале"
- мы получили заготовку объекта Neopixel, теперь блок надо настроить на Neopixel робота Maqueen:
Из меню P0 выберем P15 (это тот самый номер порта микро:бит, к которому присоединяется реализация NeoPixel на борту Maqueen)
В окошке с параметром 24 запишем 4 - число светодиодов робота Maqueen, работающих по стандарту NeoPixel
- теперь у нас есть объект strip, с помощью которого можно управлять светодиодами в группе RGB 0-3
Следующий фрагмент показывает возможности блока "strip show color ()" ("показать цвет группы светодиодов")
Испытаем программу.
Заметим, что после окончания работы программы сведиодиоды продолжают гореть (с похожим явлением мы сталкивались при работе с моторами: при завершение программы они не останавливаются автоматически).
Так или иначе, инструментарий для моделирования самого простого режима свечения светляка (непрерывного) мы получили. Для того, чтобы смоделировать пульсацию, прерывающееся свечение и вспышки, нужны более развитые средства, чем те, что мы только что использовали. Такие средства в папке Neopixel есть, но для их понимания нужно освоить немного теории.
Система координат цветов HSL
Система координат цветов HSL (Hue, Saturation, Lightness) имеет 3 координаты:
- H - собственно цвет
Палитра расположена на круге, единицей измерения координаты является градус, диапазон изменения - от 0 до 360
0 ("12 часов") - красный цвет
120 ("4 часа") - зеленый
240 ("8 часов") - синий
- S - чистота цвета
Чистота цвета измеряется в процентах, от 0 до 100. 100 - это чистый цвет.
Чем меньше S, тем больше в цвете примеси чёрного. При S=0 любой цвет превращается в чёрный
- L - яркость
Яркость также измеряется в процентах от 0 до 100. 50 - нормальная яркость.
С увеличением яркости цвет теряет насыщенность, белеет, и при 100 превращается в белый
С уменьшением яркости цвет тускнеет, превращаясь в нуле в чёрный.
Вопрос: каковы координаты чистого пурпурного цвета (между красным и синим) нормальной яркости в системе координат HSL?
Для задания цвета в системе HSL в папке Neopixel есть блок "hue() saturation() lightness()".
Заполнив этот блок координатами нужного нам цвета, мы можем поместить его в качестве параметра в блок "strip show color"
Моделирование пульсации
Чтобы моделировать пульсацию, необходимо не только включать, но и выключать свечение.
Вопрос. Какой цвет означает отсутствие света? Как закодировать этот цвет в системе HSL?
Ответ очевиден: отсутствие света - это чёрный цвет, а для его кодирования в системе HSL достаточно задать S=0 или L=0, координата H значения не имеет.
Если цвет ассоциируется с краской, то S=0 - это закрашивание чёрным.
Если цвет ассоциировать с источником света (а в нашем случае это так и есть), то логично использовать L=0 - свет полностью угас.
Теперь нетрудно разок мигнуть нашим светлячком:
Упражнение. При нажатии кнопки А светлячок мигает 10 раз, время свечения - 1 секунда, интервал между свечениями - полсекунды.
Моделирование прерывающегося свечения
Прерывающееся свечение - яркость света может изменяться от полного прекращения свечения до максимальной яркости
Вопрос. Как можно моделировать прерывающееся свечение?
Очевидно, нам нужно управлять параметром L.
Упражнение. Запрограммировать свечение, плавно меняющее яреость от 0 до 100, а потом в обратном направлении..
Моделирование вспышек
Длительность и яркость вспышек, как мы помнин, не регулярны.
Вопрос. Как мы можем моделировать нерегулярность (случайность) длительности и яркости свечения?
Для моделирования случаности служит датчик случайных чисел (использование датчика описывалось ранее)
Упражнение. По нажатию кнопки B выполнить 10 вспышек случайной продолжительности, от 1 до 3 секунд, и случайной яркости, в диапазоне L от 25 до 75.
О моделировании свечения светляка мы представление получили. Теперь нужно познакомиться с работой в зимисимости от освещённости, чтобы включать свечение светлячка в темноте.
Датчик освещённости
Датчик освещенности расположен на дисплее микро:бит. Блок "уровень освещённости" находится в папке Ввод (этот блок находится в папке Ввод, поскольку он относится к датчику микро:бит. Если бы этот датчик был реализован на борту робота Maqueen, блок находился бы в папке Maqueen).
Вот простой пример использования датчика освещённости.
Задача. С помощью эмулятора микро:бит в системе MakeCode выяснить диапазон возращаемых датчиком значений.
Задача. Выяснить, влияет ли наличие-отсутствие датчика дальности на показания датчика освещённости.
Как нетрудно видеть, зависимость есть.
Вопрос. Почему мы наблюдаем зависимость показаний датчика освещённости от датчика дальности?
Поскольку планов использовать датчик дальности нет, стоит отказаться от его установки в нашем проекте
Проект "Электронная модель свечения светлячка"
Теперь, когда отдельные детали функционирования модели прояснились, самое время проектировать всю модель.
Определение порога освещённости для включения светлячка
Выбор порога освещённости для определения наступления ночи зависит от выбора условий для демонстрации модели. Если мы хотим демонстрировать модель в тёмной комнате, то нужно выполнить замеры освещенности при включённом и выключенном свете и выбрать промежуточное значение в качестве порога для включения свечения светляка.
Демонстрация при этом может выглядеть так:
- включаем робота при свете - робот не светится
- выключаем свет - модель начинает демонстрацию режимов свечения
- включаем свет - демонстрация свечения прекращается
Условия демонстрации можно выбрать и другие: использовать разную освещённость в разных частях комнаты, использовать какое-то укрытие, создающее локальную ночь для модели и так далее. В любом случае, для выбранных условий нужно сделать замеры яркости в разных условиях и определить порог дня и ночи.
Мы заведём переменную порог, значение которой будем задавать в блоке "при начале", в соответствии с результатами наших экспериментов.
Определение стратегии показа режимов свечения светляка
Мы можем выбрать разные подходы к показу режимов свечения, например, сделать выбор режима свечения управляемым (с кнопок микро:бит или удалённо с другой платы микро:бит), выбирать режимы случайно или просто демонстрировать друг за другом.
В качестве примера предлагается последний (самый простой) вариант:
постоянно
если освещённость ниже порога
то показать режим1
если освещённость ниже порога
то показать режим2
если освещённость ниже порога
то показать режим3
если освещённость ниже порога
то показать режим4
конец постоянно
Подготовка необходимых функций
Для нашего случая логично реализовать функции для каждого режима свечения, а также выбрать параметры этих функций.
В качестве примера, предлагается реализовать следующие функции с параметрами
- Постоянное свечение (время свечения в миллисекундах)
- Пульсация (число импульсов, длительность импульса, длительность паузы)
- Прерывающееся свещение (число пар показов изменения яркости от 0 до 100 и от 100 до 0)
- Вспышки (число вспышек, минимальная длительность вспышки, максимальная длительность вспышки)
В случае вспышек яркость вспышек мы будем определять случайно внутри функции, не вынося её в параметры функции.
Ещё одна функция - функция, которая обращается с датчику дальности. Обращение к датчику дальности не представляет проблемы, в чём тогда смысл функции, которая не сделает нашу программу компактнее?
Инженерный урок
Обращение к внешнему источнику информации целесообразно выделить в отдельную функцию. Это даёт программе гибкость на случай, если мы задумаем сменить этот внешний источник информации, например, использовать другой датчик освещённости или вообще по-другому определять наступление ночи: в этом случае будет достаточно перепрограммировать одну функцию, не затрагивая части программы, обращающиеся за информацией с датчика.
Вторая выгода от отдельной функции состоит в том, что эту функцию мы можем создать по своему усмотрению, вообще не обращаясь к внешнему источнику информации. Это очень полезно при проверке работы программы: проверять программу нужно при разных входных данных, а дожидаться, когда данные, требуемые для проверки придут извне, можно долго. Проще вернуть из функции обращения к внешнему источнику те данные, которые нам нужны для проверки, не обращаясь к внешнему источнику вообще.
Мы создадим функцию "Ночь?", которая будет отвечать на вопрос, наступила ли ночь, задавая значение логической переменной "ночь". Для начала в этой функции мы будем просто задавать значение ночь=истина, не обращаясь к датчику освещённости: это позволит считать, что ночь наступила и сосредоточится на отработке демонстрации режимов свечения.
Переменные проекта
- hue = 270 // фиолетовый
- saturation = 100 // чистый цвет
- luminosity = 50 // оптимальная яркость
- цветHSL = (hue, saturation, luminosity)
- порог = ? // порог освещённости определяется экспериментально
- ночь
- strip // Neopixel
Заготовка проекта
Нам осталось
- Заполнить функции моделирования режимов свечения
- Подобрать параметры демонстрации при вызовах функций свечения
- Задать значение переменной "порог"
- Удалить отладочный блок "ночь = истина"
- Проверить демонстрацию с моделированием наступления ночи и дня
- Провести демонстрацию для зрителей
Рекомендации для подбора параметров демонстрации
При подборе параметров вызова функций нужно не забывать о зрелищности презентации.
- Режимы свечения стоит показывать не слишком быстро, чтобы зритель успел распознать режим и сознательно оценить его
- С другой стороны, при слишком затянутой демонстрации режима зритель может заскучать
- Если демонстрация будет сопровождаться словесным пояснением, то время демонстрации режима и его пояснения нужно скоординировать
Успехов!