Это продолжение серии о введении в программирование с роботом на примере программирования робота Maqueen. Тем, у кого робот есть, стоит посмотреть публикацию, где описана процедура программирования робота Maqueen в среде makecode. Просто любопытствующие могут читать этот материал как самостоятельный текст.
Проверка условий - один из китов программирования: она позволяет создавать развитую логику программы, отличает программу от примитивной пошаговой инструкции. Знакомство с проверкой условий, естественно, - очень важный момент в обучении программированию. С роботом проверка условий "всплывает" вполне органично: у робота есть датчики, и поведение робота зависит от информации с "органов чувств".
Самый простой пример - препятствие на пути робота. С помощью ультразвукового датчика можно обнаружить препятствие впереди, оценить расстояние до него и изменить поведение. Детям можно рассказать (или напомнить) о летучей мыши, которая использует природный прототип датчика дальности. Датчик дальности необходимо опрашивать, то есть, обращаться к нему за текущим расстоянием до препятствия. Датчик посылает сигнал и ловит отражённый от препятствия сигнал. Если сигнал к датчику не возвращается, датчик возвращает значение 0. Если сигнал вернулся, то по времени между сигналом и получением отражённого сигнала, датчик вычисляет расстояние до препятствия и возвращает число.
Прежде, чем переходить к практике - важное замечание: робот, конечно, очень привлекателен для развития начального интереса, но "железо" менее "стерильно", чем программное обеспечение, и существует риск отказов и неустойчивой работы. Это создаёт определённые методические проблемы, поскольку подача материала может прерываться техническими сбоями. Конечно, опытный педагог найдёт способ обыграть ситуацию и сделать занятие интереснее, богаче, но о подстерегающих проблемах лучше, конечно, знать заранее.
Датчик дальности робота Maqueen, работу с которым я поставил во главу угла в теме "Программирование условий", оказался не без сюрпризов: программы не всегда работали, как положено.
Наблюдения показали, что контакты датчика иногда "не в форме". Привожу изображение платы Maqueen, где стрелочками указаны неописанные лампочки. По опыту получается, что это индикаторы работы передатчика и приёмника датчика дальности. При нормальной работе они оба горят синим цветом, если это не так, надо попытаться решить проблему.
Задача: Проверить, что датчик возвращает число больше нуля
План:
Если значение, полученное с датчика, больше нуля - сыграть мелодию да-да-дам...
1. Достаём блок Логика.если(истина) то и вставляем его в блок при начале (рис. 1)
На место истина надо теперь поставить "значение, полученное с датчика, больше 0". Для этого:
2. Вставляем на место истина блок Логика.Сравнение (рис. 2)
В блоке - 3 позиции: 0, символ, 0. Эти 3 позиции нужно заполнить следующим образом:
1. "Значение, полученное с датчика"
2. ">"
3. "0"
Знак ">" выбираем из меню, 0 в последней позиции уже есть, осталось добавить в первую позицию блок maqueen.sensor unit(cm).
Получили (рис. 3)
"sensor unit(cm)" означает "значение с датчика дальности в сантиметрах".
3. В блок если вставляем блок Музыка.запустить мелодию(да-да-дам) повторить (один раз).
(рис. 4)
Программа готова. Прочитаем её:
если sensor unit(cm) (значение с датчика расстояния) > 0 то
запустить мелодию(да-да-дам) повторить (один раз).
Задача: Двигаться вперёд, пока расстояние до препятствия больше 20 см
Для решения этой задачи полезен блок Циклы.пока
Цикл пока будет будет выполнять какие-то действия (в нашем случае - движение вперед), пока нужный результат не будет достигнут (расстояние до препятствия станет меньше 20 см).
Помните лягушку, которая барахталась в кринке с молоком, пока не взбила масло?
План:
Начать движение вперёд
Пока расстояние до препятствия > 20 см
Двигаться вперёд
Остановиться
Теперь в блоках:
1. Основное.при начале
maqeen.Motor (M1) dir (CW) speed (255) // запускаем моторы
maqeen.Motor (M2) dir (CW) speed (255)
Циклы.пока
(рис. 5)
2. Теперь истина надо заменить на условие "дальность > 20". Опять достаем блок Логика.Сравнение и так далее по предыдущей задаче (рис. 6).
3. В блоке пока не заполнена часть делать. Поскольку действие - это продолжение движения, то делать ничего и не надо: моторы уже работают, робот движется.
Но в этом случае обращения к датчику будут происходить непрерывно: сразу после проверки значения датчик будет опрашиваться опять (если значение больше 20 см).
Поставим паузу 100 миллисекунд (то есть, одну десятую секунды, рис. 7).
Цикл пока теперь будет опрашивать датчик каждую одну десятую секунды, пока значение с датчика больше 20.
А когда значение станет равным 20 или меньше? Цикл пока завершит свою работу.
4. Завершаем программу: останавливаем моторы и исполняем мелодию (рис. 8).
Испытаем программу. Робот подъехал к препятствию ближе, чем на 20 сантиметров. Почему так получилось?
Задача: Убедиться, что датчик может возвращать 0
Подсказка. Датчик ловит сигнал, отраженный препятствием. Зеркало отражает "сигнал" солнца...