Датчики. Помимо цветовых и гироскопических датчиков у вас есть еще два примечательных: ультразвуковой и инфракрасный. Мы использовали инфракрасный порт в более раннем уроке с пультом дистанционного управления, хотя у него есть еще несколько хитростей.
Конечно, у вас есть тот или иной, в зависимости от того, какой набор вы покупаете. Я бы не пошел и не купил недостающий вместо датчика цвета, но если у вас еще остались деньги, это ваша следующая инвестиция.
Оба датчика измеряют расстояние, но сообщают о своих выводах по-разному. Ультразвуковые отчеты в миллиметрах, инфракрасные отчеты в процентах. Но будьте осторожны, они ведут себя не так, как я случайно обнаружил некоторое время назад. Вот простой фрагмент кода для их вызова.
#!/usr/bin/env pybricks-micropython from pybricks import ev3brick as brick from pybricks.ev3devices import UltrasonicSensor, InfraredSensor from pybricks.parameters import Port from pybricks.tools import wait ultra = UltrasonicSensor(Port.S1) infra = InfraredSensor(Port.S2) while True: distance = ultra.distance() distance2 = infra.distance() print("ultra distance",distance,"infra distance",distance2) wait(500)
Все, что он делает, это определяет два датчика и сообщает о расстояниях, которые они видят каждые 1/2 секунды. Я установил их на своего робота и построил башню из лего, чтобы наблюдать, как вы можете видеть на этом фото.
Инфракрасный датчик показал значение 90 @ примерно 1200 см, за пределами этого результаты казались очень ненадежными. Ультразвук, с другой стороны, продолжал возвращать значения, пока не достиг 2550 мм. Он оказался более надежным.
Но подождите, когда я направил ультразвук на свою башню из лего, расположив ее так, чтобы она разделяла ультразвуковую волну, он очень неправильно определил расстояние. Подровняйте к ней стену башни, чем она правильно сообщила, лицом к углу она не работала. С другой стороны, инфракрасное излучение нельзя/нельзя обмануть. Я даже пробовал инфракрасный при ярком солнечном свете, он все еще работал. Вывод показывает, что вы должны быть осторожны при использовании ультразвука с поверхностями, которые не имеют формы.
С другой стороны, ультразвуковой датчик не смог измерить расстояние до 3 см. Инфракрасное излучение с другой стороны дало бы мне значение индекса 1 на расстоянии 5 см. В отличие от ультразвука, поскольку он дает значение индекса, он гораздо менее гранулирован, чем ультразвук.
В заключение, в идеале вы должны использовать оба. Инфракрасное излучение может помочь здравомыслию проверить ультразвуковое расстояние, ультразвуковое измерение расстояния используется с большей точностью. Если, конечно, вас интересуют объекты ближе 1 метра.
Что подводит меня к следующему сценарию. Давайте установим оба датчика рядом друг с другом и создадим таблицу, которую мы можем использовать для сопоставления измеренных расстояний.
#!/usr/bin/env pybricks-micropython from pybricks import ev3brick as brick from pybricks.ev3devices import UltrasonicSensor, InfraredSensor, Motor from pybricks.parameters import Port from pybricks.tools import wait from pybricks.robotics import DriveBase left_motor = Motor(Port.B) right_motor = Motor(Port.C) left_motor.reset_angle(0) robot = DriveBase(left_motor, right_motor, 56, 114) ultra = UltrasonicSensor(Port.S1) infra = InfraredSensor(Port.S2) speed = 5 robot.drive(-speed,0) while True: print("ultra distance",ultra.distance(),"infra distance",infra.distance(),"angle",left_motor.angle()) wait(2000)
Результаты возвращаются, выглядя примерно так.
ultra distance 835 infra distance 77 angle 0 ultra distance 839 infra distance 78 angle -18 ultra distance 849 infra distance 77 angle -38 ultra distance 857 infra distance 77 angle -59 ultra distance 864 infra distance 78 angle -80 ultra distance 877 infra distance 78 angle -100 ultra distance 886 infra distance 78 angle -120 ultra distance 901 infra distance 79 angle -140 ultra distance 908 infra distance 79 angle -160 ultra distance 916 infra distance 78 angle -180 ultra distance 929 infra distance 79 angle -200 ultra distance 940 infra distance 80 angle -220 ultra distance 947 infra distance 80 angle -241 ultra distance 955 infra distance 79 angle -261 ultra distance 969 infra distance 81 angle -280
Сценарий разумный говорит сам за себя; он просто определяет пару моторов, пару датчиков и гонит робота назад, сообщая каждые 2 секунды, что говорят датчики.
Меня, компьютерного ученого, больше беспокоит отчет, который он выдает. Как вы сами видите, нехватка единообразия. Робот движется с постоянной скоростью, и с погрешностью в один градус угол выглядит хорошим: 20/21 градус каждые 2 секунды, как только он начинает движение. Но инфракрасное измерение/индекс прыгает туда-сюда, индекс возвращает 80, потом 79, потом 81? Ультразвук продолжает увеличиваться, но с непостоянными шагами, от разницы от 9 мм до 15 мм, несмотря на то, что мы перемещались на одинаковое расстояние [очевидно].
В заключение, в конечном счете, даже используя оба, вы в неведении. Лучше всего, если вам нужно узнать, как далеко вы проехали, это не ультразвук или инфракрасное излучение, а показания угла на самом двигателе.