Найти тему

Движение по линиии на 1 датчике. Алгоритмы.

Оглавление

Алгоритмы работы

Как научить робота видеть линию и двигаться вдоль неё? Решений данной задачи может быть множество. В нашем случае мы отрабатываем езду на 1, 2 и 5 датчиках. Режимы работы этих датчиков тоже разные - аналоговый сигнал и цифровой.

Движение на 1 датчике с аналоговым сигналом.

Если вы хоть немного работали с Ардуино, вы знаете, что сигналы бывают аналоговыми и цифровыми. В аналоговым виде сигнал может принимать любые значения с течением времени, цифровые же могут принимать только два значения - 0 и 1. Понятия 0 и 1 означает, что напряжение либо есть, либо нет. Будем считать, что 1 - это 5 В, а 0 - соответственно 0 В (хотя это не совсем так).

Датчики с 4 контактами
Датчики с 4 контактами

Посмотрим на наши датчики. У них есть 4 контакта - это универсальный датчик. Он может выдавать как аналоговый, так и цифровой сигнал. На самом деле сделать аналоговый датчик можно своими руками. Нужны только ИК светодиод, ИК фототранзистор и пару резисторов.

Работа основана на интенсивности отражения ИК излучения от поверхности. На белом фоне оно одно, а на черном резко другое.

Почему лучше использовать аналоговый сигнал?

Потому что срабатывание на перемену цвета может зависеть от множества факторов. Крутилка на датчике - это как раз настройка чувствительности компаратора, построенного на операционном усилителе LM358. Выдается 1 когда видит черную линию и 0 на белом. Довольно трудно настроить порог чувствительности - то не срабатывает на черном, то все время горит на белом. Схема на этих платах повторяется и на звуковом датчике и на датчике освещенности и прочих других.

Как проехать по черной линии используя один датчик?

Существуют как минимум два метода.

Первый, самый простой, называется релейный. Значение с датчика принимается как истина или ложь, в зависимости от того над каким цветом он находится. Можно задать некий порог, выше/ ниже которого мы будем считать - цвет сменился. Ставим его в условный оператор if (). От этого условия будет зависеть какой мотор будет вращаться, а какой нет. Например, если на белом то крутить левый мотор вперед, правый мотор стоит. А если на черном, то все в точности наоборот. Таким образом робот будет двигаться довольно медленно, рывками.

Основные переменные необходимые для работы этого алгоритма:

int start_speed = 100; // базовая скорость машины
int light_intens =0; // переменная для хранения значений с датчика
int porog = 50; // значение на границе перехода цветов

Для лучшей работы можно взять два значения porog - одно для белого цвета, а второе для черного. А между ними оставить интервал, для уменьшения резкости качания. В этом интервале робот не реагирует на показания датчика и двигается по инерции.

Теперь давайте посмотрим на код программы, который я написал для своей модели. Яндекс Дзен, к сожалению, не может нормально переварить программный код, если его вставить напрямую в статью. Поэтому придется воспользоваться GitHub.

В продолжении посмотрим как реализовать движение на пропорциональном регуляторе с одним датчиком.