Урок 5.3. Различение цветов
В данном уроке вы научитесь использовать цветовой датчик робота Rover. На основе полученных данных от сканирования цвета вездеход меняет направление движения.
Для урока вам понадобится несколько листов бумаги разного цвета или больших и плоских цветных предметов.
Вы научитесь:
- Использовать цветовой датчик таким образом, чтобы робот осуществлял заданные действия в зависимости от цвета
Цветовой датчик находится на дне робота-вездехода Rover. Вы можете видеть, как под устройством световой сигнал мигает и отражается от пола. Этот световой луч помогает роботу Rover "считывать" цвета под собой. Сначала вам нужно будет написать тестовую программу, чтобы посмотреть, как цветовой датчик выдает значения, а затем уже создать полноценную программу, которая позволит управлять роботом и давать ему команды в зависимости от распознаваемого цвета. Для такого проекта вам понадобится цветная бумага, желательно плотная как картон, либо просто распечатанные на принтере цветные прямоугольники, как показано на рисунке справа. Они должны быть достаточно большими, чтобы робот Rover смог их "увидеть".
В меню menu > TI-Rover > Inputs доступны пять функций измерения цветов. Функция color_measurement() выдает значение от 1 до 9, где:
1=красный (red), 2=зеленый (green), 3=синий (blue), 4=голубой (cyan), 5=пурпурный (magenta), 6=желтый (yellow), 7=черный (black), 8=белый (white), 9 = серый (grey)
Другие четыре функции выдают значение определенного цвета в диапазоне от 0 до 255, как показано в меню.
Примечание для учителя: С помощью разных цветов учащиеся могут создавать маршруты движения робота. Для этого нужно разложить бумагу разного цвета на полу, чтобы вездеход перемещался от одного объекта к другому. Самым простым маршрутом будет квадрат, когда листы разного цвета располагаются у его вершин. Каждый цвет может служить сигналом для выполнения разных действий. А вот какие это действия – решать вам.
1. Внизу представлена небольшая тестовая программа, которая используется в шаблоне по работе с роботом Rover Coding. Она помогает увидеть значения, которые выдает функция измерения цвета.
while get_key() != "esc":
c = rv.color_measurement()
plt.text_at(7, str(c), "left")
Попробуйте все пять способов измерения цвета (color_, red_, green_, blue_ и gray_) с разными цветными поверхностями и понаблюдайте, как отображаются значения.
2. Разложите по полу цветные листы бумаги, чтобы они не сливались по цвету с полом (например, можно использовать цветные стикеры или кусочки цветного картона). Они должны располагаться непосредственно на самом маршруте движения робота Rover, чтобы он мог считывать изменения цвета во время перемещения. Попробуйте протестировать программу, чтобы понять, как это все происходит.
Затем напишите программу, которая программирует робота Rover "реагировать" на изменения цвета. На рисунке ниже красная обочина нужна для того, чтобы робот Rover не выходил за ее пределы.
- Когда робот Rover "видит" красный цвет, нужно дать ему команду развернуться.
- Когда робот Rover "видит" зеленый цвет, нужно дать ему команду повернуть вправо или влево.
Также вы можете добавить в свою программу выражения, которые контролируют включение светового или цветового LED индикатора.
3. Сейчас нужно отредактировать вашу тестовую программу по работе с цветом, которую вы написали выше. Сначала добавьте выражение в начале цикла, которое дает команду роботу Rover двигаться вперед:
rv.forward(10)
Далее нужно сделать так, чтобы робот Rover считывал цвет под собой. Если вы замените переменную c на color, то программу будет удобнее читать:
color = rv.color_measurement()
Когда переменная color будет эквивалентна красному цвету, робот Rover должен повернуть на 180 градусов, а когда он увидит зеленый цвет, нужно чтобы он повернул на 90 градусов. Для этого вам необходимо вставить два выражения с оператором if.
Теперь удалите функции plt.text_at(7, str(c), "left").
Примечание для учителя: Цветовой датчик не всегда может выдавать одинаковые значения, считывая один и тот же цвет. Именно поэтому важно использовать контрастные цвета (например, черный и белый), и тогда будет заметна разница в изменениях значений цвета при использовании выражений red_, green_, blue_ или gray_ measurements(), и роботу будет проще определять, где поворачивать.
4. Добавьте два выражения с оператором if и вместо знаков вопроса (?) используйте значения, которые вы получили при тестировании цветовых измерений с помощью переменной color:
if color == ?:
block
if color == ?:
block
(В своем выражении с оператором if вы не увидите слово-заполнитель block или слова "красный" (red) и "зеленый" (green), на рисунке они просто даны как пример).
Примечание для учителя: Использование выражений
red=1
green=2
в начале программы означает, что вы можете использовать переменные "красный" и "зеленый" (red, green) в выражениях с оператором if: if color == red:
5. Два блока с оператором if будут похожи. Не забудьте, что красный - это поворот направо, а зеленый - налево. В каждом блоке робот будет:
- Останавливаться
- Поворачивать на 180 градусов
- Двигаться немного вперед, чтобы уйти от цветного объекта
- Также будет функция, которая просит калькулятор TI-Nspire CX II-Т подождать, пока робот Rover завершит эти три команды
Попробуйте все сделать самостоятельно прежде, чем приступать к следующему шагу...
6. Ваши блоки с оператором if выглядят так?
if color == 1: (Красный; используйте другое число, если цвет не красный)
rv.stop()
rv.right(180)
rv.forward(1)
rv.wait_until_done()
Совет: Если вы присваиваете переменной значение red = 1 вверху вашей программы, то вы можете написать if color == red: в своем выражении с оператором if. Так суть станет понятнее.